{"version":3,"sources":["../src/layout-engine/encode.ts","../src/layout-engine/node.ts","../src/layout-engine/index.ts","../node_modules/.pnpm/harfbuzzjs@0.10.0_patch_hash=760b5ac12c5d269b507b4dd008b00a9e9957c29d9b08d00047b07cb9305cee97/node_modules/harfbuzzjs/hbjs.js","../node_modules/.pnpm/harfbuzzjs@0.10.0_patch_hash=760b5ac12c5d269b507b4dd008b00a9e9957c29d9b08d00047b07cb9305cee97/node_modules/harfbuzzjs/hb.js","../node_modules/.pnpm/harfbuzzjs@0.10.0_patch_hash=760b5ac12c5d269b507b4dd008b00a9e9957c29d9b08d00047b07cb9305cee97/node_modules/harfbuzzjs/index.js","../layout.wasm","../src/layout-engine/wasm.bundled.ts","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/negateValue.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/corePluginList.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/configurePlugins.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/stubs/defaultConfig.stub.js","../src/vendor/twrnc/log.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/public/colors.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/defaults.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/toPath.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/normalizeConfig.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/isPlainObject.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/cloneDeep.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/util/unesc.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/util/getProp.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/util/ensureObject.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/util/stripComments.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/util/index.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/node.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/types.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/container.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/root.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/selector.js","../node_modules/.pnpm/cssesc@3.0.0/node_modules/cssesc/cssesc.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/className.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/comment.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/id.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/namespace.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/tag.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/string.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/pseudo.js","../src/vendor/twrnc/deprecate.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/attribute.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/universal.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/combinator.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/nesting.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/sortAscending.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/tokenTypes.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/tokenize.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/parser.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/processor.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/constructors.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/guards.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/selectors/index.js","../node_modules/.pnpm/postcss-selector-parser@6.0.10/node_modules/postcss-selector-parser/dist/index.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/escapeCommas.js","../node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/color.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/withAlphaVariable.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/lib/regex.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/splitAtTopLevelOnly.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/parseBoxShadowValue.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/dataTypes.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/pluginUtils.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/toColorValue.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/resolveConfig.js","../src/vendor/twrnc/picocolors.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/featureFlags.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/util/getAllConfigs.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/lib/public/resolve-config.js","../node_modules/.pnpm/tailwindcss@3.1.8_postcss@8.5.23/node_modules/tailwindcss/resolveConfig.js","../src/index.ts","../src/handler/presets.ts","../src/counter-styles.ts","../src/list-marker.ts","../src/handler/shorthands.ts","../src/handler/inheritable.ts","../src/handler/logical.ts","../src/handler/expand.ts","../src/parser/font.ts","../src/parser/border-radius.ts","../src/parser/math.ts","../src/parser/color.ts","../src/transform-origin.ts","../src/vendor/parse-css-dimension/index.js","../src/utils.ts","../src/text/font-features.ts","../src/parser/mask.ts","../src/parser/corner-shape.ts","../src/parser/backdrop-filter.ts","../src/parser/grid.ts","../src/parser/background.ts","../src/parser/transform.ts","../src/handler/variables.ts","../src/handler/compute.ts","../src/handler/url-safety.ts","../src/handler/image.ts","../src/form-control.ts","../src/layout.ts","../src/sticky-position.ts","../src/culling.ts","../src/jsx/jsx-runtime.ts","../src/handler/preprocess.ts","../src/parser/svg-transform.ts","../src/text/index.ts","../src/builder/text.ts","../src/builder/transform.ts","../src/builder/shadow.ts","../src/builder/text-decoration.ts","../src/font.ts","../node_modules/.pnpm/emoji-regex-xs@2.0.1/node_modules/emoji-regex-xs/index.mjs","../src/language.ts","../src/harfbuzz.ts","../src/text/characters.ts","../src/text/measurer.ts","../src/text/processor.ts","../src/text/bidi.ts","../src/text/inline.ts","../src/builder/gradient/linear.ts","../src/builder/gradient/utils.ts","../src/builder/gradient/radial.ts","../src/builder/gradient/conic.ts","../src/builder/background-image.ts","../src/builder/border-radius.ts","../src/builder/border.ts","../src/builder/content-mask.ts","../src/parser/shape.ts","../src/parser/shape-function.ts","../src/builder/clip-path.ts","../src/builder/overflow.ts","../src/builder/mask-image.ts","../src/builder/backdrop-filter.ts","../src/builder/rect.ts","../src/builder/outline.ts","../src/handler/stylesheet.ts","../src/fixed-position.ts","../src/builder/svg.ts","../src/layout-engine/wasm.ts","../src/satori.ts","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/create.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/types.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/helpers.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/styles.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/cache.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/resolve/font-size.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/resolve/line-height.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/resolve/spacing.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/screens.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/resolve/font-family.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/resolve/color.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/resolve/borders.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/resolve/inset.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/resolve/flex.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/resolve/width-height.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/resolve/letter-spacing.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/resolve/opacity.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/resolve/shadow.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/ClassParser.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/parse-inputs.js","../node_modules/.pnpm/twrnc@3.4.0_postcss@8.5.23_react-native@0.72.4_@babel+core@7.22.20_@babel+preset-env@7._15403132d9b0d7c01b54b92abbdd1171/node_modules/twrnc/dist/esm/plugin.js","../src/handler/tailwind.ts","../src/handler/components.ts"],"sourcesContent":["/**\n * Encodes a layout tree for `crates/layout/src/lib.rs`, which must be kept in\n * sync with this file.\n *\n * The buffer starts with the node count, followed by each node: its style\n * (see `encodeStyle`), whether it's measured, its child count and the indices\n * of its children. The root is the first node.\n */\n\nimport type {\n  CalcLength,\n  GridLine,\n  GridTrackBreadth,\n  GridTrackList,\n  GridTrackSize,\n  Length,\n  LayoutNode,\n  LayoutStyle,\n  Size,\n} from './node.js'\n\nconst DISPLAY = {\n  none: 0,\n  flex: 1,\n  block: 2,\n  grid: 3,\n  'flow-root': 4,\n}\n\nconst ALIGNMENT = {\n  start: 0,\n  end: 1,\n  'flex-start': 2,\n  'flex-end': 3,\n  center: 4,\n  baseline: 5,\n  stretch: 6,\n  'space-between': 7,\n  'space-evenly': 8,\n  'space-around': 9,\n}\n\nconst FLEX_DIRECTION = {\n  row: 0,\n  column: 1,\n  'row-reverse': 2,\n  'column-reverse': 3,\n}\n\nconst FLEX_WRAP = { nowrap: 0, wrap: 1, 'wrap-reverse': 2 }\n\nconst OVERFLOW = { visible: 0, hidden: 1, clip: 2, scroll: 3 }\n\nconst FLOAT = { none: 0, left: 1, right: 2 }\n\nconst CLEAR = { none: 0, left: 1, right: 2, both: 3 }\n\n/** The unit codes of sizing keywords. */\nconst SIZING_KEYWORD = {\n  'min-content': 4,\n  'max-content': 5,\n  'fit-content': 6,\n  stretch: 9,\n  content: 10,\n}\n\n/**\n * Unit codes: 0 is auto, 1 is a length, 2 is a percentage, 3 is a `calc()`\n * expression, by its index in `calcs`, 4 to 6, 9 and 10 are sizing keywords,\n * and 7 and 8 are `fit-content()` with a length and a percentage.\n */\nfunction pushLength(\n  data: number[],\n  length: Size | undefined,\n  fallback: Length,\n  scale: number,\n  calcs: CalcLength['calc'][]\n) {\n  const value = length ?? fallback\n  if (typeof value === 'number') {\n    data.push(1, value * scale)\n  } else if (typeof value === 'object' && 'fitContent' in value) {\n    const limit = value.fitContent\n    if (typeof limit === 'number') data.push(7, limit * scale)\n    else data.push(8, parseFloat(limit) / 100)\n  } else if (typeof value === 'object') {\n    data.push(3, calcs.push(value.calc) - 1)\n  } else if (value.endsWith('%')) {\n    data.push(2, parseFloat(value) / 100)\n  } else {\n    data.push(SIZING_KEYWORD[value] ?? 0, 0)\n  }\n}\n\nfunction pushAlignment(data: number[], alignment: string | undefined) {\n  data.push(alignment === undefined ? -1 : ALIGNMENT[alignment] ?? -1)\n}\n\nfunction encodeStyle(\n  data: number[],\n  style: LayoutStyle,\n  scale: number,\n  calcs: CalcLength['calc'][]\n) {\n  const length = (value: Size | undefined, fallback: Length) =>\n    pushLength(data, value, fallback, scale, calcs)\n\n  data.push(\n    DISPLAY[style.display] ?? DISPLAY.flex,\n    style.position === 'absolute' ? 1 : 0,\n    style.boxSizing === 'content-box' ? 1 : 0,\n    OVERFLOW[style.overflowX] ?? 0,\n    OVERFLOW[style.overflowY] ?? 0\n  )\n  length(style.width, 'auto')\n  length(style.height, 'auto')\n  length(style.minWidth, 'auto')\n  length(style.minHeight, 'auto')\n  length(style.maxWidth, 'auto')\n  length(style.maxHeight, 'auto')\n  data.push(style.aspectRatio ?? NaN)\n  for (const edge of ['Left', 'Right', 'Top', 'Bottom'] as const) {\n    length(style[`margin${edge}`], 0)\n  }\n  for (const edge of ['Left', 'Right', 'Top', 'Bottom'] as const) {\n    length(style[`padding${edge}`], 0)\n  }\n  for (const edge of ['Left', 'Right', 'Top', 'Bottom'] as const) {\n    length(style[`border${edge}Width`], 0)\n  }\n  for (const edge of ['left', 'right', 'top', 'bottom'] as const) {\n    length(style[edge], 'auto')\n  }\n  length(style.columnGap, 0)\n  length(style.rowGap, 0)\n  pushAlignment(data, style.alignItems)\n  pushAlignment(data, style.alignSelf)\n  pushAlignment(data, style.alignContent)\n  pushAlignment(data, style.justifyItems)\n  pushAlignment(data, style.justifySelf)\n  pushAlignment(data, style.justifyContent)\n  data.push(\n    FLEX_DIRECTION[style.flexDirection] ?? 0,\n    FLEX_WRAP[style.flexWrap] ?? 0\n  )\n  length(style.flexBasis, 'auto')\n  data.push(style.flexGrow ?? 0, style.flexShrink ?? 1)\n  // `text-align` for block layout, which Satori doesn't use.\n  data.push(0, style.replaced ? 1 : 0)\n  data.push(FLOAT[style.float] ?? 0, CLEAR[style.clear] ?? 0)\n  data.push(style.direction === 'rtl' ? 1 : 0)\n  encodeGridStyle(data, style, scale, calcs)\n}\n\n/** A length, then UTF-16 code units. */\nfunction pushString(data: number[], string: string) {\n  data.push(string.length)\n  for (let i = 0; i < string.length; i++) data.push(string.charCodeAt(i))\n}\n\n/** A count, then each set: a count, then each name. */\nfunction pushLineNames(data: number[], lineNames: string[][]) {\n  data.push(lineNames.length)\n  for (const names of lineNames) {\n    data.push(names.length)\n    for (const name of names) pushString(data, name)\n  }\n}\n\n/**\n * Kinds: 0 is auto, 1 a length, 2 a percentage, 3 min-content, 4\n * max-content, 5 a flex fraction, 6 `fit-content()` with a length and 7 with\n * a percentage, and 8 a `calc()` expression, by its index in `calcs`.\n */\nfunction pushTrackBreadth(\n  data: number[],\n  breadth: GridTrackBreadth,\n  scale: number,\n  calcs: CalcLength['calc'][]\n) {\n  if (typeof breadth === 'number') {\n    data.push(1, breadth * scale)\n  } else if (typeof breadth === 'object' && 'calc' in breadth) {\n    data.push(8, calcs.push(breadth.calc) - 1)\n  } else if (typeof breadth === 'object') {\n    const limit = breadth.fitContent\n    if (typeof limit === 'number') data.push(6, limit * scale)\n    else data.push(7, parseFloat(limit) / 100)\n  } else if (breadth.endsWith('%')) {\n    data.push(2, parseFloat(breadth) / 100)\n  } else if (breadth.endsWith('fr')) {\n    data.push(5, parseFloat(breadth))\n  } else {\n    data.push(\n      breadth === 'min-content' ? 3 : breadth === 'max-content' ? 4 : 0,\n      0\n    )\n  }\n}\n\nfunction pushTrackSizes(\n  data: number[],\n  tracks: GridTrackSize[],\n  scale: number,\n  calcs: CalcLength['calc'][]\n) {\n  data.push(tracks.length)\n  for (const { min, max } of tracks) {\n    pushTrackBreadth(data, min, scale, calcs)\n    pushTrackBreadth(data, max, scale, calcs)\n  }\n}\n\n/**\n * A count, then each track: 0 and its size, or 1 for `repeat()` followed by\n * its count (0 and the number, 1 for `auto-fill`, 2 for `auto-fit`), track\n * sizes and line names. Then the line names.\n */\nfunction pushTrackList(\n  data: number[],\n  list: GridTrackList | undefined,\n  scale: number,\n  calcs: CalcLength['calc'][]\n) {\n  const tracks = list?.tracks ?? []\n  data.push(tracks.length)\n  for (const track of tracks) {\n    if ('count' in track) {\n      data.push(1)\n      if (typeof track.count === 'number') data.push(0, track.count)\n      else data.push(track.count === 'auto-fill' ? 1 : 2, 0)\n      pushTrackSizes(data, track.tracks, scale, calcs)\n      pushLineNames(data, track.lineNames)\n    } else {\n      data.push(0)\n      pushTrackSizes(data, [track], scale, calcs)\n    }\n  }\n  pushLineNames(data, list?.lineNames ?? [])\n}\n\n/**\n * Kinds: 0 is auto, 1 a line, 2 a span, 3 a named line and 4 a span to a\n * named line. Followed by the number and the name.\n */\nfunction pushGridLine(data: number[], line: GridLine | undefined) {\n  if (!line || line === 'auto') {\n    data.push(0, 0, 0)\n  } else if ('line' in line) {\n    data.push(line.name ? 3 : 1, line.line)\n    pushString(data, line.name ?? '')\n  } else {\n    data.push(line.name ? 4 : 2, line.span)\n    pushString(data, line.name ?? '')\n  }\n}\n\nconst GRID_AUTO_FLOW = {\n  row: 0,\n  column: 1,\n  'row dense': 2,\n  'column dense': 3,\n}\n\n/**\n * Whether it's a grid container, then its properties. Whether it's placed\n * in a grid, then its lines: row start, row end, column start and end.\n */\nfunction encodeGridStyle(\n  data: number[],\n  style: LayoutStyle,\n  scale: number,\n  calcs: CalcLength['calc'][]\n) {\n  if (style.display === 'grid') {\n    data.push(1)\n    pushTrackList(data, style.gridTemplateColumns, scale, calcs)\n    pushTrackList(data, style.gridTemplateRows, scale, calcs)\n    pushTrackSizes(data, style.gridAutoColumns ?? [], scale, calcs)\n    pushTrackSizes(data, style.gridAutoRows ?? [], scale, calcs)\n    data.push(GRID_AUTO_FLOW[style.gridAutoFlow] ?? 0)\n    // The row and column counts, then each area: its name and lines.\n    const areas = style.gridTemplateAreas\n    data.push(areas?.rowCount ?? 0, areas?.columnCount ?? 0)\n    data.push(areas?.areas.length ?? 0)\n    for (const area of areas?.areas ?? []) {\n      pushString(data, area.name)\n      data.push(area.rowStart, area.rowEnd, area.columnStart, area.columnEnd)\n    }\n  } else {\n    data.push(0)\n  }\n\n  const lines = [\n    style.gridRowStart,\n    style.gridRowEnd,\n    style.gridColumnStart,\n    style.gridColumnEnd,\n  ]\n  if (lines.some((line) => line && line !== 'auto')) {\n    data.push(1)\n    for (const line of lines) pushGridLine(data, line)\n  } else {\n    data.push(0)\n  }\n}\n\nexport interface EncodedTree {\n  data: Float32Array\n  /** Nodes by their index in the buffer. */\n  nodes: LayoutNode[]\n  /** The indices of the children laid out in each node. */\n  childIndices: number[][]\n  /** `display: contents` nodes, which aren't laid out. */\n  contents: LayoutNode[]\n  /** The `calc()` expressions, by the index in the buffer. */\n  calcs: CalcLength['calc'][]\n}\n\n/**\n * `scale` multiplies lengths, which makes rounding to whole pixels round to\n * fractions of pixels instead.\n */\nexport function encodeTree(root: LayoutNode, scale: number): EncodedTree {\n  const nodes: LayoutNode[] = []\n  const contents: LayoutNode[] = []\n  const childIndices: number[][] = []\n\n  // The children of a `display: contents` node are laid out as children of\n  // its parent.\n  const collectChildren = (node: LayoutNode, into: LayoutNode[]) => {\n    for (const child of node.children) {\n      if (child.style.display === 'contents') {\n        contents.push(child)\n        collectChildren(child, into)\n      } else {\n        into.push(child)\n      }\n    }\n    return into\n  }\n\n  const visit = (node: LayoutNode) => {\n    const index = nodes.length\n    nodes.push(node)\n    childIndices.push([])\n    const children = collectChildren(node, [])\n    // Flex and grid items are laid out in `order`, then in tree order.\n    if (\n      (node.style.display === 'flex' || node.style.display === 'grid') &&\n      children.some((child) => child.style.order)\n    ) {\n      children.sort((a, b) => (a.style.order || 0) - (b.style.order || 0))\n    }\n    for (const child of children) {\n      childIndices[index].push(visit(child))\n    }\n    return index\n  }\n  visit(root)\n\n  const data: number[] = [nodes.length]\n  const calcs: CalcLength['calc'][] = []\n  nodes.forEach((node, index) => {\n    encodeStyle(data, node.style, scale, calcs)\n    data.push(node.measure ? 1 : 0, childIndices[index].length)\n    data.push(...childIndices[index])\n  })\n\n  return {\n    data: Float32Array.from(data),\n    nodes,\n    childIndices,\n    contents,\n    calcs,\n  }\n}\n","/**\n * The layout tree. Satori builds it from the element tree, and Taffy lays it\n * out, see `index.ts`.\n */\n\n/** A length in px, a percentage, or `auto`. */\n/** A `calc()` expression with percentages, see `parseMath()`. */\nexport interface CalcLength {\n  /** The length in px, with percentages of `basis`. */\n  calc: (basis: number) => number\n}\n\nexport type Length = number | `${number}%` | 'auto' | CalcLength\n\n/**\n * A size: a length, a sizing keyword, or `fit-content()` with a length in px or\n * a percentage. `content` is only a flex basis.\n * @see https://www.w3.org/TR/css-sizing-3/#sizing-values\n */\nexport type Size =\n  | Length\n  | 'min-content'\n  | 'max-content'\n  | 'fit-content'\n  | 'stretch'\n  | 'content'\n  | { fitContent: number | `${number}%` }\n\nexport type Alignment =\n  | 'start'\n  | 'end'\n  | 'flex-start'\n  | 'flex-end'\n  | 'center'\n  | 'baseline'\n  | 'stretch'\n\nexport type ContentAlignment =\n  | 'start'\n  | 'end'\n  | 'flex-start'\n  | 'flex-end'\n  | 'center'\n  | 'stretch'\n  | 'space-between'\n  | 'space-evenly'\n  | 'space-around'\n\n/**\n * A limit of a grid track's size: a length in px, a percentage, a flex\n * fraction (only as the maximum), a keyword, or `fit-content()` (only as the\n * maximum).\n */\nexport type GridTrackBreadth =\n  | number\n  | `${number}%`\n  | `${number}fr`\n  | 'auto'\n  | 'min-content'\n  | 'max-content'\n  | { fitContent: number | `${number}%` }\n  | CalcLength\n\nexport interface GridTrackSize {\n  min: GridTrackBreadth\n  max: GridTrackBreadth\n}\n\nexport interface GridRepeat {\n  count: number | 'auto-fill' | 'auto-fit'\n  tracks: GridTrackSize[]\n  /** The names of each line of a repetition, none or one more than tracks. */\n  lineNames: string[][]\n}\n\nexport interface GridTrackList {\n  tracks: (GridTrackSize | GridRepeat)[]\n  /** The names of the lines between tracks, none or one more than tracks. */\n  lineNames: string[][]\n}\n\nexport interface GridTemplateArea {\n  name: string\n  /** Lines, starting at 1. */\n  rowStart: number\n  rowEnd: number\n  columnStart: number\n  columnEnd: number\n}\n\nexport interface GridTemplateAreas {\n  rowCount: number\n  columnCount: number\n  areas: GridTemplateArea[]\n}\n\n/**\n * The line a grid item starts or ends at: `auto`, a line number, a span, or\n * the nth line with a name (the first with an index of 0), or a span to it.\n */\nexport type GridLine =\n  | 'auto'\n  | { line: number; name?: string }\n  | { span: number; name?: string }\n\nexport interface LayoutStyle {\n  display?: 'flex' | 'block' | 'flow-root' | 'grid' | 'none' | 'contents'\n  position?: 'relative' | 'absolute'\n  boxSizing?: 'border-box' | 'content-box'\n  overflowX?: 'visible' | 'hidden' | 'clip' | 'scroll'\n  overflowY?: 'visible' | 'hidden' | 'clip' | 'scroll'\n  width?: Size\n  height?: Size\n  minWidth?: Size\n  minHeight?: Size\n  maxWidth?: Size\n  maxHeight?: Size\n  aspectRatio?: number\n  marginTop?: Length\n  marginRight?: Length\n  marginBottom?: Length\n  marginLeft?: Length\n  paddingTop?: Length\n  paddingRight?: Length\n  paddingBottom?: Length\n  paddingLeft?: Length\n  borderTopWidth?: number\n  borderRightWidth?: number\n  borderBottomWidth?: number\n  borderLeftWidth?: number\n  top?: Length\n  right?: Length\n  bottom?: Length\n  left?: Length\n  rowGap?: Length\n  columnGap?: Length\n  alignItems?: Alignment\n  alignSelf?: Alignment\n  alignContent?: ContentAlignment\n  justifyItems?: Alignment\n  justifySelf?: Alignment\n  justifyContent?: ContentAlignment\n  flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse'\n  flexWrap?: 'nowrap' | 'wrap' | 'wrap-reverse'\n  flexBasis?: Size\n  flexGrow?: number\n  flexShrink?: number\n  /** The order of flex and grid items, see `encodeTree()`. */\n  order?: number\n  gridTemplateColumns?: GridTrackList\n  gridTemplateRows?: GridTrackList\n  gridAutoColumns?: GridTrackSize[]\n  gridAutoRows?: GridTrackSize[]\n  gridAutoFlow?: 'row' | 'column' | 'row dense' | 'column dense'\n  gridTemplateAreas?: GridTemplateAreas\n  gridRowStart?: GridLine\n  gridRowEnd?: GridLine\n  gridColumnStart?: GridLine\n  gridColumnEnd?: GridLine\n  /** Replaced elements, e.g. images, are sized differently in block layout. */\n  replaced?: boolean\n  float?: 'none' | 'left' | 'right'\n  clear?: 'none' | 'left' | 'right' | 'both'\n  /** The inline base direction, which flex rows and grid columns follow. */\n  direction?: 'ltr' | 'rtl'\n}\n\nexport interface Edges {\n  left: number\n  right: number\n  top: number\n  bottom: number\n}\n\nexport interface ComputedLayout {\n  /** The position of the border box, relative to the parent's border box. */\n  left: number\n  top: number\n  width: number\n  height: number\n  padding: Edges\n  border: Edges\n  margin: Edges\n}\n\nexport interface MeasureResult {\n  width: number\n  height: number\n  /** Distances of the first and last baselines from the top. */\n  firstBaseline?: number\n  lastBaseline?: number\n}\n\n/**\n * A float that intersects a measured leaf: its top and bottom relative to the\n * leaf, and how far it extends into the leaf from the left and the right.\n */\nexport interface FloatExclusion {\n  top: number\n  bottom: number\n  left: number\n  right: number\n}\n\n/**\n * Measures a leaf, e.g. text. `width` is the known width, or the available\n * width: 0 for the min-content size and `Infinity` for the max-content size.\n * `height` is the known or available height, `NaN` if it's not known. Text\n * wraps around the `exclusions` of floats. `minContent` is whether the\n * min-content size is measured.\n */\nexport type MeasureFunction = (\n  width: number,\n  height: number,\n  exclusions: FloatExclusion[],\n  minContent?: boolean\n) => MeasureResult\n\nconst zeroEdges = (): Edges => ({ left: 0, right: 0, top: 0, bottom: 0 })\n\nexport const emptyLayout = (): ComputedLayout => ({\n  left: 0,\n  top: 0,\n  width: 0,\n  height: 0,\n  padding: zeroEdges(),\n  border: zeroEdges(),\n  margin: zeroEdges(),\n})\n\nexport class LayoutNode {\n  style: LayoutStyle\n  children: LayoutNode[] = []\n  parent: LayoutNode | null = null\n  /** Measures the node, which must not have children. */\n  measure: MeasureFunction | null = null\n  /**\n   * The baseline of the last line of a measured node with a width, e.g. the\n   * baseline of an `inline-block` element.\n   */\n  lastBaseline?: (width: number) => number | undefined\n  /** Set by `computeLayout`. */\n  layout: ComputedLayout = emptyLayout()\n\n  constructor(style: LayoutStyle = {}) {\n    this.style = style\n  }\n\n  insertChild(child: LayoutNode, index = this.children.length) {\n    child.parent?.removeChild(child)\n    child.parent = this\n    this.children.splice(index, 0, child)\n  }\n\n  removeChild(child: LayoutNode) {\n    const index = this.children.indexOf(child)\n    if (index !== -1) this.children.splice(index, 1)\n    child.parent = null\n  }\n\n  /** The width of the content box. */\n  get contentWidth() {\n    const { width, padding, border } = this.layout\n    return width - padding.left - padding.right - border.left - border.right\n  }\n}\n","/**\n * Lays out the layout tree with Taffy, compiled to WebAssembly from\n * `crates/layout`. https://github.com/DioxusLabs/taffy\n */\n\nimport { encodeTree } from './encode.js'\nimport {\n  emptyLayout,\n  type CalcLength,\n  type Edges,\n  type FloatExclusion,\n  type LayoutNode,\n} from './node.js'\n\nexport * from './node.js'\n\n/** The number of `f32`s returned for each node, see `crates/layout`. */\nconst OUTPUT_STRIDE = 16\n\ninterface LayoutExports {\n  memory: WebAssembly.Memory\n  alloc(len: number): number\n  dealloc(ptr: number, len: number): void\n  compute(\n    ptr: number,\n    len: number,\n    availableWidth: number,\n    availableHeight: number,\n    useRounding: number\n  ): number\n  alloc_bytes(len: number): number\n  dealloc_bytes(ptr: number, len: number): void\n  parse_css(ptr: number, len: number): number\n  css_output(): number\n  decode_woff2(ptr: number, len: number): number\n  font_output(): number\n  release_font_output(): void\n}\n\nexport interface ComputeLayoutOptions {\n  /**\n   * The available size, `undefined` to size to the content, or\n   * `min-content` to its min-content width.\n   */\n  width?: number | 'min-content'\n  height?: number\n  /**\n   * Layouts are rounded to multiples of `1 / pointScaleFactor` px, or not\n   * rounded with 0. Defaults to 1.\n   */\n  pointScaleFactor?: number\n}\n\nexport interface LayoutEngine {\n  imports: WebAssembly.Imports\n  setInstance(instance: WebAssembly.Instance): void\n  /** Lays out the tree, setting the `layout` of every node. */\n  computeLayout(root: LayoutNode, options?: ComputeLayoutOptions): void\n  /**\n   * Parses a stylesheet into JSON, see `crates/layout/src/css.rs` for the\n   * format.\n   */\n  parseCSS(css: string): string\n  /**\n   * Decodes a WOFF2 font into a TrueType or OpenType font, or returns\n   * `undefined` if it can't be decoded.\n   */\n  decodeWoff2(data: Uint8Array): ArrayBuffer | undefined\n}\n\n/**\n * Round boxes to multiples of `1 / scale` px. Edges are rounded in absolute\n * coordinates, so adjacent boxes stay adjacent. The size of measured leaves,\n * e.g. text, is rounded up, so that the text still fits.\n */\nfunction roundLayouts(\n  nodes: LayoutNode[],\n  childIndices: number[][],\n  scale: number\n) {\n  // Absorb floating point errors before rounding up.\n  const round = (value: number) => Math.round(value * scale) / scale\n  const ceil = (value: number) => Math.ceil(value * scale - 1e-3) / scale\n\n  const visit = (\n    index: number,\n    parentLeft: number,\n    parentTop: number,\n    roundedParentLeft: number,\n    roundedParentTop: number\n  ) => {\n    const node = nodes[index]\n    const layout = node.layout\n    const left = parentLeft + layout.left\n    const top = parentTop + layout.top\n    const roundedLeft = round(left)\n    const roundedTop = round(top)\n    const right = node.measure\n      ? roundedLeft + ceil(layout.width)\n      : round(left + layout.width)\n    const bottom = node.measure\n      ? roundedTop + ceil(layout.height)\n      : round(top + layout.height)\n\n    layout.left = roundedLeft - roundedParentLeft\n    layout.top = roundedTop - roundedParentTop\n    layout.width = right - roundedLeft\n    layout.height = bottom - roundedTop\n\n    for (const child of childIndices[index]) {\n      visit(child, left, top, roundedLeft, roundedTop)\n    }\n  }\n  visit(0, 0, 0, 0, 0)\n}\n\nexport function createLayoutEngine(): LayoutEngine {\n  let exports: LayoutExports | undefined\n  // The tree being laid out, for `measure`.\n  let nodes: LayoutNode[] = []\n  let calcs: CalcLength['calc'][] = []\n  let scale = 1\n\n  const imports = {\n    env: {\n      resolve_calc(index: number, basis: number) {\n        return calcs[index](basis / scale) * scale\n      },\n      measure(\n        index: number,\n        knownWidth: number,\n        knownHeight: number,\n        availableWidth: number,\n        availableHeight: number,\n        exclusionsPointer: number,\n        exclusionCount: number,\n        out: number\n      ) {\n        const values = new Float32Array(\n          exports.memory.buffer,\n          exclusionsPointer,\n          exclusionCount * 4\n        )\n        const exclusions: FloatExclusion[] = []\n        for (let i = 0; i < values.length; i += 4) {\n          exclusions.push({\n            top: values[i] / scale,\n            bottom: values[i + 1] / scale,\n            left: values[i + 2] / scale,\n            right: values[i + 3] / scale,\n          })\n        }\n        const width = Number.isNaN(knownWidth)\n          ? availableWidth < 0\n            ? 0\n            : availableWidth\n          : knownWidth\n        const height = Number.isNaN(knownHeight)\n          ? availableHeight < 0\n            ? NaN\n            : availableHeight\n          : knownHeight\n        const result = nodes[index].measure(\n          width / scale,\n          height / scale,\n          exclusions,\n          Number.isNaN(knownWidth) && availableWidth < 0\n        )\n        // Measuring may have grown the memory, so create the view now.\n        new Float32Array(exports.memory.buffer, out, 4).set([\n          result.width * scale,\n          result.height * scale,\n          (result.firstBaseline ?? NaN) * scale,\n          (result.lastBaseline ?? NaN) * scale,\n        ])\n      },\n    },\n  }\n\n  return {\n    imports,\n    setInstance(instance) {\n      exports = instance.exports as unknown as LayoutExports\n    },\n    computeLayout(root, { width, height, pointScaleFactor = 1 } = {}) {\n      if (!exports) throw new Error('The layout engine is not initialized.')\n\n      // Measuring a node may lay out another tree, e.g. an atomic inline, so\n      // restore the tree being laid out afterwards.\n      const outerNodes = nodes\n      const outerCalcs = calcs\n      const outerScale = scale\n      const layoutScale = pointScaleFactor || 1\n      scale = layoutScale\n      const encoded = encodeTree(root, layoutScale)\n      nodes = encoded.nodes\n      calcs = encoded.calcs\n\n      const { data } = encoded\n      const ptr = exports.alloc(data.length)\n      let output: number\n      try {\n        new Float32Array(exports.memory.buffer, ptr, data.length).set(data)\n        // Layouts are rounded below, so that measured leaves can be rounded\n        // up instead.\n        output = exports.compute(\n          ptr,\n          data.length,\n          width === undefined\n            ? Infinity\n            : width === 'min-content'\n            ? -1\n            : width * layoutScale,\n          height === undefined ? Infinity : height * layoutScale,\n          0\n        )\n      } finally {\n        exports.dealloc(ptr, data.length)\n        nodes = outerNodes\n        calcs = outerCalcs\n        scale = outerScale\n      }\n\n      const result = new Float32Array(\n        exports.memory.buffer,\n        output,\n        encoded.nodes.length * OUTPUT_STRIDE\n      )\n      const edges = (offset: number): Edges => ({\n        left: result[offset] / layoutScale,\n        right: result[offset + 1] / layoutScale,\n        top: result[offset + 2] / layoutScale,\n        bottom: result[offset + 3] / layoutScale,\n      })\n      encoded.nodes.forEach((node, index) => {\n        const offset = index * OUTPUT_STRIDE\n        node.layout = {\n          left: result[offset] / layoutScale,\n          top: result[offset + 1] / layoutScale,\n          width: result[offset + 2] / layoutScale,\n          height: result[offset + 3] / layoutScale,\n          padding: edges(offset + 4),\n          border: edges(offset + 8),\n          margin: edges(offset + 12),\n        }\n      })\n      if (pointScaleFactor !== 0) {\n        roundLayouts(encoded.nodes, encoded.childIndices, layoutScale)\n      }\n      // `display: contents` nodes have no box. Their children are positioned\n      // relative to the parent, so they're at its origin.\n      for (const node of encoded.contents) node.layout = emptyLayout()\n    },\n    parseCSS(css) {\n      if (!exports) throw new Error('The layout engine is not initialized.')\n\n      const input = new TextEncoder().encode(css)\n      const ptr = exports.alloc_bytes(input.length)\n      let length: number\n      try {\n        new Uint8Array(exports.memory.buffer, ptr, input.length).set(input)\n        length = exports.parse_css(ptr, input.length)\n      } finally {\n        exports.dealloc_bytes(ptr, input.length)\n      }\n      return new TextDecoder().decode(\n        new Uint8Array(exports.memory.buffer, exports.css_output(), length)\n      )\n    },\n    decodeWoff2(data) {\n      if (!exports) throw new Error('The layout engine is not initialized.')\n\n      const ptr = exports.alloc_bytes(data.length)\n      let length: number\n      try {\n        new Uint8Array(exports.memory.buffer, ptr, data.length).set(data)\n        length = exports.decode_woff2(ptr, data.length)\n      } finally {\n        exports.dealloc_bytes(ptr, data.length)\n      }\n      if (!length) return\n      // Copied out of the memory of the module, which is then freed.\n      const font = new Uint8Array(length)\n      font.set(\n        new Uint8Array(exports.memory.buffer, exports.font_output(), length)\n      )\n      exports.release_font_output()\n      return font.buffer\n    },\n  }\n}\n","function hbjs(Module) {\n  'use strict';\n\n  var exports = Module.wasmExports;\n  var utf8Decoder = new TextDecoder(\"utf8\");\n  var utf8Encoder = new TextEncoder(\"utf8\");\n  let addFunction = Module.addFunction;\n  let removeFunction = Module.removeFunction;\n  let stackSave = Module.stackSave;\n  let stackRestore = Module.stackRestore;\n  let stackAlloc = Module.stackAlloc;\n\n  var freeFuncPtr = addFunction(function (ptr) { exports.free(ptr); }, 'vi');\n\n  const TRACE_PHASE_DONT_STOP = 0;\n  const TRACE_PHASE_GSUB = 1;\n  const TRACE_PHASE_GPOS = 2;\n\n  const STATIC_ARRAY_SIZE = 128\n\n  const HB_MEMORY_MODE_WRITABLE = 2;\n  const HB_SET_VALUE_INVALID = -1;\n  const HB_OT_NAME_ID_INVALID = 0xFFFF;\n\n  const bufferContentType = {\n    0: \"INVALID\",\n    1: \"UNICODE\",\n    2: \"GLYPHS\",\n  };\n  const bufferSerializeFlags = {\n    \"DEFAULT\": 0x00000000,\n    \"NO_CLUSTERS\": 0x00000001,\n    \"NO_POSITIONS\": 0x00000002,\n    \"NO_GLYPH_NAMES\": 0x00000004,\n    \"GLYPH_EXTENTS\": 0x00000008,\n    \"GLYPH_FLAGS\": 0x00000010,\n    \"NO_ADVANCES\": 0x00000020,\n  };\n\n  const bufferFlags = {\n    \"DEFAULT\": 0x00000000,\n    \"BOT\": 0x00000001,\n    \"EOT\": 0x00000002,\n    \"PRESERVE_DEFAULT_IGNORABLES\": 0x00000004,\n    \"REMOVE_DEFAULT_IGNORABLES\": 0x00000008,\n    \"DO_NOT_INSERT_DOTTED_CIRCLE\": 0x00000010,\n    \"VERIFY\": 0x00000020,\n    \"PRODUCE_UNSAFE_TO_CONCAT\": 0x00000040,\n    \"PRODUCE_SAFE_TO_INSERT_TATWEEL\": 0x00000080,\n  };\n\n  function _hb_tag(s) {\n    return (\n      (s.charCodeAt(0) & 0xFF) << 24 |\n      (s.charCodeAt(1) & 0xFF) << 16 |\n      (s.charCodeAt(2) & 0xFF) << 8 |\n      (s.charCodeAt(3) & 0xFF) << 0\n    );\n  }\n\n  function _hb_untag(tag) {\n    return [\n      String.fromCharCode((tag >> 24) & 0xFF),\n      String.fromCharCode((tag >> 16) & 0xFF),\n      String.fromCharCode((tag >> 8) & 0xFF),\n      String.fromCharCode((tag >> 0) & 0xFF)\n    ].join('');\n  }\n\n  function _utf8_ptr_to_string(ptr, length) {\n    let end;\n    if (length === undefined) end = Module.HEAPU8.indexOf(0, ptr);\n    else end = ptr + length;\n    return utf8Decoder.decode(Module.HEAPU8.subarray(ptr, end));\n  }\n\n  function _utf16_ptr_to_string(ptr, length) {\n    let end = ptr / 2 + length;\n    return String.fromCharCode.apply(null, Module.HEAPU16.subarray(ptr / 2, end));\n  }\n\n  /**\n  * Use when you know the input range should be ASCII.\n  * Faster than encoding to UTF-8\n  **/\n  function _string_to_ascii_ptr(text) {\n    const ptr = exports.malloc(text.length + 1);\n    for (let i = 0; i < text.length; ++i) {\n      const char = text.charCodeAt(i);\n      if (char > 127) throw new Error('Expected ASCII text');\n      Module.HEAPU8[ptr + i] = char;\n    }\n    Module.HEAPU8[ptr + text.length] = 0;\n    return {\n      ptr: ptr,\n      length: text.length,\n      free: function () { exports.free(ptr); }\n    };\n  }\n\n  function _string_to_utf8_ptr(text) {\n    const ptr = exports.malloc(text.length);\n    utf8Encoder.encodeInto(text, Module.HEAPU8.subarray(ptr, ptr + text.length));\n    return {\n      ptr: ptr,\n      length: text.length,\n      free: function () { exports.free(ptr); }\n    };\n  }\n\n  function _string_to_utf16_ptr(text) {\n    const ptr = exports.malloc(text.length * 2);\n    const words = Module.HEAPU16.subarray(ptr / 2, ptr / 2 + text.length);\n    for (let i = 0; i < words.length; ++i) words[i] = text.charCodeAt(i);\n    return {\n      ptr: ptr,\n      length: words.length,\n      free: function () { exports.free(ptr); }\n    };\n  }\n\n  function _language_to_string(language) {\n    var ptr = exports.hb_language_to_string(language);\n    return _utf8_ptr_to_string(ptr);\n  }\n\n  function _language_from_string(str) {\n    var languageStr = _string_to_ascii_ptr(str);\n    var languagePtr = exports.hb_language_from_string(languageStr.ptr, -1);\n    languageStr.free();\n    return languagePtr;\n  }\n\n  /**\n  * Create an object representing a Harfbuzz blob.\n  * @param {string} blob A blob of binary data (usually the contents of a font file).\n  **/\n  function createBlob(blob) {\n    var blobPtr = exports.malloc(blob.byteLength);\n    Module.HEAPU8.set(new Uint8Array(blob), blobPtr);\n    var ptr = exports.hb_blob_create(blobPtr, blob.byteLength, HB_MEMORY_MODE_WRITABLE, blobPtr, freeFuncPtr);\n    return {\n      ptr: ptr,\n      /**\n      * Free the object.\n      */\n      destroy: function () { exports.hb_blob_destroy(ptr); }\n    };\n  }\n\n  /**\n   * Return the typed array of HarfBuzz set contents.\n   * @param {number} setPtr Pointer of set\n   * @returns {Uint32Array} Typed array instance\n   */\n  function _typed_array_from_set(setPtr) {\n    const setCount = exports.hb_set_get_population(setPtr);\n    const arrayPtr = exports.malloc(setCount << 2);\n    const arrayOffset = arrayPtr >> 2;\n    const array = Module.HEAPU32.subarray(arrayOffset, arrayOffset + setCount);\n    Module.HEAPU32.set(array, arrayOffset);\n    exports.hb_set_next_many(setPtr, HB_SET_VALUE_INVALID, arrayPtr, setCount);\n    return array;\n  }\n\n  /**\n  * Create an object representing a Harfbuzz face.\n  * @param {object} blob An object returned from `createBlob`.\n  * @param {number} index The index of the font in the blob. (0 for most files,\n  *  or a 0-indexed font number if the `blob` came form a TTC/OTC file.)\n  **/\n  function createFace(blob, index) {\n    var ptr = exports.hb_face_create(blob.ptr, index);\n    const upem = exports.hb_face_get_upem(ptr);\n    return {\n      ptr: ptr,\n      upem,\n      /**\n       * Return the binary contents of an OpenType table.\n       * @param {string} table Table name\n       */\n      reference_table: function (table) {\n        var blob = exports.hb_face_reference_table(ptr, _hb_tag(table));\n        var length = exports.hb_blob_get_length(blob);\n        if (!length) { return; }\n        var blobptr = exports.hb_blob_get_data(blob, null);\n        var table_string = Module.HEAPU8.subarray(blobptr, blobptr + length);\n        return table_string;\n      },\n      /**\n       * Return variation axis infos\n       */\n      getAxisInfos: function () {\n        var sp = stackSave();\n        var axis = stackAlloc(64 * 32);\n        var c = stackAlloc(4);\n        Module.HEAPU32[c / 4] = 64;\n        exports.hb_ot_var_get_axis_infos(ptr, 0, c, axis);\n        var result = {};\n        Array.from({ length: Module.HEAPU32[c / 4] }).forEach(function (_, i) {\n          result[_hb_untag(Module.HEAPU32[axis / 4 + i * 8 + 1])] = {\n            min: Module.HEAPF32[axis / 4 + i * 8 + 4],\n            default: Module.HEAPF32[axis / 4 + i * 8 + 5],\n            max: Module.HEAPF32[axis / 4 + i * 8 + 6]\n          };\n        });\n        stackRestore(sp);\n        return result;\n      },\n      /**\n       * Return unicodes the face supports\n       */\n      collectUnicodes: function () {\n        var unicodeSetPtr = exports.hb_set_create();\n        exports.hb_face_collect_unicodes(ptr, unicodeSetPtr);\n        var result = _typed_array_from_set(unicodeSetPtr);\n        exports.hb_set_destroy(unicodeSetPtr);\n        return result;\n      },\n      /**\n       * Return all scripts enumerated in the specified face's\n       * GSUB table or GPOS table.\n       * @param {string} table: The table to query, either \"GSUB\" or \"GPOS\".\n       **/\n      getTableScriptTags: function (table) {\n        var sp = stackSave();\n        var tableTag = _hb_tag(table);\n        var startOffset = 0;\n        var scriptCount = STATIC_ARRAY_SIZE;\n        var scriptCountPtr = stackAlloc(4);\n        var scriptTagsPtr = stackAlloc(STATIC_ARRAY_SIZE * 4);\n        var tags = [];\n        while (scriptCount == STATIC_ARRAY_SIZE) {\n          Module.HEAPU32[scriptCountPtr / 4] = scriptCount;\n          exports.hb_ot_layout_table_get_script_tags(ptr, tableTag, startOffset,\n            scriptCountPtr, scriptTagsPtr);\n          scriptCount = Module.HEAPU32[scriptCountPtr / 4];\n          var scriptTags = Module.HEAPU32.subarray(scriptTagsPtr / 4,\n            scriptTagsPtr / 4 + scriptCount);\n          tags.push(...Array.from(scriptTags).map(_hb_untag));\n          startOffset += scriptCount;\n        }\n        stackRestore(sp);\n        return tags;\n      },\n      /**\n       * Return all features enumerated in the specified face's\n       * GSUB table or GPOS table.\n       * @param {string} table: The table to query, either \"GSUB\" or \"GPOS\".\n       **/\n      getTableFeatureTags: function (table) {\n        var sp = stackSave();\n        var tableTag = _hb_tag(table);\n        var startOffset = 0;\n        var featureCount = STATIC_ARRAY_SIZE;\n        var featureCountPtr = stackAlloc(4);\n        var featureTagsPtr = stackAlloc(STATIC_ARRAY_SIZE * 4);\n        var tags = [];\n        while (featureCount == STATIC_ARRAY_SIZE) {\n          Module.HEAPU32[featureCountPtr / 4] = featureCount;\n          exports.hb_ot_layout_table_get_feature_tags(ptr, tableTag, startOffset,\n            featureCountPtr, featureTagsPtr);\n          featureCount = Module.HEAPU32[featureCountPtr / 4];\n          var scriptTags = Module.HEAPU32.subarray(featureTagsPtr / 4,\n            featureTagsPtr / 4 + featureCount);\n          tags.push(...Array.from(scriptTags).map(_hb_untag));\n          startOffset += featureCount;\n        }\n        stackRestore(sp);\n        return tags;\n\n      },\n      /**\n       * Return language tags in the given face's GSUB or GPOS table, underneath\n       * the specified script index.\n       * @param {string} table: The table to query, either \"GSUB\" or \"GPOS\".\n       * @param {number} scriptIndex: The index of the script to query.\n       **/\n      getScriptLanguageTags: function (table, scriptIndex) {\n        var sp = stackSave();\n        var tableTag = _hb_tag(table);\n        var startOffset = 0;\n        var languageCount = STATIC_ARRAY_SIZE;\n        var languageCountPtr = stackAlloc(4);\n        var languageTagsPtr = stackAlloc(STATIC_ARRAY_SIZE * 4);\n        var tags = [];\n        while (languageCount == STATIC_ARRAY_SIZE) {\n          Module.HEAPU32[languageCountPtr / 4] = languageCount;\n          exports.hb_ot_layout_script_get_language_tags(ptr, tableTag, scriptIndex, startOffset,\n            languageCountPtr, languageTagsPtr);\n          languageCount = Module.HEAPU32[languageCountPtr / 4];\n          var languageTags = Module.HEAPU32.subarray(languageTagsPtr / 4,\n            languageTagsPtr / 4 + languageCount);\n          tags.push(...Array.from(languageTags).map(_hb_untag));\n          startOffset += languageCount;\n        }\n        stackRestore(sp);\n        return tags;\n      },\n      /**\n       * Return all features in the specified face's GSUB table or GPOS table,\n       * underneath the specified script and language.\n       * @param {string} table: The table to query, either \"GSUB\" or \"GPOS\".\n       * @param {number} scriptIndex: The index of the script to query.\n       * @param {number} languageIndex: The index of the language to query.\n       **/\n      getLanguageFeatureTags: function (table, scriptIndex, languageIndex) {\n        var sp = stackSave();\n        var tableTag = _hb_tag(table);\n        var startOffset = 0;\n        var featureCount = STATIC_ARRAY_SIZE;\n        var featureCountPtr = stackAlloc(4);\n        var featureTagsPtr = stackAlloc(STATIC_ARRAY_SIZE * 4);\n        var tags = [];\n        while (featureCount == STATIC_ARRAY_SIZE) {\n          Module.HEAPU32[featureCountPtr / 4] = featureCount;\n          exports.hb_ot_layout_language_get_feature_tags(ptr, tableTag, scriptIndex, languageIndex, startOffset,\n            featureCountPtr, featureTagsPtr);\n          featureCount = Module.HEAPU32[featureCountPtr / 4];\n          var featureTags = Module.HEAPU32.subarray(featureTagsPtr / 4,\n            featureTagsPtr / 4 + featureCount);\n          tags.push(...Array.from(featureTags).map(_hb_untag));\n          startOffset += featureCount;\n        }\n        stackRestore(sp);\n        return tags;\n      },\n      /**\n       * Get the GDEF class of the requested glyph.\n       * @param {number} glyph The glyph to get the class of.\n       * @returns {string} The class of the glyph. Which can be either\n       *   UNCLASSIFIED, BASE_GLYPH, LIGATURE, MARK, or COMPONENT.\n       **/\n      getGlyphClass: function (glyph) {\n        const gclass = exports.hb_ot_layout_get_glyph_class(ptr, glyph);\n        switch (gclass) {\n          case 0:\n            return 'UNCLASSIFIED';\n          case 1:\n            return 'BASE_GLYPH';\n          case 2:\n            return 'LIGATURE';\n          case 3:\n            return 'MARK';\n          case 4:\n            return 'COMPONENT';\n        }\n      },\n      /**\n       * Return all names in the specified face's name table.\n       **/\n      listNames: function () {\n        var sp = stackSave();\n        var numEntriesPtr = stackAlloc(4);\n        var entriesPtr = exports.hb_ot_name_list_names(ptr, numEntriesPtr);\n        var numEntries = Module.HEAPU32[numEntriesPtr / 4];\n        var entries = [];\n        for (var i = 0; i < numEntries; i++) {\n          // FIXME: this depends on the struct memory layout.\n          // A more robust way would involve ading helper C functions to access\n          // the struct and use them here.\n          entries.push({\n            nameId: Module.HEAPU32[(entriesPtr / 4) + (i * 3)],\n            language: _language_to_string(Module.HEAPU32[(entriesPtr / 4) + (i * 3) + 2])\n          });\n        }\n        stackRestore(sp);\n        return entries;\n      },\n      /**\n       * Get the name of the specified face.\n       * @param {number} nameId The ID of the name to get.\n       * @param {string} language The language of the name to get.\n       **/\n      getName: function (nameId, language) {\n        var sp = stackSave();\n        var languagePtr = _language_from_string(language);\n        var nameLen = exports.hb_ot_name_get_utf16(ptr, nameId, languagePtr, 0, 0) + 1;\n        var textSizePtr = stackAlloc(4);\n        var textPtr = exports.malloc(nameLen * 2);\n        Module.HEAPU32[textSizePtr / 4] = nameLen;\n        exports.hb_ot_name_get_utf16(ptr, nameId, languagePtr, textSizePtr, textPtr);\n        var name = _utf16_ptr_to_string(textPtr, nameLen - 1);\n        exports.free(textPtr);\n        stackRestore(sp);\n        return name;\n      },\n      /**\n       * Get the name IDs of the specified feature.\n       * @param {string} table The table to query, either \"GSUB\" or \"GPOS\".\n       * @param {number} featureIndex The index of the feature to query.\n       **/\n      getFeatureNameIds: function (table, featureIndex) {\n        var sp = stackSave();\n        var tableTag = _hb_tag(table);\n        var labelIdPtr = stackAlloc(4);\n        var tooltipIdPtr = stackAlloc(4);\n        var sampleIdPtr = stackAlloc(4);\n        var numNamedParametersPtr = stackAlloc(4);\n        var firstParameterIdPtr = stackAlloc(4);\n\n        var found = exports.hb_ot_layout_feature_get_name_ids(ptr, tableTag, featureIndex,\n          labelIdPtr, tooltipIdPtr, sampleIdPtr, numNamedParametersPtr, firstParameterIdPtr);\n\n        var names = null;\n        if (found) {\n          let uiLabelNameId = Module.HEAPU32[labelIdPtr / 4];\n          let uiTooltipTextNameId = Module.HEAPU32[tooltipIdPtr / 4];\n          let sampleTextNameId = Module.HEAPU32[sampleIdPtr / 4];\n          let numNamedParameters = Module.HEAPU32[numNamedParametersPtr / 4];\n          let firstParameterId = Module.HEAPU32[firstParameterIdPtr / 4];\n          let paramUiLabelNameIds = Array(numNamedParameters).fill().map((_, i) => firstParameterId + i);\n          names = {\n            uiLabelNameId: uiLabelNameId == HB_OT_NAME_ID_INVALID ? null : uiLabelNameId,\n            uiTooltipTextNameId: uiTooltipTextNameId == HB_OT_NAME_ID_INVALID ? null : uiTooltipTextNameId,\n            sampleTextNameId: sampleTextNameId == HB_OT_NAME_ID_INVALID ? null : sampleTextNameId,\n            paramUiLabelNameIds: paramUiLabelNameIds\n          };\n        }\n\n        stackRestore(sp);\n        return names;\n      },\n      /**\n       * Free the object.\n       */\n      destroy: function () {\n        exports.hb_face_destroy(ptr);\n      },\n    };\n  }\n\n  var pathBuffer = \"\";\n\n  /**\n  * Create an object representing a Harfbuzz font.\n  * @param {object} blob An object returned from `createFace`.\n  * @param {number} ptr Optional pointer to an existing font.\n  **/\n  function createFont(face, ptr) {\n    var ptr = ptr ? exports.hb_font_reference(ptr) : exports.hb_font_create(face.ptr);\n    var drawFuncsPtr = null;\n    var moveToPtr = null;\n    var lineToPtr = null;\n    var cubicToPtr = null;\n    var quadToPtr = null;\n    var closePathPtr = null;\n\n    /**\n    * Return a glyph as an SVG path string.\n    * @param {number} glyphId ID of the requested glyph in the font.\n    **/\n    function glyphToPath(glyphId) {\n      if (!drawFuncsPtr) {\n        var moveTo = function (dfuncs, draw_data, draw_state, to_x, to_y, user_data) {\n          pathBuffer += `M${to_x},${to_y}`;\n        }\n        var lineTo = function (dfuncs, draw_data, draw_state, to_x, to_y, user_data) {\n          pathBuffer += `L${to_x},${to_y}`;\n        }\n        var cubicTo = function (dfuncs, draw_data, draw_state, c1_x, c1_y, c2_x, c2_y, to_x, to_y, user_data) {\n          pathBuffer += `C${c1_x},${c1_y} ${c2_x},${c2_y} ${to_x},${to_y}`;\n        }\n        var quadTo = function (dfuncs, draw_data, draw_state, c_x, c_y, to_x, to_y, user_data) {\n          pathBuffer += `Q${c_x},${c_y} ${to_x},${to_y}`;\n        }\n        var closePath = function (dfuncs, draw_data, draw_state, user_data) {\n          pathBuffer += 'Z';\n        }\n\n        moveToPtr = addFunction(moveTo, 'viiiffi');\n        lineToPtr = addFunction(lineTo, 'viiiffi');\n        cubicToPtr = addFunction(cubicTo, 'viiiffffffi');\n        quadToPtr = addFunction(quadTo, 'viiiffffi');\n        closePathPtr = addFunction(closePath, 'viiii');\n        drawFuncsPtr = exports.hb_draw_funcs_create();\n        exports.hb_draw_funcs_set_move_to_func(drawFuncsPtr, moveToPtr, 0, 0);\n        exports.hb_draw_funcs_set_line_to_func(drawFuncsPtr, lineToPtr, 0, 0);\n        exports.hb_draw_funcs_set_cubic_to_func(drawFuncsPtr, cubicToPtr, 0, 0);\n        exports.hb_draw_funcs_set_quadratic_to_func(drawFuncsPtr, quadToPtr, 0, 0);\n        exports.hb_draw_funcs_set_close_path_func(drawFuncsPtr, closePathPtr, 0, 0);\n      }\n\n      pathBuffer = \"\";\n      exports.hb_font_draw_glyph(ptr, glyphId, drawFuncsPtr, 0);\n      return pathBuffer;\n    }\n\n    /**\n     * Return glyph name.\n     * @param {number} glyphId ID of the requested glyph in the font.\n     **/\n    function glyphName(glyphId) {\n      var sp = stackSave();\n      var strSize = 256;\n      var strPtr = stackAlloc(strSize);\n      exports.hb_font_glyph_to_string(ptr, glyphId, strPtr, strSize);\n      var name = _utf8_ptr_to_string(strPtr);\n      stackRestore(sp);\n      return name;\n    }\n\n    return {\n      ptr: ptr,\n      /**\n       * Create a sub font.\n       * @returns {object} Object representing the sub font.\n       **/\n      subFont: function () {\n        return createFont(null, exports.hb_font_create_sub_font(ptr));\n      },\n      /**\n       * Return font horizontal extents.\n       * @returns {object} Object with ascender, descender, and lineGap properties.\n       **/\n      hExtents: function () {\n        var sp = stackSave();\n        var extentsPtr = stackAlloc(12);\n        exports.hb_font_get_h_extents(ptr, extentsPtr);\n        var extents = {\n          ascender: Module.HEAP32[extentsPtr / 4],\n          descender: Module.HEAP32[extentsPtr / 4 + 1],\n          lineGap: Module.HEAP32[extentsPtr / 4 + 2],\n        };\n        stackRestore(sp);\n        return extents;\n      },\n      /**\n       * Return font vertical extents.\n       * @returns {object} Object with ascender, descender, and lineGap properties.\n       **/\n      vExtents: function () {\n        var sp = stackSave();\n        var extentsPtr = stackAlloc(12);\n        exports.hb_font_get_v_extents(ptr, extentsPtr);\n        var extents = {\n          ascender: Module.HEAP32[extentsPtr / 4],\n          descender: Module.HEAP32[extentsPtr / 4 + 1],\n          lineGap: Module.HEAP32[extentsPtr / 4 + 2],\n        };\n        stackRestore(sp);\n        return extents;\n      },\n      glyphName: glyphName,\n      glyphToPath: glyphToPath,\n      /**\n       * Return glyph horizontal advance.\n       * @param {number} glyphId ID of the requested glyph in the font.\n       **/\n      glyphHAdvance: function (glyphId) {\n        return exports.hb_font_get_glyph_h_advance(ptr, glyphId);\n      },\n      /**\n       * Return glyph vertical advance.\n       * @param {number} glyphId ID of the requested glyph in the font.\n       **/\n      glyphVAdvance: function (glyphId) {\n        return exports.hb_font_get_glyph_v_advance(ptr, glyphId);\n      },\n      /**\n       * Return glyph horizontal origin.\n       * @param {number} glyphId ID of the requested glyph in the font.\n       **/\n      glyphHOrigin: function (glyphId) {\n        var sp = stackSave();\n        let xPtr = stackAlloc(4);\n        let yPtr = stackAlloc(4);\n        let origin = null;\n        if (exports.hb_font_get_glyph_h_origin(ptr, glyphId, xPtr, yPtr)) {\n          origin = [Module.HEAP32[xPtr / 4], Module.HEAP32[yPtr / 4]];\n        }\n        stackRestore(sp);\n        return origin;\n      },\n      /**\n       * Return glyph vertical origin.\n       * @param {number} glyphId ID of the requested glyph in the font.\n       **/\n      glyphVOrigin: function (glyphId) {\n        var sp = stackSave();\n        let xPtr = stackAlloc(4);\n        let yPtr = stackAlloc(4);\n        let origin = null;\n        if (exports.hb_font_get_glyph_v_origin(ptr, glyphId, xPtr, yPtr)) {\n          origin = [Module.HEAP32[xPtr / 4], Module.HEAP32[yPtr / 4]];\n        }\n        stackRestore(sp);\n        return origin;\n      },\n      /**\n       * Return glyph extents.\n       * @param {number} glyphId ID of the requested glyph in the font.\n       **/\n      glyphExtents: function (glyphId) {\n        var sp = stackSave();\n        var extentsPtr = stackAlloc(16);\n        var extents = null;\n        if (exports.hb_font_get_glyph_extents(ptr, glyphId, extentsPtr)) {\n          extents = {\n            xBearing: Module.HEAP32[extentsPtr / 4],\n            yBearing: Module.HEAP32[extentsPtr / 4 + 1],\n            width: Module.HEAP32[extentsPtr / 4 + 2],\n            height: Module.HEAP32[extentsPtr / 4 + 3]\n          };\n        }\n        stackRestore(sp);\n        return extents;\n      },\n      /**\n       * Return glyph ID from name.\n       * @param {string} name Name of the requested glyph in the font.\n       **/\n      glyphFromName: function (name) {\n        var sp = stackSave();\n        var glyphIdPtr = stackAlloc(4);\n        var namePtr = _string_to_utf8_ptr(name);\n        var glyphId = null;\n        if (exports.hb_font_get_glyph_from_name(ptr, namePtr.ptr, namePtr.length, glyphIdPtr)) {\n          glyphId = Module.HEAPU32[glyphIdPtr / 4];\n        }\n        namePtr.free();\n        stackRestore(sp);\n        return glyphId;\n      },\n      /**\n      * Return a glyph as a JSON path string\n      * based on format described on https://svgwg.org/specs/paths/#InterfaceSVGPathSegment\n      * @param {number} glyphId ID of the requested glyph in the font.\n      **/\n      glyphToJson: function (glyphId) {\n        var path = glyphToPath(glyphId);\n        return path.replace(/([MLQCZ])/g, '|$1 ').split('|').filter(function (x) { return x.length; }).map(function (x) {\n          var row = x.split(/[ ,]/g);\n          return { type: row[0], values: row.slice(1).filter(function (x) { return x.length; }).map(function (x) { return +x; }) };\n        });\n      },\n      /**\n      * Set the font's scale factor, affecting the position values returned from\n      * shaping.\n      * @param {number} xScale Units to scale in the X dimension.\n      * @param {number} yScale Units to scale in the Y dimension.\n      **/\n      setScale: function (xScale, yScale) {\n        exports.hb_font_set_scale(ptr, xScale, yScale);\n      },\n      /**\n       * Set the font's variations.\n       * @param {object} variations Dictionary of variations to set\n       **/\n      setVariations: function (variations) {\n        var entries = Object.entries(variations);\n        var vars = exports.malloc(8 * entries.length);\n        entries.forEach(function (entry, i) {\n          Module.HEAPU32[vars / 4 + i * 2 + 0] = _hb_tag(entry[0]);\n          Module.HEAPF32[vars / 4 + i * 2 + 1] = entry[1];\n        });\n        exports.hb_font_set_variations(ptr, vars, entries.length);\n        exports.free(vars);\n      },\n      /**\n      * Set the font's font functions.\n      * @param {object} fontFuncs The font functions.\n      **/\n      setFuncs: function (fontFuncs) {\n        exports.hb_font_set_funcs(ptr, fontFuncs.ptr);\n      },\n      /**\n      * Free the object.\n      */\n      destroy: function () {\n        exports.hb_font_destroy(ptr);\n        if (drawFuncsPtr) {\n          exports.hb_draw_funcs_destroy(drawFuncsPtr);\n          drawFuncsPtr = null;\n          removeFunction(moveToPtr);\n          removeFunction(lineToPtr);\n          removeFunction(cubicToPtr);\n          removeFunction(quadToPtr);\n          removeFunction(closePathPtr);\n        }\n      }\n    };\n  }\n\n  /**\n  * Create a object representing a HarfBuzz font functions.\n  **/\n  function createFontFuncs() {\n    var ptr = exports.hb_font_funcs_create();\n    return {\n      ptr: ptr,\n      /**\n      * Set the font's glyph extents function.\n      * @param {function} func The function to set.\n      *\n      * The function takes the following arguments:\n      * @param {object} font The font.\n      * @param {number} glyph The glyph ID.\n      *\n      * The function should return an object with the following properties, or null on failure:\n      * @param {number} xBearing The x bearing of the glyph.\n      * @param {number} yBearing The y bearing of the glyph.\n      * @param {number} width The width of the glyph.\n      * @param {number} height The height of the glyph.\n      **/\n      setGlyphExtentsFunc: function (func) {\n        let funcPtr = addFunction(function (fontPtr, font_data, glyph, extentsPtr, user_data) {\n          let font = createFont(null, fontPtr);\n          let extents = func(font, glyph);\n          font.destroy();\n          if (extents) {\n            Module.HEAP32[extentsPtr / 4] = extents.xBearing;\n            Module.HEAP32[extentsPtr / 4 + 1] = extents.yBearing;\n            Module.HEAP32[extentsPtr / 4 + 2] = extents.width;\n            Module.HEAP32[extentsPtr / 4 + 3] = extents.height;\n            return 1;\n          }\n          return 0;\n        }, 'ippipp');\n        exports.hb_font_funcs_set_glyph_extents_func(ptr, funcPtr, 0, 0);\n      },\n      /**\n      * Set the font's glyph from name function.\n      * @param {function} func The function to set.\n      *\n      * The function takes the following arguments:\n      * @param {object} font The font.\n      * @param {string} name The glyph name.\n      *\n      * The function should return an object with the following properties, or null on failure:\n      * @param {number} glyph The glyph ID.\n      **/\n      setGlyphFromNameFunc: function (func) {\n        let funcPtr = addFunction(function (fontPtr, font_data, namePtr, len, glyphPtr, user_data) {\n          let font = createFont(null, fontPtr);\n          let name = _utf8_ptr_to_string(namePtr, len);\n          let glyph = func(font, name);\n          font.destroy();\n          if (glyph) {\n            Module.HEAPU32[glyphPtr / 4] = glyph;\n            return 1;\n          }\n          return 0;\n        }, 'ipppipp');\n        exports.hb_font_funcs_set_glyph_from_name_func(ptr, funcPtr, 0, 0);\n      },\n      /**\n      * Set the font's glyph horizontal advance function.\n      * @param {function} func The function to set.\n      *\n      * The function takes the following arguments:\n      * @param {object} font The font.\n      * @param {number} glyph The glyph ID.\n      *\n      * The function should return the horizontal advance of the glyph.\n      **/\n      setGlyphHAdvanceFunc: function (func) {\n        let funcPtr = addFunction(function (fontPtr, font_data, glyph, user_data) {\n          let font = createFont(null, fontPtr);\n          let advance = func(font, glyph);\n          font.destroy();\n          return advance;\n        }, 'ippip');\n        exports.hb_font_funcs_set_glyph_h_advance_func(ptr, funcPtr, 0, 0);\n      },\n      /**\n      * Set the font's glyph vertical advance function.\n      * @param {function} func The function to set.\n      *\n      * The function takes the following arguments:\n      * @param {object} font The font.\n      * @param {number} glyph The glyph ID.\n      *\n      * The function should return the vertical advance of the glyph.\n      **/\n      setGlyphVAdvanceFunc: function (func) {\n        let funcPtr = addFunction(function (fontPtr, font_data, glyph, user_data) {\n          let font = createFont(null, fontPtr);\n          let advance = func(font, glyph);\n          font.destroy();\n          return advance;\n        }, 'ippip');\n        exports.hb_font_funcs_set_glyph_v_advance_func(ptr, funcPtr, 0, 0);\n      },\n      /**\n      * Set the font's glyph horizontal origin function.\n      * @param {function} func The function to set.\n      *\n      * The function takes the following arguments:\n      * @param {object} font The font.\n      * @param {number} glyph The glyph ID.\n      *\n      * The function should return the x and y horizontal origin of the glyph, or null on failure.\n      **/\n      setGlyphHOriginFunc: function (func) {\n        let funcPtr = addFunction(function (fontPtr, font_data, glyph, xPtr, yPtr, user_data) {\n          let font = createFont(null, fontPtr);\n          let origin = func(font, glyph);\n          font.destroy();\n          if (origin) {\n            Module.HEAP32[xPtr / 4] = origin[0];\n            Module.HEAP32[yPtr / 4] = origin[1];\n            return 1;\n          }\n          return 0;\n        }, 'ippippp');\n        exports.hb_font_funcs_set_glyph_h_origin_func(ptr, funcPtr, 0, 0);\n      },\n      /**\n      * Set the font's glyph vertical origin function.\n      * @param {function} func The function to set.\n      *\n      * The function takes the following arguments:\n      * @param {object} font The font.\n      * @param {number} glyph The glyph ID.\n      *\n      * The function should return the x and y vertical origin of the glyph, or null on failure.\n      **/\n      setGlyphVOriginFunc: function (func) {\n        let funcPtr = addFunction(function (fontPtr, font_data, glyph, xPtr, yPtr, user_data) {\n          let font = createFont(null, fontPtr);\n          let origin = func(font, glyph);\n          font.destroy();\n          if (origin) {\n            Module.HEAP32[xPtr / 4] = origin[0];\n            Module.HEAP32[yPtr / 4] = origin[1];\n            return 1;\n          }\n          return 0;\n        }, 'ippippp');\n        exports.hb_font_funcs_set_glyph_v_origin_func(ptr, funcPtr, 0, 0);\n      },\n      /**\n      * Set the font's glyph horizontal kerning function.\n      * @param {function} func The function to set.\n      *\n      * The function takes the following arguments:\n      * @param {object} font The font.\n      * @param {number} firstGlyph The first glyph ID.\n      * @param {number} secondGlyph The second glyph ID.\n      *\n      * The function should return the horizontal kerning of the glyphs.\n      **/\n      setGlyphHKerningFunc: function (func) {\n        let funcPtr = addFunction(function (fontPtr, font_data, firstGlyph, secondGlyph, user_data) {\n          let font = createFont(null, fontPtr);\n          let kerning = func(font, firstGlyph, secondGlyph);\n          font.destroy();\n          return kerning;\n        }, 'ippiip');\n        exports.hb_font_funcs_set_glyph_h_kerning_func(ptr, funcPtr, 0, 0);\n      },\n      /**\n      * Set the font's glyph name function.\n      * @param {function} func The function to set.\n      *\n      * The function takes the following arguments:\n      * @param {object} font The font.\n      * @param {number} glyph The glyph ID.\n      *\n      * The function should return the name of the glyph, or null on failure.\n      **/\n      setGlyphNameFunc: function (func) {\n        let funcPtr = addFunction(function (fontPtr, font_data, glyph, namePtr, size, user_data) {\n          let font = createFont(null, fontPtr);\n          let name = func(font, glyph);\n          font.destroy();\n          if (name) {\n            utf8Encoder.encodeInto(name, Module.HEAPU8.subarray(namePtr, namePtr + size));\n            return 1;\n          }\n          return 0;\n        }, 'ippipip');\n        exports.hb_font_funcs_set_glyph_name_func(ptr, funcPtr, 0, 0);\n      },\n      /**\n      * Set the font's nominal glyph function.\n      * @param {function} func The function to set.\n      *\n      * The function takes the following arguments:\n      * @param {object} font The font.\n      * @param {number} unicode The unicode.\n      *\n      * The function should return the nominal glyph of the unicode, or null on failure.\n      **/\n      setNominalGlyphFunc: function (func) {\n        let funcPtr = addFunction(function (fontPtr, font_data, unicode, glyphPtr, user_data) {\n          let font = createFont(null, fontPtr);\n          let glyph = func(font, unicode);\n          font.destroy();\n          if (glyph) {\n            Module.HEAPU32[glyphPtr / 4] = glyph;\n            return 1;\n          }\n          return 0;\n        }, 'ippipp');\n        exports.hb_font_funcs_set_nominal_glyph_func(ptr, funcPtr, 0, 0);\n      },\n      /**\n      * Set the font's variation glyph function.\n      * @param {function} func The function to set.\n      *\n      * The function takes the following arguments:\n      * @param {object} font The font.\n      * @param {number} unicode The unicode.\n      * @param {number} variationSelector The variation selector.\n      *\n      * The function should return the variation glyph of the unicode, or null on failure.\n      **/\n      setVariationGlyphFunc: function (func) {\n        let funcPtr = addFunction(function (fontPtr, font_data, unicode, variationSelector, glyphPtr, user_data) {\n          let font = createFont(null, fontPtr);\n          let glyph = func(font, unicode, variationSelector);\n          font.destroy();\n          if (glyph) {\n            Module.HEAPU32[glyphPtr / 4] = glyph;\n            return 1;\n          }\n          return 0;\n        }, 'ippiipp');\n        exports.hb_font_funcs_set_variation_glyph_func(ptr, funcPtr, 0, 0);\n      },\n      /**\n      * Set the font's horizontal extents function.\n      * @param {function} func The function to set.\n      *\n      * The function takes the following arguments:\n      * @param {object} font The font.\n      *\n      * The function should return an object with the following properties, or null on failure:\n      * @param {number} ascender The ascender of the font.\n      * @param {number} descender The descender of the font.\n      * @param {number} lineGap The line gap of the font.\n      **/\n      setFontHExtentsFunc: function (func) {\n        let funcPtr = addFunction(function (fontPtr, font_data, extentsPtr, user_data) {\n          let font = createFont(null, fontPtr);\n          let extents = func(font);\n          font.destroy();\n          if (extents) {\n            Module.HEAP32[extentsPtr / 4] = extents.ascender;\n            Module.HEAP32[extentsPtr / 4 + 1] = extents.descender;\n            Module.HEAP32[extentsPtr / 4 + 2] = extents.lineGap;\n            return 1;\n          }\n          return 0;\n        }, 'ipppp');\n        exports.hb_font_funcs_set_font_h_extents_func(ptr, funcPtr, 0, 0);\n      },\n      /**\n      * Set the font's vertical extents function.\n      * @param {function} func The function to set.\n      *\n      * The function takes the following arguments:\n      * @param {object} font The font.\n      *\n      * The function should return an object with the following properties, or null on failure:\n      * @param {number} ascender The ascender of the font.\n      * @param {number} descender The descender of the font.\n      * @param {number} lineGap The line gap of the font.\n      **/\n      setFontVExtentsFunc: function (func) {\n        let funcPtr = addFunction(function (fontPtr, font_data, extentsPtr, user_data) {\n          let font = createFont(null, fontPtr);\n          let extents = func(font);\n          font.destroy();\n          if (extents) {\n            Module.HEAP32[extentsPtr / 4] = extents.ascender;\n            Module.HEAP32[extentsPtr / 4 + 1] = extents.descender;\n            Module.HEAP32[extentsPtr / 4 + 2] = extents.lineGap;\n            return 1;\n          }\n          return 0;\n        }, 'ipppp');\n        exports.hb_font_funcs_set_font_v_extents_func(ptr, funcPtr, 0, 0);\n      },\n      destroy: function () {\n        exports.hb_font_funcs_destroy(ptr);\n      }\n    };\n  }\n\n  /**\n  * Create an object representing a Harfbuzz buffer.\n  * @param {number} ptr Optional. The pointer to the buffer.\n  **/\n  function createBuffer(ptr) {\n    var ptr = ptr ? exports.hb_buffer_reference(ptr) : exports.hb_buffer_create();\n    return {\n      ptr: ptr,\n      /**\n      * Add text to the buffer.\n      * @param {string} text Text to be added to the buffer.\n      * @param {number} itemOffset Optional. The offset of the first character to add to the buffer.\n      * @param {number} itemLength Optional. The number of characters to add to the buffer, or null for the end of text.\n      **/\n      addText: function (text, itemOffset = 0, itemLength = null) {\n        const str = _string_to_utf16_ptr(text);\n        if (itemLength == null) itemLength = str.length;\n        exports.hb_buffer_add_utf16(ptr, str.ptr, str.length, itemOffset, itemLength);\n        str.free();\n      },\n      /**\n      * Add code points to the buffer.\n      * @param {number[]} codePoints Array of code points to be added to the buffer.\n      * @param {number} itemOffset Optional. The offset of the first code point to add to the buffer.\n      * @param {number} itemLength Optional. The number of code points to add to the buffer, or null for the end of the array.\n      */\n      addCodePoints: function (codePoints, itemOffset = 0, itemLength = null) {\n        let codePointsPtr = exports.malloc(codePoints.length * 4);\n        let codePointsArray = Module.HEAPU32.subarray(codePointsPtr / 4, codePointsPtr / 4 + codePoints.length);\n        codePointsArray.set(codePoints);\n        if (itemLength == null) itemLength = codePoints.length;\n        exports.hb_buffer_add_codepoints(ptr, codePointsPtr, codePoints.length, itemOffset, itemLength);\n        exports.free(codePointsPtr);\n      },\n      /**\n      * Set buffer script, language and direction.\n      *\n      * This needs to be done before shaping.\n      **/\n      guessSegmentProperties: function () {\n        return exports.hb_buffer_guess_segment_properties(ptr);\n      },\n      /**\n      * Set buffer direction explicitly.\n      * @param {string} direction: One of \"ltr\", \"rtl\", \"ttb\" or \"btt\"\n      */\n      setDirection: function (dir) {\n        exports.hb_buffer_set_direction(ptr, {\n          ltr: 4,\n          rtl: 5,\n          ttb: 6,\n          btt: 7\n        }[dir] || 0);\n      },\n      /**\n      * Set buffer flags explicitly.\n      * @param {string[]} flags: A list of strings which may be either:\n      * \"DEFAULT\"\n      * \"BOT\"\n      * \"EOT\"\n      * \"PRESERVE_DEFAULT_IGNORABLES\"\n      * \"REMOVE_DEFAULT_IGNORABLES\"\n      * \"DO_NOT_INSERT_DOTTED_CIRCLE\"\n      * \"VERIFY\"\n      * \"PRODUCE_UNSAFE_TO_CONCAT\"\n      * \"PRODUCE_SAFE_TO_INSERT_TATWEEL\"\n      */\n      setFlags: function (flags) {\n        var flagsValue = 0\n        flags.forEach(s => flagsValue |= bufferFlags[s] || 0);\n        exports.hb_buffer_set_flags(ptr, flagsValue);\n      },\n      /**\n      * Set buffer language explicitly.\n      * @param {string} language: The buffer language\n      */\n      setLanguage: function (language) {\n        var str = _string_to_ascii_ptr(language);\n        exports.hb_buffer_set_language(ptr, exports.hb_language_from_string(str.ptr, -1));\n        str.free();\n      },\n      /**\n      * Set buffer script explicitly.\n      * @param {string} script: The buffer script\n      */\n      setScript: function (script) {\n        var str = _string_to_ascii_ptr(script);\n        exports.hb_buffer_set_script(ptr, exports.hb_script_from_string(str.ptr, -1));\n        str.free();\n      },\n      /**\n      * Set the Harfbuzz clustering level.\n      *\n      * Affects the cluster values returned from shaping.\n      * @param {number} level: Clustering level. See the Harfbuzz manual chapter\n      * on Clusters.\n      **/\n      setClusterLevel: function (level) {\n        exports.hb_buffer_set_cluster_level(ptr, level)\n      },\n      /**\n      * Reset the buffer to its initial status.\n      **/\n      reset: function () {\n        exports.hb_buffer_reset(ptr);\n      },\n      /**\n      * Similar to reset(), but does not clear the Unicode functions and the\n      * replacement code point.\n      **/\n      clearContents: function () {\n        exports.hb_buffer_clear_contents(ptr);\n      },\n      /**\n      * Set message func.\n      * @param {function} func The function to set.\n      *\n      * The function should accept three arguments:\n      * @param {object} buffer The buffer\n      * @param {object} font The font\n      * @param {string} message The message\n      *\n      * Returning false from this function will skip this shaping step and move to the next one.\n      */\n      setMessageFunc: function (func) {\n        var traceFunc = function (bufferPtr, fontPtr, messagePtr, user_data) {\n          var message = _utf8_ptr_to_string(messagePtr);\n          var buffer = createBuffer(bufferPtr);\n          var font = createFont(null, fontPtr);\n          var result = func(buffer, font, message);\n          buffer.destroy();\n          font.destroy();\n          return result ? 1 : 0;\n        }\n        var traceFuncPtr = addFunction(traceFunc, 'iiiii');\n        exports.hb_buffer_set_message_func(ptr, traceFuncPtr, 0, 0);\n      },\n      /**\n      * Get the the number of items in the buffer.\n      * @returns {number} The buffer length.\n      */\n      getLength: function () {\n        return exports.hb_buffer_get_length(ptr);\n      },\n      /**\n      * Get the glyph information from the buffer.\n      * @returns {object[]} The glyph information.\n      *\n      * The glyph information is returned as an array of objects with the\n      * following properties:\n      * @param {number} codepoint either a Unicode code point (before shaping) or a glyph index (after shaping).\n      * @param {number} cluster The cluster index of the glyph.\n      */\n      getGlyphInfos: function () {\n        var infosPtr32 = exports.hb_buffer_get_glyph_infos(ptr, 0) / 4;\n        // hb_glyph_info_t struct: { codepoint, mask, cluster, var1, var2 } (5 uint32s)\n        var infosArray = Module.HEAPU32.subarray(infosPtr32, infosPtr32 + this.getLength() * 5);\n        var infos = [];\n        for (var i = 0; i < infosArray.length; i += 5) {\n          infos.push({\n            codepoint: infosArray[i],\n            cluster: infosArray[i + 2],\n          });\n        }\n        return infos;\n      },\n      /**\n      * Get the glyph positions from the buffer.\n      * @returns {object[]} The glyph positions.\n      *\n      * The glyph positions are returned as an array of objects with the\n      * following properties:\n      * @param {number} x_advance The x advance of the glyph.\n      * @param {number} y_advance The y advance of the glyph.\n      * @param {number} x_offset The x offset of the glyph.\n      * @param {number} y_offset The y offset of the glyph.\n      *\n      */\n      getGlyphPositions: function () {\n        var positionsPtr32 = exports.hb_buffer_get_glyph_positions(ptr, 0) / 4;\n        if (positionsPtr32 == 0) {\n          return [];\n        }\n        // hb_glyph_position_t struct: { x_advance, y_advance, x_offset, y_offset, var } (5 int32s)\n        var positionsArray = Module.HEAP32.subarray(positionsPtr32, positionsPtr32 + this.getLength() * 5);\n        var positions = [];\n        for (var i = 0; i < positionsArray.length; i += 5) {\n          positions.push({\n            x_advance: positionsArray[i],\n            y_advance: positionsArray[i + 1],\n            x_offset: positionsArray[i + 2],\n            y_offset: positionsArray[i + 3],\n          });\n        }\n        return positions;\n      },\n      /**\n      * Get the glyph information and positions from the buffer.\n      * @returns {object[]} The glyph information and positions.\n      *\n      * The glyph information is returned as an array of objects with the\n      * properties from getGlyphInfos and getGlyphPositions combined.\n      */\n      getGlyphInfosAndPositions: function () {\n        var infosPtr32 = exports.hb_buffer_get_glyph_infos(ptr, 0) / 4;\n        var infosArray = Module.HEAPU32.subarray(infosPtr32, infosPtr32 + this.getLength() * 5);\n\n        var positionsPtr32 = exports.hb_buffer_get_glyph_positions(ptr, 0) / 4;\n        var positionsArray = positionsPtr32 ? Module.HEAP32.subarray(positionsPtr32, positionsPtr32 + this.getLength() * 5) : null;\n\n        var out = [];\n        for (var i = 0; i < infosArray.length; i += 5) {\n          var info = {\n            codepoint: infosArray[i],\n            cluster: infosArray[i + 2],\n          };\n          for (var [name, idx] of [['mask', 1], ['var1', 3], ['var2', 4]]) {\n            Object.defineProperty(info, name, {\n              value: infosArray[i + idx],\n              enumerable: false\n            });\n          }\n          if (positionsArray) {\n            info.x_advance = positionsArray[i];\n            info.y_advance = positionsArray[i + 1];\n            info.x_offset = positionsArray[i + 2];\n            info.y_offset = positionsArray[i + 3];\n            Object.defineProperty(info, 'var', {\n              value: positionsArray[i + 4],\n              enumerable: false\n            });\n          }\n          out.push(info);\n        }\n        return out;\n      },\n      /**\n      * Update the glyph positions in the buffer.\n      * @param {object[]} positions The new glyph positions.\n      *\n      * WARNING: Do not use unless you know what you are doing.\n      */\n      updateGlyphPositions: function (positions) {\n        var positionsPtr32 = exports.hb_buffer_get_glyph_positions(ptr, 0) / 4;\n        if (positionsPtr32 == 0) {\n          return;\n        }\n        var len = Math.min(positions.length, this.getLength());\n        var positionsArray = Module.HEAP32.subarray(positionsPtr32, positionsPtr32 + len * 5);\n        for (var i = 0; i < len; i++) {\n          positionsArray[i * 5] = positions[i].x_advance;\n          positionsArray[i * 5 + 1] = positions[i].y_advance;\n          positionsArray[i * 5 + 2] = positions[i].x_offset;\n          positionsArray[i * 5 + 3] = positions[i].y_offset;\n        }\n      },\n      /**\n      * Serialize the buffer contents to a string.\n      * @param {object} font Optional. The font to use for serialization.\n      * @param {number} start Optional. The starting index of the glyphs to serialize.\n      * @param {number} end Optional. The ending index of the glyphs to serialize.\n      * @param {string} format Optional. The format to serialize the buffer contents to.\n      * @param {string[]} flags Optional. The flags to use for serialization. A list of strings which may be either:\n      * \"DEFAULT\"\n      * \"NO_CLUSTERS\"\n      * \"NO_POSITIONS\"\n      * \"NO_GLYPH_NAMES\"\n      * \"GLYPH_EXTENTS\"\n      * \"GLYPH_FLAGS\"\n      * \"NO_ADVANCES\"\n      *\n      * @returns {string} The serialized buffer contents.\n      */\n      serialize: function (font, start = 0, end = null, format = \"TEXT\", flags = []) {\n        var sp = stackSave();\n        if (end == null) end = this.getLength();\n        var bufLen = 32 * 1024;\n        var bufPtr = exports.malloc(bufLen);\n        var bufConsumedPtr = stackAlloc(4);\n        var flagsValue = 0;\n        flags.forEach(flag => flagsValue |= bufferSerializeFlags[flag] || 0);\n        var result = \"\";\n        while (start < end) {\n          start += exports.hb_buffer_serialize(ptr, start, end,\n            bufPtr, bufLen, bufConsumedPtr,\n            font ? font.ptr : 0, _hb_tag(format), flagsValue);\n          var bufConsumed = Module.HEAPU32[bufConsumedPtr / 4];\n          if (bufConsumed == 0) break;\n          result += _utf8_ptr_to_string(bufPtr, bufConsumed);\n        }\n        exports.free(bufPtr);\n        stackRestore(sp);\n        return result;\n      },\n      /**\n      * Return the buffer content type.\n      *\n      * @returns {string} The buffer content type. One of:\n      * \"INVALID\"\n      * \"UNICODE\"\n      * \"GLYPHS\"\n      */\n      getContentType: function () {\n        return bufferContentType[exports.hb_buffer_get_content_type(ptr)];\n      },\n      /**\n      * Return the buffer contents as a JSON object.\n      *\n      * After shaping, this function will return an array of glyph information\n      * objects. Each object will have the following attributes:\n      *\n      *   - g: The glyph ID\n      *   - cl: The cluster ID\n      *   - ax: Advance width (width to advance after this glyph is painted)\n      *   - ay: Advance height (height to advance after this glyph is painted)\n      *   - dx: X displacement (adjustment in X dimension when painting this glyph)\n      *   - dy: Y displacement (adjustment in Y dimension when painting this glyph)\n      *   - flags: Glyph flags like `HB_GLYPH_FLAG_UNSAFE_TO_BREAK` (0x1)\n      **/\n      json: function () {\n        var buf = this.serialize(null, 0, null, \"JSON\", [\"NO_GLYPH_NAMES\", \"GLYPH_FLAGS\"]);\n        var json = JSON.parse(buf);\n        // For backward compatibility, as harfbuzz uses 'fl' for flags but earlier\n        // we were doing the serialization ourselves and used 'flags'.\n        json.forEach(function (glyph) {\n          glyph.flags = glyph.fl || 0;\n          delete glyph.fl;\n        });\n        return json;\n      },\n      /**\n      * Free the object.\n      */\n      destroy: function () { exports.hb_buffer_destroy(ptr); }\n    };\n  }\n\n  /**\n  * Shape a buffer with a given font.\n  *\n  * This returns nothing, but modifies the buffer.\n  *\n  * @param {object} font: A font returned from `createFont`\n  * @param {object} buffer: A buffer returned from `createBuffer` and suitably\n  *   prepared.\n  * @param {object} features: A string of comma-separated OpenType features to apply.\n  */\n  function shape(font, buffer, features) {\n    var featuresPtr = 0;\n    var featuresLen = 0;\n    if (features) {\n      features = features.split(\",\");\n      featuresPtr = exports.malloc(16 * features.length);\n      features.forEach(function (feature, i) {\n        var str = _string_to_ascii_ptr(feature);\n        if (exports.hb_feature_from_string(str.ptr, -1, featuresPtr + featuresLen * 16))\n          featuresLen++;\n        str.free();\n      });\n    }\n\n    exports.hb_shape(font.ptr, buffer.ptr, featuresPtr, featuresLen);\n    if (featuresPtr)\n      exports.free(featuresPtr);\n  }\n\n  /**\n  * Shape a buffer with a given font, returning a JSON trace of the shaping process.\n  *\n  * This function supports \"partial shaping\", where the shaping process is\n  * terminated after a given lookup ID is reached. If the user requests the function\n  * to terminate shaping after an ID in the GSUB phase, GPOS table lookups will be\n  * processed as normal.\n  *\n  * @param {object} font: A font returned from `createFont`\n  * @param {object} buffer: A buffer returned from `createBuffer` and suitably\n  *   prepared.\n  * @param {object} features: A string of comma-separated OpenType features to apply.\n  * @param {number} stop_at: A lookup ID at which to terminate shaping.\n  * @param {number} stop_phase: Either 0 (don't terminate shaping), 1 (`stop_at`\n      refers to a lookup ID in the GSUB table), 2 (`stop_at` refers to a lookup\n      ID in the GPOS table).\n  */\n  function shapeWithTrace(font, buffer, features, stop_at, stop_phase) {\n    var trace = [];\n    var currentPhase = TRACE_PHASE_DONT_STOP;\n    var stopping = false;\n    var failure = false;\n\n    buffer.setMessageFunc((buffer, font, message) => {\n      if (message.startsWith(\"start table GSUB\"))\n        currentPhase = TRACE_PHASE_GSUB;\n      else if (message.startsWith(\"start table GPOS\"))\n        currentPhase = TRACE_PHASE_GPOS;\n\n      if (currentPhase != stop_phase)\n        stopping = false;\n\n      if (failure)\n        return true;\n\n      if (stop_phase != TRACE_PHASE_DONT_STOP && currentPhase == stop_phase && message.startsWith(\"end lookup \" + stop_at))\n        stopping = true;\n\n      if (stopping)\n        return false;\n\n      var traceBuf = buffer.serialize(font, 0, null, \"JSON\", [\"NO_GLYPH_NAMES\"]);\n\n      trace.push({\n        m: message,\n        t: JSON.parse(traceBuf),\n        glyphs: buffer.getContentType() == \"GLYPHS\",\n      });\n\n      return true;\n    });\n\n    shape(font, buffer, features, 0);\n    return trace;\n  }\n\n  function version() {\n    var sp = stackSave();\n    var versionPtr = stackAlloc(12);\n    exports.hb_version(versionPtr, versionPtr + 4, versionPtr + 8);\n    var version = {\n      major: Module.HEAPU32[versionPtr / 4],\n      minor: Module.HEAPU32[(versionPtr + 4) / 4],\n      micro: Module.HEAPU32[(versionPtr + 8) / 4],\n    };\n    stackRestore(sp);\n    return version;\n  }\n\n  function version_string() {\n    var versionPtr = exports.hb_version_string();\n    return _utf8_ptr_to_string(versionPtr);\n  }\n\n  /**\n   * Convert an OpenType script tag to HarfBuzz script.\n   * @param {string} tag: The tag to convert.\n   * @returns {string}: The script.\n   */\n  function otTagToScript(tag) {\n    var hbTag = _hb_tag(tag);\n    var script = exports.hb_ot_tag_to_script(hbTag);\n    return _hb_untag(script);\n  }\n\n  /**\n   * Convert an OpenType language tag to HarfBuzz language.\n   * @param {string} tag: The tag to convert.\n   * @returns {string}: The language.\n   */\n  function otTagToLanguage(tag) {\n    var hbTag = _hb_tag(tag);\n    var language = exports.hb_ot_tag_to_language(hbTag);\n    return _language_to_string(language);\n  }\n\n  return {\n    createBlob: createBlob,\n    createFace: createFace,\n    createFont: createFont,\n    createFontFuncs: createFontFuncs,\n    createBuffer: createBuffer,\n    shape: shape,\n    shapeWithTrace: shapeWithTrace,\n    version: version,\n    version_string: version_string,\n    otTagToScript: otTagToScript,\n    otTagToLanguage: otTagToLanguage,\n  };\n}\n\n// Should be replaced with something more reliable\ntry {\n  module.exports = hbjs;\n} catch (e) { }\n","var createHarfBuzz=(()=>{var _scriptName=typeof document!=\"undefined\"?document.currentScript?.src:undefined;return async function(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=typeof window==\"object\";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!=\"undefined\";var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&process.versions?.node&&process.type!=\"renderer\";var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};if(typeof __filename!=\"undefined\"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=null;scriptDirectory=\"\";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:\"utf8\");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\\\/g,\"/\")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(\".\",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:\"same-origin\"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+\" : \"+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBase64=\"AGFzbQEAAAABtgM1YAF/AGADf39/AX9gAn9/AX9gAX8Bf2ACf38AYAN/f38AYAR/f39/AX9gBH9/f38AYAV/f39/fwF/YAZ/f39/f38Bf2AHf39/f39/fwF/YAZ/f399fX8AYAV/f39/fwBgCH9/f39/f39/AGAIf39/f39/f38Bf2AKf39/fX19fX19fwBgCH9/f319fX1/AGAAAX9gCn9/f39/f39/f38Bf2ADf319AGAJf39/f39/f39/AX9gAABgBX9/f319AGABfAF9YAV/fX18fABgA398fABgBH9/f38BfWAFf39/f38BfWAGf39/f39/AGAMf398fHx8f3x8fHx/AGACfH8BfGAHf39/f39/fwBgCX99fXx8fHx8fABgB398fHx8fHwAYAl/f399fX19fX0AYAd/f399fX19AGACfH8BfWACfn8Bf2ADfn5/AGACfX8Bf2ABfQF9YAt/f39/f39/f39/fwBgA39/fwF9YAR/f319AGABfwF8YAZ/f39/f38BfWACf38BfWAEf35/fwF/YAR/f39/AXxgBn9+f39/fwF/YAJ/fAF/YAJ/fABgCX9/fX19fX19fwACjwEFFndhc2lfc25hcHNob3RfcHJldmlldzEJcHJvY19leGl0AAADZW52I19lbXNjcmlwdGVuX3J1bnRpbWVfa2VlcGFsaXZlX2NsZWFyABUDZW52CV9hYm9ydF9qcwAVA2Vudg1fc2V0aXRpbWVyX2pzADIDZW52FmVtc2NyaXB0ZW5fcmVzaXplX2hlYXAAAwOYBpYGAAAGBgYCAAEHAgUBBAMEAAIWAwYCAwUFBQwBBgMgIQwMAwACAQUDAyIDAwUCBAUDIwEXFwYFAQUDAQICAAMABAICAgMBGAYZBQUGAgECAwICEwAEAgMBBQEFBAMDGgUEByQlBQgDAgIBGgMBBwAABAIFAwIEAAQAAAMCAgIHAQQEBAQCAwkDAhsEBQMBAQIEAgQBAgABCQUBBwIDAwIMAwADCAIDAQcHBQUHAAcDEQAFAwAEAQAcAggUFAgCAgABAAAdAR0CDQUCDR4FBAACAiYFAgYEAgQDAycDAwQCAAYCBAIGBggKAAMMBAIBBAIEBQIGAwYHAQMDAwMBAQMACgUEBQQEAAACAQYGHAgCBQABDQEGCB8fCQgBBwABARgFGQUFAgMTEgMDBgQDCQMBAgEAAwQCAQcIBwEHAh4FAwAIAg4HAgQFBAQIAAQoBAIDEwUFAAMEBQIABgMEAwEEBgABAQYBAQIBAgMFKQECCAcGGwgJAgQFAgAICQYBCgECDAkSAQIGCQoJBAQBAQQKAgMBAgIBAQICBgYDAwECAgEBAQIAAQQBAgYFAQMEAwQEAgUBBAAHAAAHBwUDAgIHBwcHBwcHBxECAQEEBAEAAgUCAgUFBAMAAAAAKgAAAQABAQEHBgQAAAMRAwMCAAEAAAMGBgEJCQYrAAcLBgYBCAICAgIDCwACAywAAAEWAwABBAUtBgIAAwEBAAUECgIBLgQBBAACBC8CBQoAAAIEBAEAAAAwAAMxAgAAAAAzAQcGAwYDAwARAgcFBQEBAAUAAwEBAQEBAAUGBgMAAQEBAAUFBQMAAAcFBgMAAQEAAgUBAQEAAgYIAgICAgIDAwEBAQEBAQEBAgIOAQEBAQEBAQEBAQEBAQEBCgkIBwgCDwUDEAAJCQgJDQsGCQ4IAwcLBwYGBgICAgcHBwcHBwcBAQEEAwgBAgERBQIDBwIMDAwAAwIDAAQEBAQEAwABAQEICAEBAQEUBw8QCwsOCQkJCggJCQYGCQgGBg4JCggSEgkNDQYGDggHDxALCw8QAgMABw8QEQMAFQQFAXAAuwEFBgEBBICAAgYIAX8BQeCJCgsHmhZmBm1lbW9yeQIAEV9fd2FzbV9jYWxsX2N0b3JzAJoGDmhiX2Jsb2JfY3JlYXRlAIMED2hiX2Jsb2JfZGVzdHJveQAFEmhiX2Jsb2JfZ2V0X2xlbmd0aACSBhBoYl9ibG9iX2dldF9kYXRhAJEGE2hiX2J1ZmZlcl9zZXJpYWxpemUA6QUQaGJfYnVmZmVyX2NyZWF0ZQDtAw9oYl9idWZmZXJfcmVzZXQA3wUTaGJfYnVmZmVyX3JlZmVyZW5jZQDsAxFoYl9idWZmZXJfZGVzdHJveQDrAxpoYl9idWZmZXJfZ2V0X2NvbnRlbnRfdHlwZQDeBRdoYl9idWZmZXJfc2V0X2RpcmVjdGlvbgDdBRRoYl9idWZmZXJfc2V0X3NjcmlwdADcBRZoYl9idWZmZXJfc2V0X2xhbmd1YWdlANsFE2hiX2J1ZmZlcl9zZXRfZmxhZ3MA2gUbaGJfYnVmZmVyX3NldF9jbHVzdGVyX2xldmVsANkFGGhiX2J1ZmZlcl9jbGVhcl9jb250ZW50cwDYBRRoYl9idWZmZXJfZ2V0X2xlbmd0aADXBRloYl9idWZmZXJfZ2V0X2dseXBoX2luZm9zANYFHWhiX2J1ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zAMEBHWhiX2dseXBoX2luZm9fZ2V0X2dseXBoX2ZsYWdzANUFImhiX2J1ZmZlcl9ndWVzc19zZWdtZW50X3Byb3BlcnRpZXMA1AUSaGJfYnVmZmVyX2FkZF91dGY4ANMFE2hiX2J1ZmZlcl9hZGRfdXRmMTYA0gUYaGJfYnVmZmVyX2FkZF9jb2RlcG9pbnRzANEFGmhiX2J1ZmZlcl9zZXRfbWVzc2FnZV9mdW5jAM8FF2hiX2xhbmd1YWdlX2Zyb21fc3RyaW5nAFIVaGJfbGFuZ3VhZ2VfdG9fc3RyaW5nAM4FFWhiX3NjcmlwdF9mcm9tX3N0cmluZwDNBQpoYl92ZXJzaW9uAMwFEWhiX3ZlcnNpb25fc3RyaW5nAMsFFmhiX2ZlYXR1cmVfZnJvbV9zdHJpbmcAygUGbWFsbG9jABIEZnJlZQAGHmhiX2RyYXdfZnVuY3Nfc2V0X21vdmVfdG9fZnVuYwCxAR5oYl9kcmF3X2Z1bmNzX3NldF9saW5lX3RvX2Z1bmMArwEjaGJfZHJhd19mdW5jc19zZXRfcXVhZHJhdGljX3RvX2Z1bmMArAEfaGJfZHJhd19mdW5jc19zZXRfY3ViaWNfdG9fZnVuYwCrASFoYl9kcmF3X2Z1bmNzX3NldF9jbG9zZV9wYXRoX2Z1bmMA+gEUaGJfZHJhd19mdW5jc19jcmVhdGUAswEVaGJfZHJhd19mdW5jc19kZXN0cm95AKUBDmhiX2ZhY2VfY3JlYXRlAMkFD2hiX2ZhY2VfZGVzdHJveQDhAxdoYl9mYWNlX3JlZmVyZW5jZV90YWJsZQAZEGhiX2ZhY2VfZ2V0X3VwZW0AxgUYaGJfZmFjZV9jb2xsZWN0X3VuaWNvZGVzAMUFFGhiX2ZvbnRfZnVuY3NfY3JlYXRlAMsDFWhiX2ZvbnRfZnVuY3NfZGVzdHJveQC0ASVoYl9mb250X2Z1bmNzX3NldF9mb250X2hfZXh0ZW50c19mdW5jAMoDJWhiX2ZvbnRfZnVuY3Nfc2V0X2ZvbnRfdl9leHRlbnRzX2Z1bmMAwQUkaGJfZm9udF9mdW5jc19zZXRfbm9taW5hbF9nbHlwaF9mdW5jAMkDJWhiX2ZvbnRfZnVuY3Nfc2V0X25vbWluYWxfZ2x5cGhzX2Z1bmMAyAMmaGJfZm9udF9mdW5jc19zZXRfdmFyaWF0aW9uX2dseXBoX2Z1bmMAxwMmaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfaF9hZHZhbmNlX2Z1bmMAwAUmaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfdl9hZHZhbmNlX2Z1bmMAvwUnaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfaF9hZHZhbmNlc19mdW5jAMYDJ2hiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX3ZfYWR2YW5jZXNfZnVuYwC+BSVoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX29yaWdpbl9mdW5jAL0FJWhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX3Zfb3JpZ2luX2Z1bmMAvAUmaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfaF9rZXJuaW5nX2Z1bmMAuwUkaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZXh0ZW50c19mdW5jAMUDIWhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX25hbWVfZnVuYwDEAyZoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9mcm9tX25hbWVfZnVuYwDDAxVoYl9mb250X2dldF9oX2V4dGVudHMAugUVaGJfZm9udF9nZXRfdl9leHRlbnRzALkFG2hiX2ZvbnRfZ2V0X2dseXBoX2hfYWR2YW5jZQDBAxtoYl9mb250X2dldF9nbHlwaF92X2FkdmFuY2UAuAUaaGJfZm9udF9nZXRfZ2x5cGhfaF9vcmlnaW4AtwUaaGJfZm9udF9nZXRfZ2x5cGhfdl9vcmlnaW4AtgUZaGJfZm9udF9nZXRfZ2x5cGhfZXh0ZW50cwCeAhtoYl9mb250X2dldF9nbHlwaF9mcm9tX25hbWUAtQUSaGJfZm9udF9kcmF3X2dseXBoALQFF2hiX2ZvbnRfZ2x5cGhfdG9fc3RyaW5nALIFDmhiX2ZvbnRfY3JlYXRlALEFFmhiX2ZvbnRfc2V0X3ZhcmlhdGlvbnMAvwMXaGJfZm9udF9jcmVhdGVfc3ViX2ZvbnQApAURaGJfZm9udF9yZWZlcmVuY2UA7AMPaGJfZm9udF9kZXN0cm95AKgDEWhiX2ZvbnRfc2V0X2Z1bmNzALoDEWhiX2ZvbnRfc2V0X3NjYWxlAKMFHGhiX290X2xheW91dF9nZXRfZ2x5cGhfY2xhc3MAoQUiaGJfb3RfbGF5b3V0X3RhYmxlX2dldF9zY3JpcHRfdGFncwCgBSNoYl9vdF9sYXlvdXRfdGFibGVfZ2V0X2ZlYXR1cmVfdGFncwCeBSVoYl9vdF9sYXlvdXRfc2NyaXB0X2dldF9sYW5ndWFnZV90YWdzAJ0FJmhiX290X2xheW91dF9sYW5ndWFnZV9nZXRfZmVhdHVyZV90YWdzAJwFIWhiX290X2xheW91dF9mZWF0dXJlX2dldF9uYW1lX2lkcwCMBRVoYl9vdF9uYW1lX2xpc3RfbmFtZXMA/AQUaGJfb3RfbmFtZV9nZXRfdXRmMTYA+gQNaGJfc2V0X2NyZWF0ZQDKBA5oYl9zZXRfZGVzdHJveQDJBBNoYl9vdF90YWdfdG9fc2NyaXB0AMgEFWhiX290X3RhZ190b19sYW5ndWFnZQDHBBhoYl9vdF92YXJfZ2V0X2F4aXNfaW5mb3MAxgQVaGJfc2V0X2dldF9wb3B1bGF0aW9uAMUEEGhiX3NldF9uZXh0X21hbnkAxAQIaGJfc2hhcGUAwwQZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAE19lbXNjcmlwdGVuX3RpbWVvdXQAwQQZX2Vtc2NyaXB0ZW5fc3RhY2tfcmVzdG9yZQCZBhdfZW1zY3JpcHRlbl9zdGFja19hbGxvYwCYBhxlbXNjcmlwdGVuX3N0YWNrX2dldF9jdXJyZW50AJcGCfsCAQBBAQu6AbMFrAWlBaIFnwWJBIkElgaVBpQGwwH/A/8DkAaPBo4GjQaMBosGigboBecF5gXlBeQF4wXjA8gFxwWTBsQFwwXCBfwF+wX6BYgG+QX4BfcFhQaEBvYF9QW9AfQF8gXxBbAFrwWuBa0FqwWqBakFqAWnBaYFrAOYBZcFlgWVBZQFkwWbBZoFmQWSBZEFkAWPBY4FjQXCBIkFiAWHBYYFhQWEBYMFggX7BPYE9QT0BPIE8ATvBOIE4QTgBNkE2ATXBNYE1QTQBM8E8gOBBYAF/wT+BP0EywTkAvkE+ASLBYoF0AXOAvID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BkEANgIACyABKAIAIQMgASgCFEUEQEG4gwZCADcDAEGwgwZCADcDAEHAgwZBADYCAAsgAiADSQRAIAAgAyACaxDSAg8LIAIgA0sEQCAAIAIgA2sQ0AILC5MBAQJ/AkAgACgCICICRQRAIAAoAgQhASAAKAIIIQIMAQsgACACKAIMIgE2AgQgACABIAIoAhBqIgI2AggLIAAgAiABayIBNgIMIABBADYCGCAAQQA2AgAgACABQf///x9LBH9B/////wMFQf////8DQYCAASABQQZ0IgEgAUGAgAFNGyIBIAFB/////wNPGws2AhALCwAgACABQQEQvgILLAEBfyAAKAIQIQUgACABIAIgAyAEIAAoAiAiAAR/IAAoAgQFQQALIAURCwALEAAgACgCIARAIAAQQwsgAAsmAQF/IwBBEGsiBCQAIAQgAzYCDCAAIAEgAiADEIoDIARBEGokAAs2AQJ/QdC9ASECAkAgAUUNACAAKAIYIgNFDQAgACABIAAoAhwgAxEBACICDQBB0L0BIQILIAILmwEBAn8gAC0AQUEBRgRAIAAoAkwhAQJAIAAoAlggACgCVEYEQCABIAAoAkRGDQELIAAgAUEBahBARQRAQQAPCyAAKAJYIAAoAkxBFGxqIgEgACgCVCAAKAJEQRRsaiICKQIANwIAIAEgAigCEDYCECABIAIpAgg3AgggACgCTCEBCyAAIAFBAWo2AkwLIAAgACgCREEBajYCREEBC5sEAQh/IwBBEGsiCCQAAkAgAiABa0ECSQ0AIAAoAhRBAk8EQCAAIAEgAhAcDAELIAAgACgCuAEgASACa2oiAzYCuAEgA0EASARAIABBADoAQAsgACgCVCIGIAFBFGxqIgdBCGohBCABIQMDQAJAIAggBCgCACIENgIMIAIgA0EBaiIDTQRAIAQgBiACQRRsakEMaygCAEYNASAAKAJIIgMgAiACIANJGyEDA0AgAiADRgRAIAMhAgwDCyAGIAJBFGxqIgVBDGsoAgAgBSgCCEcNAiACQQFqIQIMAAsABSAGIANBFGxqIgVBCGogCEEMaiAEIAUoAghLGyEEDAILAAsLIAAoAkQhBQJAIAQgBygCCEYNACAFIAEgASAFSxshAwNAIAEgBU0EQCADIQEMAgsgBiABQRRsaiIHQQxrKAIAIAcoAghHDQEgAUEBayEBDAAL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IAKtQhR+IgdCIIinDQAgACgCXCAHpyIBECgiA0UgACgCVCABECgiAUVyRQRAIAAgAzYCXCAAIAE2AlQgACABIAMgBCAFRhs2AlggAC0AQEUNAyAAIAI2AlBBAQ8LIABBADoAQCADBEAgACADNgJcCyABRQ0BIAAgATYCVCAAIAEgACgCXCAEIAVGGzYCWEEADwsgAEEAOgBACyAAIABB1ABB3AAgBCAFRhtqKAIANgJYCyAGC10BA38CQCAAKAIIIgFFDQADQCABRQ0BIAAoAgwgAUEMbGoiAkEEaygCACEDIAJBCGsoAgAgACABQQFrIgE2AgggA0UNACADEQAAIAAoAgghAQwACwALIABBBGoQCwtpAQV/Qf//AyEBAkAgACgCCCICQQFqIgMgACgCBCIESw0AIAAoAgAiBSACai0AACEBIAAgAzYCCCABQQxHDQBB//8DIQEgAkECaiICIARLDQAgAyAFai0AACAAIAI2AghBgAJyIQELIAELHgAgACgCIBAFIABBADYCICAAQQA2AgwgAEIANwIECy4AIAAgAUEw/AoAACAAIAEtADA6ADAgASABKAIAIAEoAgRrNgIAIAFBCGoQzwILDAAgACABQeAAELoCCyQBAX8jAEEQayICJAAgACABIAJBDGpBABAgIAJBEGokAEEARwugAQECfwJAAkACQCAALwAAIgNBCHQgA0EIdnJB//8DcUEBaw4CAAECCyABIAAvAAIiAUEIdCABQQh2ckH//wNxayIBIAAvAAQiAkEIdCACQQh2ckH//wNxTwR/QdC9AQUgACABQQF0akEGagsvAAAiAEEIdCAAQQh2ciECDAELIABBAmogARC5Ai8ABCIAQQh0IABBCHZyIQILIAJB//8DcQvCAwEGfyMAQTBrIgEkACAAQRhrIQYDQAJAAkAgACgCACICDQAgBigCACICRQRAQdC9ASECDAELIAFCADcCCCABQgA3AhggAUIANwIQIAFBADYCKCABQQE7ASwgAkGy3sz6BBAZIgIoAgAiBARAIAIgBEEBajYCAAsgAUEAOgAgIAEgAjYCJCABQQRqEBQCQCABKAIIIgNFBEAgASgCJBAFIAFCADcCDCABQQA2AiQMAQsCQCABKAIMIANrIgRBzgBJDQAgASgCECEFAkAgAy8AACIDRQ0AIAVBzgBJIARBzgBrQQhJcg0BIANBCHQgA0EIdnJB//8DcSIDQQJJDQAgBUHWAEkgBEHWAGtBCklyDQEgA0EFSQ0AIAVB4ABJIARB4ABrQQRJcg0BCyABKAIkEAUgAUEANgIkIAFBADYCECABQgA3AgggAi0ABEUNASACQQA6AAQMAQsgASgCJBAFIAFBADYCJCABQQA2AhAgAUIANwIIIAIQBUHQvQEhAgsgAUEEahAXGiAAKAIADQEgACACNgIACyACKAIQIQAgAigCDCECIAFBMGokAEHQvQEgAiAAQc4ASRsPCyACECcMAAsAC2wBAn8gACgCgAEiAygCKCEEIAAgACgChAEgASADKAIMIgMEfyADKAIUBUEACyAEEQYAIQECQCACRQ0AIAAoAjQiAkUNACAALQAwQQFxDQBBACACayACIAAoAhxBAEgbQQAgARsgAWohAQsgAQtQAQN/IABBCGohBSAAKAIEIQYgACgCACEHIAAoAghFBEAgByAGIAUQDwsgByAGIAUgASADtpQiASACIAS2lCICEBYgACACOAIYIAAgATgCFAsiAgF/AX4gAq0gA61+IgVCIIhQBH8gACABIAWnEAwFQQALC4gBAgR/An0gACgCCCIDBEAgAiADKwMIoCECIAEgAysDAKAhAQsgACgCBCIDQQhqIQQgAygCBCEFIAMoAgAhBiAAKAIAIgAqAkghByAAKgJEIQggAygCCEUEQCAGIAUgBBAPCyAGIAUgBCAIIAG2lCIIIAcgAraUIgcQFiADIAc4AhggAyAIOAIUCz8AIAEtAABFBEAgAUEBOgAAIAEgAEGoImoQeQsgACACKQMANwOoIiAAQbAiaiACKQMINwMAIAEgAEGoImoQeQtFACABLQAARQRAIAFBAToAACABQQhqIABBqCJqEHsLIAAgAikDADcDqCIgAEGwImogAikDCDcDACABQQhqIABBqCJqEHsL5wEBBH8gACABIAIQlQIiBwRAIAAgACgCRCIEIAEgBGoQGwJAIAAoAkQiBCAAKAJISQRAIAAoAlQgBEEUbGohBiAAKAJMIQQgACgCWCEFDAELIAAoAlgiBSAAKAJMIgRBAWsiBkEAIAQgBk8bQRRsaiEGCyAFIARBFGxqIQRBACEFA0AgAiAFRgRAIAAgACgCRCABajYCRCAAIAAoAkwgAmo2AkwFIAQgBikCADcCACAEIAYo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BhsNCiAEQQA6AMggIA5BAEGMIPwLACAEQQA2AsAgIAQgBjYCvCAgBCADNgK4ICACQQA2AhAgAkIANwIIIAJCADcCACACQdC9ATYCFCAEQbggaiACELEERQ0KIAIgAyACKAIQIAEQlwE2AhQMCwUCfyABKALQASACTQRAQcCDBkIANwMAQbiDBkIANwMAQbCDBkIANwMAQbCDBgwBCyABKALUASACQRhsagsiA0IANwIAIANB0L0BNgIUIANBADYCECADQgA3AgggAkEBaiECDAELAAsACyADIAEoAlwiBk0NAgsgASAGQX9zNgJcC0G4gwZCADcDAEGwgwZCADcDAEGwgwYhAgwCCyABKAJgIQILIAEgAkEBajYCYCABKAJkIAJBBHRqIgIgFCATQX9zajYCDCACQQA6AAggAkKAgICA8P8/NwIACyACIAU2AgQgAiAHKAIAIgMgBCgCuCBqNgIAIAIgDyADayICQQAgAiAPTRsiAiANIANrIgMgAiADSRs6AAggByANNgIACyAEKALAICICIAQoArwgIgNLDQEgBC0AyCBBAXFFDQALCyABELAECyABQQA2AuABIAAoAgANAgsgACABNgIACyAEQeDAAGokACABDwsgARCvBAwACwALWgECf0HQvQEhAiAAEP4BIgAvAAAiA0EIdCADQQh2ckH//wNxIAFLBH8gACABQQZsakECagVB0L0BCy8ABCIBBH8gACABQQh0IAFBCHZyQf//A3FqBUHQvQELC2UBAX8gAUH//wNHBH8gABCpASIALwAAIgJBCHQgAkEIdnJB//8DcSABTQR/QdC9AQUgACABQQZsakECagsoAAAiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnIFQQALC04BAX8CQCABKAIMIAAgASgCBGtJDQAgASgCCCAAa0ECSQ0AIAAvAAAiAEUEQEEBDwsgAiAAQQh0IABBCHZyQf//A3FqIAEQlwMhAwsgAwv6AQEIfyAALwAGIgRBCHQgBEEIdnJB//8DcSEIIAAvAAgiBEEIdCAEQQh2ckH//wNxIQQgAEEMaiEJA0AgBEEBayEKA0AgBCAGTARAQwAAAAAPCyAJIAYgCmpBAXYiByAIbGoiCygAACIFQRh0IAVBgP4DcUEIdHIgBUEIdkGA/gNxIAVBGHZyciIFIAFLBEAg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AQsgAwRAIAIgAxEAAAtBACEDCwJAIAAoAiQiAkUNACACKAIEIgVFDQAgACgCICICBH8gAigCBAVBAAsgBREAAAsgACAEIAMQkgFFDQAgACABQQcgARs2AhAgACgCICIBBEAgASAENgIECyAAKAIkIgBFDQAgACADNgIECwunAgIDfwV9IAAoAhgQYSEBIAAgACgCHCICsiIFIAGzIgSVOAJEIAAgACgCICIBsiIGIASVOAJIIABCAEEAIAFrrUIQhn0gAa1CEIYgAUEASBu0IASV/AQ3A1ggAEIAQQAgAmutQhCGfSACrUIQhiACQQBIG7QgBJX8BDcDUEMAAAAAIQRBASEDIAAgACoCKCIHQwAAAABcIAAqAiwiCEMAAAAAXHIEf0EBBSAAKgI8QwAAAABcCzoAJCAAIAggASABQR91IgNzIANrs5RDAAAAP5KO/AA2AjggACAHIAIgAkEfdSIDcyADa7OUQwAAAD+SjvwANgI0IAAgAQR9IAAqAjwgBZQgBpUFQwAAAAALOAJAIABBkAFqELwDIAAgACgCDEEBajYCDAujAQECfwJAIAAtAARFBEAgA0UNASACIAMRAAAPCwJAIAEEQCACIQQMAQsgAwRAIAIgAxEAAAtBACEDCwJAIAAoAiQiAkUNACACKAIAIgVFDQAgACgCICICBH8gAigCAAVBAAsgBREAAAsgACAEIAMQkgFFDQAgACABQQYgARs2AgwgACgCICIBBEAgASAENgIACyAAKAIkIgBFDQAgACADNgIACwvuBAIIfwF+IwBB0ABrIgEkACAAQTRrIQgDQAJAAkAgACgCACIDDQAgCCgCACIDRQRAQdC9ASEDDAELIAFCADcCECABQgA3AiAgAUIANwIYIAFBADYCMCABQQE7ATQgA0HywtmzBhAZIgMoAgAiAgRAIAMgAkEBajYCAAsgAUEAOgAoIAEgAzYCLCABQQxqEBQCQCABKAIQIgJFBEAgASgCLBAFIAFCADcCFCABQQA2AiwMAQsCQAJAIAEoAhQiByACayIEQQRJDQAgASgCGCEFIAIvAABBgAJHIARBEElyDQAgAi8ACkGAKEcNACACLwAIIgRBCHQgBEEIdnJB//8DcUECdEEEaiACLwAOIgRBCHQgBEEIdnJB//8DcUsNACABQcQAaiACEHQgATUCSEIUfiIJQiCIpw0A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BSAGDQFBAAsgAiADbBAoIgENAQwCCyACIANsEBIiAUUNASAAKAIEIANsIgVFIAVFcg0AIAEgBiAF/AoAAAsgACABNgIIQQEMAQsgAiAAKAIAIgFNDQIgAUF/cyECQQALIQYgACACNgIACyAGDwtBAQs8ACAALQAQQcAAcUUgAkF/RyACIAFrQf8BS3FyRQRAIABBAiABIAIgACgCSCIAIAAgAksbQQAgAxC7AQsLSQEBfwJAIAEoAgwgACABKAIEa0kNACABKAIIIABrQQJJDQAgASAAQQJqIAAvAAAiAEEIdCAAQQh2ckH//wNxIAJ0EAwhAwsgAwtDAQJ/IAAoAgQiBCABayEFIAAoAgggBCACbGohBANAIAUEQCAEIANrEAsgBCACayEEIAVBAWshBQwBCwsgACABNgIECy0AIAFBgH9xQYC/A0YgAUH/AE1yRQRAQbD/BUEZNgIAQX8PCyAAIAE6AABBAQt/AgF/AX4gAL0iA0I0iKdB/w9xIgJB/w9HBHwgAkUEQCABIABEAAAAAAAAAABhBH9BAAUgAEQAAAAAAADwQ6IgARDBAiEAIAEoAgBBQGoLNgIAIAAPCyABIAJB/gdrNgIAIANC/////////4eAf4NCgICAgICAgPA/hL8FIAALC+EHAgZ+A38CQAJAAkACQAJAAkACQAJAAkACQAJAIAFBCWsOEgAICQoICQECAwQKCQoKCAkFBgcLIAIgAigCACIBQQRqNgIAIAAgASgCADYCAA8LIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LIAIgAigCAEEHakF4cSIBQQhqNgIAIAAgASsDADkDAA8LIAIgAigCAEEHakF4cSIBQRBqNgIAIAAgASkDACEDIAEpAwghByMAQSBrIgAkACAHQv///////z+DIQQCfiAHQjCIQv//AYMiBaciAkGB+ABrQf0PTQRAIARCBIYgA0I8iIQhBCACQYD4AGutIQUCQCADQv//////////D4MiA0KBgICAgICAgAhaBEAgBEIBfCEEDAELIANCgICAgICAgIAIUg0AIARCAYMgBHwhBAtCACAEIARC////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ACABKAIEa0kNACABKAIIIABrQQRJDQAgACgAACIARQRAQQEPCyACIABBGHQgAEGA/gNxQQh0ciAAQQh2QYD+A3EgAEEYdnJyaiABEIcEIQMLIAMLLAEBfyAAKAIMIQUgACABIAIgAyAEIAAoAiAiAAR/IAAoAgAFQQALIAURCwALowMBB38jAEEwayIBJAAgAEEIayEEA0ACQAJAIAAoAgAiAg0AIAQoAgAiAkUEQEHQvQEhAgwBCyABQgA3AgggAUIANwIYIAFCADcCECABQQA2AiggAUEBOwEsIAJB8PCF6wYQGSICKAIAIgMEQCACIANBAWo2AgALIAFBADoAICABIAI2AiQgAUEEahAUAkAgASgCCCIDRQRAIAEoAiQQBSABQgA3AgwgAUEANgIkDAELAkACQCABKAIMIANrIgVBBkkNACABKAIQIQYCfwJAAkAgAy8AACIHQQh0IAdBCHZyQf//A3EOAgEAAwsgBkEFSyAFQQZrQRlLcQwBCyADLwACQdAARgsgASgCJBAFIAFBADYCJCABQQA2AhAgAUIANwIIRQ0BIAItAARBAUcNAiACQQA6AAQMAgsgASgCJBAFIAFBADYCJCABQQA2AhAgAUIANwIICyACEAVB0L0BIQILIAFBBGoQFxogACgCAA0BIAAgAjYCAAsgAigCECEAIAIoAgwhAiABQTBqJABB0L0BIAIgAEEGSRsPCyACECcMAAsACx8BAX8gACgCHCIBBEAgACgCGCABEQAAIABCADcCGAsLWQECfyAAIAFBACABQQBKGyIBEIABIgQEQAJAIAJFIAEgACgCBCICTXINACABIAJrQQJ0IgNFIANFcg0AIAAoAgggAkECdGpBACAD/AsACyAAIAE2AgQLIAQLmgEBA38CQCAAKAIAIgQgAUsNACABIAQgACgCBGoiBEsEQAwBCyAEIAFrIgRBBEkNACABLwAAIgJBCHQgAkEIdnIiAkH//wNxIQNBAAJ/QQIgAkEIcQ0AGkEEIANBwABxDQAaIANBBHZBCHELQQhBBiADQQFxG2oiAiACIARLIgMbIQJBACABIAMbIQMLIAAgAjYCECAAIAM2AgwLmgEBBH0CQAJAIAAqAgBDAACAP1wNACAAKgIEQwAAAABcDQAgACoCCEMAAAAAXA0AIAAqAgxDAACAP1sNAQsgASACQQxsaiEC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IAcgAEEUbGogBjoADyAAQQFqIQAMAQsACwALIAEgAyABIANLGyEEIAVBBHRBAnIhBiABIQADQCAAIARGBEBBASAFQQFqIgAgAEEQRhshBSADIgRBAWshAwwQBSAHIABBFGxqIAY6AA8gAEEBaiEADAELAAsACyABIAMgASADSxshBCAFQQR0QQNyIQYgASEAA0AgACAERgRAQQEgBUEBaiIAIABBEEYbIQUgAyIEQQFrIQMMDwUgByAAQRRsaiAGOgAPIABBAWohAAwBCwALAAsgASADIAEgA0sbIQQgBUEEdEEEciEGIAEhAANAIAAgBEYEQCACIAIoArABQSByNgKwAUEBIAVBAWoiACAAQRBGGyEFIAMiBEEBayEDDA4FIAcgAEEUbGogBjoADyAAQQFqIQAMAQsACwALIAEgAyABIANLGyEEIAVBBHRBBXIhBiABIQADQCAAIARGBEBBASAFQQFqIgAgAEEQRhshBSADIgRBAWshAwwNBSAHIABBFGxqIAY6AA8gAEEBaiEADAELAAsACyABIAQgASAESxshAyAFQQR0IQYgASEAA0AgACADRgRAQQEgBUEBaiIAIABBEEYbIQUgBEEBayEDDAwFIAcgAEEUbGogBjoADyAAQQFqIQAMAQsACwALIAEgBCABIARLGyEDIAVBBHRBAXIhBiABIQADQCAAIANGBEBBASAFQQFqIgAgAEEQRhshBSAEQQFrIQMMCwUgByAAQRRsaiAGOgAPIABBAWohAAwBCwALAAsgASAEIAEgBEsbIQMgBUEEdEECciEGIAEhAANAIAAgA0YEQEEBIAVBAWoiACAAQRBGGyEFIARBAWshAwwKBSAHIABBFGxqIAY6AA8gAEEBaiEADAELAAsACyABIAQgASAESxshAyAFQQR0QQNyIQYgASEAA0AgACADRgRAQQEgBUEBaiIAIABBEEYbIQUgBEEBayEDDAkFIAcgAEEUbGogBjoADyAAQQFqIQAMAQsACwALIAEgBCABIARLGyEDIAVBBHRBBHIhBiABIQADQCAAIANGBEAgAiACKAKwAUEgcjYCsAFBASAFQQFqIgAgAEEQRhshBSAEQQFrIQMMCAUgByAAQRRsaiAGOgAPIABBAWohAAwBCwALAAsCQAJAAkACQCAIQQFrDgcACQkJAQIDCQsgASAEIAEgBEsbIQMgBUEEdCEIIAEhAANAIAAgA0YEQEEBIQhBASAFQQFqIgAgAEEQRhshBSAEQQFrIQMMCgUgByAAQRRsaiAIOgAPIABBAWohAAwBCwALAAsgASAEIAEgBEsbIQMgBUEEdEEFciEIIAEhAANAIAAgA0YEQEEBIAVBAWoiACAAQRBGGyEFIARBAWshA0EFIQgMCQUgByAAQRRsaiAIOgAPIABBAWohAAwBCwALAAsgASAEIAEgBEsbIQMgBUEEdEEEciEIIAEhAANAIAAgA0YEQCACIAIoArABQSByNgKwAUEBIAVBAWoiACAAQRBGGyEFIARBAWshA0EGIQgMCAUgByAAQRRsaiAIOgAPIABBAWohAAwBCwALAAsgASAEIAEgBEsbIQMgBUEEdEEFciEIIAEhAANAIAAgA0YEQEEBIAVBAWoiACAAQRBGGyEFIARBAWshAwwGBSAHIABBFGxqIAg6AA8gAEEBaiEADAELAAsAC0EBIQggA0EBaiEEDAQLIANBAWohBEEFIQgMAwsgA0EBaiEEQQYhCAwCCyADQQFqIQQLQQchCAsgAUEAIAktAODXAkEJRxshASADQQFqIgMgCkcNAUEBIQAMAwtBACEAIAIoAkgiCiEBQQAhAyAKRQ0BQQAMAwtBACEADAELC0EBCyEEA38gBEUEQCABIAIoAlQgABAfIQNBASEEDAELIAAgCk8Ef0EABSACIAAgAxAcIAIoAkghASADIQBBACEEDAELCwuoAQECfyAAQRhqIgFB2wAQESABQezGveMGQcEAQQEQDSABQfDajZsGQcEAQQEQDSABQdwAEBFBACEAA0AgAEELRkUEQCABIABBA3QiAigCoJYCIAJBpJYCaigCABBoIAFBABARIABBAWohAAwBCwsgAUHdABARQQshAANAIABBEUZFBEAgASAAQQN0IgIoAqCWAiACQaSWAmooAgAQaCAAQQFqIQAMAQsLC48EAQV/IwBBIGsiAiQAIAFBADYCTCABQQE7AEEgAUEANgJEIAEgASgCVDYCWCABKAJIIQVBACEAA0ACQAJAIAAgBU8NACABKAJUIABBFGxqKAIAIgBB/35xQbMcRwRAIAEQGkUNAQwCCyABIABBGmoQ7wEgASABKAKwAUGAAXI2ArABIAEoAlggASgCTCIEQQFrIgNBACADIARNG0EUbGoiBCAELwEQ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ACAAQRBGGyEFDAsFIAggAEEUbGogCjoADyAAQQFqIQAMAQsACwALIAEgAyABIANLGyEEIAVBBHQhByABIQADQCAAIARGBEBBASAFQQFqIgAgAEEQRhshBSADIgRBAWshAwwKBSAIIABBFGxqIAc6AA8gAEEBaiEADAELAAsACyABIAMgASADSxshBCAFQQR0QQFyIQcgASEAA0AgACAERgRAIAIgAigCsAFBIHI2ArABQQEgBUEBaiIAIABBEEYbIQUgAyIEQQFrIQMMCQUgCCAAQRRsaiAHOgAPIABBAWohAAwBCwALAAsgASADIAEgA0sbIQQgBUEEdEECciEHIAEhAANAIAAgBEYEQEEBIAVBAWoiACAAQRBGGyEFIAMiBEEBayEDDAgFIAggAEEUbGogBzoADyAAQQFqIQAMAQsACwALIAEgBCABIARLGyEDIAVBBHQhByABIQADQCAAIANGBEBBASAFQQFqIgAgAEEQRhshBSAEQQFrIQMMBwUgCCAAQRRsaiAHOgAPIABBAWohAAwBCwALAAsgASAEIAEgBEsbIQMgBUEEdEEBciEHIAEhAANAIAAgA0YEQCACIAIoArABQSByNgKwAUEBIAVBAWoiACAAQRBGGyEFIARBAWshAwwGBSAIIABBFGxqIAc6AA8gAEEBaiEADAELAAsACwJAAkAgCUECaw4CAAEFCyABIAQgASAESxshAyAFQQR0QQFyIQkgASEAA0AgACADRgRAIAIgAigCsAFBIHI2ArABQQEgBUEBaiIAIABBEEYbIQUgBEEBayEDQQIhCQwGBSAIIABBFGxqIAk6AA8gAEEBaiEADAELAAsACyABIAQgASAESxshAyAFQQR0QQJyIQkgASEAA0AgACADRgRAQQEgBUEBaiIAIABBEEYbIQUgBEEBayEDDAQFIAggAEEUbGogCToADyAAQQFqIQAMAQsACwALIANBAWohBEECIQkMAgsgA0EBaiEEC0EDIQkLIAFBACAGQfDmAmotAABBBkcbIQEgA0EBaiIDIAtHDQFBASEADAMLQQAhBiACKAJIIgQhA0EAIQAgBEUNAUEADAMLQQAhAAwBCwtBAQshAQN/IAFFBEAgAyACKAJUIAYQHyEAQQEhAQwBCyAEIAZNBH9BAAUgAiAGIAAQHCACKAJIIQMgACEGQQAhAQwBCwsLogEB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eXBoIGF0ICV1AG11bHRpcGx5aW5nIGdseXBoIGF0ICV1AHBvc2l0aW9uaW5nIGdseXBoIGF0ICV1AGxpZ2F0ZWQgZ2x5cGggYXQgJXUAcG9zaXRpb25lZCBnbHlwaCBhdCAldQByZWN1cnNlZCB0byBsb29rdXAgJXUAc3RhcnQgcHJlcHJvY2Vzcy10ZXh0AGVuZCBwcmVwcm9jZXNzLXRleHQALWhib3QAanktaGFudABweC1oYW50AHV1LWhhbnQAc3AtaGFudABucC1oYW50AHpvLWhhbnQAZG8taGFudABzbi1oYW50AG1uLWhhbnQAYW4taGFudABubS1oYW50AGFrLWhhbnQAemgtaGFudAB1aC1oYW50AGpjLWhhbnQAemgtSGFudABhbHQAd2R0AHBycwBqeS1oYW5zAHB4LWhhbnMAdXUtaGFucwBzcC1oYW5zAG5wLWhhbnMAem8taGFucwBkby1oYW5zAHNuLWhhbnMAbW4taGFucwBhbi1oYW5zAG5tLWhhbnMAYWstaGFucwB6aC1oYW5zAHVoLWhhbnMAdWUtaGFucwBqYy1oYW5zAHpoLUhhbnMAbXMAc3RhcnQgcG9zdHByb2Nlc3MtZ2x5cGhzAGVuZCBwb3N0cHJvY2Vzcy1nbHlwaHMAc3RhcnQgaW5zZXJ0aW5nIGRvdHRlZC1jaXJjbGVzAGVuZCBpbnNlcnRpbmcgZG90dGVkLWNpcmNsZXMAc2tpcHBlZCBpbnNlcnRpbmcgZG90dGVkLWNpcmNsZXMgYmVjYXVzZSB0aGVyZSBpcyBubyBicm9rZW4gc3lsbGFibGVzAHNraXBwZWQgbG9va3VwICV1IGZlYXR1cmUgJyVjJWMlYyVjJyBiZWNhdXNlIG5vIGdseXBoIG1hdGNoZXMAbGlnYXRpbmcgZ2x5cGhzIGF0ICVzAG11bHRpcGxpZWQgZ2x5cGhzIGF0ICVzAHN5cgBtd3IAc3IAbWhyAHN0YXJ0IHJlb3JkZXJpbmcga2htZXIAZW5kIHJlb3JkZXJpbmcga2htZXIAc3RhcnQgcmVvcmRlcgBlbmQgcmVvcmRlcgBiZXIAc3RhcnQgcmVvcmRlcmluZyBteWFubWFyAGVuZCByZW9yZGVyaW5nIG15YW5tYXIAa2FyAGNycAB4d28AcHJvAG5vAGp5LWhhbnQtbW8AcHgtaGFudC1tbwB1dS1oYW50LW1vAHNwLWhhbnQtbW8AbnAtaGFudC1tbwB6by1oYW50LW1vAGRvLWhhbnQtbW8Ac24taGFudC1tbwBtbi1oYW50LW1vAGFuLWhhbnQtbW8Abm0taGFudC1tbwBhay1oYW50LW1vAHpoLWhhbnQtbW8AdWgtaGFudC1tbwBqYy1oYW50LW1vAGlqbwAtbmF2YWpvAHd5bgBvLW55bgBteW4ALXN5cm4AdW5kLVN5cm4AZWwtcG9seXRvbgBnb24AaG1uAGtsbgBoLW1pbgBkaW4AZW4AaC1taW4tbmFuAG1hbgBydC1sb2piYW4Acm9tAG9rbQBzdGFydCByZW9yZGVyaW5nIGluZGljIGZpbmFsAGVuZCByZW9yZGVyaW5nIGluZGljIGZpbmFsAHN0YXJ0IHJlb3JkZXJpbmcgaW5kaWMgaW5pdGlhbABlbmQgcmVvcmRlcmluZyBpbmRpYyBpbml0aWFsAGJ0awBrb2sALWdlb2sAdW5kLUdlb2sAby1ib2sAYmlrAGp5LWhhbnQtaGsAcHgtaGFudC1oawB1dS1oYW50LWhrAHNwLWhhbnQtaGsAbnAtaGFudC1oawB6by1oYW50LWhrAGRvLWhhbnQtaGsAc24taGFudC1oawBtbi1oYW50LWhrAGFuLWhhbnQtaGsAbm0taGFudC1oawBhay1oYW50LWhrAHpoLWhhbnQtaGsAdWgtaGFudC1oawBqYy1oYW50LWhrAC1oYWsALXN5cmoAdW5kLVN5cmoAbXJqAHhuagByYWoAeWkAcXZpAGRvaQB1a2kAcmtpAHF3aABxdWgAYXRoAC10aAB0bWgAbmFoAGEtbGF0ZwBpbmYALXN5cmUAdW5kLVN5cmUAa3BlAGhuZAAtbWQALCJkeCI6JWQsImR5IjolZAAsImF4IjolZCwiYXkiOiVkACwidyI6JWQsImgiOiVkACwieGIiOiVkLCJ5YiI6JWQAQCVkLCVkAC1oYnNjAC1wcm92ZW5jAGdoYwB6emEAdW5kLWZvbmlwYQB1bmQtZm9ubmFwYQBzZ2EALWFyZXZtZGEAaWJhAFUrJTA0WAAjJVgAemgtTU8ATkFOAHpoLUhLAG1udy1USABJTkYAc3RhcnQgcmVvcmRlcmluZyBVU0UAZW5kIHJlb3JkZXJpbmcgVVNFAHJvLU1EAEMAMDEyMzQ1Njc4OS5FRT8tPwA8JWQsJWQsJWQsJWQ+ACJ1IjoAImciOgAxMi4zLjIALgByZXBsYWNpbmcgZ2x5cGggYXQgJXUgKHJldmVyc2UgY2hhaW5pbmcgc3Vic3RpdHV0aW9uKQByZXBsYWNlZCBnbHlwaCBhdCAldSAocmV2ZXJzZSBjaGFpbmluZyBzdWJzdGl0dXRpb24pAHJlcGxhY2luZyBnbHlwaCBhdCAldSAoYWx0ZXJuYXRlIHN1YnN0aXR1dGlvbikAcmVwbGFjZWQgZ2x5cGggYXQgJXUgKGFsdGVybmF0ZSBzdWJzdGl0dXRpb24pAHJlcGxhY2luZyBnbHlwaCBhdCAldSAobGlnYXR1cmUgc3Vic3RpdHV0aW9uKQByZXBsYWNlZCBnbHlwaCBhdCAldSAobGlnYXR1cmUgc3Vic3RpdHV0aW9uKQBkZWxldGluZyBnbHlwaCBhdCAldSAobXVsdGlwbGUgc3Vic3RpdHV0aW9uKQByZXBsYWNpbmcgZ2x5cGggYXQgJXUgKG11bHRpcGxlIHN1YnN0aXR1dGlvbikAZGVsZXRlZCBnbHlwaCBhdCAldSAobXVsdGlwbGUgc3Vic3RpdHV0aW9uKQByZXBsYWNlZCBnbHlwaCBhdCAldSAobXVsdGlwbGUgc3Vic3RpdHV0aW9uKQByZXBsYWNpbmcgZ2x5cGggYXQgJXUgKHNpbmdsZSBzdWJzdGl0dXRpb24pAHJlcGxhY2VkIGdseXBoIGF0ICV1IChzaW5nbGUgc3Vic3RpdHV0aW9uKQAobnVsbCkAc3RhcnQgdGFibGUgR1BPUyBzY3JpcHQgdGFnICclYyVjJWMlYycAZW5kIHRhYmxlIEdQT1Mgc2NyaXB0IHRhZyAnJWMlYyVjJWMnAHN0YXJ0IHRhYmxlIEdTVUIgc2NyaXB0IHRhZyAnJWMlYyVjJWMnAGVuZCB0YWJsZSBHU1VCIHNjcmlwdCB0YWcgJyVjJWMlYyVjJwBzdGFydCBsb29rdXAgJXUgZmVhdHVyZSAnJWMlYyVjJWMnAGVuZCBsb29rdXAgJXUgZmVhdHVyZSAnJWMlYyVjJWMnAEHQHwsCb3QAQeAfCwGNAEHyHwuRCQEA5QDmAOcA6ADpAOoA6wDsAO0A7gANAA4ADwBjAO8A8ADxAPIA8wD0APUA9gD3APgAGwAcAPkA+gD7APwA/QD+AP8AAAEBAQIBAwEEAQUBBgEHAQgBCQEKAW0AbgALAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AZ4AmwCjAD8BQAFBAUIBQwFEAUUBRgGWAKQAqQBHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AQAAAAAAAAEA5wDoAOsA7ADtAO4ADQAOAA8AYwDvAPAA8QDyAPMA9AD1APYA9wD4ABsAHAD5APoA+wD9AP4A/wAAAQEBAgEDAQQBBQEGAQcBCAEJAQoBbQBuAAsBDAENAQ4BEAEsAS0BLgExAToBOwGeAJsAowBAAUEBQgFDAUQBRQFGAZYApACpAEcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgEAAAEAAQANAAwADgANAA8ADgAbABoAHAAbAGMADwBtAC4AbgAvAJYAbwCbAGUAngBkAKMAZgCkAHAAqQBxAOUAAgDmAAMA5wAEAOgABQDpAAYA6gAHAOsACADsAAkA7QAKAO4ACwDvABAA8AARAPEAEgDyABMA8wAUAPQAFQD1ABYA9gAXAPcAGAD4ABkA+QAcAPoAHQD7AB4A/AAfAP0AIAD+ACEA/wAiAAABIwABASQAAgElAAMBJgAEAScABQEoAAYBKQAHASoACAErAAkBLAAKAS0ACwEwAAwBMQANATIADgEzAA8BNAAQATUAEQE2ABIBNwATATgAFAE5ABUBOgAWATsAFwE8ABgBPQAZAT4AGgE/ABsBQAAcAUEAHQFCAB4BQwAfAUQAIAFFACEBRgAiAUcAIwFIACQBSQAlAUoAJgFLACcBTAAoAU0AKQFOACoBTwArAVAALAFRAC0BUgAuAVMALwFUADABVQAxAVYAMgFXADMBWAA0AVkANQFaADYBWwA3AVwAOAFdADkBXgA6AV8AOwFgADwBYQA9AWIAPgFjAD8BZwBAAWgAQQFpAEIBagBDAWsARAFsAEUBbQBGAW4ARwFyAEgBcwBJAXQASgF1AEsBdgBMAXcATQF4AE4BeQBPAXoAUAF7AFEBfABSAX0AUwF+AFQBfwBVAYAAVgGBAFcBggBYAYMAWQGEAFoBhQBbAYYAXAGHAF0BiABeAYkAXwGKAGABiwBhAYwAYgGNAGMBjgBkAY8AZQGQAGYBkQBnAZIAaAGTAGkBlABqAZUAawGWAGwBlwBtAZgAbgGZAG8BmgBwAZsAcQGcAHIBnQBzAZ4AdAGfAHUBoAB2AaEAdwGiAHgBowB5AaQAegGlAEGQKQvXAgEAAQANAAgADgAJAA8ACgAbABYAHAAXAGMACwBtACkAbgAqAJYAQACbADcAngA2AKMAOACkAEEAqQBCAOcAAgDoAAMA6wAEAOwABQDtAAYA7gAHAO8ADADwAA0A8QAOAPIADwDzABAA9AARAPUAEgD2ABMA9wAUAPgAFQD5ABgA+gAZAPsAGgD9ABsA/gAcAP8AHQAAAR4AAQEfAAIBIAADASEABAEiAAUBIwAGASQABwElAAgBJgAJAScACgEoAAsBKwAMASwADQEtAA4BLgAQAS8ALAEwAC0BMQAuATIAMQEzADoBNAA7ATUAQAE5AEEBOgBCATsAQwE8AEQBPQBFAT4ARgE/AEcBQwBIAUQASQFFAEoBRgBLAUcATAFIAE0BSQBOAUoATwFLAFABTABRAU0AUgFOAFMBTwBUAVAAVQFRAFYBUgBXAVMAWAFUAFkBVQBaAVYAQZAsC18BAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eXwBBkS0LMGBhYmNkZWZnaGlqa2xtbgBvcHFyAHN0dXZ3eHl6AHsAfH1+f4CBgoMAhIUAhoeIiQBB0S0LZIoAiwAAAACMjY6PAAAAAACQAAAAkQAAkpOUlQAAAABCVVNHU09QRwAAAAAAAAAAbG9zaWFuaWYybmlmM25pZmlkZW0yZGVtdGluaQAAAACOAAAAAAAAAI8AAACQAAAAAAAAAJEAQcAuCxWSAAAAkwAAAAAAAAAEAAAAAgAAAAEAQYQvCx0EAAAAAgAAAAEAAACUAAAAlQAAAJYAAACXAAAAmABBsC8LAZkAQcQvCwEBAEHkLwvtG5oAAAAAAAAAmwAAAHJiZWgEAAAAAgAAAAEAAAAADgAOAA4ADgAOCgQADgAOCgQKBAoECgQKBAoECgQKBAoECgQADgAOAA4ADgAOAA4ADgAOOQ05DQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4KBAgNCA0IDQgNAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBA8EAQQBBAEEAQQBBAEEAQQBBAEEBwkHCQMOEQ0HCQcCBwkHCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwkECAcCBwkADgkNCQ0IDQgNBwkHCQcJAQQBBAEEAQQBBAEEAQQBBAIEAgQHCQcJAA4ADgoECgQKBAoECgQKBAoECgQKBAoEAA4ADgIEAgQCBAIEAgQCBAEEAQQBBAEEAQQBBAEEAQQKBAgNCA0IDQAOAgQCBAIEAgQCBAIEAgQCBAAOAA4CBAIEAA4ADgIEAgQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAA4BBAEEAQQBBAEEAQQPBAAOAQQADgAOAA4BBAEEAQQBBAAOAA4DDhENBwwHAgcMBwkHCQcJBwkADgAOBwIHAgAOAA4HDAcMBAgBBAAOAA4ADgAOAA4ADgAOAA4HDAAOAA4ADgAOAQQBBAAOAQQCBAIEBwkHCQAOAA4KBAoECgQKBAoECgQKBAoECgQKBA8EAQQADgAOAA4ADgAOAA4ADgAOAA4ADgoEAA4IDQAOAA4IDQgNCA0ADgIEAgQCBAIEAgQCBAAOAA4ADgAOAgQCBAAOAA4CBAIEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAAOAQQBBAEEAQQBBAEEDwQADgEEAQQADgEEAQQADgEEAQQADgAOAw4ADgcMBwINDAcMBwwADgAOAA4ADgcMBwwADgAOBwwHDAQIAA4ADgAOBwgADgAOAA4ADgAOAA4ADgEEAQQBBAEEAA4BBAAOAA4ADgAOAA4ADgAOCgQKBAoECgQKBAoECgQKBAoECgQIDQgNAQQBBAAOEAQADgAOAA4ADgAOAA4ADgAOAA4ADgAOCA0IDQgNAA4CBAIEAgQCBAIEAgQCBAIEAgQADgIEAgQCBAAOAgQCBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQADgEEAQQBBAEEAQQBBA8EAA4BBAEEAA4BBAEEAQQBBAEEAA4ADgMOEQ0HDAcCBwwHDAcMBwwHDAcJAA4HCQcJBwwADgcMBwwECAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgIEAgQHDAcMAA4ADgoECgQKBAoECgQKBAoECgQKBAoEAA4ADgAOAA4ADgAOAA4ADgAOAQQJDQMOCQ0DDgMOAw4ADggHCA0IDQAOAgQCBAIEAgQCBAIEAgQCBAAOAA4CBAIEAA4ADgIEAgQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAA4BBAEEAQQBBAEEAQQPBAAOAQQBBAAOAQQBBAEEAQQBBAAOAA4DDhENBwwHBQcMBwkHCQcJBwkADgAOBwIHBQAOAA4HDAcMBAgADgAOAA4ADgAOAA4ADgMOBwUHDAAOAA4ADgAOAQQBBAAOAQQCBAIEBwkHCQAOAA4KBAoECgQKBAoECgQKBAoECgQKBAAOAQQADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADggNAA4ADgIEAgQCBAIEAgQCBAAOAA4ADgIEAgQCBAAOAgQCBAIEAQQADgAOAA4BBAEEAA4BBAAOAQQBBAAOAA4ADgEEAQQADgAOAA4BBAEEAQQADgAOAA4BBAEEDwQBBAEEAQQBBAEEAQQBBAEEAQQADgAOAA4ADgcMBwwHCQcMBwwADgAOAA4HAgcCBwIADgcMBwwHDAQGAA4ADgAOAA4ADgAOAA4ADgAOBwwADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOCgQKBAoECgQKBAoECgQKBAoECgQADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADggNCA0IDQgNCA0CBAIEAgQCBAIEAgQCBAIEAA4CBAIEAgQADgIEAgQCBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQADgEEAQQBBAEEAQQBBA8EAQQBBAEEAQQBBAEEAQQBBAEEAA4ADgMOEQ0HBwcHBwcHBwcHBwkHCQAOBwcHBwcHAA4HBwcHBwcEBgAOAA4ADgAOAA4ADgAOBwcHBwAOAQQBBAEEAA4ADgEEAA4ADgIEAgQHBwcHAA4ADgoECgQKBAoECgQKBAoECgQKBAoEAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4KBAgNCA0IDQAOAgQCBAIEAgQCBAIEAgQCBAAOAgQCBAIEAA4CBAIEAgQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAA4BBAEEAQQBBAEEAQQPBAEEAQQBBAAOAQQBBAEEAQQBBAAOAA4DDhENBwcHBwcHBwcHBwcJBwkADgcHBwkHCQAOBwkHCQcHBAYADgAOAA4ADgAOAA4ADgcJBwkADgAOAA4ADgAOAA4BBAEEAA4CBAIEBwcHBwAOAA4KBAoECgQKBAoECgQKBAoECgQKBAAOEgQSBAgNAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOCA0IDQgNCA0KBAIEAgQCBAIEAgQCBAIEAgQADgIEAgQCBAAOAgQCBAIEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEDwQBBAEEAQQBBAEEAQQBBAEEAQQBBAcJBwkRDQcMBwwHDAcMBwwHDAcMAA4HAgcCBwIADgcMBwwHDAQGDg4ADgAOAA4ADgAOAQQBBAEEBwwADgAOAA4ADgAOAA4ADgIEAgQCBAcMBwwADgAOCgQKBAoECgQKBAoECgQKBAoECgQADgAOAA4ADgAOAA4ADgAOAA4ADgEEAQQBBAEEAQQBBAEEAQQBBAEEDwQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBA8EAQQBBAEEAQQBBAIEAgQCBAIEAgQCBAIEAgQCBAIEFwsXCxQGFAYVCBUIFgMJDRQGFAYUBgkNAw4IDQQOIA4mDiQOJQ4jDgEECgQKBAoECgQKBAoECgQKBAoECgQKBAoEAA4ADgEEAA4BBAEEAgQCBAIEAgQXCxcLFQgVCA8EAQQBBAEEJg4mDikOAQQXCycOJw4BBAEEFwsXCycOJw4nDicOJw4BBAEEAQQUBhQGFAYUBgEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEJQ4XCxYDFAYUBggNCA0IDQgNCA0IDQgNAQQIDQoECgQKBAoECgQKBAoECgQKBAoECA0IDQgNFAYADgAOAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBA8EAQQBBAEEAQQBBAEEAQQBBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQCBAIEAgQADgAOFwsUBhQGFAYUBhUIFQgVCBQGFwsXCxYDFgMWAxcLFwsaDhsOGw4ZDhkOGg4ZDhoOGg4aDhoOGg4EDhsOAA4ADgAOAA4ADgoEAA4ADhENGw4ADgAOCgQKBAoECgQKBAoECgQKBAoECgQADgAOAA4ADgAOAA4JDQkNCQ0ADgkNCQ0JDQkNCQ0JDQkNCQ0JDQkNCQ0JDQkNCQ0JDQkNCQ0JDQkNCQ0JDRENEQ0RDRENCQ0RDRENEQ0RDQEEAQQJDQEEAQQJDQkNCQ0KBAAOAA4ADgAOAA4ADgAOAA4ADgUOBg4ADgAOCgQKBAoECgQKBAoEAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOCgQADgAOAA4ADgAOAA4ADgAOAA45DQAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOOQ05DTkNAA4ADgAOAA4ADgAOCgQKBAoECgQADgkNCQ0JDQkNCQ0JDQkNCQ0JDQkNCQ0JDQkNCQ0JDQkNCQ0JDRENEQ0RDRENEQ0RDQAOAA4ADgAOAA4ADgIEBwkBBAEEAQQBBAEEFAYADgEEAQQBBAEEAQQBBAEEAQQBBAoECgQKBAoECgQKBAoECgQKBAoEAQQBBAEEAQQBBAAOAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQADgEEAQQBBAoECgQKBAAOAA4ADgEEJw4DDgMOAQQBBCgOKA4oDigOKA4oDigOKA4oDigOKA4oDigOKA4oDigOAA4IDQgNCA0ADgAOAA4ADgAOAA4ADgMOAw4ADgAOAA4KBAoECgQKBAoECgQKBAoECgQKBAoECgQKBAoECgQKBAoECgQKBAoEAA4ADgAOAA6cAAAAnQAAAJ4AAACfAAAAoAAAAAAAAAChAAAAogAAAKMAQdzLAAsBAwBB6MsACw2kAAAApQAAAKYAAACnAEGAzAALCagAAACpAAAAqgBBlMwACwEDAEGgzAALAasAQcDMAAsBrABBzMwACwUDAAAAAQBB6MwACwGtAEGEzQALHQQAAAACAAAAAAAAAK4AAAAAAAAArwAAALAAAACxAEGszQALBbIAAACzAEG8zQALBQMAAAABAEHQzQAL9G8gIGFhIFJGQSAgYmEgS0JBICBmYSBLRkEgIGthIEFLQSAgbWEgSE1BICBuYSBHUkEgIHJhIEFSQSAgc2EgTVNBICB2YSBSVkEgIHlhIE1ZQSAgemEgRVpBICBhYiBIU0IgIGViIExFQiAgZ2IgUkdCICBpYiBTSUIgIGliIFBQQyAgbWIgQk1CICBuYiBORUIgIG9iIEJJVCAgcmIgRVJCICBzYiBTT0IgIGFjIFRBQyAgZWMgRUhDICBoYyBBSEMgIG9jIFNPQyAgcmMgRVJDICBzYyBZU0MgIHVjIExTQyAgdmMgVUhDICB5YyBMRVcgIGFkIE5BRCAgZWQgVUVEICB2ZCBWSUQgIHZkIFZIRCAgemQgTlpEICBlZSBFV0UgIGxlIExMRSAgbmUgR05FICBvZSBPVE4gIHNlIFBTRSAgdGUgSVRFICB1ZSBRVUUgIGFmIFJBRiAgZmYgTFVGICBpZiBOSUYgIGpmIElKRiAgb2YgU09GICByZiBBUkYgIHlmIElSRiAgYWcgSVJJICBhZyBUUkkgIGRnIEVBRyAgbGcgTEFHICBuZyBBVUcgIHVnIEpVRyAgdmcgWE5NICBhaCBVQUggIGVoIFJXSSAgaWggTklIICBvaCBPTUggIG9oIFBQQyAgcmggVlJIICB0aCBJQUggIHRoIFBQQyAgdWggTlVIICB5aDBFWUggIHloIEVZSCAgemggUkVIICBhaSBBTkkgIGRpIEROSSAgZGkgWUxNICBlaSBFTEkgIGdpIE9CSSAgaWkgTUlZICBraSBLUEkgIG5pIEROSSAgbmkgWUxNICBvaSBPREkgIHNpIExTSSAgdGkgQVRJICB1aSBVTkkgIHVpS1VOSSAgd2kgUldJICBhaiBOQUogIGlqIElJSiAgdmogVkFKICB3aiBWQUogIGFrIFRBSyAgZ2swTk9LICBpayBLSUsgIGprIEFVSyAga2sgWkFLICBsayBOUkcgIG1rIE1ISyAgbmsgTkFLICBvayBST0sgIG9rIEhPSyAgcmsgUk5LICBzayBIU0sgIHVrIFJVSyAgdmsgTU9LICB3ayBST0MgIHlrIFJJSyAgYWwgVEFMICBibCBaVEwgIGdsIEdVTCAgaWwgTUlMICBubCBOSUwgIG9sIE9BTCAgdGwgSFRMICB1bCBCVUwgIHZsIElWTCAgZ20gR0xNICBobSBIQU0gIGltIElSTSAga20gREtNICBsbSBMQU0gIGxtIFJMTSAgbm0gR05NICBvbSBMT00gIG9tIE1PUiAgcm0gUkFNICBzbSBZTE0gIHRtIFNUTSAgeW0gTVJCICBhbiBVQU4gIGJuIFJPTiAgZG4gQkROICBlbiBQRU4gIGduIEdETiAgbG4gRExOICBubiBOWU4gIG9uIFJPTiAgcm4gQkROICB2biBWQU4gIHZuIEhUQSAgeW4gSUhDICBjbyBJQ08gIGpvIEJKTyAgbW8gT1JPICBybyBJUk8gIHNvIFNTTyAgYXAgTkFQICBpcCBMQVAgIGxwIEtMUCAgc3AgU0FQICB0cCBHVFAgIHVxIFpVUSAgbXIgU01SICBuciBOVVIgIG9yIE1PUiAgdXIgU1VSICB3ciBBVVIgIGFzIE5BUyAgY3MgRFJTICBkcyBETlMgIGVzIE1TTiAgZ3MgT0dTICBocyBTT0IgIGhzIFZSSCAgaHMgQlJTICBpcyBITlMgIGtzIFlLUyAgbHMgVkxTICBtcyBPTVMgIG5zMEFOUyAgb3MgTE1TICBxcyBJUVMgIHJzIEJSUyAgc3MgWldTICB0cyBUT1MgIHVzIE5VUyAgdnMgRVZTICB3cyBLV1MgIGF0IE1BVCAgZXQgTEVUICBndCBKQVQgIGh0IEFIVCAgaXQgWUdUICBrdCBNS1QgIGx0IExHVCAgbnQgQU5UICBvdCBOR1QgIHJ0IEtSVCAgc3QgR1NUICB0dCBUQVQgIHd0IElXVCAgd3QgQUtBICB5dCBUSFQgIGd1IEdZVSAga3UgUktVICBydSBEUlUgIHp1IEJaVSAgZXYgTkVWICBpdiBUSVYgIG92IExPViAgYXcgTkxXICBvdyBGTFcgIGh4IFNIWCAgaXkgSUlKICBveSBBQlkgIGF6IEFIWiAgaHogU0haICB1eiBMVVogZWFhIElRUyBvYWEg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dABwYXJlbnJpZ2h0AGFzdGVyaXNrAHBsdXMAY29tbWEAaHlwaGVuAHBlcmlvZABzbGFzaAB6ZXJvAG9uZQB0d28AdGhyZWUAZm91cgBmaXZlAHNpeABzZXZlbgBlaWdodABuaW5lAGNvbG9uAHNlbWljb2xvbgBsZXNzAGVxdWFsAGdyZWF0ZXIAcXVlc3Rpb24AYXQAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAGJyYWNrZXRsZWZ0AGJhY2tzbGFzaABicmFja2V0cmlnaHQAYXNjaWljaXJjdW0AdW5kZXJzY29yZQBncmF2ZQBhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAYnJhY2VsZWZ0AGJhcgBicmFjZXJpZ2h0AGFzY2lpdGlsZGUAQWRpZXJlc2lzAEFyaW5nAENjZWRpbGxhAEVhY3V0ZQBOdGlsZGUAT2RpZXJlc2lzAFVkaWVyZXNpcwBhYWN1dGUAYWdyYXZlAGFjaXJjdW1mbGV4AGFkaWVyZXNpcwBhdGlsZGUAYXJpbmcAY2NlZGlsbGEAZWFjdXRlAGVncmF2ZQBlY2lyY3VtZmxleABlZGllcmVzaXMAaWFjdXRlAGlncmF2ZQBpY2lyY3VtZmxleABpZGllcmVzaXMAbnRpbGRlAG9hY3V0ZQBvZ3JhdmUAb2NpcmN1bWZsZXgAb2RpZXJlc2lzAG90aWxkZQB1YWN1dGUAdWdyYXZlAHVjaXJjdW1mbGV4AHVkaWVyZXNpcwBkYWdnZXIAZGVncmVlAGNlbnQAc3RlcmxpbmcAc2VjdGlvbgBidWxsZXQAcGFyYWdyYXBoAGdlcm1hbmRibHMAcmVnaXN0ZXJlZABjb3B5cmlnaHQAdHJhZGVtYXJrAGFjdXRlAGRpZXJlc2lzAG5vdGVxdWFsAEFFAE9zbGFzaABpbmZpbml0eQBwbHVzbWludXMAbGVzc2VxdWFsAGdyZWF0ZXJlcXVhbAB5ZW4AbXUAcGFydGlhbGRpZmYAc3VtbWF0aW9uAHByb2R1Y3QAcGkAaW50ZWdyYWwAb3JkZmVtaW5pbmUAb3JkbWFzY3VsaW5lAE9tZWdhAGFlAG9zbGFzaABxdWVzdGlvbmRvd24AZXhjbGFtZG93bgBsb2dpY2Fsbm90AHJhZGljYWwAZmxvcmluAGFwcHJveGVxdWFsAERlbHRhAGd1aWxsZW1vdGxlZnQAZ3VpbGxlbW90cmlnaHQAZWxsaXBzaXMAbm9uYnJlYWtpbmdzcGFjZQBBZ3JhdmUAQXRpbGRlAE90aWxkZQBPRQBvZQBlbmRhc2gAZW1kYXNoAHF1b3RlZGJsbGVmdABxdW90ZWRibHJpZ2h0AHF1b3RlbGVmdABxdW90ZXJpZ2h0AGRpdmlkZQBsb3plbmdlAHlkaWVyZXNpcwBZZGllcmVzaXMAZnJhY3Rpb24AY3VycmVuY3kAZ3VpbHNpbmdsbGVmdABndWlsc2luZ2xyaWdodABmaQBmbABkYWdnZXJkYmwAcGVyaW9kY2VudGVyZWQAcXVvdGVzaW5nbGJhc2UAcXVvdGVkYmxiYXNlAHBlcnRob3VzYW5kAEFjaXJjdW1mbGV4AEVjaXJjdW1mbGV4AEFhY3V0ZQBFZGllcmVzaXMARWdyYXZlAElhY3V0ZQBJY2lyY3VtZmxleABJZGllcmVzaXMASWdyYXZlAE9hY3V0ZQBPY2lyY3VtZmxleABhcHBsZQBPZ3JhdmUAVWFjdXRlAFVjaXJjdW1mbGV4AFVncmF2ZQBkb3RsZXNzaQBjaXJjdW1mbGV4AHRpbGRlAG1hY3JvbgBicmV2ZQBkb3RhY2NlbnQAcmluZwBjZWRpbGxhAGh1bmdhcnVtbGF1dABvZ29uZWsAY2Fyb24ATHNsYXNoAGxzbGFzaABTY2Fyb24Ac2Nhcm9uAFpjYXJvbgB6Y2Fyb24AYnJva2VuYmFyAEV0aABldGgAWWFjdXRlAHlhY3V0ZQBUaG9ybgB0aG9ybgBtaW51cwBtdWx0aXBseQBvbmVzdXBlcmlvcgB0d29zdXBlcmlvcgB0aHJlZXN1cGVyaW9yAG9uZWhhbGYAb25lcXVhcnRlcgB0aHJlZXF1YXJ0ZXJzAGZyYW5jAEdicmV2ZQBnYnJldmUASWRvdGFjY2VudABTY2VkaWxsYQBzY2VkaWxsYQBDYWN1dGUAY2FjdXRlAENjYXJvbgBjY2Fyb24AZGNyb2F0AEGk2AEL8S8IAAAADgAAAB8AAAAlAAAALAAAADUAAABAAAAARwAAAE8AAABZAAAAZQAAAG8AAAB6AAAAgwAAAIgAAACOAAAAlQAAAJwAAACiAAAApwAAAKsAAACvAAAAtQAAALoAAAC/AAAAwwAAAMkAAADPAAAA1AAAANoAAADkAAAA6QAAAO8AAAD3AAAAAAEAAAMBAAAFAQAABwEAAAkBAAALAQAADQEAAA8BAAARAQAAEwEAABUBAAAXAQAAGQEAABsBAAAdAQAAHwEAACEBAAAjAQAAJQEAACcBAAApAQAAKwEAAC0BAAAvAQAAMQEAADMBAAA1AQAANwEAAEMBAABNAQAAWgEAAGYBAABxAQAAdwEAAHkBAAB7AQAAfQEAAH8BAACBAQAAgwEAAIUBAACHAQAAiQEAAIsBAACNAQAAjwEAAJEBAACTAQAAlQEAAJcBAACZAQAAmwEAAJ0BAACfAQAAoQEAAKMBAAClAQAApwEAAKkBAACrAQAAtQEAALkBAADEAQAAzwEAANkBAADfAQAA6AEAAO8BAAD2AQAAAAIAAAoCAAARAgAAGAIAACQCAAAuAgAANQIAADsCAABEAgAASwIAAFICAABeAgAAaAIAAG8CAAB2AgAAggIAAIwCAACTAgAAmgIAAKECAACtAgAAtwIAAL4CAADFAgAAzAIAANgCAADiAgAA6QIAAPACAAD1AgAA/gIAAAYDAAANAwAAFwMAACIDAAAtAwAANwMAAEEDAABHAwAAUAMAAFkDAABcAwAAYwMAAGwDAAB2AwAAgAMAAI0DAACRAwAAlAMAAKADAACqAwAAsgMAALUDAAC+AwAAygMAANcDAADdAwAA4AMAAOcDAAD0AwAA/wMAAAoEAAASBAAAGQQAACUEAAArBAAAOQQAAEgEAABRBAAAYgQAAGkEAABwBAAAdwQAAHoEAAB9BAAAhAQAAIsEAACYBAAApgQAALAEAAC7BAAAwgQAAMoEAADUBAAA3gQAAOcEAADwBAAA/gQAAA0FAAAQBQAAEwUAAB0FAAAsBQAAOwUAAEgFAABUBQAAYAUAAGwFAABzBQAAfQUAAIQFAACLBQAAlwUAAKEFAACoBQAArwUAALsFAADBBQAAyAUAAM8FAADbBQAA4gUAAOsFAAD2BQAA/AUAAAMGAAAJBgAAEwYAABgGAAAgBgAALQYAADQGAAA6BgAAQQYAAEgGAABPBgAAVgYAAF0GAABkBgAAbgYAAHIGAAB2BgAAfQYAAIQGAACKBgAAkAYAAJYGAACfBgAAqwYAALcGAADFBgAAzQYAANgGAADmBgAA7AYAAPMGAAD6BgAABQcAAA4HAAAXBwAAHgcAACUHAAAsBwAAMwcAADoHAAAubm90ZGVmAHNwYWNlAGV4Y2xhbQBxdW90ZWRibABudW1iZXJzaWduAGRvbGxhcgBwZXJjZW50AGFtcGVyc2FuZABxdW90ZXJpZ2h0AHBhcmVubGVmdABwYXJlbnJpZ2h0AGFzdGVyaXNrAHBsdXMAY29tbWEAaHlwaGVuAHBlcmlvZABzbGFzaAB6ZXJvAG9uZQB0d28AdGhyZWUAZm91cgBmaXZlAHNpeABzZXZlbgBlaWdodABuaW5lAGNvbG9uAHNlbWljb2xvbgBsZXNzAGVxdWFsAGdyZWF0ZXIAcXVlc3Rpb24AYXQAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAGJyYWNrZXRsZWZ0AGJhY2tzbGFzaABicmFja2V0cmlnaHQAYXNjaWljaXJjdW0AdW5kZXJzY29yZQBxdW90ZWxlZnQAYQBiAGMAZABlAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHUAdgB3AHgAeQB6AGJyYWNlbGVmdABiYXIAYnJhY2VyaWdodABhc2NpaXRpbGRlAGV4Y2xhbWRvd24AY2VudABzdGVybGluZwBmcmFjdGlvbgB5ZW4AZmxvcmluAHNlY3Rpb24AY3VycmVuY3kAcXVvdGVzaW5nbGUAcXVvdGVkYmxsZWZ0AGd1aWxsZW1vdGxlZnQAZ3VpbHNpbmdsbGVmdABndWlsc2luZ2xyaWdodABmaQBmbABlbmRhc2gAZGFnZ2VyAGRhZ2dlcmRibABwZXJpb2RjZW50ZXJlZABwYXJhZ3JhcGgAYnVsbGV0AHF1b3Rlc2luZ2xiYXNlAHF1b3RlZGJsYmFzZQBxdW90ZWRibHJpZ2h0AGd1aWxsZW1vdHJpZ2h0AGVsbGlwc2lzAHBlcnRob3VzYW5kAHF1ZXN0aW9uZG93bgBncmF2ZQBhY3V0ZQBjaXJjdW1mbGV4AHRpbGRlAG1hY3JvbgBicmV2ZQBkb3RhY2NlbnQAZGllcmVzaXMAcmluZwBjZWRpbGxhAGh1bmdhcnVtbGF1dABvZ29uZWsAY2Fyb24AZW1kYXNoAEFFAG9yZGZlbWluaW5lAExzbGFzaABPc2xhc2gAT0UAb3JkbWFzY3VsaW5lAGFlAGRvdGxlc3NpAGxzbGFzaABvc2xhc2gAb2UAZ2VybWFuZGJscwBvbmVzdXBlcmlvcgBsb2dpY2Fsbm90AG11AHRyYWRlbWFyawBFdGgAb25laGFsZgBwbHVzbWludXMAVGhvcm4Ab25lcXVhcnRlcgBkaXZpZGUAYnJva2VuYmFyAGRlZ3JlZQB0aG9ybgB0aHJlZXF1YXJ0ZXJzAHR3b3N1cGVyaW9yAHJlZ2lzdGVyZWQAbWludXMAZXRoAG11bHRpcGx5AHRocmVlc3VwZXJpb3IAY29weXJpZ2h0AEFhY3V0ZQBBY2lyY3VtZmxleABBZGllcmVzaXMAQWdyYXZlAEFyaW5nAEF0aWxkZQBDY2VkaWxsYQBFYWN1dGUARWNpcmN1bWZsZXgARWRpZXJlc2lzAEVncmF2ZQBJYWN1dGUASWNpcmN1bWZsZXgASWRpZXJlc2lzAElncmF2ZQBOdGlsZGUAT2FjdXRlAE9jaXJjdW1mbGV4AE9kaWVyZXNpcwBPZ3JhdmUAT3RpbGRlAFNjYXJvbgBVYWN1dGUAVWNpcmN1bWZsZXgAVWRpZXJlc2lzAFVncmF2ZQBZYWN1dGUAWWRpZXJlc2lzAFpjYXJvbgBhYWN1dGUAYWNpcmN1bWZsZXgAYWRpZXJlc2lzAGFncmF2ZQBhcmluZwBhdGlsZGUAY2NlZGlsbGEAZWFjdXRlAGVjaXJjdW1mbGV4AGVkaWVyZXNpcwBlZ3JhdmUAaWFjdXRlAGljaXJjdW1mbGV4AGlkaWVyZXNpcwBpZ3JhdmUAbnRpbGRlAG9hY3V0ZQBvY2lyY3VtZmxleABvZGllcmVzaXMAb2dyYXZlAG90aWxkZQBzY2Fyb24AdWFjdXRlAHVjaXJjdW1mbGV4AHVkaWVyZXNpcwB1Z3JhdmUAeWFjdXRlAHlkaWVyZXNpcwB6Y2Fyb24AZXhjbGFtc21hbGwASHVuZ2FydW1sYXV0c21hbGwAZG9sbGFyb2xkc3R5bGUAZG9sbGFyc3VwZXJpb3IAYW1wZXJzYW5kc21hbGwAQWN1dGVzbWFsbABwYXJlbmxlZnRzdXBlcmlvcgBwYXJlbnJpZ2h0c3VwZXJpb3IAdHdvZG90ZW5sZWFkZXIAb25lZG90ZW5sZWFkZXIAemVyb29sZHN0eWxlAG9uZW9sZHN0eWxlAHR3b29sZHN0eWxlAHRocmVlb2xkc3R5bGUAZm91cm9sZHN0eWxlAGZpdmVvbGRzdHlsZQBzaXhvbGRzdHlsZQBzZXZlbm9sZHN0eWxlAGVpZ2h0b2xkc3R5bGUAbmluZW9sZHN0eWxlAGNvbW1hc3VwZXJpb3IAdGhyZWVxdWFydGVyc2VtZGFzaABwZXJpb2RzdXBlcmlvcgBxdWVzdGlvbnNtYWxsAGFzdXBlcmlvcgBic3VwZXJpb3IAY2VudHN1cGVyaW9yAGRzdXBlcmlvcgBlc3VwZXJpb3IAaXN1cGVyaW9yAGxzdXBlcmlvcgBtc3VwZXJpb3IAbnN1cGVyaW9yAG9zdXBlcmlvcgByc3VwZXJpb3IAc3N1cGVyaW9yAHRzdXBlcmlvcgBmZgBmZmkAZmZsAHBhcmVubGVmdGluZmVyaW9yAHBhcmVucmlnaHRpbmZlcmlvcgBDaXJjdW1mbGV4c21hbGwAaHlwaGVuc3VwZXJpb3IAR3JhdmVzbWFsbABBc21hbGwAQnNtYWxsAENzbWFsbABEc21hbGwARXNtYWxsAEZzbWFsbABHc21hbGwASHNtYWxsAElzbWFsbABKc21hbGwAS3NtYWxsAExzbWFsbABNc21hbGwATnNtYWxsAE9zbWFsbABQc21hbGwAUXNtYWxsAFJzbWFsbABTc21hbGwAVHNtYWxsAFVzbWFsbABWc21hbGwAV3NtYWxsAFhzbWFsbABZc21hbGwAWnNtYWxsAGNvbG9ubW9uZXRhcnkAb25lZml0dGVkAHJ1cGlhaABUaWxkZXNtYWxsAGV4Y2xhbWRvd25zbWFsbABjZW50b2xkc3R5bGUATHNsYXNoc21hbGwAU2Nhcm9uc21hbGwAWmNhcm9uc21hbGwARGllcmVzaXNzbWFsbABCcmV2ZXNtYWxsAENhcm9uc21hbGwARG90YWNjZW50c21hbGwATWFjcm9uc21hbGwAZmlndXJlZGFzaABoeXBoZW5pbmZlcmlvcgBPZ29uZWtzbWFsbABSaW5nc21hbGwAQ2VkaWxsYXNtYWxsAHF1ZXN0aW9uZG93bnNtYWxsAG9uZWVpZ2h0aAB0aHJlZWVpZ2h0aHMAZml2ZWVpZ2h0aHMAc2V2ZW5laWdodGhzAG9uZXRoaXJkAHR3b3RoaXJkcwB6ZXJvc3VwZXJpb3IAZm91cnN1cGVyaW9yAGZpdmVzdXBlcmlvcgBzaXhzdXBlcmlvcgBzZXZlbnN1cGVyaW9yAGVpZ2h0c3VwZXJpb3IAbmluZXN1cGVyaW9yAHplcm9pbmZlcmlvcgBvbmVpbmZlcmlvcgB0d29pbmZlcmlvcgB0aHJlZWluZmVyaW9yAGZvdXJpbmZlcmlvcgBmaXZlaW5mZXJpb3IAc2l4aW5mZXJpb3IAc2V2ZW5pbmZlcmlvcgBlaWdodGluZmVyaW9yAG5pbmVpbmZlcmlvcgBjZW50aW5mZXJpb3IAZG9sbGFyaW5mZXJpb3IAcGVyaW9kaW5mZXJpb3IAY29tbWFpbmZlcmlvcgBBZ3JhdmVzbWFsbABBYWN1dGVzbWFsbABBY2lyY3VtZmxleHNtYWxsAEF0aWxkZXNtYWxsAEFkaWVyZXNpc3NtYWxsAEFyaW5nc21hbGwAQUVzbWFsbABDY2VkaWxsYXNtYWxsAEVncmF2ZXNtYWxsAEVhY3V0ZXNtYWxsAEVjaXJjdW1mbGV4c21hbGwARWRpZXJlc2lzc21hbGwASWdyYXZlc21hbGwASWFjdXRlc21hbGwASWNpcmN1bWZsZXhzbWFsbABJZGllcmVzaXNzbWFsbABFdGhzbWFsbABOdGlsZGVzbWFsbABPZ3JhdmVzbWFsbABPYWN1dGVzbWFsbABPY2lyY3VtZmxleHNtYWxsAE90aWxkZXNtYWxsAE9kaWVyZXNpc3NtYWxsAE9Fc21hbGwAT3NsYXNoc21hbGwAVWdyYXZlc21hbGwAVWFjdXRlc21hbGwAVWNpcmN1bWZsZXhzbWFsbABVZGllcmVzaXNzbWFsbABZYWN1dGVzbWFsbABUaG9ybnNtYWxsAFlkaWVyZXNpc3NtYWxsADAwMS4wMDAAMDAxLjAwMQAwMDEuMDAyADAwMS4wMDMAQmxhY2sAQm9sZABCb29rAExpZ2h0AE1lZGl1bQBSZWd1bGFyAFJvbWFuAFNlbWlib2xkAAAAAAAACAAAAA4AAAAVAAAAHgAAACkAAAAwAAAAOAAAAEIAAABNAAAAVwAAAGIAAABrAAAAcAAAAHYAAAB9AAAAhAAAAIoAAACPAAAA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AAcAAgAHAwUABwAGAEGWigILqwsICAAICAAICAgICAgICAgICAgICAgICAgICAMAAgICAgMCAwIDAwMDAwICAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAMDCAICAgACAgIDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMCAgICAgICAgIDAgMCAwMCAggCCAgICAgICAAICAgICAgICAgICAgICAgIAgIICAgICAgICAgIAwMDCAgDCAgICAgICAgICAgICAgIBwQIAwMDBQUCAgIDAwMDAgMDAwMDAwMDAwIDBQMCAwMFCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCAwMDAwMDAwMDAwMCAgIDAwMDAwMDAwMDAwMDAwMCAgMDAwMCAwICAwMDAgIDAwMDAwMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwgICAgICAgICAgICAgICAMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCAwMDAwMCAgMCAwMDAwMDAwMDAwIDAgICCAgICAgICAMAAwMDAwACAwICCAgICAgCAgICAgICAgICAgICAgICAgICAwMDAwAAAwMDAwMCAwAACAgICAgICAgICAgICAgDAwMDAwMDAwMDAgICAAIDAwICAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwgICAgICAgICAgICAgICAgICAgICAgICAgAAAMICAMICAgACAgICAgICAgICAgICAgICAgDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwgICAgICAgAAAAAAAcHAwMDAwMDAwMDAwMDAwMDAwMD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ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAE4Kjg4OENDOAE9ODg4ODgqODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODgBOCo4ODhDQjgBPTg4ODg4Kjg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4AThGR0hIBAU9ODg4BDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODgFOEdISAQFPTg4OAQ4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4BThISAQFPTg4OAQ4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4BTg9ODhEPTg4OAQ4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4RDhJSkoEBT04ODgEODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAU4QUs4AT04ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAE4QThDQzgBPTg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4AThDSzgBPTg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ATg5OkBABAU9ODg4BDg4Pjg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODgFODk6O0AEBT04OAgEODg+ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAU4TU5PUAwNUUxMEgxMTFJMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDUxTTlRQDA1RTExMDExMUkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwNTE5UUAwNUUxMTAxMTFJMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDUxVTExMVldMDlFMTExMTFVMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTA5MWE5ZWgwNUUxMEQxMTFJMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDUxbTlRUDA1RTExMDExMUkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwNTE5UVAwNUUxMTAxMTFJMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDUxVTExMXFdMDlFMTExMTFVMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTA5MUUxMXVFMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTF1MUUxRTExMUUxVTF5MXFxMDlFMTExMTFVMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTA5MVUxMTFxcTA5RTExMTExVTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwOTF9gYWEMDVFMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTA1MYGFhDA1RTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwNTGFhDA1RTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwNTFFMTF1RTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExdTGJjYwwNUUxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDUxWZEwOUUxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDkxcXEwOUUxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDkxWTFxcTA5RTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwOTFxkTA5RTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwOTFhOVFQMDVFMTEwMTExSTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTA1MWE5ZVAwNUUxMEQxMTFJMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDUwKCwsMDUxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTA1MTU5UUAwNUUxMTAxMTFJMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDUxmLWdnFhcwZWVlFmVlNGVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUXZS1nZxYXMGVlZRZlZTRlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlF2VoZWVlaWplGTBlZWVlZWhlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZRllLC1rbBYXMGVlGBZlZTRlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlF2VoZWVlbWplGTBlZWVlZWhlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZRllMGVlbjBlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZW5lMGUwZWVlMGVoZW9lbW1lGTBlZWVlZWhlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZRllaGVlZW1tZRkwZWVlZWVoZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUZZXBxcnIWFzBlZWUWZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZRdlcXJyFhcwZWVlFmVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUXZXJyFhcwZWVlFmVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUXZTAaGm4wGhoaFhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhpuGiwtZ2cWFzBlZWUWZWU0ZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZRdlc3R0FhcwZWVlFmVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUXZWl1ZRkwZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUZZW1tZRkwZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUZZWllbW1lGTBlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZRllbXVlGTBlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZRllLC1rZxYXMGVlGBZlZTRlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlF2UUFRUWF3Z2dhgWdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dhd2FBUVFhd2dnZ2FnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYXdnh5ensgIXx3dyIgd3d9d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dyF3fnl7eyAhfHd3dyB3d313d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3IXd5e3sgIXx3d3cgd3d9d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dyF3f3d3d4CBdyN8d3d3d3d/d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3cjd3h5ejEgIXx3dyIgd3d9d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dyF3f3d3d4KBdyN8d3d3d3d/d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3cjd3x3d4N8d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3eDd3x3fHd3d3x3f3eEd4KCdyN8d3d3d3d/d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3cjd393d3eCgncjfHd3d3d3f3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3I3eFhoeHICF8d3d3IHd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3chd4aHhyAhfHd3dyB3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3IXeHhyAhfHd3dyB3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3IXd8d3eDfHd3dyB3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3g3d4eXt7ICF8d3d3IHd3fXd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3chd4iJiSAhfHd3dyB3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3IXeAincjfHd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3I3eCgncjfHd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3I3eAd4KCdyN8d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3cjd4KKdyN8d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3cjdyorLC1rZxYXMDExGBZlKjRlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlF2U5izs8BAU9ODgIBDg4Pjg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODgFOCorLC2MjRaOjzgxGBY4KjQ4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4jjgUkJAWjj04OBgWODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4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FhYWFhoWFxYZGRYaGxYWFhYWFhYWFhYqFhYfFhYWFhYWFhYWFhYWFhYWJRYWFhYWFhYWFhYWFhYWFhYWGhYXFhkZFhobFhYWFhYWFhYWFioWFh8WFhYWFhYWFisWFhYWFhYlFhYWFhYWFhYWFhYWFhYWFhYaFhcWGRkWGhsWFhYWFhYWFhYWKhYWHxYWFhYWFhYWKxYWFhYWFiUWKxYWFhYWFhYWFhYWFhYWFhoWGRkWGhYWFhYWFhYWFhYWFhYWHxYWFhYWFhYWFhYWFhYWFiUWFhYWFhYWFhYWFhYWFhYWFhoWAQEWFhYWFhYWFhYWFhYBFhcWGRkWGhsWFhYWFhYWFhYWHB0WHxYWFhYWFhYWFhYWFhYWFiUWFhYWFhYWFhYWFhYWFhYWFhoWFxYZGRYaGxYWFhYWFhYWFhYWHRYfFhYWFhYWFhYWFhYWFhYWJRYWFhYWFhYWFhYWFhYWFhYWGhYXFhkZFhobFhYWFhYWFhYWFhwdHh8WFhYWFhYWFhYWFhYWFhYlLRYWFhYWFhYWFhYWFhYWFhYaFhcWGRkWGhsWFhYWFhYWFhYWHB0eHxYWFhYWFhYWFhYWFhYWFiUWFhYWFhYWFhYWFhYWFhYWFhoWFxYZGRYaGxYWFhYWFhYWFhYcHR4fFhYWFhYWFhYgFhYhIiMkJRYnFhYWFhYWFhYWFhYWFhYWGhYXFhkZFhobFhYWFhYWFhYWFhwdHh8WFhYWFhYWFi0WFhYWFhYlFicWFhYWFhYWFhYWFhYWFhYaFhcWGRkWGhsWFhYWFhYWFhYWHB0eHxYWFhYWFhYWLRYWFhYWFiUWFhYWFhYWFhYWFhYWFhYWFhoWFxYZGRYaGxYWFhYWFhYWFhYcHR4fFhYWFhYWFhYWFhYhFiMWJRYnFhYWFhYWFhYWFhYWFhYWGhYXFhkZFhobFhYWFhYWFhYWFhwdHh8WFhYWFhYWFi0WFiEWFhYlFicWFhYWFhYWFhYWFhYWFhYaFhcWGRkWGhsWFhYWFhYWFhYWHB0eHxYWFhYWFhYWLhYWISIjFiUWJxYWFhYWFhYWFhYWFhYWFhoWFxYZGRYaGxYWFhYWFhYWFhYcHR4fFhYWFhYWFhYWFhYhIiMWJRYnFhYWFhYWFhYWFhYWFhYWGhYXGBkZFhobFhYWFhYWFhYWFhwdHh8WFhYWFhYWFiAWFiEiIyQlFicWFhYWFhYWFhYWFhYWFhYaFjAwLwUvLy8vLy8vLy8vLy8vLwwvLy8vLy8vLzEvLy8vLy8SLy8vLy8vLy8vLy8vLy8vLy8FLzAwMgUyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjISMjIyMjIyMjIyMjIyMjIyMjIFMjMvMDAvBRIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vBS8vLy8vLxIvLy8vLy8vLy8vLy8vLy8vLwUvMDAvBS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vBS8vLy8vLxIvLy8vLy8vLy8vLy8vLy8vLwUvAi8wMC8FBi8vLy8vLy8vLy80Ly8MLy8vLy8vLy81Ly82Ly8vEi81Ly8vLy8vLy8vLy8vLy8vBS8CLzAwLwUGLy8vLy8vLy8vLy8vLwwvLy8vLy8vLy8vLy8vLy8SLy8vLy8vLy8vLy8vLy8vLy8FLwIvMDAvBQYvLy8vLy8vLy8vNC8vDC8vLy8vLy8vLy8vLy8vLxIvLy8vLy8vLy8vLy8vLy8vLwUvAi8wMC8FBi8vLy8vLy8vLy80Ly8MLy8vLy8vLy81Ly8vLy8vEi8vLy8vLy8vLy8vLy8vLy8vBS8CLzAwLwUGLy8vLy8vLy8vLzQvLwwvLy8vLy8vLzUvLy8vLy8SLzUvLy8vLy8vLy8vLy8vLy8FLzAwLwUvLy8vLy8vLy8vLy8vLwwvLy8vLy8vLy8vLy8vLy8SLy8vLy8vLy8vLy8vLy8vLy8FLzc3Ly8vLy8vLy8vLy8vNy8CAzAwLwUGLy8vLy8vLy8vLwkKCwwvLy8vLy8vLw0vLw4PEBESExQvLy8vLy8vLy8vLy8vLy8FLwIvMDAvBQYvLy8vLy8vLy8vCQovDC8vLy8vLy8vLy8vLy8vLxIvLy8vLy8vLy8vLy8vLy8vLwUvAi8wMC8FBi8vLy8vLy8vLy8vCi8MLy8vLy8vLy8vLy8vLy8vEi8vLy8vLy8vLy8vLy8vLy8vBS8CLzAwLwUGLy8vLy8vLy8vLwkKCwwvLy8vLy8vLy8vLy8vLy8SOC8vLy8vLy8vLy8vLy8vLy8FLwIvMDAvBQYvLy8vLy8vLy8vCQoLDC8vLy8vLy8vLy8vLy8vLxIvLy8vLy8vLy8vLy8vLy8vLwUvAi8wMC8FBi8vLy8vLy8vLy8JCgsMLy8vLy8vLy8NLy8ODxAREi8ULy8vLy8vLy8vLy8vLy8vBS8CLzAwLwUGLy8vLy8vLy8vLwkKCwwvLy8vLy8vLzgvLy8vLy8SLxQvLy8vLy8vLy8vLy8vLy8FLwIvMDAvBQYvLy8vLy8vLy8vCQoLDC8vLy8vLy8vOC8vLy8vLxIvLy8vLy8vLy8vLy8vLy8vLwUvAi8wMC8FBi8vLy8vLy8vLy8JCgsMLy8vLy8vLy8vLy8OLxAvEi8ULy8vLy8vLy8vLy8vLy8vBS8CLzAwLwUGLy8vLy8vLy8vLwkKCwwvLy8vLy8vLzgvLw4vLy8SLxQvLy8vLy8vLy8vLy8vLy8FLwIvMDAvBQYvLy8vLy8vLy8vCQoLDC8vLy8vLy8vOS8vDg8QLxIvFC8vLy8vLy8vLy8vLy8vLwUvAi8wMC8FBi8vLy8vLy8vLy8JCgsMLy8vLy8vLy8vLy8ODxAvEi8ULy8vLy8vLy8vLy8vLy8vBS8CAzAwLwUGLy8vLy8vLy8vLwkKCwwvLy8vLy8vLw0vLw4PEBESLxQvLy8vLy8vLy8vLy8vLy8FLxcYGRkWGhsWFhYWFhYWFhYWHB0eHxYWFhYWFhYWOhYWISIjJCUmJxYWFhYWFhYWFhYWFhYWFhoWFzsZGRYaGxYWFhYWFhYWFhYcHR4fFhYWFhYWFhYgFhYhIiMkJRYnFhYWFhYWFhYWFhYWFhYWGhYBAQIDMDAvBQYBAS8vLwEvLy8vCQoLDC8vLy8vLy8vDS8vDg8QERITFC8vLy8vLy8vLy8vLy8vLwUvAQE8PDw8PDw8AQE8PDwBPABB0v4CC6MBOgByAKgA3gAWAUwBhAG8AfQBLAJkApoCqgLiAhoDUgOKA8ID+gMyBGoEogTaBBIFSgWABbYF7gUkBlwGlAbMBgQHPAdyB4IHugfyByoIYgiaCNIICglCCXoJsgnqCSIKWgqSCsoKBAsAAAAAAAA5NzU1NzU3Nzc3NzUPNzc3Nzc3Nzc3Nzc3NTU3NTc3Nzc3NQ83Nzc3Nzc3Nzc3Nzc3Nzc5DwBBgYADC0UBGSMAGh4xNCUmJx0pKiwtLhswKxoAAgwAAwcNDg8GERIUFRYEGBMLBQgJChAXAAAiABwfICEkKC8yMwAAAAADAAAABAUAQdWAAwsFBgcAAAgAQe+AAwsECQoACwBB/IADC3UMAAAAAAAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAwADMAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAXABcAMAA9AAAAAAAAAAIAQbCCAwsBAQBB8IIDC0RmcmtyZnZiYWZ3bGJmbGFoZnRzcHV0YXZ0Y2pjAAAAAGxvc2l0aW5paWRlbWFuaWZzdmJhc3dsYm5sYWhzZXJwc3RzcABBwIMDC+IkMTMAOAs4CzgBNQ4wDi8OLw4vDi4OLg4ODjAOMA4wAQ4OMA41DjUONQ41DDUONQw1DDUMNQs4AQ4BMA4qDioLOAE1DjAOLw4vDi8OLg4uDg4OMA4wDjABDg4wDjUONQ41DjUMNQ41DDUMNQw1CzgBDgEOATAODg0OBA4LOAs4ATUOMA4vDi8OLw4uDi4ODg4wDjAOMAEODjAONQ41DjUONQw1DjUMNQw1DDULOAEOAQ4BMA4OCzgBNQ4wDi8OLw4vDi4OLg4ODjAOMA4wAQ4OMA41DjUONQ41DDUONQw1DDUMNQs4AQ4BMAQODQ4BOA4qDioBBQ43DjMONA42CzgAAAEAAgADBAUFBgcFBQUFBQgJCgsFBQUMBQUFDQ4PEBESExQVCBYXGBkFGhscBR0eHyAhIiMgAQUkBSUFBSYFKCknKicnJycnJycrLC0uLzAxMjMoNDU2Nyc4OTonOzwnPT4/QD0nJycnQScnQCcoKScqJycnJycnJyssLS4vMDEyMyg0NTY3Jzg5OicnJyc9Pj9APScnJydBJydAJygnJycnJycnJycnJycqJycnJycnJycsLS4vJycnJycnJycnJzg5OicnJycnPj9AQicnJycsJyonJycnJycnJywtLi8nJycnJycnJycnODk6JycnJyc+P0BCJyonJycnJycnJyctLi8nJycnJycnJycnJycnJycnJyc+P0AnKicnJycnJycnJycuLycnJycnJycnJycnJycnJycnJz4/QCcqJycnJycnJycnJycvJycnJycnJycnJycnJycnJycnPj9AJyonJycnJycnJycnJycnJycnJycnJycnJycnJycnJyc+PycqJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJz8nKicqJycnJycnJycnLS4vJycnJycnJycnJzg5OicnJycnPj9AQicqJycnJycnJycnLS4vJycnJycnJycnJyc5OicnJycnPj9AQicqJycnJycnJycnLS4vJycnJycnJycnJycnOicnJycnPj9AQidDJycnJycnJycnJycnKicqJycnJycnJycnLS4vJycnJycnJycnJycnJycnJycnPj9AQicqJycnJycnJyssLS4vJycnJycnNTY3Jzg5OicnJycnPj9AQicnJycsJyonJycnJycnJywtLi8nJycnJyc1NjcnODk6JycnJyc+P0BCJycnJywnKicnJycnJycnLC0uLycnJycnJyc2Nyc4OTonJycnJz4/QEInJycnLCcqJycnJycnJycsLS4vJycnJycnJyc3Jzg5OicnJycnPj9AQicnJycsJ0QnKicnJycnJycrLC0uLycxMicnJzU2Nyc4OTonJycnJz4/QEInJycnLCcqJycnJycnJycsLS4vJycnJycnJycnJzg5OicnJycnPj9AQicnJycsJ0QnKicnJycnJycrLC0uLycnMicnJzU2Nyc4OTonJycnJz4/QEInJycnLCdEJyonJycnJycnKywtLi8nJycnJyc1NjcnODk6JycnJyc+P0BCJycnJywnRCcqJycnJycnJyssLS4vMDEyJycnNTY3Jzg5OicnJycnPj9AQicnJycsJygpJyonJycnJycnKywtLi8wMTIzJzQ1NjcnODk6JycnJz0+P0A9JycnJ0EnJ0AnKCcnJycnJycnJycnJyonKCcnJycnJycnJycnJyonJycnJycnJywtLi8nJycnJycnJycnODk6JycnJyc+P0BCJyonJycnJycnJycnJycnJycnJycnJycnJycnJzs8JyonJycnJycnJycnJycnJycnJycnJycnJycnJyc8JwRGRUdFRUVFRUVFSElKS0xNTk9QBFFSU1RFVVZXRUVFRVhZWltcRUVFRV1FRV5FBEVFRUVFRUVFRUVFRUdFRUVFRUVFRUlKS0xFRUVFRUVFRUVFVVZXRUVFRUVZWltfRUVFRUlFR0VFRUVFRUVFSUpLTEVFRUVFRUVFRUVVVldFRUVFRVlaW19FR0VFRUVFRUVFRUpLTEVFRUVFRUVFRUVFRUVFRUVFRVlaW0VHRUVFRUVFRUVFRUtMRUVFRUVFRUVFRUVFRUVFRUVFWVpbRUdFRUVFRUVFRUVFRUxFRUVFRUVFRUVFRUVFRUVFRUVZWltFR0VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRVlaRUdFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFWkVHRUdFRUVFRUVFRUVKS0xFRUVFRUVFRUVFVVZXRUVFRUVZWltfRUdFRUVFRUVFRUVKS0xFRUVFRUVFRUVFRVZXRUVFRUVZWltfRUdFRUVFRUVFRUVKS0xFRUVFRUVFRUVFRUVXRUVFRUVZWltfRWFgYGBgYGBgYGBgYGBiYEdFRUVFRUVFRUVKS0xFRUVFRUVFRUVFRUVFRUVFRUVZWltfRUdFRUVFRUVFSElKS0xFRUVFRUVSU1RFVVZXRUVFRUVZWltfRUVFRUlFR0VFRUVFRUVFSUpLTEVFRUVFRVJTVEVVVldFRUVFRVlaW19FRUVFSUVHRUVFRUVFRUVJSktMRUVFRUVFRVNURVVWV0VFRUVFWVpbX0VFRUVJRUdFRUVFRUVFRUlKS0xFRUVFRUVFRVRFVVZXRUVFRUVZWltfRUVFRUlFY0VHRUVFRUVFRUhJSktMRU5PRUVFUlNURVVWV0VFRUVFWVpbX0VFRUVJRUdFRUVFRUVFRUlKS0xFRUVFRUVFRUVFVVZXRUVFRUVZWltfRUVFRUlFY0VHRUVFRUVFRUhJSktMRUVPRUVFUlNURVVWV0VFRUVFWVpbX0VFRUVJRWNFR0VFRUVFRUVISUpLTEVFRUVFRVJTVEVVVldFRUVFRVlaW19FRUVFSUVjRUdFRUVFRUVFSElKS0xNTk9FRUVSU1RFVVZXRUVFRUVZWltfRUVFRUlFBEZFR0VFRUVFRUVISUpLTE1OT1BFUVJTVEVVVldFRUVFWFlaW1xFRUVFXUVFXkUEZGRkZGRkZGRkZGRkZWQEYGBgYGBgYGBgYGBgYmAERUVFRUVFRUVFRUVFR0VFRUVFRUVFSUpLTEVFRUVFRUVFRUVVVldFRUVFRVlaW19FZWRnaGYGaWlpaWlpaWlpamlrbEVHRUVFRUVFRW1ub3BxcnN0dWt2d3h5RXp7fEU7PEV9fn+AgUVFRUWCRUWDRWtsRUdFRUVFRUVFbW5vcHFyc3R1a3Z3eHlFent8RUVFRX1+f4CBRUVFRYJFRYNFa0VFRUVFRUVFRUVFRUdFRUVFRUVFRW5vcHFFRUVFRUVFRUVFent8RUVFRUV+f4CERUVFRW5FR0VFRUVFRUVFbm9wcUVFRUVFRUVFRUV6e3xFRUVFRX5/gIRFR0VFRUVFRUVFRW9wcUVFRUVFRUVFRUVFRUVFRUVFRX5/gEVHRUVFRUVFRUVFRXBxRUVFRUVFRUVFRUVFRUVFRUVFfn+ARUdFRUVFRUVFRUVFRXFFRUVFRUVFRUVFRUVFRUVFRUV+f4BFR0VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRX5/RUdFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFf0VHRUdFRUVFRUVFRUVvcHFFRUVFRUVFRUVFent8RUVFRUV+f4CERUdFRUVFRUVFRUVvcHFFRUVFRUVFRUVFRXt8RUVFRUV+f4CERUdFRUVFRUVFRUVvcHFFRUVFRUVFRUVFRUV8RUVFRUV+f4CERYVgYGBgYGBgYGBgYGBiYEdFRUVFRUVFRUVvcHFFRUVFRUVFRUVFRUVFRUVFRUV+f4CERUdFRUVFRUVFbW5vcHFFRUVFRUV3eHlFent8RUVFRUV+f4CERUVFRW5FR0VFRUVFRUVFbm9wcUVFRUVFRXd4eUV6e3xFRUVFRX5/gIRFRUVFbkVHRUVFRUVFRUVub3BxRUVFRUVFRXh5RXp7fEVFRUVFfn+AhEVFRUVuRUdFRUVFRUVFRW5vcHFFRUVFRUVFRXlFent8RUVFRUV+f4CERUVFRW5FhkVHRUVFRUVFRW1ub3BxRXN0RUVFd3h5RXp7fEVFRUVFfn+AhEVFRUVuRUdFRUVFRUVFRW5vcHFFRUVFRUVFRUVFent8RUVFRUV+f4CERUVFRW5FhkVHRUVFRUVFRW1ub3BxRUV0RUVFd3h5RXp7fEVFRUVFfn+AhEVFRUVuRYZFR0VFRUVFRUVtbm9wcUVFRUVFRXd4eUV6e3xFRUVFRX5/gIRFRUVFbkWGRUdFRUVFRUVFbW5vcHFyc3RFRUV3eHlFent8RUVFRUV+f4CERUVFRW5Fa2xFR0VFRUVFRUVtbm9wcXJzdHVFdnd4eUV6e3xFRUVFfX5/gIFFRUVFgkVFg0VrZGRkZGRkZGRkZGRkZWRrYGBgYGBgYGBgYGBgYmBrRUVFRUVFRUVFRUVFR0VFRUVFRUVFbm9wcUVFRUVFRUVFRUV6e3xFRUVFRX5/gIRFZWQICYcLh4eHh4eHhw0ODxAREhMUFQgWFxgZhxobHIeHh4cgISImIIeHh4clh4cmhwiHh4eHh4eHh4eHh4cLh4eHh4eHh4cODxARh4eHh4eHh4eHhxobHIeHh4eHISImiIeHh4cOhwuHh4eHh4eHhw4PEBGHh4eHh4eHh4eHGhsch4eHh4chIiaIhwuHh4eHh4eHh4cPEBGHh4eHh4eHh4eHh4eHh4eHh4chIiaHC4eHh4eHh4eHh4cQEYeHh4eHh4eHh4eHh4eHh4eHhyEiJocLh4eHh4eHh4eHh4cRh4eHh4eHh4eHh4eHh4eHh4eHISImhwuHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4chIocLh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhyKHC4kLh4eHh4eHh4eHDxARh4eHh4eHh4eHhxobHIeHh4eHISImiIcLh4eHh4eHh4eHDxARh4eHh4eHh4eHh4cbHIeHh4eHISImiIcLh4eHh4eHh4eHDxARh4eHh4eHh4eHh4eHHIeHh4eHISImiIeKh4eHh4eHh4eHh4eHC4cLh4eHh4eHh4eHDxARh4eHh4eHh4eHh4eHh4eHh4eHISImiIcLh4eHh4eHhw0ODxARh4eHh4eHFxgZhxobHIeHh4eHISImiIeHh4cOhwuHh4eHh4eHhw4PEBGHh4eHh4cXGBmHGhsch4eHh4chIiaIh4eHhw6HC4eHh4eHh4eHDg8QEYeHh4eHh4cYGYcaGxyHh4eHhyEiJoiHh4eHDocLh4eHh4eHh4cODxARh4eHh4eHh4cZhxobHIeHh4eHISImiIeHh4cOh4uHC4eHh4eHh4cNDg8QEYcTFIeHhxcYGYcaGxyHh4eHhyEiJoiHh4eHDocLh4eHh4eHh4cODxARh4eHh4eHh4eHhxobHIeHh4eHISImiIeHh4cOh4uHC4eHh4eHh4cNDg8QEYeHFIeHhxcYGYcaGxyHh4eHhyEiJoiHh4eHDoeLhwuHh4eHh4eHDQ4PEBGHh4eHh4cXGBmHGhsch4eHh4chIiaIh4eHhw6Hi4cLh4eHh4eHhw0ODxAREhMUh4eHFxgZhxobHIeHh4eHISImiIeHh4cOhwgJhwuHh4eHh4eHDQ4PEBESExQVhxYXGBmHGhsch4eHhyAhIiYgh4eHhyWHhyaHCIeHh4eHh4eHh4eHhwuHCIeHh4eHh4eH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AAAAAgICAgIbJgACAgJzc3Nzc5QCCQAAAAAAAg4OAAAAAAAJAgIJAgICAh4CCQAeAgAAlZaXAgICAgICAgICFhYUFBQWFoUAAAAAAJiYmJiYmJiYmJgCAgICAjU0NQAAAACZC0oCAgICAgISExUQGCUAAAAfAAAAAAAACzECAgICAgICAgJ/FBaaFhWbnAICAgICAABBnQAAAAACDQAAAAAAAAJBGRQUFBYWa54AADifH6AeAgICAgICAgICAgICAhcTFhahLAAAADF/AAAAAAAAAAICAgkJAgIeAgICAgICAh4CAgICAgICChITFRaiHwAACwseAgICCR4JAh4CAjoRFxAXLyAhICIAAAAAIwAAAAICFwALCwsuAAsLLgAAAAAAAgICAgIeAAkCAgIeLTsUFB8hICAZox2kpSUAAAAAAAAMGgAAAAAAAAICQRkUFBQWF30PEQAAAAACAgICAgAApqcAAAAAAAAAEhMUFEJiGaALqAkAAAAAAAICAgICAgJBGRQUADAwC6klAEG9xwMLpwMCAhQAFxMUFBUQUqkmAAAAAAAAAAICAgICCqoZFBYWqAkAAAACAgICAgkrhxcWFEwVFgAAAgICCQAAAAACAgICAgISExQVFmipJQAAAgICCR4AAgICAh4JAgICAhcXEiAhDKulrK0AAAAAAAACAgICAAICAkEZFBQAFhcdawAhAAAAAAA0FBYWFosCAgKujAsPrz2wAAABkwAAAAA0FBYQExQCAgICnp6esbGxsbGxD7IAHgAQFBAQAAAAABYUFB8WFgupAD09PT09PT1CFVIuAAAAAAICAgkCHgICNBYWHwAmFhsLn7O0AAAAAAICAh4JAgICAgICAgIXFy8WI1JEAAAAAAK1Qi8AAAAAC7YCAgICAgICAhcWFB8AMBCPAAAAAAAAAgICAgKcAAC3t7e3t7e3t7i4uLm6uLe3u7e3vL29vb29vb0AAAAAALe3t7e3vgAAAgICAgICAhYWFhYWFr/AwQsLCy4AAAAAHUoCAgICAgICAgICAkEvAAICAgICCQA6whQUFBQUFBQUFBQUFBQUFBQUFBQAAAAocxoAAAAAAAAAAAkAQfDKAwvjCx4CAgICAgA6JQAGd3d3eAAACwsLMQICAgACAgICAgAAAgICAgICAgIuAgICAgICCwsCAgICAgIWFgICAgICAgIUAgIsLCxcAAAAAAAFAQEAMwA0BQAAEC8vAAYBAAElJSUAJQEgICAlJyEjIAEjFiMiIiIiISEhIyMjDBYjJgAAIQUlJycAASIAABYWABYMACMtACAAIQAhDAAmJR8FBQAcHx8jISUAIwAWFiUBACsrJwEhIQESADUAAC4AHwAgISIBCwsLAAsLAC4AASMiFiUmJywhHR4cHAEcHCMnJwEcIxYhIScnJgEnIiMGBiMlJS0YHy0lLSEsLQEtAQYQBgUfHwEhCxoaJhoaGSUuIRYBHhwLGBgbCzAjISUlGB8jDAEAKSkpIyw4OCIYFxctICYmJSsALQ4GEBAQAC8AMzQADB0jDCUhJgEiGiMYJwEfIRwdHAwAIh0eGxwAARgYGiIBIiUBFgAnLAAnIiMmJiUALCYBJyUnKysBBAQADRYiISwfACMBEhIgIRYlJQwhICcAJSAsEi0BKysMICcMJyElIx0SHSABLisLCwUZGR8sIiwSHAUhEicxMTIyMjM0MjcxMTY2NjEAHh4dJRwiACIAAAAAAAEAAgAAAAMABAAFAAAABgAHAAAACAAAAAkACgALAAwACgANAA4ACgAKAA8AEAARABIAEwAUABUAFgAXABgAGQASABoAGwAVABYAHAAdAB4AHwAgACEAIgAWACMAJAAAABIAJQAmABUAFgAnABgAKAASACkAKgArACwALQAuAC8AHwAAADAAMQAWADIAMwA0ABIAAAA1ADEAFgA2ADMANwASADgAOQAxAAoAOgA7ADwAPQA+AAoAPwBAAEEAHwBCAEMARAAKAEUARgAKAEcASABJAEoASwBMAE0AAAAKAAoATgBPAFAAUQBSAFMAVABVAAoAVgAKAFcACgBYAFkAWgAKAFsAXABdAAIAAABeAAAACgBfAGAACgBhAAAACgBiAGMAZAAfAAoAZQBmAGcACgBoAGkACgBqAAoAawBsAG0AAgACAG4ACgAKAG8AcAACAHEAcgBzAAoAdAAKAHUAdgB3AHgAeQAAAAAAegB7AHwAAAB9AH4AfwCAAAAAgQCCAIMAAAAAAIQAhQAAAIYAAAAAAAoAhwCIAIkAAACKAAoAiwAAAAoAjACNAAoACgCOAI8AAgCQAJEAkgAKAJMAlACVAAoACgCWAJcAAgCYAGIAmQCaAJsAAgAKAJwACgCdAJ4AAACfAKAAoQACAKIAAAAAAKMAAACkAAAApQClAKYAIgCnAKgAqQAKAKoAXwAAAKsAAAAKAKwArQAAAK4AAgCvAAoAsAAAALEArACyALMAtAAAAAAAtQC2AAAAtwAKAAoAuAC5ALoAuwC8AL0ACgAKAL4AvwAAAMAACgDBAMIAwwAKAAoAxAAKAMUAxgBpAMcAZgAKACIAyADJAMoAAADLAMwAXwAKAAoAzQDOAAIAzwAVABYA0ADRANIA0wDUANUACgAKANYA1wDYANkAAAAKANoA2wDcAN0AAADHAAoACgDeAN8AAgDgAOEA4gDjAAoA5ADlAAIA5gDnAAIACgCMAAAACgDoAOkAZwDqAAAA6wDsAO0A7gAKAO8A8AACAPEACgAKAPIA8wAAAPQACgAKAPUA9gD3APgA+QD6AAAAFgAKAOAA+wAIAAoARwATAAoA/ABKAP0A/gAKAAoA/wAAAQIAAQEKAAIBAwEKAAQBBQExAAoABgEHAQgBCQEJAQkBCgELAQwBCQENAQoADgEPAQIACgAQAREBCgASAQIAEwEUARUBFQEWARcBGAEAAAoAsAAAABkBaQBHAF8AGgEAABsBRwAcAR0BAAAeAQAAHwECACABAgAhAWkAIgECAIEAgQCiAKIAogCBABAREREyFBURERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERdpgAAAEAQfDWAwsxAgMAAAQABQAAAAAABgAABwAAAAgAAAkKCwwNDg8QEQAAAAAAEgAAAAAAAAATFAAAFQBBqtcDC0YWAAAAAAAXABgZABobHB0eHx8gHyEiHx8fIyQlJicfKB8pAAAAKissLS4vMB8fADEfHwAAAAAfHx8fHx8fHx8fHx8fHx8kAEH91wMLAUIAQYfYAwsDEAACAEGU2AMLHQQAAAIAAPADAAYAAAAAAAwAAQAAAIAAAAD+DwcEAEG92AMLVgxAAAEAAAAAAAB4H0AyIU3EAAcF/w+AaQEAyAAA/BqDDANgMMEaAAAGvyckv1QgAgEYAJBQuAAYAAAAAADgAAIAAYAAAAAAAAAwAOAAABgAAAAAAAAhAEGe2QML5AIBIAAAgAIAAAAAEAAAAADwAAAAAPD/AIABAAGAAQAAAMD/AAAAAAAAA8AAQP4HAMD///////8/AAAA/v8ABACA/PcA/v//wP////////////////////P//////8/O/////////////7kH/////////7//////////PwB+////gPkHgDxhADABBhAcAA5wCoEI/P//AAAAAAAAP/jn/z/6+f8AAAD8/////wDwAAAAAAAAAP8A/AAAAAAA/wAAAMAA8Pz/AP7/////APD///////e//////////wAAAP8AwP//AQAAAAIAAAADAAAABwAAAA0AAAAfAAAAPQAAAH8AAAD7AAAA/QEAAP0DAAD3BwAA/Q8AAP8fAAD9PwAA7X8AAPH/AAD//wEA+/8DAP//BwD9/w8A9/8fAP3/PwDx/38A/f//ANn//wH7//8D2f//B8f//w/9//8f3f//P////39vdABBkNwDCwFyAEGh3AMLpCwBAgMEBQYHBwgHBwcHBwcHBwcHCQoHBwcHBwsMDAwNDg8QERITFAcVFhYWFxgHBwcZFhYWGhscFh0eHyAhIiMHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBxUWJAcHBwcHByUWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiIiIiMkJSIiIiYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4+P0BBQkNERUNGR0NDPkg+PklDSktMTU5DQ0NPUCJRUlNDQyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiVCIiIiJVIiIiIiIiIiJWIiJXWFlaW1xdXl9gYWIiIiIiIiIiImNjY2NjY2NjY2NjY2NjY2NkZGRkZGRkZGRkZGRkZGRkZGQiIiIiZWYiImdoaWprbCIibW5vcHFyc3R1diIiInd4eXp7fH1+fyKAgYKDhIWGh4iJiouMjY6PkG+RkpOUb5WWl5iZmpucnZ6foG+hoqMiIiIiIiIiIqQiIm9vb29vb29vb29vb29vb29vb29vpSIiIiIiIiIipiIiIiIiIiIiIiIiIiIiIiIiIiIib29vb29vb29vb29vb29vb29vb29vp29vb29vb29vb29vb28iIiIiqKmqIm9vq2+sra6vIiIiIiIiIiIiIiIib29vb29vb29vb29vb29vb29vb3ciIiIiIiJvb29vb29vb29vb29vb29vb28isG9vb29vb29vb29vb29vQ7FDQ0Oys0NDQ7S1toNBb7e4ubq7vL2+Q0NDQ7/Ab29vb29vb2/Bb8LDxG9vxW9vb8Zvx2/IbyIiycpvb29vb4PLzG8izW9vQ0POQ0NvQ89DQ0NDQ0NDQ0PQQ0NDQ0Oxb29vb29vb28iIiIiIm9vb29vb29vb29vIiIiIiIiIiIib29vb29vb9Fvw8Nvb29vb29vb29vb28AAAAAAAAAAAECAwIEBQYCBwcHBwcCCAkKCwsLCwsLCwsLCwsLDA0ODxAQEBAQEBAQEBAQEBESEwEUFBUWFxgZGhsPAhwdGx4LCwsLCwsLCwsLCx8LCwsgEBAQEBAQEBAQEBAhEBAQECAgICAgICAgICAgICIiIiIiIiIiECAgICAgICALIiIQIiAgCyILEAsLIiALIBALIiAgIAsiECALIgsiIiAjIBAkJCUiJiUiIiIiIiIiIhAgIiYgCyAgICAgIBAQEAsiICIiCyAgICAgEBAkEBAQEBAnJycnJycnJycoKCcnJycnJygoKCgoKCgnJykoKCgpKSgoKCgoKCgoKioqKioqKiogICkgECsQCigoKCwLCwsLIgsLCwsLCwsLCwsLCwsQEBAQEBAQEBAiEAsgECAgICAQECAtIiAiCyAuKiovICAgCyIiIiIiIhALCwsLMAICAhAQEBAxMjM0NSoqKioqKioqKioqKioqNjc4KjcqKioqJCQkJCQkJCQkOQICAgICAjo6OggJOwI8KioqKio4PQI+JCQkJD8qKgcHBwcHAgIkQCQkJCQkJCQkJEEqKipCLioqQ0RFKiokBwcHBwckRkcCAgICAgICSD8kJCQkJCQkKioqKioqQCQkJCQqKioqKgcHBwcHJCQkJCQkJCQ/KioqKicVAidEFCQkJCoqRCoqKipEKkQqKioCAgICAgICAiQkJCQ/KioCJCQkJEkkJCQ6OjpKKioqKiQkJCRLKioqKkoqKioqKioqTCQkJCQkJCQkJCQkTEBNTioqKkxNTk0/KioqJCQkJCQqAgcHBwcHTyQkJCQkJCQ/TVAkJCQkJCQkJCQkJEBNTioqTE1NTiQkJCRRTU0kJCQqKgcHBwcHJBQbGxs0OSoqTFAkJCQkJCQkJCQkJCpNTioqKioqKioqKioqQCQkJCQkJAcHBwcHKiQ/AgICAgJOKioqTE1OKjsUFBRSKioqKk1QJCQkJCQkJCQkJCRATk4qKkxNTU4qKioqTE1NJCRHGxsbGxsbGypAJCQkJCQkJCQkJCQkJE1MTU1NTU1OKiQkJFFNTU1NTU1NBwcHBwcbUzw8NDw8PExNQCQkJCQkJCQkJCQkQCpMTU0qKioqKioqKiokJCQkBwcHVBsbG1M/TUEkJCQkJE1NTUxNTSoqKipMTU1NJCRVUU1NTU1NTSpNJCQkJCQkJCQkJCQ/QE1OKipNTU1ORjw8JFEbGxtWGxsbG1MkJCQkJCQkJCoqTE0qKipNTU1NB00CAgICAgI/JCoqKioqVyQkJEQqKio4BwcHBwcCAgI/JCoqKipAJCQkJCcqKioqBwcHBwcHJCRGPAICAgICAgJYWDwqPDw8BwcHBwcbGxsbGy4uLgQETT8qKioqKipMKio4KiQkPyoqKioqKioqPDw8PEU8PDw8AgJYPBUCAgIkJCQkJFFOKkwqKipOTE5AJCQkTSokJCpATVBRTU1NJD8qQCQkJCQkJExOTE1NTlEHBwcHB01OPBAQEBAQMSsQJCQkJCQkPyoCAgICWRsbGxsbGxsbGxsbPDw8PDw8PDwLCwsLEBAQEFokJCQkJCQkJCQkJCQkRkFbJCQkJCQkJCQkJCQkXF1dJCQkJCQ5Al5fJCQkJCQk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JKMbHgICAgICJCoqAgICAgIkJKUbGxsbG05QJCQkJCQkKioqOAICAgICGxsbGxsbGxsbGwcHBwcHQD9AJCQkJD9NTipMTjhIAgIqKioqKkI6JCQkPyoqTioqKioHBwcHBwICUVAkJCQkJD8CJCQkJCQkUU0qKioqTFAkOQI3KjhOBwcHBwc5OQJZGxsbGxsbGyQkJCQkJE1OKk1MKgICAkAkJCQkJCQkP0xNTU1NTU1NJCQkUU1NUCQkTU0qKioqKiQkJCRNTioqKk1NTU1NTUxAQAICAgICAjcqKioqKioqJCRRTSoqKipNKkxAJDkCAgcHBwcHAgJATU4qKkxMTU5MKiRBJCQkJCQkJCQkJCRRTSoqKk1NKk44AgICAgICAgICAgIkJCoqTU4qKipMTk44AiQkJCQkJCQkJCQkP05NKioqTjkCAgIkJCQkJCQ/Tk0qKk4qKioqBwcHBwcbAlgqKioqTjgCAhsbGxsbGxtWTU1NTU1OTEBQTgICAgICAlFNKioqKk1NQEFNTU1NTU1NTU1NTU1NTT8qKioqQCQkJD8qKkw/KjgCAgI3KioqKj8qKkxOKiQkJCQkJCQqKioqKipMKgJBAkwqTExNTU1NOQICAgICAgIqKioqKioqTgIkJCQkJCQkKioqKkwqKipMKk4qKioqKioqKj8qKioqJCQkJCRNTU0qTE5OJCQkJCQkJCRLJCQkJD9MYAICAgIqUSQkJCQkJCQkTSoqKipNTDgCAgICAgIHBwcHByoqKhsbUzw8PDQUljw8PDw8PDw8PDw8PDw8FUAkJD8qKioqJCQkJCQkJCoqKioqKk1OKioqOAICAgICKioqOAICPDwnJ1g8PDw8PAcHBwcHqBsbG1YkJCQkJCQnPiQkJCQkJCQkJCQkS5ICGxsbHgICAgILCwsLCyAQEFFNTU1NTU1NTU1NTU1NTU4qQycnJycnJydPKioqKioqTSdeXl5eXl4kJCQkJCQuOAcHBwcHPDw8PDypTio8qU1Nqjo6OkoqKipFLioqKjw8PDw8PDwqKjw8KkU8PDw8PAsLCwsLEBAQEBALCwsLCwsLCwsLCwsLEAsQEBAQEBAQEBAQEBAQCwsLCwsQEBAQEB8QEBAQEBAQEBAQEBAhEBAQCwsLCwsLCwsLCwsLHxAQEBAhEBAQCwsLCx8QEBAQEBAQEBAQEBAhEBAQ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AJ6foKEAQe3GBAsDogCjAEH6xgQLCqSlAAAAAAAAAKYAQaXHBAsJpwAAAKipAACqAEG8xwQLAasAQczHBAsBrABB5McECwGtAEGDyAQLAa4AQafIBAsBrwBBxsgECy2wsQAAAACyswAAALS1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NUAQY3JBAsEAQIDBABBpMkEC5saAQACAAMABAAFAAYAAAAAAAcACAAJAAoACwAMAA0ADQANAA4ADwANAA0AEAARABIAEwAUABUAFgANABcADQANAA0AGAAZAAsACwALAAsAGgALABsAHAAdAB4AHwAgACAAIAAgACAAIAAgACEAIgAjACQACwAlACYADQAnAAkACQAJAAsACwALAA0ADQAoAA0ADQANACkADQANAA0ADQANAA0AIwAJACoACwALACsALAAgAC0ALgAvAC8AMAAxADIALwAvADMAIAA0ADUALwAvAC8ALwAvADYANwA4ADkAOgAvACAAOwAvAC8ALwAvAC8APAA1AD0ALwA+AD8ALwBAAEEAQgAvAEMALwAvAEQARQAvAC8ARgAgAEcAIABIAC8ALwBJAEoASwBMAE0ATgAvAC8ATwBQAFEAUgBTAFQALwAvAFUAVgBXAFgAWQBUAC8ALwBPAFoALwBSAFsAXAAvAC8AXQBeAF8AUgBgAGEALwAvAGIAYwBkAGUAZgBnAC8ALwBoAGkAagBSAGsAbAAvAC8AXQBtAG4AUgBvAHAALwAvAHEAcgBzAFIAdABcAC8ALwAvAHUAdgBlAHcALwAvAC8AeAB5AHoAQgBCAC8ALwAvAHsAfAB9AC8ALwB+AH8AgACBAC8ALwAvAIIAgwAgACAAhACFAIYAQgBCAC8ALwCHAIgAegCJAIoAiwCMAI0ACQAJAAkACwALAI4ALwAvAC8ALwAvAC8ALwAvAC8ALwAvAC8ALwCPAJAAkQAvAJIACQAJAAkACQAJAJMAlAAvAC8ALwAvAC8ALwAvAC8ALwAvAC8ALwAvAJUALwCWAJcALwAvAC8ALwCYAJkALwCaAC8AmwAvAJwALwCcAC8ALwAvAJ0AngCfAKAAkQChAKAALwAvAKIALwAvAC8AowAvAKQALwAvAC8ALwAvAC8ALwClAKYApwAvAC8ALwAvAC8ALwAvAC8AqACSAJIALwCpAC8ALwAvAKoAqwCsAKAAoACtAK4AIAAgACAAIACvAC8ALwCwALEAegCyALMAtAAvALUAPQAvAC8AtgC3AC8ALwC4ALkAugA9AC8AuwC8AAkACQAJAEIAvQC+AL8ACwALAMAAGwAbABsAwQDCAAsAwwAbABsAIAAgACAAIAANAA0ADQANAA0ADQANAA0ADQDEAA0ADQANAA0ADQANAMUAxQDFAMUAxQDGAMUACwDHAMcAxwDIAMkAygDKAMkAywDMAM0AzgDPANAA0QDSANMAGwDUANQA1ADVANYAIADXANgA2QDaANsAkQDcANwA3QDeAN8AkgDgAOEAkgDiAOMA4wDjAOMA4wDjAOMA4wDkAJIA5QCSAJIAkgCSAOYAkgDnAOMA6ACSAOkA6gCSAJIAkgCSAJIAkgCSAJEAkQCRAOsAkgCSAJIAkgDsAJEAkgCSAJIAkgCSAJIAkgCSAJIAkgCSAO0A7gCSAJIA7wCSAJIAkgCSAJIAkgDwAJIAkgCSAJIAkgCSAJIA8QDyAJEA8wCSAJIA9ADjAPUA4wD2APcA4wDjAOMA+ADjAPkAkgCSAJIA4wD6AJIAkgCSAAkACQAJAAsACwALAPsA/AANAA0ADQANAA0ADQD9AP4ACwALAAsALwAvAC8A/wAAAS8ALwAvAC8ALwAvACAAIAABAQIBAwEEAQUBBgEHAQcBCAEJAQoBCwEMAS8ALwAvAC8ADQGUAC8ALwAvAC8ADgEvAA8BLwAvAJIAkgCSAC8AkgCSABABkgARARIBkgCSABABkgCSABIBkgCSAJIAkgAvAC8ALwAvAJIAkgCSAJIALwATAS8ALwAvAC8ALwAvAC8AkgCSAJIAkgAvAC8AuwAUAS8APQAvAA0ADQAVARYBDQAXAS8ALwAvAC8AGAEZAR8AGgEbARwBDQANAA0AHQEeAR8BIAEhASIBIwEJACQBJQEvACYBJwEvAC8ALwAoASkBLwAvACoBKwGgACAALAE9AC8ALQEvAC4BLwEvAC8ASAAvAC8AMAExATIBMwE9AC8ALwA0ATUBNgE3AS8AOAEvAC8ALwA5AToAOgE7ATwBLwAvAC8ACwALAD0BPgELAAsACwALAAsALwAvAD8BoABAAUABQAFAAUABQAFAAUABQQFBAUEBQQFBAUEBQQFBAQsAQgFDAS8ALwAvAC8ALwAvAC8ALwBEAUUBRgEvAC8ALwAvAC8ARwGSAC8ALwAvAC8ASAEvAC8ASQGSAJIASgEgAEsBIABMAU0BTgFPAS8ALwAvAC8ALwAvAC8ALwBQAVEBAgADAAQABQBSAVMBVAEvAFUBLwAvAC8ALwBWAVcBWAGRAJEAWQHcANwA3ABaAVsBkgCSAJIAkgCSAJIAXAFdAV0BXQFdAV0BXQFdAV0BLwAvAC8ALwAvAC8AXgGRAC8ALwBfAS8AYAEvAC8APAAvAGEBLwAvAC8AYgHcANwACQAJAJMACwALAC8ALwAvAC8ALwCgAAkACQCTAAsACwAvAC8ALwAvAC8ALwBhAQkACQBjAQsACwAvAC8ALwAvABsAGwAbABsAGwAbABsAGwAvAC8ALwAvAC8AZAEvAGUBLwAvAGYBkQCRAJEALwBnAS8AaAEvAGEBLwAvAC8ALwAvAC8ALwBpAZEAkQCRAJEAagEvAC8AawGRAEIALwBsAS8AbQGRAJEAbgEvAG8BQgAvAC8ALwBwAS8AcQEvAHEBLwBwAZAAkQCRAJEAkQCRAAkACQAJAAkACwALAAsAcgEvAC8AcwGgAHQBCQB1AQsAdgHjAOMA4wDjAOMA4wDjAJEAkQCRAJEAkQCRAJEAkQAvAC8AdwEvABMBeAGSAHkBLwBtAXoBLwA8AHsBQgAvAHwBQgBCAC8AfQGRAC8ALwB+AS8ALwBrAX8BgAGBAYIBtAAvAC8AgwGEAS8ALwCgAGEALwCFAYYBhwEvAC8AiAG0AC8ALwCJAYoBiwGMAZEALwAvAI0BjgFqASAAIAAgAC8ALwBwAS8ALwCPAawAoABcAC8ALwBxAJABkQGSASAALwAvAC8AkwGUAZUBlgEgAC8ALwAvAJcBmAGZAS8ALwAvAC8ALwCaAZsBoACgAKAALwAvAJwBnQGeAZ8BIAAgAC8ALwAvAKABoQGgAEIAQgAvAC8AogGjAaAAoACgAKAALwCkAaUBpgEvAC8ALwAvAC8ALwCNAacBQgBCAEIAQgAJAAkACQAJAAsACwCAAKgBLwAvAC8AqQGqAaAAoACgAC8ALwAvAC8ALwCrAawBrQGuAS8ALwCvAbABsQEvAC8AsgGzAUIALwAvAC8ALwAvAEIAQgBCAEIAQgBCALQBrQEvAC8ALwAvAC8ALwC1AaAALwAvAJwBtgG1AYAAkQC3AS8AnAC4AbkBIAAgACAAIAAvAC8ALwBqAboBoAAvAC8AuwG8AaAALwAvAL0BoACgAC8ALwAvAC8ALwAvAC8AvgG/AS8ALwDAAcEBwgEgACAALwAvAC8ALwCRAMMBxAHFAdwA3ADcANwA3ADcANwAQgAvAC8ALwAvAC8ALwAvALUBLwAvAC8A0QDGASAALwAvAC8AxwHIAaAAoACgAKAAoAAvAC8ALwAvAC8ALwAyAS8ALwAvAC8ALwCgAC8ALwDJAS8ALwAvAMoBywHMAc0BLwAbABsAGwAbAM4BLwDPAaAACQAJAAkACQAJAAkACwALAJEA0AEJANEBCwALAAsACwAvAC8ALwAvAI8B0gGtAa0B0wHUARsAGwAbABsA1QHWAS8A1wHRANEA0QDRANEA0QCSAJIAkgCSAJIAkgCSANgBkgCSAJIAkgCSAJIAkgDjACAAIAAgACAAIACSAJIAkgCSAJIAkgCSAJIAkgDZAdoB2wGSANwBkgCSAJIAkgCSAJIAkgCSAJIA3QGSAJIAkgAJAN4BCwDfAeABCwDFAAkA4QHiAQkA4wELAAkA3gELAN8B4AELAMUACQDhAeIBCQDjAQsACQDeAQsA3wHgAQsAxQAJAOEB4gEJAOMBCwAJAN4BCwDFAAkA5AHlAeYB5wELAOgBCQDpAeoB6wHsAQsA7QEJAO4BCwDvAaAAoACgACAAIAAgAPABIAAgAPEB8gHzAfQBIAAgACAAIAAgACAA9QELAAsACwALAAsACwALACAAIAAgABsAGwAbABsAGwAgACAAIAAgACAAIAAgACAALwAvAC8A9gH3AZIAkgCSAC8ALwDHASAALwAvAPgB+QEvAC8ALwAvAC8ALwD6AaAALwAvAC8ALwAvAC8AxwH7AS8ALwAvAC8ALwAvAPwB/QEvAC8ALwAvAGYBIAAgACAACQAJAOEBCwD+ATIBQgBCAJEAkQD/AQACkQCRAJEAkQCRAJEAAQKRAJEAkQCRAJEALwAvAC8ALwAvAC8ALwDjAAICkgCSAJIAkgCSAJIAkgCSAJIAkgCSAJIAkgCSAAMCkgCSAJIAkgCSAOMA4wDjANEA0QDRANEA0QDRANEA0QBB4OMEC4QDqwOsA60DrgOyA7QDAADCA8kDygPLA9AD6QPqA+sD8AMAAAkEEAQRBBIEEwQXBAAAAAA4BDkEOgQ+BFYEAAAAAGQEZQRmBGcEawRtBAAA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CwJUBwBBnIIFCwJuBwBBuIIFCzxwBwAAcQcAAHIHAABzBwAAdAcAAHUHAAB2BwAAdwcAAHgHAAB5BwAAegcAAHsHAAAAAHwHAAB9BwAAfgcAQYCDBQscfweABwAAgQeCBwAAgweEBwAAhQeGBwAAhweIBwBBqIMFC8wHbwcAAAAAiQeKB4sHjAcAAAAAAACNBwAAxgKBAdQCywLHAWcAugA5AzkD8gDvAs0A8QBQAQwCWQKXAqQCsALiApsBsgHaAfQBiQLqAh8DbAC0AKAB4gGWAioDEwHOAZICtAJYAWoCpwIlAYQBuAHsAeQCdACSAKgAcAGeAeEBDwJeApQCmQLSAg0DIwMpAxoCKQJMAoIC9gIrA70C6QArAT0CZALnARwCygILA+gACwGcAb0ByQFJAlIC/gKnAGUClQCUADACTQKIAgADxAJZAZsBwAJpAAMBOQHwAQYCrgAeAngAMwFlAK4BdAFIArcA5AARAooCuQKoAdwCrAFdAXgCYwEFAm4AhwCTAJMBRAJwArwC7gKqAMEA9QApAXYBzwEfAvsCIQMsAy8DogCAAaQB2gIfAUoBUQFuAcsB3AH9AS4CTwJiAtYCjALeAvcCmgCjAMYA2QGrArkCJAE3AWEBpwE8Au4BcQDZAAMBGAE6AfMB+gFbAmAC8AIKAw4DFAN1AC0C7AIGA0ABbQB+AAQBCQF1AZsB3wELAo8C4QI3A3wB/QKhAIsBjgG2AcMB9gEEAhkCRwIXA4gAVAEBA3oAEQG+AdcCMQFCAZAB8AEDA5sAvgANAXkBhwGWAbAB9QEHAlcCrAKvAu0CCAOvAMQBvwDgAf4BkwIEAyUDLQONAbwBawI2AjgCPwLrAdcBwwJvAHwCnACZACABWgFCAgABswF/AdkCqAL/ArYCJwGAANIAAAAAAOMAAAB7AQAAAACWAO0BDQIgAicCKAIsAg8DQAJcAgAAlQIAAL8CAAAAAN8C5wIAAAAAAAAZAxoDGwMoA+UCBQN2AH8AggCmAKkAsQDPANUA1wDiAOUADAEOAT0BRwFJAU8BcQF3AX0BlAG5AcABygHdAeQB9wEbAiECIwIiAiQCJQImAioCKwIxAjQCOQJPAlECUwJWAl8CbAJxAnECiwKyArcCwQLCAswCzQLdAt8CCQMSAxYDOwFlA28CAAAAAGYAkQCGAHMAgQCKAKUAqwDPAMoAzgDUAOMA5wDwAPMA+gD+ACYBKAEvATQBPwFFAUEBSQFGAU8BVQFlAWgBagFyAXsBhAGFAYkBpQGoAbYByAHGAcoB0QHdARcC5QHqAe0B+wEAAgICCQIKAg0CDgIQAhUCFAIdAjUCOQI+AkoCTwJVAl8CfQKHAqICswK1ArcCugK/ArsCwQLAAr4CwgLFAs0C2ALgAusC8gICAwkDDwMQAxIDEwMWAyIDOQNQA08DWQM3AEEAQgBzA3wDlAM2AzgDAEGaiwULBjIGAABFBgBBtIsFC0pCBkMGjgePByYGJwYoBikGKwYsBi0GLwYwBgAAMQYzBjQGNQY3BgAAOAYAADkGOgYAADsGPAYAAD4GPwZABkEGRAYuBioGNgY9BgBBkowFCwKQBwBBqIwFCwKRBwBB1IwFCwaSBwAAkwcAQfaMBQsClAcAQZyNBQsElQeWBwBBto0FCwSXB5gHAEHGjQULBpkHAACaBwBB3I0FCwibBwAAAACcBwBBio4FCwieBwAAnQefBwBBto4FCwihB6AHAACiBwBB1I4FCwSjB6QHAEHwjgULAqUHAEGCjwULEKYHqQenB60HqAeqB6wHqwcAQbCPBQsGrweuB7AHAEHcjwULDrEHsgezB7QHtQe2B7cHAEGWkAULDLgHuQe6B7wHuwe9BwBBwJAFC/YJagBoAGsAOgNyAHYAdwB5AHsAfAB/AH0AIgA+A4IAgwCEAIkAOwMjAIUAiwA9A44AjwBwAJAAkQCcA5cAmAAlAJ0AngCfAKAAJgClAKYAqQCrAKwArQCuALAAsQCyALMAtQC2ALYAtgBBA9QBuAC5AEIDuwC8AL0AxADAAMIAwwDFAMcAyADJAMsAzADMAM4A0ADRANMA2gDVANsA1gDYAJkA6gDdAN4A3wDcAOEA4ADmAEMD6wDsAO0A7gDvAPQARANFA/cA+AD5APYA+wAnACgA/QD/AP8ARgMBAQIBAwEFAUcDBgEHAS0BCAEpAAoBDgEQAQ8BSQMSAUoDFQEUARYBGQEaASoAGwEcAR0BHgErAEsDLAAhASIBIwElAaYDKgFNA00DbQIsASwBLQBUA34DLgEwAS4AMgE1ATYBOAE8ATAALwA9AU4DPgFDAUQBRQFEAUgBSQFNAUsBTAFOAU8BUAFSAVMBVgFXAVsBXwFRA14BXAFgAWIBZwFSA2kBZgFkATEAawFtAW8BbAEyAHEBcwFTA3gBggF6ATUAfQE0ADMAjACNAIMBfgFmAk4AhAGFAYYBigGIAVgDNgCPAYwBkgGUAVoDlQGRAZcBNwCYAZkBmgGdAVsDnwE4AKEBXAOiATkAowGmAagBqQFdA0gDXgOqAV8DrQGvAasBsQG1AbkBtgG3AboBuwFgA7QBwQHCAToAxgHFAWEDvwHMAWIDYwPNAdIB0QHQATsA0wHWAdUB2AE8A9sBZAPeAWYD4wHlAeYBZwPoAekBaANpA+8B8QE8APIBPQA9APgB+QH7AfwB/wE+AAECagMDAmsDBgJMAwgCbANtA24DPwBAABACcANvA3EDcgMSAhMCEwIVAkIAFgJDAEQAdAMYAhoCHQJFAHUDJQJ2A3cDLAIvAkYAMQIyAjMCeAN5A3kDNwJHAHoDOgI7AkgAewNBAkkARQJDAkYCfQNLAkoATgJQAlQCSwB/A4ADTACBA1gCggNaAl0CXwKDA4QDYQKFA2MCVQNNAGcCaAJPAGkC/ACGA4cDVgNXA20CbgLbAlAAcwJyAnQCpAB1AnYCdwJ5AogDeAJ6An8CgAJ7AoEChgKLAn4CgwKEAoUCiQOLA4oDUQCNAo4CkAKPA5ECjANSAFMAjQOOA1QAmAKZApoCmwKdApwCnwKeAqICoAKhAqMCVQClAqYCVgCpAqoCkAOtAq4CVwCxAiQAkQOSA1gAWQC4Ar4CxQLHApMDyALJAs4CzwKVAz8D0QLQAtMCQAPVAtgClgOXA+MC5gLoApgD6QLxAvQC9QLzAvgC+QKZA/oCWgD8ApoDWwAHAxcBDAObA50DXABdABEDngNeAJ8DEwMTAxUDoAMYA18AHAMdAx4DIANgAKEDIgMkAyYDYQBiACcDogNjAKMDpAOlAy4DZAAwAzEDMgMzAzQDNQOnAwAAAAAAAAAAAQD//wIAAAD+/wAAAAACAAAA/v8AABAAAADw/wAAAQD//wAAAwADAAMA/f/9//3/AADgBwAA3wmDB3oHfgcAAMoIAAAAAIoAAAAHAPn/AAD//wEAIAcAADgIAAA8CDoIAAA6CCQFAAD//3b/CAAIAAgAAAAHAAcA+P/4//j/+f/c+gEA//8DAP3/AQAAAIb4gvgAAAAAffjg+AAAAAAg+Mj3AAAAAMb3xPfG9zb3AAAh9gBBwJoFC7gZeXl5WmhuaVp6enpaYmFyQW5tckFnbmVCbHJ5Q2F2ZURyb2VHa2VyR3JqdUd1cnVHZ25hSGluYUhyYmVIYXJpSGFkbkthbmFLb29hTG50YUxteWxNYXlyT2xtYVR1bGVUaWFoVHRiaVRvcG9CaWFyQnNuYUNyZWhDaWh0RXJtaEtnbm9Ncm15TW1hZ09ybnVSaG5pU2NyeVNhYWhUaWlpWXRyc0RodG9HbGF0SWRodUJvbmFIZ2xnVGJnYVR0cnBDYm1pTGJuaUxhbXNPd2FoU2VsYVRyYWdVaWd1QnRwb0NnYWxHcmFoS3VsYVRvZXBYb2x5U2duZlRpbGFCeHVzWG9va05nYWhQeG5oUGlyYUNtYWhDaWxhS2NwZUxpY3lMaWR5TGtjbE9nbmpScnVhU2RudVNpaWFWdHN2QXVtYUJweWdFaW1yQWlsaFBpdHJQYXZhSmlodEt1c2lMaWV0TWJyYVNoa3JPcm1hU2FuYUx0dmFUa3RhQmhhckJkbmFNbWthQ2NyZU1vcmVNZHJsUGRyaFNhcm9TcmthVHNzYUJiaGdBbHB1RGFibEVuYXJHam9oS2RuaVNhbmlMamhhTWluYU1kbmVNaWRvTW9vck10YWJOYnJhTm1yZVBnbm1IbWxhUGN1YVBwbGhQZGRpU2hyaVRhcmFXbW9oQXd1bEhydGFIdGx1TWdudUh3bmdTbWxkQXNraEJjcmFNZWdzT2duYVRhd2VObW5vR3Voc05veW9TYm5hWnJnb0Rnbm9HZ2hvUmFrYU1mZGVNb2dvU2Rnb1NteWxFZG5hTnBubUhvaGNXc3JoQ2thaURzdGlLaXplWW5tcENyZ3VPYXNuVG90b1RodGlWaHRtWml3YUttZ2FOYXJhR2hrdUdpYXJLb2FuT3VudVNyZG9UZ3R1VGZyZUJ0ZGlTb3lhVHNsb1RuIo4HYCKuB28izgfAACAIwUAgCMKAIAjDwCAIAAEhCAKBIQgmwiEIxAAiCKJeIgjFgCIIzQEjCADCIwgCQiQIoN4oCABeKQgEASoIAt5BCATeSAgGXkwIBkFgCAiBYAgKwWEIDAFjCMfAaQgK3oEIDgGDCAzeiAgQ3okIEl6LCA5ejAjIAKAIyUCgCMqAoAi83qAIEgGhCBSBoQgWwaEIywCiCLpeoggaAaMIBMKjCAZCpAi43qgIKMKpCBgBqggYXqsIGh6sCB7ewQj0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YrFiyWLPYtNi1GL8Yv5iPWNQY2hje2ODY6BjqWPEY8Vj5GMcZCJkUmRpZHdkfmSaZJ1kxGRPZVZlbGV4ZZllxWXiZeNlE2ZJZnRmiGaRZpxmtGbGZvRm+GYAZxdnG2chZ05nU2dWZ15ne2eFZ5dn82f6ZxdoH2hSaIFohWiOaKhoFGlCaaNp6mkCahNqqGrTattqBGsha1Rrcmt3a3lrn2uua7pru2tObGdsiGy/bMxszWzlbBZtG20ebTRtPm1BbWltam13bXhthW3Lbdpt6m35bRpuL25ubpxuum7Hbstu0W7bbg9vIm8jb25vxm/rb/5vG3AecDlwSnBwcHdwfXCZcK1wyHDZcEVxSXFucZxxznHQcRByG3IocityNXJQcmJygHKVcq9ywHL8cipzdXN6c4dzi3Olc7Jz3nMGdAl0InRHdFx0aXRxdIV0iXSYdMp0BnUkdTt1PnVZdWV1cHXidRB2HXYfdkJ2aXbKdtt253b0dgF3Hncfd0B3SneLd6d3TnhreIx4kXjKeMx4+3gqeTx5PnlIeUl5UHlWeV15XnlleX95jXmOeY95rnnKeet5HHpAekp6T3qBerF6y3rueiB7wHvGe8l7PnxgfHt8kny+fNJ81nzjfOd86HwAfRB9In0vfVt9Y32gfb59x330fQJ+CX43fkF+RX4+f3J/eX96f4V/lX+af71/+n8BgAWARoBggG+AcIB+gIuArYCygAOBPoHYgeiB7YEBggSCGIJvgnmCi4KRgp2CsYKzgr2C5YLmgh2DI4M2g1KDU4Njg62DvYPJg8qDzIPcg+eD74Pxgz2ESYRXhO6E8YTzhPyEFoVkhc2F+oUGhhKGLYY/hlCGXIZnhmmGiIaphuKGDocoh2uHeYeGh7qH4YcBiB+ITIhgiGOIwojPiNeI3ojhiPiI+ogQiUGJZImGiYuJlomgiqqKv4rLitKK1ortiviK/ooBizmLWIuAi4qLSIxVjKuMwYzCjMiM04wIjRuNd428jcuN743wjcqO1I4mjyqPOI87j2KPno+wj7aPI5A4kHKQfJCPkJSQzpDekPGQ/ZARkRuRapGZkbSRzJHPkdGRNJI4knaSfJLXktiSBJNKk/mTFZSLla2Vt5UulkuWTZZ1lniWfJaGlqOWt5a4lsOW4pbjlvaW95YjlzKXSJdWl9uX4Jf/lwuYGJgpmDuYXpji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\";var wasmBinary=typeof Buffer===\"function\"?new Uint8Array(Buffer.from(wasmBase64,\"base64\")):Uint8Array.from(atob(wasmBase64),c=>c.charCodeAt(0));var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith(\"file://\");var readyPromiseResolve,readyPromiseReject;var wasmMemory;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;Module[\"HEAP8\"]=HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(b);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(b);Module[\"HEAP32\"]=HEAP32=new Int32Array(b);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(b);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports[\"__wasm_call_ctors\"]()}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module[\"monitorRunDependencies\"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module[\"monitorRunDependencies\"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module[\"onAbort\"]?.(what);what=\"Aborted(\"+what+\")\";err(what);ABORT=true;what+=\". Build with -sASSERTIONS for more info.\";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile(\"hb.wasm\")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:\"same-origin\"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err(\"falling back to ArrayBuffer instantiation\")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{env:wasmImports,wasi_snapshot_preview1:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;Module[\"wasmExports\"]=wasmExports;wasmMemory=wasmExports[\"memory\"];updateMemoryViews();wasmTable=wasmExports[\"__indirect_function_table\"];assignWasmExports(wasmExports);removeRunDependency(\"wasm-instantiate\");return wasmExports}addRunDependency(\"wasm-instantiate\");function receiveInstantiationResult(result){return receiveInstance(result[\"instance\"])}var info=getWasmImports();if(Module[\"instantiateWasm\"]){return new Promise((resolve,reject)=>{Module[\"instantiateWasm\"](info,(mod,inst)=>{resolve(receiveInstance(mod,inst))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name=\"ExitStatus\";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var __abort_js=()=>abort(\"\");var runtimeKeepaliveCounter=0;var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var timers={};var handleException=e=>{if(e instanceof ExitStatus||e==\"unwind\"){return EXITSTATUS}quit_(1,e)};var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module[\"onExit\"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var _emscripten_get_now=()=>performance.now();var __setitimer_js=(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(()=>__emscripten_timeout(which,_emscripten_get_now()))},timeout_ms);timers[which]={id,timeout_ms};return 0};var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var uleb128EncodeWithLen=arr=>{const n=arr.length;return[n%128|128,n>>7,...arr]};var wasmTypeCodes={i:127,p:127,j:126,f:125,d:124,e:111};var generateTypePack=types=>uleb128EncodeWithLen(Array.from(types,type=>{var code=wasmTypeCodes[type];return code}));var convertJsFunctionToWasm=(func,sig)=>{var bytes=Uint8Array.of(0,97,115,109,1,0,0,0,1,...uleb128EncodeWithLen([1,96,...generateTypePack(sig.slice(1)),...generateTypePack(sig[0]===\"v\"?\"\":sig[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);var module=new WebAssembly.Module(bytes);var instance=new WebAssembly.Instance(module,{e:{f:func}});var wrappedFunc=instance.exports[\"f\"];return wrappedFunc};var wasmTable;var getWasmTableEntry=funcPtr=>wasmTable.get(funcPtr);var updateTableMap=(offset,count)=>{if(functionsInTableMap){for(var i=offset;i<offset+count;i++){var item=getWasmTableEntry(i);if(item){functionsInTableMap.set(item,i)}}}};var functionsInTableMap;var getFunctionAddress=func=>{if(!functionsInTableMap){functionsInTableMap=new WeakMap;updateTableMap(0,wasmTable.length)}return functionsInTableMap.get(func)||0};var freeTableIndexes=[];var getEmptyTableSlot=()=>{if(freeTableIndexes.length){return freeTableIndexes.pop()}return wasmTable[\"grow\"](1)};var setWasmTableEntry=(idx,func)=>wasmTable.set(idx,func);var addFunction=(func,sig)=>{var rtn=getFunctionAddress(func);if(rtn){return rtn}var ret=getEmptyTableSlot();try{setWasmTableEntry(ret,func)}catch(err){if(!(err instanceof TypeError)){throw err}var wrapped=convertJsFunctionToWasm(func,sig);setWasmTableEntry(ret,wrapped)}functionsInTableMap.set(func,ret);return ret};var removeFunction=index=>{functionsInTableMap.delete(getWasmTableEntry(index));setWasmTableEntry(index,null);freeTableIndexes.push(index)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);{if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(Module[\"print\"])out=Module[\"print\"];if(Module[\"printErr\"])err=Module[\"printErr\"];if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"]}Module[\"wasmExports\"]=wasmExports;Module[\"stackSave\"]=stackSave;Module[\"stackRestore\"]=stackRestore;Module[\"stackAlloc\"]=stackAlloc;Module[\"addFunction\"]=addFunction;Module[\"removeFunction\"]=removeFunction;var _hb_blob_create,_hb_blob_destroy,_hb_blob_get_length,_hb_blob_get_data,_hb_buffer_serialize,_hb_buffer_create,_hb_buffer_reset,_hb_buffer_reference,_hb_buffer_destroy,_hb_buffer_get_content_type,_hb_buffer_set_direction,_hb_buffer_set_script,_hb_buffer_set_language,_hb_buffer_set_flags,_hb_buffer_set_cluster_level,_hb_buffer_clear_contents,_hb_buffer_get_length,_hb_buffer_get_glyph_infos,_hb_buffer_get_glyph_positions,_hb_glyph_info_get_glyph_flags,_hb_buffer_guess_segment_properties,_hb_buffer_add_utf8,_hb_buffer_add_utf16,_hb_buffer_add_codepoints,_hb_buffer_set_message_func,_hb_language_from_string,_hb_language_to_string,_hb_script_from_string,_hb_version,_hb_version_string,_hb_feature_from_string,_malloc,_free,_hb_draw_funcs_set_move_to_func,_hb_draw_funcs_set_line_to_func,_hb_draw_funcs_set_quadratic_to_func,_hb_draw_funcs_set_cubic_to_func,_hb_draw_funcs_set_close_path_func,_hb_draw_funcs_create,_hb_draw_funcs_destroy,_hb_face_create,_hb_face_destroy,_hb_face_reference_table,_hb_face_get_upem,_hb_face_collect_unicodes,_hb_font_funcs_create,_hb_font_funcs_destroy,_hb_font_funcs_set_font_h_extents_func,_hb_font_funcs_set_font_v_extents_func,_hb_font_funcs_set_nominal_glyph_func,_hb_font_funcs_set_nominal_glyphs_func,_hb_font_funcs_set_variation_glyph_func,_hb_font_funcs_set_glyph_h_advance_func,_hb_font_funcs_set_glyph_v_advance_func,_hb_font_funcs_set_glyph_h_advances_func,_hb_font_funcs_set_glyph_v_advances_func,_hb_font_funcs_set_glyph_h_origin_func,_hb_font_funcs_set_glyph_v_origin_func,_hb_font_funcs_set_glyph_h_kerning_func,_hb_font_funcs_set_glyph_extents_func,_hb_font_funcs_set_glyph_name_func,_hb_font_funcs_set_glyph_from_name_func,_hb_font_get_h_extents,_hb_font_get_v_extents,_hb_font_get_glyph_h_advance,_hb_font_get_glyph_v_advance,_hb_font_get_glyph_h_origin,_hb_font_get_glyph_v_origin,_hb_font_get_glyph_extents,_hb_font_get_glyph_from_name,_hb_font_draw_glyph,_hb_font_glyph_to_string,_hb_font_create,_hb_font_set_variations,_hb_font_create_sub_font,_hb_font_reference,_hb_font_destroy,_hb_font_set_funcs,_hb_font_set_scale,_hb_ot_layout_get_glyph_class,_hb_ot_layout_table_get_script_tags,_hb_ot_layout_table_get_feature_tags,_hb_ot_layout_script_get_language_tags,_hb_ot_layout_language_get_feature_tags,_hb_ot_layout_feature_get_name_ids,_hb_ot_name_list_names,_hb_ot_name_get_utf16,_hb_set_create,_hb_set_destroy,_hb_ot_tag_to_script,_hb_ot_tag_to_language,_hb_ot_var_get_axis_infos,_hb_set_get_population,_hb_set_next_many,_hb_shape,__emscripten_timeout,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current;function assignWasmExports(wasmExports){Module[\"_hb_blob_create\"]=_hb_blob_create=wasmExports[\"hb_blob_create\"];Module[\"_hb_blob_destroy\"]=_hb_blob_destroy=wasmExports[\"hb_blob_destroy\"];Module[\"_hb_blob_get_length\"]=_hb_blob_get_length=wasmExports[\"hb_blob_get_length\"];Module[\"_hb_blob_get_data\"]=_hb_blob_get_data=wasmExports[\"hb_blob_get_data\"];Module[\"_hb_buffer_serialize\"]=_hb_buffer_serialize=wasmExports[\"hb_buffer_serialize\"];Module[\"_hb_buffer_create\"]=_hb_buffer_create=wasmExports[\"hb_buffer_create\"];Module[\"_hb_buffer_reset\"]=_hb_buffer_reset=wasmExports[\"hb_buffer_reset\"];Module[\"_hb_buffer_reference\"]=_hb_buffer_reference=wasmExports[\"hb_buffer_reference\"];Module[\"_hb_buffer_destroy\"]=_hb_buffer_destroy=wasmExports[\"hb_buffer_destroy\"];Module[\"_hb_buffer_get_content_type\"]=_hb_buffer_get_content_type=wasmExports[\"hb_buffer_get_content_type\"];Module[\"_hb_buffer_set_direction\"]=_hb_buffer_set_direction=wasmExports[\"hb_buffer_set_direction\"];Module[\"_hb_buffer_set_script\"]=_hb_buffer_set_script=wasmExports[\"hb_buffer_set_script\"];Module[\"_hb_buffer_set_language\"]=_hb_buffer_set_language=wasmExports[\"hb_buffer_set_language\"];Module[\"_hb_buffer_set_flags\"]=_hb_buffer_set_flags=wasmExports[\"hb_buffer_set_flags\"];Module[\"_hb_buffer_set_cluster_level\"]=_hb_buffer_set_cluster_level=wasmExports[\"hb_buffer_set_cluster_level\"];Module[\"_hb_buffer_clear_contents\"]=_hb_buffer_clear_contents=wasmExports[\"hb_buffer_clear_contents\"];Module[\"_hb_buffer_get_length\"]=_hb_buffer_get_length=wasmExports[\"hb_buffer_get_length\"];Module[\"_hb_buffer_get_glyph_infos\"]=_hb_buffer_get_glyph_infos=wasmExports[\"hb_buffer_get_glyph_infos\"];Module[\"_hb_buffer_get_glyph_positions\"]=_hb_buffer_get_glyph_positions=wasmExports[\"hb_buffer_get_glyph_positions\"];Module[\"_hb_glyph_info_get_glyph_flags\"]=_hb_glyph_info_get_glyph_flags=wasmExports[\"hb_glyph_info_get_glyph_flags\"];Module[\"_hb_buffer_guess_segment_properties\"]=_hb_buffer_guess_segment_properties=wasmExports[\"hb_buffer_guess_segment_properties\"];Module[\"_hb_buffer_add_utf8\"]=_hb_buffer_add_utf8=wasmExports[\"hb_buffer_add_utf8\"];Module[\"_hb_buffer_add_utf16\"]=_hb_buffer_add_utf16=wasmExports[\"hb_buffer_add_utf16\"];Module[\"_hb_buffer_add_codepoints\"]=_hb_buffer_add_codepoints=wasmExports[\"hb_buffer_add_codepoints\"];Module[\"_hb_buffer_set_message_func\"]=_hb_buffer_set_message_func=wasmExports[\"hb_buffer_set_message_func\"];Module[\"_hb_language_from_string\"]=_hb_language_from_string=wasmExports[\"hb_language_from_string\"];Module[\"_hb_language_to_string\"]=_hb_language_to_string=wasmExports[\"hb_language_to_string\"];Module[\"_hb_script_from_string\"]=_hb_script_from_string=wasmExports[\"hb_script_from_string\"];Module[\"_hb_version\"]=_hb_version=wasmExports[\"hb_version\"];Module[\"_hb_version_string\"]=_hb_version_string=wasmExports[\"hb_version_string\"];Module[\"_hb_feature_from_string\"]=_hb_feature_from_string=wasmExports[\"hb_feature_from_string\"];Module[\"_malloc\"]=_malloc=wasmExports[\"malloc\"];Module[\"_free\"]=_free=wasmExports[\"free\"];Module[\"_hb_draw_funcs_set_move_to_func\"]=_hb_draw_funcs_set_move_to_func=wasmExports[\"hb_draw_funcs_set_move_to_func\"];Module[\"_hb_draw_funcs_set_line_to_func\"]=_hb_draw_funcs_set_line_to_func=wasmExports[\"hb_draw_funcs_set_line_to_func\"];Module[\"_hb_draw_funcs_set_quadratic_to_func\"]=_hb_draw_funcs_set_quadratic_to_func=wasmExports[\"hb_draw_funcs_set_quadratic_to_func\"];Module[\"_hb_draw_funcs_set_cubic_to_func\"]=_hb_draw_funcs_set_cubic_to_func=wasmExports[\"hb_draw_funcs_set_cubic_to_func\"];Module[\"_hb_draw_funcs_set_close_path_func\"]=_hb_draw_funcs_set_close_path_func=wasmExports[\"hb_draw_funcs_set_close_path_func\"];Module[\"_hb_draw_funcs_create\"]=_hb_draw_funcs_create=wasmExports[\"hb_draw_funcs_create\"];Module[\"_hb_draw_funcs_destroy\"]=_hb_draw_funcs_destroy=wasmExports[\"hb_draw_funcs_destroy\"];Module[\"_hb_face_create\"]=_hb_face_create=wasmExports[\"hb_face_create\"];Module[\"_hb_face_destroy\"]=_hb_face_destroy=wasmExports[\"hb_face_destroy\"];Module[\"_hb_face_reference_table\"]=_hb_face_reference_table=wasmExports[\"hb_face_reference_table\"];Module[\"_hb_face_get_upem\"]=_hb_face_get_upem=wasmExports[\"hb_face_get_upem\"];Module[\"_hb_face_collect_unicodes\"]=_hb_face_collect_unicodes=wasmExports[\"hb_face_collect_unicodes\"];Module[\"_hb_font_funcs_create\"]=_hb_font_funcs_create=wasmExports[\"hb_font_funcs_create\"];Module[\"_hb_font_funcs_destroy\"]=_hb_font_funcs_destroy=wasmExports[\"hb_font_funcs_destroy\"];Module[\"_hb_font_funcs_set_font_h_extents_func\"]=_hb_font_funcs_set_font_h_extents_func=wasmExports[\"hb_font_funcs_set_font_h_extents_func\"];Module[\"_hb_font_funcs_set_font_v_extents_func\"]=_hb_font_funcs_set_font_v_extents_func=wasmExports[\"hb_font_funcs_set_font_v_extents_func\"];Module[\"_hb_font_funcs_set_nominal_glyph_func\"]=_hb_font_funcs_set_nominal_glyph_func=wasmExports[\"hb_font_funcs_set_nominal_glyph_func\"];Module[\"_hb_font_funcs_set_nominal_glyphs_func\"]=_hb_font_funcs_set_nominal_glyphs_func=wasmExports[\"hb_font_funcs_set_nominal_glyphs_func\"];Module[\"_hb_font_funcs_set_variation_glyph_func\"]=_hb_font_funcs_set_variation_glyph_func=wasmExports[\"hb_font_funcs_set_variation_glyph_func\"];Module[\"_hb_font_funcs_set_glyph_h_advance_func\"]=_hb_font_funcs_set_glyph_h_advance_func=wasmExports[\"hb_font_funcs_set_glyph_h_advance_func\"];Module[\"_hb_font_funcs_set_glyph_v_advance_func\"]=_hb_font_funcs_set_glyph_v_advance_func=wasmExports[\"hb_font_funcs_set_glyph_v_advance_func\"];Module[\"_hb_font_funcs_set_glyph_h_advances_func\"]=_hb_font_funcs_set_glyph_h_advances_func=wasmExports[\"hb_font_funcs_set_glyph_h_advances_func\"];Module[\"_hb_font_funcs_set_glyph_v_advances_func\"]=_hb_font_funcs_set_glyph_v_advances_func=wasmExports[\"hb_font_funcs_set_glyph_v_advances_func\"];Module[\"_hb_font_funcs_set_glyph_h_origin_func\"]=_hb_font_funcs_set_glyph_h_origin_func=wasmExports[\"hb_font_funcs_set_glyph_h_origin_func\"];Module[\"_hb_font_funcs_set_glyph_v_origin_func\"]=_hb_font_funcs_set_glyph_v_origin_func=wasmExports[\"hb_font_funcs_set_glyph_v_origin_func\"];Module[\"_hb_font_funcs_set_glyph_h_kerning_func\"]=_hb_font_funcs_set_glyph_h_kerning_func=wasmExports[\"hb_font_funcs_set_glyph_h_kerning_func\"];Module[\"_hb_font_funcs_set_glyph_extents_func\"]=_hb_font_funcs_set_glyph_extents_func=wasmExports[\"hb_font_funcs_set_glyph_extents_func\"];Module[\"_hb_font_funcs_set_glyph_name_func\"]=_hb_font_funcs_set_glyph_name_func=wasmExports[\"hb_font_funcs_set_glyph_name_func\"];Module[\"_hb_font_funcs_set_glyph_from_name_func\"]=_hb_font_funcs_set_glyph_from_name_func=wasmExports[\"hb_font_funcs_set_glyph_from_name_func\"];Module[\"_hb_font_get_h_extents\"]=_hb_font_get_h_extents=wasmExports[\"hb_font_get_h_extents\"];Module[\"_hb_font_get_v_extents\"]=_hb_font_get_v_extents=wasmExports[\"hb_font_get_v_extents\"];Module[\"_hb_font_get_glyph_h_advance\"]=_hb_font_get_glyph_h_advance=wasmExports[\"hb_font_get_glyph_h_advance\"];Module[\"_hb_font_get_glyph_v_advance\"]=_hb_font_get_glyph_v_advance=wasmExports[\"hb_font_get_glyph_v_advance\"];Module[\"_hb_font_get_glyph_h_origin\"]=_hb_font_get_glyph_h_origin=wasmExports[\"hb_font_get_glyph_h_origin\"];Module[\"_hb_font_get_glyph_v_origin\"]=_hb_font_get_glyph_v_origin=wasmExports[\"hb_font_get_glyph_v_origin\"];Module[\"_hb_font_get_glyph_extents\"]=_hb_font_get_glyph_extents=wasmExports[\"hb_font_get_glyph_extents\"];Module[\"_hb_font_get_glyph_from_name\"]=_hb_font_get_glyph_from_name=wasmExports[\"hb_font_get_glyph_from_name\"];Module[\"_hb_font_draw_glyph\"]=_hb_font_draw_glyph=wasmExports[\"hb_font_draw_glyph\"];Module[\"_hb_font_glyph_to_string\"]=_hb_font_glyph_to_string=wasmExports[\"hb_font_glyph_to_string\"];Module[\"_hb_font_create\"]=_hb_font_create=wasmExports[\"hb_font_create\"];Module[\"_hb_font_set_variations\"]=_hb_font_set_variations=wasmExports[\"hb_font_set_variations\"];Module[\"_hb_font_create_sub_font\"]=_hb_font_create_sub_font=wasmExports[\"hb_font_create_sub_font\"];Module[\"_hb_font_reference\"]=_hb_font_reference=wasmExports[\"hb_font_reference\"];Module[\"_hb_font_destroy\"]=_hb_font_destroy=wasmExports[\"hb_font_destroy\"];Module[\"_hb_font_set_funcs\"]=_hb_font_set_funcs=wasmExports[\"hb_font_set_funcs\"];Module[\"_hb_font_set_scale\"]=_hb_font_set_scale=wasmExports[\"hb_font_set_scale\"];Module[\"_hb_ot_layout_get_glyph_class\"]=_hb_ot_layout_get_glyph_class=wasmExports[\"hb_ot_layout_get_glyph_class\"];Module[\"_hb_ot_layout_table_get_script_tags\"]=_hb_ot_layout_table_get_script_tags=wasmExports[\"hb_ot_layout_table_get_script_tags\"];Module[\"_hb_ot_layout_table_get_feature_tags\"]=_hb_ot_layout_table_get_feature_tags=wasmExports[\"hb_ot_layout_table_get_feature_tags\"];Module[\"_hb_ot_layout_script_get_language_tags\"]=_hb_ot_layout_script_get_language_tags=wasmExports[\"hb_ot_layout_script_get_language_tags\"];Module[\"_hb_ot_layout_language_get_feature_tags\"]=_hb_ot_layout_language_get_feature_tags=wasmExports[\"hb_ot_layout_language_get_feature_tags\"];Module[\"_hb_ot_layout_feature_get_name_ids\"]=_hb_ot_layout_feature_get_name_ids=wasmExports[\"hb_ot_layout_feature_get_name_ids\"];Module[\"_hb_ot_name_list_names\"]=_hb_ot_name_list_names=wasmExports[\"hb_ot_name_list_names\"];Module[\"_hb_ot_name_get_utf16\"]=_hb_ot_name_get_utf16=wasmExports[\"hb_ot_name_get_utf16\"];Module[\"_hb_set_create\"]=_hb_set_create=wasmExports[\"hb_set_create\"];Module[\"_hb_set_destroy\"]=_hb_set_destroy=wasmExports[\"hb_set_destroy\"];Module[\"_hb_ot_tag_to_script\"]=_hb_ot_tag_to_script=wasmExports[\"hb_ot_tag_to_script\"];Module[\"_hb_ot_tag_to_language\"]=_hb_ot_tag_to_language=wasmExports[\"hb_ot_tag_to_language\"];Module[\"_hb_ot_var_get_axis_infos\"]=_hb_ot_var_get_axis_infos=wasmExports[\"hb_ot_var_get_axis_infos\"];Module[\"_hb_set_get_population\"]=_hb_set_get_population=wasmExports[\"hb_set_get_population\"];Module[\"_hb_set_next_many\"]=_hb_set_next_many=wasmExports[\"hb_set_next_many\"];Module[\"_hb_shape\"]=_hb_shape=wasmExports[\"hb_shape\"];__emscripten_timeout=wasmExports[\"_emscripten_timeout\"];__emscripten_stack_restore=wasmExports[\"_emscripten_stack_restore\"];__emscripten_stack_alloc=wasmExports[\"_emscripten_stack_alloc\"];_emscripten_stack_get_current=wasmExports[\"emscripten_stack_get_current\"]}var wasmImports={_abort_js:__abort_js,_emscripten_runtime_keepalive_clear:__emscripten_runtime_keepalive_clear,_setitimer_js:__setitimer_js,emscripten_resize_heap:_emscripten_resize_heap,proc_exit:_proc_exit};var wasmExports=await createWasm();function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module[\"onRuntimeInitialized\"]?.();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(()=>{setTimeout(()=>Module[\"setStatus\"](\"\"),1);doRun()},1)}else{doRun()}}function preInit(){if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].shift()()}}}preInit();run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}\n;return moduleRtn}})();if(typeof exports===\"object\"&&typeof module===\"object\"){module.exports=createHarfBuzz;module.exports.default=createHarfBuzz}else if(typeof define===\"function\"&&define[\"amd\"])define([],()=>createHarfBuzz);\n","var hbjs = require('./hbjs.js');\nvar hb = require('./hb.js');\n\nmodule.exports = new Promise(function (resolve, reject) {\n  hb().then((instance) => {\n    resolve(hbjs(instance));\n  }, reject);\n});\n","\n              const base64 = \"AGFzbQEAAAABjAVNYAJ/fwBgAn9/AX9gA39/fwF/YAV/f399fwBgAX8Bf2ADf399AX1gBH9/f38AYAN/f38BfmABfwBgAn99AX1gCH99fX19f39/AGAEf39/fQBgA39/fwBgBX9/f39/AX9gBH9/f30BfWAFf39/f30AYAZ/f39/f38AYAV/f39/fwBgBn1/fX9/fwF9YAR/f39/AX9gBX9/fn9/AGAFf39/fn8AYAF/AX1gAn9/AX1gA39/fgBgBX99fX9/AGAEf399fQBgAX8BfmADfn5/AX5gA399fwF9YAR+fn9/AX5gBH9/f38BfmAHf39/f39/fwBgAABgAn9+AGAEf359fQBgBH9/fn8AYAN/fX0Bf2ATf39/fX99f39/f39/f39/f39/fwBgC39/f39/f39/f39/AGADf31/AX9gCn9/f39/f39/f38AYAl/f39/f399f38AYAR/fX9/AX9gBn9/f35/fwBgBH9/f34AYA9/f35/f39/f39/f39/f38AYAV/f39/fwF9YAh9fX1/f39/fwBgCH9/fn9/f31/AGADf39/AX1gCH9/f39/f39/AX9gB39/f399f30AYAR/fX9/AGADfX9/AX1gC399fX9/fX9/f31/AGAEfX9/fwF/YAh/fn9/fX1/fwBgBn9/f399fQBgBX1/fX9/AX9gA39/fQBgBn9/f319fwBgBH1/f38BfWAFf319f38BfWAHf39/f39/fwF/YAN/f34Bf2AFf399fX8Bf2AAAX9gCH9/f39/f39/AGAJf39/f39/f39/AX9gDH9/f39/f39/f39/fwBgCX9/f39/f39/fwBgBn9/f39/fwF/YAJ+fwF/YAJ8fwF8YAJ8fAF8YAJ9fQF9AiICA2VudgxyZXNvbHZlX2NhbGMACQNlbnYHbWVhc3VyZQAKA8kFxwUAAAsMCwANDg8PAA8OEAAGBgAAAAAABgAAEAYEERAAEgAEBAAIAAYMAAATAQQEAAIMDAwMAQEAABAAEwAADAQAAAgMCAAAAAQIAgAUAAgMFQEMCAwAAQAMABETEwwMBgAADAEBDAAADAAABBEAAAAAFgwABAAAAAAAAAAABAAXFBgREAAMAAABBQ4ODxcGGRoMCw8ICAIMGwEcCAQCAAwBAQEBAQkdBRQMAAgABQUDBAQEAwAABggIAAwICAYICAgICAgI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ACEHDAILIAogGpQhGQtBASEGCyAAIAspAgA3AmAgAEHoAGogC0EIaikCADcCACAFKALcASELIAUoAuABIQ0gASgCCCEOIAEqAgwhECACQcgAaiAFKALUASAFKALYASABKAIAIAEqAgQQi4CAgAAgAioCTCEbIAIoAkghDyACQcAAaiALIA0gDiAQEIuAgIAAIAUoAuwBIQsgBSgC8AEhDSABKAIIIQ4gASoCDCEQIAIqAkQhHCACKAJAIR0gAkE4aiAFKALkASAFKALoASABKAIAIAEqAgQQi4CAgAAgAioCPCEeIAIoAjghHyACQTBqIAsgDSAOIBAQi4CAgAAgBSgCvAEhCyAFKALAASENIAUoArQBIQ4gBSgCuAEhICAIKAI4IQEgCCoCPCEQIAUoAqwBISEgBSgCsAEhIiACKgI0ISMgAigCMCEkIAJBKGogBSgCpAEgBSgCqAEgCCgCMCIlIAgqAjQiJhCNgICAACACKgIsIScgAigCKCEoIAJBIGogISAiICUgJhCNgICAACACKgIkISYgAigCICEhIAJBGGogDiAgIAEgEBCNgICAACACKgIcISkgAigCGCEOIAJBEGogCyANIAEgEBCNgICAACAFKAKMAiELIAUoApACIQ0gBSgChAIhICAFKAKIAiEiIAUoAvwBISUgBSgCgAIhKiACKgIUISsgAigCECEsIAUoAvQBIAUoAvgBIAgoAjAiASAIKgI0IhAQjoCAgAAhLSAlICogASAQEI6AgIAAIS4gICAiIAEgEBCOgICAACEvIAsgDSABIBAQjoCAgAAhMCAFKAKMAiELIAUoAoQCIQ0gBSgC9AEhICAFKAL8ASEiIAUoArACISUgBSgCrAIhKiAFKAKoAiExIAUoAqQCITIgBSgCoAIhMyAFKAKcAiE0IAUoApQCIAUoApgCIAgoAjAiASAIKgI0IhAQiYCAgAAhNSA0IDMgASAQEImAgIAAITYgMiAxIAEgEBCJgICAACE3ICogJSABIBAQiYCAgAAhOCAFKALQAiElIAUoAswCISogBSgCyAIhMSAFKALEAiEyIAUoAsACITMgBSgCvAIhNCAFKAK0AiAFKAK4AiAIKAIwIgEgCCoCNCIQEImAgIAAITkgNCAzIAEgEBCJgICAACE6IDIgMSABIBAQiYCAgAAhOyAqICUgASAQEImAgIAAITwgAkEIaiAILQCQASAFLQD2AiIBIAFBAkYiARtBA3EgCEGRAWogBUH3AmogARstAAAgBS0AhQMgCC0AlgEgCC0AmAEQj4CAgAAgBSkC7AIhPSAFLwGAAyEBIAUtAI4DIQggBSoCoAEhPiACLQAIIQUgAEEAOgCAAiACLQAJISUgAEG4AWpCADcDACAAQcABakIANwMAIABCADcD4AEgAEHoAWpCADcDACAAQfABakIANwMAIABB+AFqQQA2AgAgACAHNgIAIAAgGSARIBWSIBIgFpKSQwAAAAAgDEEBcSIHGyIQkjgCBCAAIAY2AgggACAaIBMgF5IgFCAYkpJDAAAAACAHGyIZkjgCDCAAIA82AhAgACAbIBCSOAIUIAAgHTYCGCAAIBwgGZI4AhwgACAfNgIgIAAgHiAQkjgCJCAAICQ2AiggACAjIBmSOAIsIAAgAzYCMCAAIAo4AjQgACAoNgI4IAAgJzgCPCAAICE2AkAgACAmOAJEIAAgDjYCSCAAICk4AkwgACAsNgJQIAAgKzgCVCAAIAk3A1ggACAQOAJwIAAgGTgCdCAAIC04AnggACAuOAJ8IAAgLzgCgAEgACAwOAKEASAAIDU4AogBIAAgNjgCjAEgACA3OAKQASAAIDg4ApQBIAAgOTgCmAEgACA6OAKcASAAIDs4AqABIAAgPDgCpAEgAEGAAkEAICJBA0YbICBBA0ZyQYCABEEAIA1BA0YbckGAgIAIQQAgC0EDRhtyNgLIASAAIAQ2AswBIAAgPjgC0AEgAEGwAWpCADcDACAAQQA2AtwBIAAgBToA/AEgACAlOgD9ASAAQQA6AIECIAAgCDoAggIgACABOwH+ASAAQgA3A6gBIAAgPUIgiTcC1AEMAQsgAEECNgIACyACQeAAaiSAgICAAAt7AgF/AX1BACEFAkACQAJAAkACQAJAIAEOBAMAAQUCCyACviEGDAMLIAQgAr6UIQYgAyEFDAMLQbiZyYAAQShBlLDAgAAQhYCAgAAACyADQQFxRQ0BIAJBA3ZBf2ogBBCAgICAACEGC0EBIQULIAAgBjgCBCAAIAU2AgALagEBfUMAAAAAIQQCQAJAAkACQAJAIAAOBAMAAQQCCyABvg8LIAMgAb6UQwAAAAAgAkEBcRsPC0G4mcmAAEEoQZSwwIAAEIWAgIAAAAsgAkEBcUUNACABQQN2QX9qIAMQgICAgAAhBAsgBAtfAAJAAkACQAJAIAUNACACQf8BcUF8ag4CAQIDCyADIARzIQUCQAJAIAJB/wFxQXxqDgIAAQQLIAVFDQEMAgsgBUUNAQtBACECDAELQQEhAgsgACACOgABIAAgAToAAAuQAQEEfyOAgICAAEEQayICJICAgIAAIAEgASgCDCIDQQFqNgIMQQAhBAJAIAEoAgAiBSABKAIERg0AIAEgBUEMajYCACACQQhqIAUgASgCCBGAgICAAICAgIAAIAIoAggiAUUNACACKAIMIQQgACADNgIAIAAgBDYCCCABIQQLIAAgBDYCBCACQRBqJICAgIAAC6gBAQZ/I4CAgIAAQSBrIgQkgICAgAAgBEEQaiEFIAEoAgAhBiABKAIEIQdBASEIAkADQCAGIAdGDQEgASAGQRBqIgk2AgAgBSAGKQIANwIAIAVBCGogBkEIaikCADcCACAEIAI2AgwgBCADIAIgBRCSgICAACAEKAIEIQIgCSEGIAQoAgBBAXENAAtBACEICyAAIAI2AgQgACAINgIAIARBIGokgICAgAALjwIDAn8CfgJ/I4CAgIAAQTBrIgQkgICAgAAgASgCACEFIAMpAgAhBiADKQIIIQcgBEEYaiIDQgA3AgAgBEEgaiIIQgA3AgAgBEEoaiIJQQA2AgAgBEEAOgAuIAQgBzcCCCAEIAY3AgAgBEEAOwEsIARCADcCECAFIAQQpoKAgAAgA0IANwIAIAhCADcCACAJQQA2AgAgBEEAOgAuIARCADcCECAEIAEoAgQiAygCBCIINgIMIAQgAygCACIDNgIIIAQgCDYCBCAEIAM2AgAgBEEBOwEsIAUgBBCmgoCAACABKAIIIgEgASgCAEEBajYCACAAIAJBf2o2AgQgACACQQBHNgIAIARBMGokgICAgAALWgEBfyAAQQE2AgQgACABKAIUIAEoAhAiAmtBAnZBACACGyABKAIMIAEoAggiAmtBAnZBACACG2ogASgCBCABKAIAIgFrQQJ2QQAgARtqIgE2AgggACABNgIAC+oEAQt/I4CAgIAAQdAAayICJICAgIAAIAEvAQghAyABKAIEIQQgASgCACEFIAEoAgwhBiABLwEKQf//A3EhBwJAAkACQAJAAkADQCADQf//A3EgB08NBCABIANBAWoiAzsBCCACQcAAaiAFEJWAgIAAIAIvAUBBAUYNAgJAIAIvAUIiCA0AQQIhCQwECyACQcAAaiAFEJaAgIAAIAItAEBBAUYNAiACKABBIQogAkEEOgAjIAIgCDsBLkEAIQggAkEAOwEsIAIgBDYCKCACIAU2AiQgAiACQSNqNgIwIAJBGGogAkEkahCXgICAAEECIQtBACEMAkAgAi8BGEEBcUUNACACLwEaIQhBAiEMIAJBEGpBBEECQQIQmICAgAAgAigCECEJIAIoAhQiCyAIOwEAQQEhCCACQQE2AjwgAiALNgI4IAIgCTYCNCACQcAAakEIaiACQSRqQQhqKQIANwMAIAIgAikCJDcDQAJAA0AgAkEIaiACQcAAahCXgICAACACLwEIQQFxRQ0BIAIvAQohCQJAIAggAigCNEcNACACQTRqQQEQmYCAgAAgAigCOCELCyALIAxqIAk7AQAgAiAIQQFqIgg2AjwgDEECaiEMDAALCyACKAI0IQwLAkAgAi0AIyIJQQRGDQAgDCALEJqAgIAADAQLAkAgDEGAgICAeGoOAgABAgsLIAshCQwCCyAAIAg2AgggACAKNgIMIAAgCzoABCAAIAw2AgAgAEEHaiALQRh2OgAAIAAgC0EIdjsABQwDC0EBIQkLIAYgCToAAAsgAEGAgICAeDYCAAsgAkHQAGokgICAgAALtgIBA38jgICAgABBEGsiAiSAgICAACACQQRqIAEQmYKAgABBASEDAkACQCACLQAEQQFHDQAgACACKQIINwIEDAELAkACQAJAAkACQAJAAkAgAi0ABSIDQYN+ag4DAQMCAAsgACADOwECDAMLQQEhAwJAIAEoAgQiBEEBSw0AIAAgBDYCCCAAQQI2AgQMBgsgASgCAC8AACEDIAFBAhCagoCAACAAIANBCHQgA0EIdnI7AQIMAgsgAkEEaiABEJmCgIAAIAItAAQNAyAAIAItAAVB/QFqOwECDAELIAJBBGogARCZgoCAACACLQAEDQEgACACLQAFQfoDajsBAgtBACEDDAILIAAgAikCCDcCBEEBIQMMAQsgACACKQIINwIEQQEhAwsgACADOwEAIAJBEGokgICAgAALQgEBfwJAAkAgASgCBCICQQRJDQAgACABEJeCgIAANgABQQAhAQwBCyAAIAI2AgggAEEENgIEQQEhAQsgACABOgAAC6UBAQV/I4CAgIAAQRBrIgIkgICAgABBACEDAkACQCABLwEIIgQgAS8BCkkNAAwBCyABKAIMIQVBASEDIAEgBEEBajsBCCACQQRqIAEoAgAQlYCAgAACQAJAIAIvAQRBAUcNAEEBIQYMAQtBAyEGIAIvAQYiBCABKAIELwEASQ0BCyAFIAY6AABBACEDCyAAIAQ7AQIgACADOwEAIAJBEGokgICAgAALZAEBfyOAgICAAEEQayIEJICAgIAAIARBBGogASACIAMQr4KAgAAgBCgCCCEDAkAgBCgCBEEBRw0AIAMgBCgCDBCsgoCAAAALIAAgBCgCDDYCBCAAIAM2AgAgBEEQaiSAgICAAAspAQF/AkAgASAAKAIAIAAoAggiAmtNDQAgACACIAFBAkECEO2AgIAACwsQACAAIAFBAkECELeBgIAACzoAAkAgAiABSQ0AIAIgBEsNACAAIAIgAWs2AgQgACADIAFBMGxqNgIADwsgASACIAQgBRCcgICAAAALRAACQAJAIAAgAksNACABIAJLDQEgACABTQ0BIAAgASADENiEgIAAAAsgACACIAMQ2YSAgAAACyABIAIgAxDahICAAAALSAEEfyAAKAIAIQEgACgCBCECA0ACQCABIAJHDQBBAA8LIAAgAUGIAmoiAzYCACABQYECaiEEIAMhASAELQAADQALIANB+H1qC00BAX8jgICAgABBEGsiBSSAgICAACAFQQhqQQAgASACIAMgBBCfgICAACAFKAIMIQQgACAFKAIINgIAIAAgBDYCBCAFQRBqJICAgIAACzcAAkAgAiABSQ0AIAIgBEsNACAAIAIgAWs2AgQgACADIAFqNgIADwsgASACIAQgBRCcgICAAAALZgUCfwF9AX8BfQF/IAAoAhAtAJoBIQIgACgCDC0AACEDIAAoAggqAgAhBCAAKAIEKAIAIQUgACgCACoCACEGIAAgACgCFCIHQQFqNgIUIAEgBiAFIAQgAyACIAdFEKGAgIAAOAIMC/8BAQF9AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBQ0AQwAAAAAhBiAAQwAAAAAQyIWAgAAhACADQf8BcQ4JBAQEBAQEAQIDBAtDAAAAACECIANB/wFxDgkEBQYHCAQECQoECyAAIAFBf2qzlSEGDAILIAAgAUEBarOVIQYMAQsgACABs5UhBgsg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BQsgASgCFCEVDAALCyACQRhqIAooAgQgCkEIaigCABCpgICAACACQfgBaiACQSRqIAIoAhggAigCHCABIAMQuoCAgAAgAigC+AEiC0ECRg0AIAIpAoACIQ0gAigC/AEhCgwHCyAAQYCAgIB4NgIADAgLIAJBADYCZCACQoCAgIDAADcCXEGAgICAeCERAkACQAJAAkACQANAIAJB+AFqIAEQqoCAgAACQAJAAkACQCACLQD4AUEBRw0AQQAhEwwBCyACQegAaiACKAL8ARC7gICAACACKAJoIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBFBgICAgHhGDQAgCkEIRw0BIAIoAmxBIUcNAQsgCkF+aiIWQQkgCkEBSxsiEw4HAiAgIAMEBQELIAJBgICAgHg2AkwgAkEAOgBQIApBfmohFgwgCyATQRZGDQQMHgsgAigCbCIXIRMgAigCcCIVIRICQCAVQX9HDQAgFygCCCESIBcoAgQhEwsgAkHgAWogEyASELOAgIAAIAIoAuQBIhMgAigC6AEiEkGIqcCAAEEEELyAgIAADQYgEyASQYypwIAAQQYQvICAgAANBCATIBJBkqnAgABBChC8gICAAA0aIBMgEkGcqcCAAEELELyAgIAARQ0FDBoLIAIoAmwiFiETIAIoAnAiCiEVAkAgCkF/Rw0AIBYoAgghFSAWKAIEIRMLIAJB+AFqIBMgFRC1gICAACACQdwAaiACQfgBahC9gICAACAWIAoQq4CAgAAMGwsgAigCbCIWIRMgAigCcCIKIRUCQCAKQX9HDQAgFigCCCEVIBYoAgQhEwsgAkHIAWogEyAVELWAgIAAIAJBAjYC/AEgAkHUpMCAADYC+AEgAkIBNwKEAiACQYKAgIAANgLkASACIAJB4AFqNgKAAiACIAJByAFqNgLgASACQewBaiACQfgBahC4gICAACACKALIASACKALMARC5gICAACACQdwAaiACQewBahC9gICAACAWIAoQq4CAgAAMGgsgAigCbCITQSFGDQUgE0EvRw0aIAIoAmRFDRoCQANAIAJB+AFqIAEQqoCAgAAgAi0A+AEiFQ0BIAIoAvwBIhMoAgBBCEcNACATKAIEQSFHDQALIAFB3KnAgABBCRCxgICAAEH/AXEiE0EGRw0HIAEQr4CAgABB/wFxIhNBBkcNBwsgFUEBcyETDBULIAIoAmwiFSESIAIoAnAiEyEXAkAgE0F/Rw0AIBUoAgghFyAVKAIEIRILIAJBgAFqIBIgFxCzgICAACABLQBcIRIgAUEDOgBcIBIQroCAgAAhGEEFIRcgAigChAEhEiABLQBeQX9qQf8BcSABLQBdIhRJDRIgASAUQQFqOgBdIAEtAF8hGSABQYCBgQEgGEH/AXEiGkEDdHY6AF8CQCASIAIoAogBIhhB/47JgABBAxC8gICAAA0AAkAgEiAYQeCjwIAAQQQQvICAgAANAAJAIBIgGEHko8CAAEEHELyAgIAADQBBACEXIBIgGEHro8CAAEEIELyAgIAARQ0TCyACQfgBaiABEL6AgIAAIAItAPgBQQFGDREgAkGkAWogAigC/AEiFygCACAXQQRqKAIAELSAgIAAAkAgEiAYQeujwIAAQQgQvICAgAANACACQbABakHzo8CAAEEEEL+AgIAADA4LIAEQwICAgABB/wFxIhdBBkYNDAwOCyACQfgBaiABEL6AgIAAIAItAPgBDRAgAkG8AWogAigC/AEiFygCACAXQQRqKAIAELSAgIAAIAEoAhwhFyABKAIYIRggASgCFCEUIAEtAFwhGwJAIAEQwICAgABB/wFxQQZGDQAgASAbOgBcIAEgFzYCHCABIBg2AhggASAUNgIUIAJB4AFqQfOjwIAAQQQQv4CAgAAMCwsgAkH4AWogARDBgICAACACLQD4AQ0JIAIoAvwBIhgoAgAhFwJAIBhBBGooAgAiGEF/Rw0AIBcoAgghGCAXKAIEIRcLIAJB4AFqIBcgGBC1gICAAAwKCyACQewBaiABEMGAgIAAIAItAOwBDQcgAigC8AEiGCgCACEXAkAgGEEEaigCACIYQX9HDQAgFygCCCEYIBcoAgQhFwsgAkHIAWogFyAYELWAgIAAIAJBAjYC/AEgAkHUpMCAADYC+AEgAkIBNwKEAiACQYKAgIAANgLwASACIAJB7AFqNgKAAiACIAJByAFqNgLsASACQZgBaiACQfgBahC4gICAACACKALIASACKALMARC5gICAAAwOCyACKAJkDQUMAgsgEyASQaepwIAAQQ0QvICAgAANFCATIBJBtKnAgABBDhC8gICAAA0UDAQLIAIoAmQNAwsgAigC4AEhCiARIBwQwoCAgAAgCiERIBMhHCASIR0MEwsCQCABQdypwIAAQQkQsYCAgABB/wFxIhNBBkYNACACQYCAgIB4NgJMIAIgEzoAUAwWC0EBIRMgARCvgICAAEH/AXEiFUEGRg0PIAJBgICAgHg2AkwgAiAVOgBQDBULIAJBgICAgHg2AkwgAiATOgBQDBQLIAJBgICAgHg2AkxBACESIAJBADoAUCACKALgASATELmAgIAAIBcgFRCrgICAAEEBIRMMFAsgAi0A7QEhFwwICyACLQD5ASEXIAIoArwBIAIoAsABELmAgIAADAcLIAJB7AFqIAIoAsABIhcgAigCxAEQtYCAgAAgAkEDNgL8ASACQbSkwIAANgL4ASACQgI3AoQCIAJBgoCAgAA2AtQBIAJBgoCAgAA2AswBIAIgAkHIAWo2AoACIAIgAkHgAWo2AtABIAIgAkHsAWo2AsgBIAJBmAFqIAJB+AFqELiAgIAAIAIoAuwBIAIoAvABELmAgIAAIAIoAuABIAIoAuQBELmAgIAAIAIoArwBIBcQuYCAgAAMBAsgAkH4AWogARDBgICAAAJAIAItAPgBQQFHDQAgAi0A+QEhFwwCCyACKAL8ASIYKAIAIRcCQCAYQQRqKAIAIhhBf0cNACAXKAIIIRggFygCBCEXCyACQbABaiAXIBgQtYCAgAALIAEoAhwhFyABKAIYIRggASgCFCEUIAEtAFwhGwJAIAEQwICAgABB/wFxQQZGDQAgASAbOgBcIAEgFzYCHCABIBg2AhggASAUNgIUIAJBvAFqQfejwIAAQQcQv4CAgAAMAgsgAkH4AWogARC+gICAAAJAIAItAPgBDQAgAkG8AWogAigC/AEiFygCACAXQQRqKAIAELSAgIAADAILIAItAPkBIRcgAigCsAEgAigCtAEQuYCAgAALIAIoAqQBIAIoAqgBELmAgIAADAMLIAJB4AFqIAIoAqgBIhcgAigCrAEQtYCAgAAgAkHsAWogAigCwAEiGCACKALEARC1gICAACACQQQ2AswBIAJBjKTAgAA2AsgBIAJCAzcC1AEgAkGCgICAADYCjAIgAkGCgICAADYChAIgAkGCgICAADYC/AEgAiACQfgBajYC0AEgAiACQewBajYCiAIgAiACQbABajYCgAIgAiACQeABajYC+AEgAkGYAWogAkHIAWoQuICAgAAgAigC7AEgAigC8AEQuYCAgAAgAigC4AEgAigC5AEQuYCAgAAgAigCvAEgGBC5gICAACACKAKwASACKAK0ARC5gICAACACKAKkASAXELmAgIAACyABEK+AgIAAIRcgAigCmAEhFAJAIBdB/wFxIhdBBkYNACAUIAIoApwBELmAgIAADAILQYCAgIB4IRggAi0AnAEhGwJAIBRBgICAgHhGDQAgAi8AnQEgAkGYAWpBB2otAABBEHRyIR4gAigCoAEhHwJAIAEQr4CAgABB/wFxIhdBBkcNACAeISAgHyEhIBQhGAwBCyAUIB5BCHQgG3IQuYCAgAAMAwsgGyEXDAILIAItAPkBIRcLQYCAgIB4IRgLIAEtAFwhFCABQQM6AFwCQCAUQQNGDQAgFCABELCAgIAACyAaIAEQsICAgAAgASAZOgBfIAEgAS0AXUF/ajoAXSAYQYCAgIB4Rw0BCyACQYCAgIB4NgJMIAIgFzoAUCACKAKAASASELmAgIAAIBUgExCrgICAAEEBIRJBACETDAgLIAIgIDsAkQEgAkGMAWpBB2ogIEEQdjoAACACICE2ApQBIAIgFzoAkAEgAiAYNgKMASACQdwAaiACQYwBahC9gICAACACKAKAASASELmAgIAAIBUgExCrgICAAAwECyACQegAahDDgICAAAsCQCARQYCAgIB4Rg0AIAJBzABqIBwgHRC1gICAACARIBwQuYCAgAAMBwsCQCACKAJkIgoNAEGAgICAeCEKQQAhFkEAIRMMCAsgAkHMAGogAigCYCAKEMSAgIAADAYLIAJByAFqIBMgEhC1gICAACACQQI2AvwBIAJBzKnAgAA2AvgBIAJCATcChAIgAkGCgICAADYCwAEgAiACQbwBajYCgAIgAiACQcgBajYCvAEgAkHsAWogAkH4AWoQuICAgAAgAigCyAEgAigCzAEQuYCAgAAgAkHcAGogAkHsAWoQvYCAgAAgAigC4AEgExC5gICAAAsgFyAVEKuAgIAADAALCyACQYCAgIB4NgJMIAJBADoAUAtBASETQQEhEgsCQAJAAkACQAJAAkACQAJAIBZBCSAKQQFLGyIKDgYFAQEBAgMACyAKQRZGDQMLIAJB6ABqEMOAgIAADAULIAIoAmwgAigCcBCrgICAAAwECyACKAJsIAIoAnAQq4CAgAAMAwsgEw0BDAILIBJFDQEgAigCbCACKAJwEKuAgIAADAELIAIoAmwgAigCcBCrgICAAAsgESAcEMKAgIAAQQAhEwsgAi0AUCEWIAIoAkwhCgsgAkHcAGoQxYCAgAACQCAKQYCAgIB4Rw0AQYCAgIB4IQoMAgsgBCAFKAAANgAAIARBA2ogBUEDaigAADYAACACIBY6AGwgAiAKNgJoIAIgEzYCTCACQQM2AvwBIAJBqMbAgAA2AvgBIAJCAjcChAIgAkGBgICAADYC1AEgAkGCgICAADYCzAEgAiACQcgBajYCgAIgAiACQcwAajYC0AEgAiACQegAajYCyAEgAkHAAGogAkH4AWoQuICAgAAgAigCaCACKAJsELmAgIAACyACLQBEIRYgAigCQCEKCyALIA4Qq4CAgAACQCAKQYCAgIB4Rw0AIBYhEQwBCyACLwBFIAJBwABqQQdqLQAAQRB0ciEOIAI1AkghDSABEK+AgIAAQf8BcSIRQQZGDQEgCiAOQQh0IBZB/wFxchC5gICAAAsgASAGOgBcIAEgBzYCHCABIAg2AhggASAJNgIUIAEgDzoAXyACQfgBaiABIAMtAABBARCogICAACACKAL4ASIKQYCAgIB4Rw0BQYCAgIB4IAIoAvwBEMKAgIAAIAEoAgwgCWohCkEBIQsgEa1C/wGDQiCGICJCgICAgIBgg4QgASgCFCAJa62EIiIhDQwCCyABIA86AF8gAS0AXCELIAFBAzoAXAJAIAtBA0YNACALIAEQsICAgAALAkADQCACIAEQxoCAgAAgAi0AAEUNAQJAIAItAAFB/wFxIgktAIyMyYAAIgsgEHFB/wFxDQAgAkH4AWogARDHgICAAAJAIAIoAvgBIgtBaGpBcyALQQFLGyILQQNLDQBBgICEECALQQN0diILQf8BcUEDRg0AIAsgARCwgICAAAsgAkH4AWoQw4CAgAAMAQsLIAsgAS0AX3ENACABIAEoAhRBAWo2AhQgCUH7AEcNAEECIAEQsICAgAALQQAhCyANQiCGIA6tQv///weDQgiGIBatQv8Bg4SEIiIhDQwBCyACKQL8ASENQQAhCwsgC0EBcQ0AIApBgICAgHhGDQALIAAgDT4CBCAAIAo2AgAgACANQiCIPgIICyACQZACaiSAgICAAAsuAQF/IAAtAFwhASAAQQM6AFwCQCABQQNGDQAgASAAELCAgIAACyAAENyDgIAAC5IDAwN/AX4BfyOAgICAAEEgayICJICAgIAAIAEtAFwhAyABQQM6AFwCQCADQQNGDQAgAyABELCAgIAACyACIAEQxoCAgAACQAJAAkAgAi0AAEUNACACLQABQf8BcS0AjIzJgAAgAS0AX3ENACABQTBqIQMCQCABKAJYIAEoAhQiBEYNACACQQhqIAEQx4CAgAAgASkCFCEFIAEoAhwhBiADEMOAgIAAIAEgBDYCWCABQQM6AFQgASAGNgJQIAEgBTcCSCADQRBqIAJBCGpBEGopAgA3AgAgA0EIaiACQQhqQQhqKQIANwIAIAMgAikCCDcCAAwCCyABIAEoAkg2AhQgASABKQJMNwIYIAEoAjBBGEcNASABKAI0IQQCQCABKAI4IgZBf0cNACAEKAIIIQYgBCgCBCEECyABIAQgBhD2hICAAAwBC0EBIQEgAEEBOgABDAELAkAgAygCABD3hICAAEH/AXEiBEEDRg0AIAEgBDoAXAsgACADNgIEQQAhAQsgACABOgAAIAJBIGokgICAgAALvwsBB38jgICAgABB4ABrIgQkgICAgAAgARCmgICAACABKAIcIQUgASgCGCEGIAEoAhQhByABLQBcIQggBEE4aiABEKqAgIAAAkACQAJAAkACQCAELQA4QQFGDQAgBCgCPCIJKAIAQQJHDQAgCSgCBCEKAkAgCUEIaigCACIJQX9HDQAgCigCCCEJIAooAgQhCgsgCiAJQbWLyYAAQQIQ3YCAgABFDQAgBEE4aiABEKqAgIAAIAQtADhBAUYNACAEKAI8KAIAQQ5GDQELIAEgCDoAXCABIAU2AhwgASAGNgIYIAEgBzYCFCABIAEtAF8iCEEGQQIgAxtyIgU6AF8gBEE4aiABIAJBAXEQ04CAgABBgICAgHghAiAELQA8IQYgBCgCOCIDQYCAgIB4Rw0BQQAhBwwCCyABIAEtAF8iAkEEQQIgAxtyIgU6AF8gARCvgICAABogASACOgBfIAEtAFwhAyABQQM6AFwCQCADQQNGDQAgAyABELCAgIAACwJAA0AgBEEQaiABEMaAgIAAIAQtABBFDQECQCAELQARIgJB/wFxLQCMjMmAACIDIAVxQf8BcQ0AIARBOGogARDHgICAAAJAIAQoAjgiA0FoakFzIANBAUsbIgNBA0sNAEGAgIQQIANBA3R2IgNB/wFxQQNGDQAgAyABELCAgIAACyAEQThqEMOAgIAADAELCyADIAEtAF9xDQAgASABKAIUQQFqNgIUIAJB/wFxQfsARw0AQQIgARCwgICAAAsgAEGAgICAeDYCACAAQQQ6AAQMAgsgBEE/ai0AAEEYdCAELwA9QQh0ciEHIAQoAkAhCQJAIAEQr4CAgABB/wFxIgpBBkcNACADIQIMAQsgAyAHIAZyELmAgIAAQYCAgIB4IQJBACEHIAohBgsgASAIOgBfIAEtAFwhAyABQQM6AFwCQCADQQNGDQAgAyABELCAgIAACwJAA0AgBEEIaiABEMaAgIAAIAQtAAhFDQEgBSAELQAJQf8BcS0AjIzJgABxDQEgBEE4aiABEMeAgIAAAkAgBCgCOCIDQWhqQXMgA0EBSxsiA0EDSw0AQYCAhBAgA0EDdHYiA0H/AXFBA0YNACADIAEQsICAgAALIARBOGoQw4CAgAAMAAsLIARBOGogARCqgICAACAHIAZyIQMCQAJAAkAgBC0AOEEBRw0AIAQtADkhBQwBC0EAIQUgBCgCPCgCAEEbRg0BCyAAQYCAgIB4NgIAIAAgBToABCACIAMQwoCAgAAMAQsCQCACQYCAgIB4Rw0AIABBgICAgHg2AgAgACAGOgAEDAELIAEtAFwhBSABQQM6AFwgBRCugICAACEFAkAgAS0AXkF/akH/AXEgAS0AXSIGSQ0AIAEgBkEBajoAXSABLQBfIQYgAUGAgYEBIAVB/wFxIgVBA3R2OgBfIAQgCTYCHCAEIAM2AhggBCACNgIUIARBIGpBASABEOmAgIAAIARBAzYCPCAEQYyAwIAANgI4IARCAjcCRCAEQYKAgIAANgJcIARBgoCAgAA2AlQgBCAEQdAAajYCQCAEIARBIGo2AlggBCAEQRRqNgJQIARBLGogBEE4ahC4gICAACAEKAIwIQIgBCgCNCEHIAQoAiwhAyAEKAIgIAQoAiQQuYCAgAAgBCgCFCAEKAIYELmAgIAAAkACQCADQYCAgIB4Rw0AIABBgICAgHg2AgAgACACOgAEDAELAkAgARCvgICAAEH/AXEiCEEGRg0AIABBgICAgHg2AgAgACAIOgAEIAMgAhC5gICAAAwBCyAAIAc2AgggACACNgIEIAAgAzYCAAsgAS0AXCEDIAFBAzoAXAJAIANBA0YNACADIAEQsICAgAALIAUgARCwgICAACABIAY6AF8gASABLQBdQX9qOgBdDAELIABBgICAgHg2AgAgAEEFOgAEIAIgAxC5gICAAAsgBEHgAGokgICAgAALNQEBfwJAIAJBf0cNACABQXhqIgMgAygCAEEBaiIDNgIAIAMNAAALIAAgAjYCBCAAIAE2AgALOAEBfyABLQBcIQIgAUEDOgBcAkAgAkEDRg0AIAIgARCwgICAAAsgARDcg4CAACAAIAEQp4CAgAALFAACQCABQX9HDQAgABDPgYCAAAsLfQECf0EAIQQCQCABIANHDQADQAJAIAENAEEBDwsgAi0AACEDQQAhBCAALQAAIQUgAkEBaiECIAFBf2ohASAAQQFqIQAgBUEgQQAgBUG/f2pB/wFxQRpJG3JB/wFxIANBIEEAIANBv39qQf8BcUEaSRtyQf8BcUYNAAsLIAQLFAAgACABQbWLyYAAQQIQ3YCAgAALKQACQCAAQf8BcUEDRg0AIAAPC0HgxsCAAEGIAUHox8CAABDmgICAAAAL4gEBBn8jgICAgABBMGsiASSAgICAACAAKAIcIQIgACgCGCEDIAAoAhQhBCAALQBcIQUgAUEEaiAAEKqAgIAAAkACQAJAIAEtAARBAUYNAEEAIQYMAQsgAS0ABSIGQQFHDQFBBiEGCyAAIAU6AFwgACACNgIcIAAgAzYCGCAAIAQ2AhQgAUEwaiSAgICAACAGDwsgASAGOgAPIAFBATYCFCABQeSOyYAANgIQIAFCATcCHCABQYOAgIAANgIsIAEgAUEoajYCGCABIAFBD2o2AiggAUEQakHsjsmAABDngICAAAALkAMBCX8jgICAgABBMGsiAiSAgICAACACQQA6AAAgAkEANgIUIAIgABD4hICAACACQQRqIQMgAkEBciEEIAJBFGohBQJAA0ACQCABKAIUIAEoAhBJDQAgAkEhNgIYDAILIAJBGGogARDHgICAACACKAIYIgBBIUYNAQJAAkAgAEFiakFtIABBAUsbIgZBAksNACAEIQcgAigCFCIIIQkCQCAIQRFJIgoNACACKAIEIQkgAigCCCEHCyAJRQ0BIAcgCWpBf2oiCUUNASAJLQAAIAZB/wFxRw0AIAghCSAFIQYCQCAKDQAgAigCBCEJIAMhBgsCQCAJRQ0AIAYgCUF/ajYCACACKAIUIQgLAkAgCEERSQ0AIAIoAgQhCAsgCEUNAwsCQCAAEPeEgIAAQf8BcSIAQQNGDQAgAiAAEPiEgIAACyACQRhqEPmEgIAADAELC0GMjsmAABDPgICAAAALIAJBGGoQ+YSAgAACQCACKAIUIgBBEUkNACAAIAIoAggQ8oSAgAALIAJBMGokgICAgAALlwEBAn8jgICAgABBEGsiAySAgICAACADQQhqIAAQqoCAgAACQAJAIAMtAAhBAUcNACADLQAJIQAMAQtBACEAIAMoAgwiBCgCAEECRw0AIAQoAgQhAAJAIARBCGooAgAiBEF/Rw0AIAAoAgghBCAAKAIEIQALQQZBACAAIAQgASACEKyAgIAAGyEACyADQRBqJICAgIAAIAALgQMBCX8jgICAgABBIGsiAySAgICAACADQQA2AhwgAyABNgIUIAMgATYCDCADIAI2AhAgAyABIAJqIgQ2AhggA0EUaiEFIAEhBgJAA0AgAyAFEOKAgIAAIAMoAhghAiADKAIUIQcCQCADKAIAQQFxDQBBACEIQQAhCQwCCyADKAIEIQogAyAEIAdqIAYgAmprIAMoAhwiCWoiCDYCHCAHIQYgAiEEIAoQ1oGAgAANAAsLAkADQCAHIAIiBkYNAQJAIAZBf2oiAiwAACIEQX9KDQACQAJAIAZBfmoiAi0AACIKwCIFQUBIDQAgCkEfcSEKDAELAkACQCAGQX1qIgItAAAiCsAiC0FASA0AIApBD3EhCgwBCyAGQXxqIgItAABBB3FBBnQgC0E/cXIhCgsgCkEGdCAFQT9xciEKCyAKQQZ0IARBP3FyIQQLIAQQ1oGAgAANAAsgBiAHayADKAIcaiEICyAAIAggCWs2AgQgACABIAlqNgIAIANBIGokgICAgAALjwEBAX8jgICAgABBEGsiAySAgICAACADQQRqIAEgAhC/gICAACAAQQhqIANBBGpBCGooAgAiAjYCACAAIAMpAgQ3AgAgAygCCCEAAkADQCACRQ0BIABBIEEAIAAtAAAiAUG/f2pB/wFxQRpJGyABcjoAACACQX9qIQIgAEEBaiEADAALCyADQRBqJICAgIAAC7YBAQF/I4CAgIAAQSBrIgMkgICAgAAgA0EANgIIIANCgICAgBA3AgAgA0HgsMCAADYCECADQqCAgIAONwIUIAMgAzYCDAJAIAJBf0cNACABKAIIIQIgASgCBCEBCwJAIANBDGogASACEJ6BgIAARQ0AQbixyYAAQTcgA0EfakH4sMCAAEHwscmAABCDgYCAAAALIAAgAykCADcCACAAQQhqIANBCGooAgA2AgAgA0EgaiSAgICAAAvvAwEBfyOAgICAAEHQAGsiAySAgICAACADQRBqIAJBAmpBAUEBEJiAgIAAIANBADYCICADIAMpAxA3AhggA0EYakEiEOGAgIAAIAMgATYCJCADIAEgAmo2AigCQANAIANBCGogA0EkahDigICAAAJAAkACQAJAAkACQAJAAkAgAygCDEGAgMQAIAMoAghBAXEbIgJBd2oOBQYEAQEFAAsgAkEiRg0BIAJB3ABGDQIgAkGAgMQARg0ICyACQSBJDQUgA0EYaiACEOGAgIAADAYLIANBGGpB7qfAgABB8KfAgAAQ44CAgAAMBQsgA0EYakHwp8CAAEHyp8CAABDjgICAAAwECyADQRhqQfKnwIAAQfSnwIAAEOOAgIAADAMLIANBGGpB9KfAgABB9qfAgAAQ44CAgAAMAgsgA0EYakH2p8CAAEH4p8CAABDjgICAAAwBCyADIAI2AkQgA0EBNgJAIANBhKjAgAA2AjwgA0EBNgIwIANB/KfAgAA2AiwgA0EBNgI4IANBhICAgAA2AkwgAyADQcgAajYCNCADIANBxABqNgJIIANBGGogA0EsahDlgICAABoMAAsLIANBGGpBIhDhgICAACAAQQhqIANBGGpBCGooAgA2AgAgACADKQIYNwIAIANB0ABqJICAgIAAC9kCAQd/I4CAgIAAQRBrIgIkgICAgABBCiEDAkACQCAAKAIAIgQgBEEfdSIAcyAAayIAQegHTw0AIAAhBQwBC0EKIQMDQCACQQZqIANqIgZBfGogACAAQZDOAG4iBUGQzgBsayIHQf//A3FB5ABuIghBAXQvAMHvyIAAOwAAIAZBfmogByAIQeQAbGtB//8DcUEBdC8Awe/IgAA7AAAgA0F8aiEDIABB/6ziBEshBiAFIQAgBg0ACwsCQAJAIAVBCUsNACAFIQAMAQsgAkEGaiADQX5qIgNqIAUgBUH//wNxQeQAbiIAQeQAbGtB//8DcUEBdC8Awe/IgAA7AAALAkACQCAERQ0AIABFDQELIAJBBmogA0F/aiIDaiAAQQF0LQDC78iAADoAAAsgASAEQX9zQR92QQFBACACQQZqIANqQQogA2sQ1YSAgAAhACACQRBqJICAgIAAIAALFAAgASAAKAIEIAAoAggQnoGAgAAL+wIBB38jgICAgABBEGsiAiSAgICAACABKAIMIQMgASgCACEEAkACQAJAAkACQAJAAkACQAJAAkAgASgCBCIFDgIAAQMLAkAgAw0AQQEhBkEAIQcMAgtBACEHDAMLIAMNASAEKAIEIQcgBCgCACEGCyAAIAYgBxC/gICAAAwFCyAEQQRqIQZBACEHIAUhCANAIAYoAgAgB2ohByAGQQhqIQYgCEF/aiIIDQALIANFDQEgB0EPSw0AIAQoAgRFDQILIAdBACAHQQBKG0EBdCEHCwJAAkAgB0F/TA0AIAdFDQIgBxCdgYCAACIGRQ0BDAMLEJ+CgIAACwALQQEhBkEAIQcLIAJBADYCCCACIAY2AgQgAiAHNgIAAkAgBQ4CAAAACyACQYzLwIAAIAEQoIKAgAANASAAIAIpAgA3AgAgAEEIaiACQQhqKAIANgIACyACQRBqJICAgIAADwtBzMnAgABB1gAgAkEPakG8ycCAAEGkysCAABCDgYCAAAALEAAgACABQQFBARDThICAAAutIAIQfwF+I4CAgIAAQbABayIGJICAgIAAIAQgBC0AXyIHQQZyIgg6AF8gAiEJIAMhCgJAIANBf0cNACACKAIIIQogAigCBCEJCyAGQZQBaiAJIAoQs4CAgAACQAJAAkACQAJAIAYoApgBIgsgBigCnAEiCUHAxcCAAEEFELyAgIAADQACQCALIAlBxcXAgABBCBC8gICAAA0AAkAgCyAJQc3FwIAAQQkQvICAgAANACALIAlB1sXAgABBCBC8gICAAA0DQQUhDAJAIAsgCUHexcCAAEEFELyAgIAADQAgBkEAOgA8DAULIAQQr4CAgABB/wFxQQZGDQUgBkHQAGoQ1ICAgAAgBkGgAWpBB2ohDQJAAkACQANAIAQQpoCAgAAgBCAELQBfIg5BEHIiCjoAXyAGQfAAaiAEEL6AgIAAAkACQAJAIAYtAHBBAUcNACAGLQBxIQ8MAQsgBkH8AGogBigCdCIJKAIAIAlBBGooAgAQtICAgAACQAJAA0AgBCgCHCEQIAQoAhghDyAEKAIUIREgBC0AXCESIAZB8ABqIAQQ1oCAgAAgBi0AcA0BIAYoAnQiCSgCAEEIRw0BIAkoAgRBLkcNASAGQfAAaiAEENaAgIAAAkAgBi0AcEEBRw0AIAYtAHEhDwwDCwJAIAYoAnQiECgCAEECRg0AQQAhDwwDCyAGQfwAakEuEOGAgIAAIBAoAgQhCQJAIBBBCGooAgAiEEF/Rw0AIAkoAgghECAJKAIEIQkLIAZB/ABqIAkgEBCegoCAAAwACwsgBCASOgBcIAQgEDYCHCAEIA82AhggBCARNgIUQYCAgIB4IRAgBi0AgAEhCQJAIAYoAnwiEUGAgICAeEYNACAGLwCBASAGQfwAakEHai0AAEEQdHIhEiAGKAKEASETAkAgBBCvgICAAEH/AXEiD0EGRw0AIBMhFCASIRUgESEQDAELIBEgEkEIdCAJchC5gICAAAwDCyAJIQ8MAgsgBigCfCAGKAKAARC5gICAAAtBgICAgHghEAsgBCAOOgBfIAQtAFwhCSAEQQM6AFwCQCAJQQNGDQAgCSAEELCAgIAACwJAA0AgBkEIaiAEEMaAgIAAIAYtAAhFDQEgCiAGLQAJQf8BcS0AjIzJgABxDQEgBkH8AGogBBDHgICAAAJAIAYoAnwiCUFoakFzIAlBAUsbIglBA0sNAEGAgIQQIAlBA3R2IglB/wFxQQNGDQAgCSAEELCAgIAACyAGQfwAahDDgICAAAwACwsgEEGAgICAeEYNAiAGIBU7AKUBIA0gFUEQdjoAACAGIBQ2AqgBIAYgDzoApAEgBiAQNgKgASAGQdAAaiAGQaABahC9gICAACAGQfwAaiAEEKqAgIAAIAYtAHwNASAGKAKAASgCAEEQRg0AC0G4mcmAAEEoQfjHwIAAEIWAgIAAAAsgBiAGKABVNgJkIAYgBkHYAGooAAA2AGcgBi0AVCEPIAYoAlAiCUGAgICAeEYNASAGQcQAaiAGKABnNgAAIAYgBigCZDYAQSAGIA86AEAgBiAJNgI8QQIhDEEAIQkMCAsgBkHQAGoQxYCAgAALIAYgDzoAPAwECyAGQTxqIAQQ6ICAgABBAyEMQQAhCQwFCyAGQTxqIAQQ6ICAgABBASEMQQAhCQwECyAGQTxqIAQQ6ICAgABBACEJQQAhDAwDCyAGQaABaiAEEL6AgIAAAkACQCAGLQCgAQ0AIAZB/ABqIAYoAqQBIgkoAgAgCUEEaigCABC0gICAAEEAIQkCQAJAIAYoAoABIgogBigChAEQrYCAgABFDQAgBBCvgICAAEH/AXEiCUEGRg0BCyAGIAk6ADwgBigCfCAKELmAgIAADAILIAZBxABqIAZBhAFqKAIANgIAIAYgBikCfDcCPEEEIQxBACEJDAQLIAYgBi0AoQE6ADwLQQUhDAtBASEJDAELQQAhCSAGQQA2AkQgBkKAgICAwAA3AjxBAiEMCyAGKAKUASALELmAgIAAIAIgAxCrgICAACAGLQA8IQMCQAJAIAlFDQBBBSEKDAELIAZB/ABqQQxqIAZBOGpBDGooAAA2AAAgBiAGKQA9NwCBASAGIAM6AIABIAYgDDYCfEEFIQoCQCAEEK+AgIAAQf8BcSIJQQZGDQAgBkH8AGoQ0IGAgAAgCSEDDAELIAYgBkH8AGpBBWoiCSkAADcDOCAGIAlBB2ooAAA2AD8gDCEKCyAEIAc6AF8gBC0AXCEJIARBAzoAXAJAIAlBA0YNACAJIAQQsICAgAALAkADQCAGIAQQxoCAgAAgBi0AAEUNASAIIAYtAAFB/wFxLQCMjMmAAHENASAGQfwAaiAEEMeAgIAAAkAgBigCfCIJQWhqQXMgCUEBSxsiCUEDSw0AQYCAhBAgCUEDdHYiCUH/AXFBA0YNACAJIAQQsICAgAALIAZB/ABqEMOAgIAADAALCyAGIAYoAD82ABcgBiAGKQM4NwMQAkACQAJAAkACQAJAAkACQAJAAkACQAJAIApBBUcNACAEKAIUIQggBkH8AGogBBCqgICAACAGLQB8RQ0BDAoLIAZBLGogBigAFzYAACAGIAM6ACQgBiAKNgIgIAYgBikDEDcAJSAGQTBqIAQQqoCAgAAgBkEkaiEIIAYtADBBAUYNByAGKAI0KAIAIglBfmpBCSAJQQFLGyIJQQ1GDQcgCUEZRw0BIAQtAFwhCSAEQQM6AFwgBkE4akEIaiAGQSBqQQhqIgopAgA3AwAgBiAFNgJIIAYgBikCIDcDOCAGIAE2AkwgCRCugICAACEJIAQtAF5Bf2pB/wFxIAQtAF0iA0kNAiAEIANBAWo6AF0gBC0AXyELIARBgIGBASAJQf8BcSIQQQN0djoAXyAGQdAAakEIaiAKKQIANwMAIAYgBikCICIWNwNQAkAgFqciCUEERw0AIAYoAiQhCiAGKAIsIQkgBigCKCEIIAZB5ABqQQEgBBDpgICAACAGQZQBaiAIIAkQtYCAgAAgBkEDNgKAASAGQajEwIAANgJ8IAZCAjcCiAEgBkGCgICAADYCrAEgBkGCgICAADYCpAEgBiAGQaABajYChAEgBiAGQeQAajYCqAEgBiAGQZQBajYCoAEgBkHwAGogBkH8AGoQuICAgAAgBigClAEgBigCmAEQuYCAgAAgBkH3AGotAAAhByAGKAJwIQIgBi0AdCEDIAYoAnghCSAGLwB1IQwgBigCZCAGKAJoELmAgIAAIAogCBC5gICAACAMIAdBEHRyIQoMBgsgBkHkAGogBS0AACAEEOmAgIAAAkACQAJAAkAgCQ4EAAECAwALIAYoAiQhCCAGQZQBaiAGKAIoIgogBigCLBC1gICAACAGQQM2AoABIAZByMTAgAA2AnwgBkICNwKIASAGQYKAgIAANgKsASAGQYKAgIAANgKkASAGIAZBoAFqNgKEASAGIAZB5ABqNgKoASAGIAZBlAFqNgKgASAGQfAAaiAGQfwAahC4gICAACAGKAKUASAGKAKYARC5gICAACAGQfcAai0AACEHIAYoAnAhAiAGLQB0IQMgBigCeCEJIAYvAHUhDCAIIAoQuYCAgAAgDCAHQRB0ciEKDAcLIAYoAiQhCCAGQZQBaiAGKAIoIgogBigCLBC1gICAACAGQQM2AoABIAZB6MTAgAA2AnwgBkICNwKIASAGQYKAgIAANgKsASAGQYKAgIAANgKkASAGIAZBoAFqNgKEASAGIAZB5ABqNgKoASAGIAZBlAFqNgKgASAGQfAAaiAGQfwAahC4gICAACAGKAKUASAGKAKYARC5gICAACAGQfcAai0AACEHIAYoAnAhAiAGLQB0IQMgBigCeCEJIAYvAHUhDCAIIAoQuYCAgAAgDCAHQRB0ciEKDAYLIAYoAlxBAkkNBCAGKAJkIAYoAmgQuYCAgAAgBkHQAGpBBHIQxYCAgABBgICAgHghCEEAIQMMBwsgBigCJCEIIAZBlAFqIAYoAigiCiAGKAIsELWAgIAAIAZBAzYCgAEgBkGoxcCAADYCfCAGQgI3AogBIAZBgoCAgAA2AqwBIAZBgoCAgAA2AqQBIAYgBkGgAWo2AoQBIAYgBkHkAGo2AqgBIAYgBkGUAWo2AqABIAZB8ABqIAZB/ABqELiAgIAAIAYoApQBIAYoApgBELmAgIAAIAZB9wBqLQAAIQcgBigCcCECIAYtAHQhAyAGKAJ4IQkgBi8AdSEMIAggChC5gICAACAMIAdBEHRyIQoMBAsgBigCgAEoAgAiCUF+akEJIAlBAUsbIglBDUYNCCAJQRlGDQhBuJnJgABBKEHQxsCAABCFgICAAAALQbiZyYAAQShBwMbAgAAQhYCAgAAACyAGQThqENCBgIAAQYCAgIB4IQhBBSEDDAULIAZBlAFqIAYoAiggBigCLBDZgICAACAGQQM2AoABIAZBiMXAgAA2AnwgBkICNwKIASAGQYKAgIAANgKsASAGQYKAgIAANgKkASAGIAZBoAFqNgKEASAGIAZB5ABqNgKoASAGIAZBlAFqNgKgASAGQfAAaiAGQfwAahC4gICAACAGKAKUASAGKAKYARC5gICAACAGQfcAai0AACEKIAYoAnAhAiAGLQB0IQMgBigCeCEJIAYvAHUhByAIEMWAgIAAIAcgCkEQdHIhCgsgBigCZCAGKAJoELmAgIAAC0GAgICAeCEIAkAgAkGAgICAeEcNAAwBCwJAIAQQr4CAgABB/wFxIgdBBkcNACACIQgMAQsgAiAKQQh0IANB/wFxchC5gICAACAHIQMLIAQtAFwhAiAEQQM6AFwCQCACQQNGDQAgAiAEELCAgIAACyAQIAQQsICAgAAgBCALOgBfIAQgBC0AXUF/ajoAXQwBCwJAAkACQCAKQQJHDQACQCAGKAIsDQAgCBDFgICAAAwCCyAGQThqIAYoAiggBigCLBDZgICAACAGQQI2AoABIAZB5MXAgAA2AnwgBkIBNwKIASAGQYKAgIAANgJUIAYgBkHQAGo2AoQBIAYgBkE4ajYCUCAGQaABaiAGQfwAahC4gICAACAGKAI4IAYoAjwQuYCAgAAgCBDFgICAAEGAgICAeCEIIAYoAqABIgJBgICAgHhGDQIgBi8ApQEgBkGnAWotAABBEHRyIQogBigCqAEhCSAGLQCkASEDIAIhCAwDCyAGQSBqENCBgIAAC0GAgICAeCEIC0EAIQMLAkAgCEGAgICAeEcNACAAIAM6AAwgACABKAIINgIQIAAgBCgCFCABKAIAIglrNgIIIAAgCSAEKAIMajYCBEEBIQQgCSABKAIEa0EBaiEJQRQhCAwCCyAAIAo7AAkgACADOgAIIAAgCDYCBCAAQQtqIApBEHY6AABBACEEQQwhCAwBCyAAIAM6AAwgACABKAIINgIQIAAgCCABKAIAIglrNgIIIAAgCSAEKAIMajYCBEEBIQQgCSABKAIEa0EBaiEJQRQhCAsgACAENgIAIAAgCGogCTYCACAGQbABaiSAgICAAAvXBwMEfwF9AX4jgICAgABB0ABrIgIkgICAgAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEoAgAiA0F+akEJIANBAUsbDh8AAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eAAsgAiABKAIEIAEoAggQqYCAgAAgACACKQMANwIEIABBAjYCAAweCyACQQhqIAEoAgQgASgCCBCpgICAACAAIAIpAwg3AgQgAEEDNgIADB0LIAJBEGogASgCBCABKAIIEKmAgIAAIAAgAikDEDcCBCAAQQQ2AgAMHAsgAkEYaiABKAIEIAEoAggQqYCAgAAgACACKQMYNwIEIABBBTYCAAwbCyACQSBqIAEoAgQgASgCCBCpgICAACAAIAIpAyA3AgQgAEEGNgIADBoLIAJBKGogASgCBCABKAIIEKmAgIAAIAAgAikDKDcCBCAAQQc2AgAMGQsgACABKQIANwIAIABBEGogAUEQaikCADcCACAAQQhqIAFBCGopAgA3AgAMGAsgAEEJNgIAIAAgAS0AEDoAECAAIAEqAgw4AgwgACABKQIENwIEDBcLIABBCjYCACAAIAEtABA6ABAgACABKgIMOAIMIAAgASkCBDcCBAwWCyABKAIEIQQgAS0AFCEFIAEqAhAhBiACQTBqIAEoAgggASgCDBCpgICAACACKQMwIQcgACAGOAIQIAAgBToAFCAAIAc3AgggACAENgIEIAAgAzYCAAwVCyAAIAEpAgA3AgAgAEEQaiABQRBqKQIANwIAIABBCGogAUEIaikCADcCAAwUCyAAIAEpAgA3AgAgAEEQaiABQRBqKQIANwIAIABBCGogAUEIaikCADcCAAwTCyAAQQ42AgAMEgsgAEEPNgIADBELIABBEDYCAAwQCyAAQRE2AgAMDwsgAEESNgIADA4LIABBEzYCAAwNCyAAQRQ2AgAMDAsgAEEVNgIADAsLIABBFjYCAAwKCyAAQRc2AgAMCQsgAkE4aiABKAIEIAEoAggQqYCAgAAgACACKQM4NwIEIABBGDYCAAwICyAAQRk2AgAMBwsgAEEaNgIADAYLIABBGzYCAAwFCyACQcAAaiABKAIEIAEoAggQqYCAgAAgACACKQNANwIEIABBHDYCAAwECyACQcgAaiABKAIEIAEoAggQqYCAgAAgACACKQNINwIEIABBHTYCAAwDCyAAQR42AgAMAgsgAEEfNgIADAELIABBIDYCAAsgAkHQAGokgICAgAALIwEBf0EAIQQCQCABIANHDQAgACACIAEQw4WAgABFIQQLIAQLTQEBfwJAIAAoAggiAiAAKAIARw0AIAAQpYKAgAALIAAgAkEBajYCCCAAKAIEIAJBDGxqIgAgASkCADcCACAAQQhqIAFBCGooAgA2AgALgQEBAX8jgICAgABBEGsiAiSAgICAACACQQhqIAEQqoCAgABBASEBAkACQCACLQAIQQFHDQAgACACLQAJOgABDAELAkAgAigCDCIBKAIAQQJHDQAgACABQQRqNgIEQQAhAQwBCyAAQQA6AAFBASEBCyAAIAE6AAAgAkEQaiSAgICAAAtkAQN/I4CAgIAAQRBrIgMkgICAgAAgA0EIaiACQQFBARCYgICAACADKAIIIQQgACADKAIMIgU2AgQgACAENgIAAkAgAkUNACAFIAEgAvwKAAALIAAgAjYCCCADQRBqJICAgIAAC1oBAX8jgICAgABBEGsiASSAgICAACABQQhqIAAQqoCAgAACQAJAIAEtAAhBAUcNACABLQAJIQAMAQtBBkEAIAEoAgwoAgBBEEYbIQALIAFBEGokgICAgAAgAAuBAQEBfyOAgICAAEEQayICJICAgIAAIAJBCGogARCqgICAAEEBIQECQAJAIAItAAhBAUcNACAAIAItAAk6AAEMAQsCQCACKAIMIgEoAgBBBkcNACAAIAFBBGo2AgRBACEBDAELIABBADoAAUEBIQELIAAgAToAACACQRBqJICAgIAACxoAAkAgAEGAgICAeEYNACAAIAEQuYCAgAALC20BAn9BBCEBAkACQAJAAkAgACgCACICQX5qQQkgAkEBSxsiAg4KAgICAgICAwMDAQALIAJBG0sNAkEEIQFBASACdEGAgIDiAHFFDQIMAQtBCCEBCyAAIAFqIgAoAgAgAEEEaigCABCrgICAAAsLxgQBB38jgICAgABBwABrIgMkgICAgABBACEEAkACQAJAAkAgAg0AQQEhBUEAIQIMAQsgAUEMQQAgAhsiBWohBCACQQxsIgZBdGpBDG4hByAGIQIgASEIAkADQCACRQ0BIAJBdGohAiAIKAIIIQkgCEEMaiEIIAkgB2oiByAJTw0AC0HMssCAAEE1QYSzwIAAEOaAgIAAAAsgA0EIaiAHQQFBARCYgICAACADQQA2AiQgAyADKQMINwIcIANBHGogASgCBCICIAIgASgCCGoQ44CAgAAgBSAGayEJIAMoAiAiBSADKAIkIgJqIQEgByACayEIAkADQCAJRQ0BIAhFDQMgBCgCCCECIAQoAgQhBiABQSw6AAAgCEF/aiIIIAJJDQQgAUEBaiEBAkAgAkUNACABIAYgAvwKAAALIARBDGohBCAJQQxqIQkgCCACayEIIAEgAmohAQwACwsgByAIayEEIAMoAhwhAgsgAyAENgIkIAMgBTYCICADIAI2AhwgA0ECNgIsIANBoKjAgAA2AiggA0IBNwI0IANBgoCAgAA2AhggAyADQRRqNgIwIAMgA0EcajYCFCAAIANBKGoQuICAgAAgAygCHCADKAIgELmAgIAAIANBwABqJICAgIAADwsgA0EANgI4IANBATYCLCADQezlyIAANgIoIANCBDcCMCADQShqQZSzwIAAEOeAgIAAAAsgA0EANgI4IANBATYCLCADQezlyIAANgIoIANCBDcCMCADQShqQZSzwIAAEOeAgIAAAAtTAQN/IAAoAgghASAAKAIEIgIhAwJAA0AgAUUNASADKAIAIANBBGooAgAQuYCAgAAgAUF/aiEBIANBDGohAwwACwsgACgCACACQQRBDBC3gYCAAAs2AQN/AkAgASgCFCICIAEoAhAiA08NACABKAIMIAJqLQAAIQQLIAAgBDoAASAAIAIgA0k6AAALiQ4BA38jgICAgABBIGsiAiSAgICAAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgARDJgICAACIDQf8BcSIEQXdqDicOAgECAgEBAQEBAQEBAQEBAQEBAQEBAQ4BAw8QAQEEBQYREgcTFBUA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IQIgBEEgaiEEDAELCyAGIAYvAfgFQQEgAkEPcXRyOwH4BSABQdgDaikDACEDIABCADcCACAAQQhqQgA3AgAgAEIANwIYIABBIGpCADcCACAAQShqQQA6AAAgACADNwIQDAELIABBAjYCAAsgBUEgaiSAgICAAAtGAQF/QQAhAgJAIABBCEcNAAJAAkAgAUErRg0AIAFB/gBGDQEgAUE+Rw0CQdSjwIAADwtB16PAgAAPC0Hao8CAACECCyACC6gFAQt/I4CAgIAAQcAAayIDJICAgIAAIANBEGoQ1ICAgAAgA0EcakEHaiEEAkACQAJAAkADQCABEKaAgIAAIAEgAS0AXyIFQRByIgY6AF8gA0EoaiABIAIQ1YCAgAAgAy0ALCEHAkACQCADKAIoIghBgICAgHhHDQBBgICAgHghCAwBCyADLwAtIANBKGpBB2otAABBEHRyIQkgAygCMCEKAkAgARCvgICAAEH/AXEiC0EGRw0AIAkhDCAKIQ0MAQsgCCAJQQh0IAdyELmAgIAAQYCAgIB4IQggCyEHCyABIAU6AF8gAS0AXCEFIAFBAzoAXAJAIAVBA0YNACAFIAEQsICAgAALAkADQCADIAEQxoCAgAAgAy0AAEUNASAGIAMtAAFB/wFxLQCMjMmAAHENASADQShqIAEQx4CAgAACQCADKAIoIgVBaGpBcyAFQQFLGyIFQQNLDQBBgICEECAFQQN0diIFQf8BcUEDRg0AIAUgARCwgICAAAsgA0EoahDDgICAAAwACwsgCEGAgICAeEYNAiADIAw7ACEgBCAMQRB2OgAAIAMgDTYCJCADIAc6ACAgAyAINgIcIANBEGogA0EcahC9gICAACADQShqIAEQqoCAgAAgAy0AKA0BIAMoAiwoAgBBEEYNAAtBuJnJgABBKEH4x8CAABCFgICAAAALIAMgAygAFTYCCCADIANBEGpBCGooAAA2AAsgAy0AFCEHIAMoAhAiAUGAgICAeEYNASADQShqQQhqIgUgAygACzYAACADIAMoAgg2AC0gAyAHOgAsIAMgATYCKCAAIAMoAiwgBSgCABDEgICAACADQShqEMWAgIAADAILIANBEGoQxYCAgAALIABBgICAgHg2AgAgACAHOgAECyADQcAAaiSAgICAAAtIAgF/AX4jgICAgABBEGsiASSAgICAACABQQhqQQFBBEEMEJiAgIAAIAEpAwghAiAAQQA2AgggACACNwIAIAFBEGokgICAgAAL50cBHX8jgICAgABBsAJrIgMkgICAgAAgA0EANgJIIANCgICAgMAANwJAIAEQpoCAgAACQCACRQ0AIAEoAhwhAiABKAIYIQQgASgCFCEFIAEtAFwhBiADQfgBaiABEKqAgIAAAkAgAy0A+AFBAUYNACADKAL8ASIHKAIAIAdBBGooAgAQ0oCAgAAiB0UNACADQfgBaiAHQQMQv4CAgAAgA0HAAGogA0H4AWoQvYCAgAAMAQsgASAGOgBcIAEgAjYCHCABIAQ2AhggASAFNgIUCyADQdQAakEFaiEIIANBpAJqQQVqIQkgA0HgAWpBBWohCiADQdQBakEFaiELIANBmAJqQQVqIQwgA0H4AWpBBWoiDUEDaiEOIANBpAJqQQdqIQ8CQAJAAkACQANAIAEQpoCAgAAgA0EANgJoIANCgICAgMAANwJgAkADQCABKAIcIQQgASgCGCEFIAEoAhQhBiABLQBcIQcgA0H4AWogARDWgICAAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMtAPgBQQFGDQAgA0HsAGogAygC/AEQu4CAgAACQAJAAkACQAJAAkACQAJAAkACQCADKAJsIgJBfmpBCSACQQFLGyICDgcHCQkBCQkCAAsgAkEMRg0CIAJBGEcNCCABLQBcIQIgAUEDOgBcIAIQroCAgAAhAiABLQBeQX9qQf8BcSABLQBdIgRPDQNBBSECDCULIAMoAnAiBCEFIAMoAnQiAiEGAkAgAkF/Rw0AIAQoAgghBiAEKAIEIQULIANB4AFqIAUgBhC1gICAACADQQI2AvwBIANBhKXAgAA2AvgBIANCATcChAIgA0GCgICAADYCqAIgAyADQaQCajYCgAIgAyADQeABajYCpAIgA0GwAWogA0H4AWoQuICAgAAgAygC4AEgAygC5AEQuYCAgAAgA0HgAGogA0GwAWoQvYCAgAAgBCACEKuAgIAADCELIAMoAnAiAkFWag4FAgYGBgMFCyADQfgBaiABENaAgIAAIAMtAPgBQQFGDSAgA0GwAWogAygC/AEQu4CAgAACQAJAIAMoArABIgJBfmpBCSACQQFLGyIEQRZGIgYNACAEQQxGDQECQCAERQ0AQQAhAkGAgICAeCEFDB4LIAMoArQBIgchAiADKAK4ASIGIQQCQCAGQX9HDQAgBygCCCEEIAcoAgQhAgsgA0HUAWogAiAEELOAgIAAQQIhBUHSqMCAACEQAkAgAygC2AEiBCADKALcASICQbCowIAAQQYQvICAgAANACAEIAJBtqjAgABBBRC8gICAAA0AIAQgAkG7qMCAAEEKELyAgIAADQBBAkEBIAQgAkHFqMCAAEEMELyAgIAAIhAbIQVB0qjAgABB0ajAgAAgEBshEAsgAyAFNgLMASADIBA2AsgBIANBpAJqIAQgAhC1gICAACADQQM2AvwBIANB2KjAgAA2AvgBIANCAjcChAIgA0GCgICAADYC7AEgA0GGgICAADYC5AEgAyADQeABajYCgAIgAyADQaQCajYC6AEgAyADQcgBajYC4AEgA0GYAmogA0H4AWoQuICAgAAgAygCpAIgAygCqAIQuYCAgAAgA0GYAmpBB2otAAAhECADKAKYAiEFIAMtAJwCIQIgAygCoAIhESADLwCdAiESIAMoAtQBIAQQuYCAgAAgByAGEKuAgIAAIBIgEEEQdHIhEgwfCyADKAK0ASIQIQIgAygCuAEiByEFAkAgB0F/Rw0AIBAoAgghBSAQKAIEIQILIANByAFqIAIgBRCzgICAACABLQBcIQIgAUEDOgBcIAIQroCAgAAhAiADKALMASETAkAgAS0AXkF/akH/AXEgAS0AXSIFTw0AQQUhAkGAgICAeCEFDBwLIAEgBUEBajoAXSABLQBfIRQgAUGAgYEBIAJB/wFxIhVBA3R2OgBfIBMgAygC0AEiBUG0pcCAAEECELyAgIAADRcgEyAFQbalwIAAQQcQvICAgAANFyATIAVBvaXAgABBCxC8gICAAA0XIBMgBUHIpcCAAEEIELyAgIAADRcgEyAFQdClwIAAQQUQvICAgAANCAJAAkAgEyAFQdWlwIAAQQMQvICAgAANAAJAIBMgBUHYpcCAAEEDELyAgIAADQAgEyAFQdulwIAAQQkQvICAgAANGCATIAVB5KXAgABBDhC8gICAAA0YIBMgBUHypcCAAEELELyAgIAADRggEyAFQf2lwIAAQRAQvICAgAANGAJAIBMgBUGNpsCAAEEEELyAgIAADQADQCADQfgBaiABEKqAgIAAIAMtAPgBRQ0ACyADQeABaiATIAUQtYCAgAAgA0ECNgL8ASADQZymwIAANgL4ASADQgE3AoQCIANBgoCAgAA2ApwCIAMgA0GYAmo2AoACIAMgA0HgAWo2ApgCIANBpAJqIANB+AFqELiAgIAAIAMoAuABIAMoAuQBELmAgIAAIAMvAKkCIA8tAABBEHRyIRYMHAsgA0GkAmoQ1ICAgAACQAJAA0AgARCmgICAACABIAEtAF8iBUEQciIXOgBfIANB1AFqIAEQ2ICAgAACQAJAAkAgAy0A1AFBAUcNACADLQDVASECDAELIANB+AFqIAMoAtgBIgIoAgAgAkEEaigCABC0gICAACADLQD8ASEWAkAgAygC+AEiGEGAgICAeEcNACAWIQIMAQsgAy8A/QEgA0H4AWpBB2otAABBEHRyIRkgAygCgAIhGgJAIAEQr4CAgABB/wFxIgJBBkcNACAZIRsgGiEcIBYhAgwCCyAYIBlBCHQgFnIQuYCAgAALQYCAgIB4IRgLIAEgBToAXyABLQBcIQUgAUEDOgBcAkAgBUEDRg0AIAUgARCwgICAAAsCQANAIANBOGogARDGgICAACADLQA4RQ0BIBcgAy0AOUH/AXEtAIyMyYAAcQ0BIANB+AFqIAEQx4CAgAACQCADKAL4ASIFQWhqQXMgBUEBSxsiBUEDSw0AQYCAhBAgBUEDdHYiBUH/AXFBA0YNACAFIAEQsICAgAALIANB+AFqEMOAgIAADAALCyAYQYCAgIB4Rg0CIAMgGzsA5QEgA0HgAWpBB2ogG0EQdjoAACADIBw2AugBIAMgAjoA5AEgAyAYNgLgASADQaQCaiADQeABahC9gICAACADQfgBaiABEKqAgIAAIAMtAPgBDQEgAygC/AEoAgBBEEYNAAtBuJnJgABBKEH4x8CAABCFgICAAAALIAMgCSgAADYCnAEgAyAJQQNqKAAANgCfASADLQCoAiECIAMoAqQCIgVBgICAgHhGDRogDCADKAKcATYAACAMQQNqIAMoAJ8BNgAAIAMgAjoAnAIgAyAFNgKYAiADQeABaiADKAKcAiADKAKgAhDZgICAACADQQI2AvwBIANBuKbAgAA2AvgBIANCATcChAIgA0GCgICAADYC2AEgAyADQdQBajYCgAIgAyADQeABajYC1AEgA0GkAmogA0H4AWoQuICAgAAgAygC4AEgAygC5AEQuYCAgAAgAy8AqQIgDy0AAEEQdHIhFiADKAKkAiEXIAMtAKgCIRggAygCrAIhGSADQZgCahDFgICAAAwdCyADQaQCahDFgICAAAwZCyADQeABaiABQQEQ04CAgAAgAy0A5AEhAiADKALgASIFQYCAgIB4Rg0YIAkgCigAADYAACAJQQNqIApBA2ooAAA2AAAgAyACOgCoAiADIAU2AqQCIANBAjYC/AEgA0GEp8CAADYC+AEgA0IBNwKEAiADQYKAgIAANgLkASADIANB4AFqNgKAAiADIANBpAJqNgLgASADQZgCaiADQfgBahC4gICAACADKAKkAiADKAKoAhC5gICAACADLwCdAiADQZgCakEHai0AAEEQdHIhFgwBCyADQeABaiABQQAQ04CAgAAgAy0A5AEhAiADKALgASIFQYCAgIB4Rg0XIAkgCigAADYAACAJQQNqIApBA2ooAAA2AAAgAyACOgCoAiADIAU2AqQCIANBAjYC/AEgA0Ggp8CAADYC+AEgA0IBNwKEAiADQYKAgIAANgLkASADIANB4AFqNgKAAiADIANBpAJqNgLgASADQZgCaiADQfgBahC4gICAACADKAKkAiADKAKoAhC5gICAACADLwCdAiADQZgCakEHai0AAEEQdHIhFgsgAygCmAIhFyADLQCcAiEYIAMoAqACIRkMGQsgA0H4AWogARDWgICAAAJAAkACQCADLQD4AQ0AIANB4AFqIAMoAvwBELuAgIAAAkAgAygC4AEiAkF+akEJIAJBAUsbIgJBFkYNACACDQMgAygC5AEiBiECIAMoAugBIgQhBQJAIARBf0cNACAGKAIIIQUgBigCBCECCyADQaQCaiACIAUQs4CAgAAgA0GYAmogAygCqAIiAiADKAKsAhC1gICAACADQQI2AvwBIANB+KjAgAA2AvgBIANCATcChAIgA0GCgICAADYCzAEgAyADQcgBajYCgAIgAyADQZgCajYCyAEgA0HUAWogA0H4AWoQuICAgAAgAygCmAIgAygCnAIQuYCAgAAgAygCpAIgAhC5gICAACADQdQBakEHai0AACEHIAMoAtQBIQUgAy0A2AEhAiADKALcASERIAMvANkBIRAgBiAEEKuAgIAAIBAgB0EQdHIhEgwgCyABLQBcIQIgAUEDOgBcIAMoAugBIQQgAygC5AEhBiACEK6AgIAAIQVBBSECAkACQCABLQBeQX9qQf8BcSABLQBdIgdJDQAgASAHQQFqOgBdIAEtAF8hByABQYCBgQEgBUH/AXEiEEEDdHY6AF8DQCADQfgBaiABEKqAgIAAIAMtAPgBRQ0ACyABEK+AgIAAIQIgAS0AXCEFIAFBAzoAXCACQf8BcSECAkAgBUEDRg0AIAUgARCwgICAAAsgECABELCAgIAAIAEgBzoAXyABIAEtAF1Bf2o6AF0gAkEGRg0BCyAGIAQQq4CAgAAMAgsgBiECIAQhBQJAIARBf0cNACAGKAIIIQUgBigCBCECCyADQaQCaiACIAUQs4CAgAAgA0GYAmogAygCqAIiAiADKAKsAhC1gICAACADQQI2AvwBIANB+KjAgAA2AvgBIANCATcChAIgA0GCgICAADYCzAEgAyADQcgBajYCgAIgAyADQZgCajYCyAEgA0HUAWogA0H4AWoQuICAgAAgAygCmAIgAygCnAIQuYCAgAAgAygCpAIgAhC5gICAACADQdQBakEHai0AACEHIAMoAtQBIQUgAy0A2AEhAiADKALcASERIAMvANkBIRAgBiAEEKuAgIAAIBAgB0EQdHIhEgwfCyADLQD5ASECCyADQbABahDDgICAAAwjCyADQeABahDDgICAAEGAgICAeCEFQQAhAgwcCyABIARBAWo6AF0gAS0AXyEGIAFBgIGBASACQf8BcSIHQQN0djoAXyADQfgBaiABEL6AgIAAAkAgAy0A+AFBAUcNACADLQD5ASECDBILIANByAFqIAMoAvwBIgIoAgAgAkEEaigCABC0gICAACADQaQCaiABEKqAgIAAAkAgAy0ApAJBAUcNACADQeABaiADKALMASADKALQARC1gICAACADQQI2AvwBIANBmKrAgAA2AvgBIANCATcChAIgA0GCgICAADYCtAEgAyADQbABajYCgAIgAyADQeABajYCsAEgA0GcAWogA0H4AWoQuICAgAAgAygC4AEgAygC5AEQuYCAgAAMEQtBAiEFQYGQyYAAIQICQAJAAkACQAJAAkACQCADKAKoAiIQKAIAIgRBfmpBCSAEQQFLG0F6ag4OAAYGBgYGBgYGBQECAwQGCyAQKAIEQT1HDQVBASEFQeWpwIAAIQIMBAtB/4/JgAAhAgwDC0H9j8mAACECDAILQfCPyYAAIQIMAQtB8o/JgAAhAgsgAyAFNgKsASADIAI2AqgBIANB+AFqIAEQ2ICAgAACQCADLQD4AUEBRw0AIAMgAy0A+QE6AKABIANBgICAgHg2ApwBDBILIANB1AFqIAMoAvwBIgIoAgAgAkEEaigCABC0gICAACABKAIcIQQgASgCGCEFIAEoAhQhECABLQBcIRMgA0HgAWogARC+gICAAAJAAkAgAy0A4AFBAUYNACADKALkASIXKAIAIQICQCAXQQRqKAIAIhdBf0cNACACKAIIIRcgAigCBCECCyADQfgBaiACIBcQs4CAgAAgAygC+AEiAkGAgICAeEcNAQsgASATOgBcIAEgBDYCHCABIAU2AhggASAQNgIUQQEhBEEAIQJBACEFDA8LIAMoAvwBIQQCQCADKAKAAkEBRw0AQQEhBSAELQAAIhBB6QBGDQ8gEEHzAEYNDwsgA0GAgICAeDYCnAEgA0EAOgCgASACIAQQuYCAgAAMDwsgA0GAgICAeDYCnAEgA0EAOgCgAQwQCyADKAJoDQogA0H4AWpBlKXAgABBBRC/gICAACADQeAAaiADQfgBahC9gICAAAwcCyADQfgBaiABENaAgIAAIAMtAPgBDR0gAygC/AEiBCgCAEECRw0JIAQoAgQhAgJAIARBCGooAgAiBEF/Rw0AIAIoAgghBCACKAIEIQILIANB4AFqIAIgBBC1gICAACADQQI2AvwBIANBpKXAgAA2AvgBIANCATcChAIgA0GCgICAADYCqAIgAyADQaQCajYCgAIgAyADQeABajYCpAIgA0GwAWogA0H4AWoQuICAgAAgAygC4AEgAygC5AEQuYCAgAAgA0HgAGogA0GwAWoQvYCAgAAMGwsgAygCdCECIAMoAnAhBCADKAJoRQ0JIAQgAhCrgICAAAwGCyACQSZGDQYLIAEgBzoAXCABIAQ2AhwgASAFNgIYIAEgBjYCFCADQewAahDDgICAAAsgAygCaCICRQ0DIANB+AFqIAMoAmQgAhDEgICAACADIA0oAAA2AkwgAyAOKAAANgBPIAMoAvgBIQQgAy0A/AEhAiADQeAAahDFgICAACAEQYCAgIB4Rg0dIAggAygCTDYAACAIQQNqIAMoAE82AAAgAyACOgBYIAMgBDYCVCADQcAAaiADQdQAahC9gICAAEEAIQIDQCABKAIcIQQgASgCGCEFIAEoAhQhBiABLQBcIQcgA0HgAWogARDWgICAAAJAIAMtAOABQQFHDQAgACADKAJEIAMoAkgQxICAgAAMIAsgA0H4AWogAygC5AEQu4CAgAACQCADKAL4ASIQQQxHDQAgA0H4AWoQw4CAgABBASECDAELCwJAIBAgAygC/AEQ0oCAgAAiEEUNACADQeABaiAQQQMQv4CAgAAgA0HAAGogA0HgAWoQvYCAgAAMAwsgAkEBcQ0BIABBgICAgHg2AgAgAEEAOgAEIANB+AFqEMOAgIAADB4LIANB4AFqIAEQ2oCAgAAgA0ECNgL8ASADQcCnwIAANgL4ASADQgE3AoQCIANBgoCAgAA2ApwCIAMgA0GYAmo2AoACIAMgA0HgAWo2ApgCIANBpAJqIANB+AFqELiAgIAAIAMoAuABIAMoAuQBELmAgIAAIAMvAKkCIA8tAABBEHRyIRYMDwsgASAHOgBcIAEgBDYCHCABIAU2AhggASAGNgIUIANB4AFqQd2jwIAAQQMQv4CAgAAgA0HAAGogA0HgAWoQvYCAgAALIANB+AFqEMOAgIAADBcLQQAhAgwYCyADQfgBakGZpcCAAEEFEL+AgIAAIANB4ABqIANB+AFqEL2AgIAADBILQQAhAgwVCyAEIQUgAiEGAkAgAkF/Rw0AIAQoAgghBiAEKAIEIQULIANB4AFqIAUgBhC1gICAACADQQI2AvwBIANB7KTAgAA2AvgBIANCATcChAIgA0GCgICAADYCqAIgAyADQaQCajYCgAIgAyADQeABajYCpAIgA0GwAWogA0H4AWoQuICAgAAgAygC4AEgAygC5AEQuYCAgAAgA0HgAGogA0GwAWoQvYCAgAAgBCACEKuAgIAADBELIAMgBTYCoAIgAyAENgKcAiADIAI2ApgCIAEQr4CAgABB/wFxIgJBBkYNASADQYCAgIB4NgKcASADIAI6AKABIAMoApgCIAMoApwCELmAgIAACyADKALUASADKALYARC5gICAAAwBCyADQaQCaiADKALMASADKALQARC1gICAACADQbABaiADKALYASICIAMoAtwBELWAgIAAIANBBTYC5AEgA0HwqcCAADYC4AEgA0IENwLsASADQYKAgIAANgKUAiADQYKAgIAANgKMAiADQYaAgIAANgKEAiADQYKAgIAANgL8ASADIANB+AFqNgLoASADIANBmAJqNgKQAiADIANBsAFqNgKIAiADIANBqAFqNgKAAiADIANBpAJqNgL4ASADQZwBaiADQeABahC4gICAACADKAKwASADKAK0ARC5gICAACADKAKkAiADKAKoAhC5gICAACADKAKYAiADKAKcAhC5gICAACADKALUASACELmAgIAACyADKALIASADKALMARC5gICAACADLQCgASEFAkAgAygCnAEiBEGAgICAeEcNACAFIQIMAQsgAy8AoQEgA0GcAWpBB2otAABBEHRyIRAgAygCpAEhEwJAIAEQr4CAgABB/wFxIgJBBkcNACATIR0gECEeIAUhAgwCCyAEIBBBCHQgBXIQuYCAgAALQYCAgIB4IQQLIAEtAFwhBSABQQM6AFwCQCAFQQNGDQAgBSABELCAgIAACyAHIAEQsICAgAAgASAGOgBfIAEgAS0AXUF/ajoAXSAEQYCAgIB4Rg0OIAMgHjsAiQEgA0GEAWpBB2ogHkEQdjoAACADIB02AowBIAMgAjoAiAEgAyAENgKEASADQeAAaiADQYQBahC9gICAAAwKCyADQeABaiABEKqAgIAAAkACQCADLQDgAUEBRw0AIAMgAy0A4QE6APkBIANBAToA+AEMAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAygC5AEiAigCACIXQX5qQQkgF0EBSxsOCgAREREREQoLEQERCyACKAIEIRcCQCACQQhqIhYoAgAiGEF/Rw0AIBcoAgghGCAXKAIEIRcLIANBEGogA0GkAmpBBCAXIBgQ24CAgAAgAygCECIXQeyLyYAAIBcbIhggAygCFEEBIBcbIhdB7YvJgABBBBDcgICAAA0BIBggF0Hxi8mAAEEDENyAgIAADQIgGCAXQfSLyYAAQQEQ3ICAgAANAyAYIBdB9YvJgABBAhDcgICAAA0EIBggF0G3i8mAAEECENyAgIAADQUgGCAXQfeLyYAAQQMQ3ICAgAANBiACKAIEIgIhGCAWKAIAIhkhFgJAIBlBf0ciHw0AIAIoAgghFiACKAIEIRgLIANBLTYC4AFBf0EBIBggFiADQeABakEBEN2AgIAAIhcbIRogFkF/aiAZIBcbIRYgGEEBaiACIBcbIRgCQCAXDQAgHw0AIAIo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XyABIAEtAF1Bf2o6AF0LIAMoAsgBIBMQuYCAgAAgECAHEKuAgIAACyAERQ0BIAYNAQsgA0GwAWoQw4CAgAALIAVBgICAgHhGDQQgAyASOwCVASADQZABakEHaiASQRB2OgAAIAMgETYCmAEgAyACOgCUASADIAU2ApABIANB4ABqIANBkAFqEL2AgIAACyADQewAahDDgICAAAwACwsLIAMtAPkBIQILIANB7ABqEMOAgIAACyADQeAAahDFgICAAAsgAEGAgICAeDYCACAAIAI6AAQLIANBwABqEMWAgIAAIANBsAJqJICAgIAAC3IBAX8jgICAgABBEGsiAiSAgICAAAJAA0AgAkEIaiABEKeAgIAAAkAgAi0ACEEBRw0AIAAgAi0ACToAAUEBIQEMAgsgAigCDCgCAEENRg0ACyAAIAFBMGo2AgRBACEBCyAAIAE6AAAgAkEQaiSAgICAAAsUACABIAAoAgAgACgCBBCegYCAAAuUAQECfyOAgICAAEEQayICJICAgIAAIAJBCGogARCqgICAAEEBIQECQAJAIAItAAhBAUcNACAAIAItAAk6AAEMAQsCQAJAIAIoAgwiAygCACIBQX5qQQkgAUEBSxsOBQEAAAABAAsgAEEAOgABQQEhAQwBCyAAIANBBGo2AgRBACEBCyAAIAE6AAAgAkEQaiSAgICAAAvqAQEDfyOAgICAAEEgayIDJICAgIAAIAMgAkEEQQwQmICAgAAgA0EANgIQIAMgAykDADcCCCADQQhqIAIQ6oCAgAAgAygCECEEAkAgAkUNACAEIAJqIQUgAUEIaiEBIAMoAgwgBEEMbGohBANAIANBFGogAUF8aigCACABKAIAELWAgIAAIARBCGogA0EUakEIaigCADYCACAEIAMpAhQ3AgAgAUEMaiEBIARBDGohBCACQX9qIgINAAsgBSEECyADIAQ2AhAgACADKAIMIAQQxICAgAAgA0EIahDFgICAACADQSBqJICAgIAAC+EEAwZ/An4BfyOAgICAAEHAAGsiAiSAgICAACACQRBqENSAgIAAIAJBL2ohAwJAA0AgARCmgICAACABIAEtAF8iBEEQciIFOgBfIAJBKGogAUEAENWAgIAAIAItACwhBgJAAkAgAigCKCIHQYCAgIB4Rw0AIAhCgH6DIAathCEIQYCAgIB4IQcMAQsg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gIAAQRBrIgIkgICAgAAgASgCFCEDA0AgAkEIaiABEKqAgIAAIAItAAhFDQALIAIgASgCDCADaiABKAIUIANrELKAgIAAIAAgAigCACACKAIEEL+AgIAAIAJBEGokgICAgAALgQMBA38jgICAgABBwABrIgMkgICAgAAgAyABOgALIAMgAjYCDCADIANBC2o2AhAgA0EgaiADQQxqEKWAgIAAAkACQCADKAIgQYCAgIB4Rg0AIANBBEEEQQwQmICAgAAgAygCACEBIAMoAgQiBCADKQIgNwIAIARBCGogA0EgakEIaigCADYCACADQQE2AhwgAyAENgIYIAMgATYCFCADIAI2AiwgAyADQQtqNgIwQQwhAkEBIQECQANAIANBNGogA0EsahClgICAACADKAI0QYCAgIB4Rg0BAkAgASADKAIURw0AIANBFGpBARDqgICAACADKAIYIQQLIAQgAmoiBSADKQI0NwIAIAVBCGogA0E0akEIaigCADYCACADIAFBAWoiATYCHCACQQxqIQIMAAsLIAMoAhwhAiADKAIYIQEMAQtBACECIANBADYCHCADQoCAgIDAADcCFEEEIQELIAAgASACEMSAgIAAIANBFGoQxYCAgAAgA0HAAGokgICAgAALKQEBfwJAIAEgACgCACAAKAIIIgJrTQ0AIAAgAiABQQRBDBDtgICAAAsLhwMCCH8BfiOAgICAAEHAAGsiAiSAgICAACACQRBqIAEQ7ICAgAAiA0EEQQwQmICAgAAgAkEANgIgIAIgAigCFCIENgIcIAIgAigCECIFNgIYQQAhBgJAIAMgBU0NACACQRhqQQAgA0EEQQwQ7YCAgAAgAigCHCEEIAIoAiAhBgtBACEHAkADQCAHIANGDQEgAkEIaiABEOyAgIAAIghBBEEMEJiAgIAAIAJBADYCLCACIAIpAwg3AiQgAkEkaiAIEOqAgIAAIAggAigCLCIFaiEJIAIoAiggBUEMbGohBQJAA0AgCEUNASACQTBqIAEQ7oCAgAAgBUEIaiACQTBqQQhqKAIANgIAIAUgAikCMDcCACAIQX9qIQggBUEMaiEFDAALCyACQTBqQQhqIAk2AgAgAiACKQIkIgo3AzAgBCAGQQxsaiIFQQhqIAk2AgAgBSAKNwIAIAZBAWohBiAHQQFqIQcMAAsLIAAgAikCGDcCACAA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fiOAgICAAEEwayIDJICAgIAAIAMgATYCBCADIAA2AgAgA0EDNgIMIANB3MrAgAA2AgggA0ICNwIUIANBhYCAgACtQiCGIgQgA0EEaq2ENwMoIAMgBCADrYQ3AyAgAyADQSBqNgIQIANBCGogAhDngICAAAALLgAgAEEAQQIgARDsgICAACIBQQdJGzoAACAAQoCCiJjg4IEEIAGtQgOGiDwAAQuMAQIBfwF+I4CAgIAAQTBrIgEkgICAgAAgASAArSICNwMIAkACQCAARQ0AIAEgAkIHgyICNwMQIAJCAFENASABQQA2AhhBACABQRBqIAFBGGpBiLfAgAAQwIKAgAAACyABQQA2AhhBASABQQhqIAFBGGpB+LbAgAAQwIKAgAAACyABQTBqJICAgIAAIAALQwEBfwJAAkAgARDsgICAACIBQQlNDQBBAiECDAELIAEtAJLJwIAAIQIgAS0AiMnAgAAhAQsgACABOgABIAAgAjoAAAtzAgN/AX0gARDsgICAACECQQAhA0EDIQQgARDygICAACEFAkACQAJAAkAgAkF/ag4DAAECAwsgBbwhA0EBIQQMAgsgBbwhA0ECIQQMAQtBACEEIAX8AUEDdEEIahD1gICAACEDCyAAIAQ2AgAgACADNgIEC4cBAgF/A34jgICAgABBIGsiAiSAgICAACACQRhqIAEQ94CAgAAgAikDGCEDIAJBEGogARD3gICAACACKQMQIQQgAkEIaiABEPeAgIAAIAIpAwghBSACIAEQ94CAgAAgACACKQMANwIYIAAgBTcCECAAIAQ3AgggACADNwIAIAJBIGokgICAgAALhwECAX8DfiOAgICAAEEgayICJICAgIAAIAJBGGogARD6gICAACACKQMYIQMgAkEQaiABEPqAgIAAIAIpAxAhBCACQQhqIAEQ+oCAgAAgAikDCCEFIAIgARD6gICAACAAIAIpAwA3AhggACAFNwIQIAAgBDcCCCAAIAM3AgAgAkEgaiSAgICAAAtvAgN/AX0gARDsgICAACECQQEhA0EAIQQgARDygICAACEFAkACQAJAAkAgAkF/ag4DAAECAwsgBbwhBAwCCyAFvCEEQQIhAwwBC0EAIQMgBfwBQQN0QQhqEPWAgIAAIQQLIAAgBDYCBCAAIAM2AgALugEBA38jgICAgABBEGsiAiSAgICAAAJA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GjYCuAEgBUEwaiAUIBAgGSAgICGSkiAJQQFxGyAOQQFxGyAVIBsgFyAlICiSkiANQQFxGyAMQQFxGyAFQaABaiAFQbgBahCQgYCAACAFKgI0IRQgBSoCMCEbIABCADcCGCAAIBsgIhDIhYCAADgCECAAQSBqQgA3AgAgACAUIBsgLJVDAAAAACADGxDIhYCAACApEMiFgIAAIhs4AhQgACAXQwAAAABbIAQgG0MAAAAAW3FxOgAoICu8Qf////8HcUGAgID8B0ghBiAqvEH/////B3FBgICA/AdIIQ4LIAAgKzgCDCAAIAY2AgggACAqOAIEIAAgDjYCAAsgCCALEK2BgIAAIAVB8AFqJICAgIAACy4AAkAgASgCAA0AIAFBfzYCACAAIAE2AgQgACABQQRqNgIADwsgAhDXgYCAAAALKQEBfwJAIAEgACgCACAAKAIIIgJrTQ0AIAAgAiABQQRBBBDtgICAAAsLXAEBfyOAgICAAEEwayIBJICAgIAAIAFBATYCDCABQfCXyYAANgIIIAFCATcCFCABQYmAgIAArUIghiABQS9qrYQ3AyAgASABQSBqNgIQIAFBCGogABDngICAAAALEAAgACABQQRBBBC3gYCAAAsOACABIAEgAhCvgYCAAAsSACABQQN2QX9qIAIQgICAgAALEwAgACABKgIUOAIEIABBATYCAAsdACAAKAIIQX1qQR53IgBBCElBqwEgAEH/AXF2cQsEAEEBCxYAIAAoAggiAEEgSUGAgIKEeCAAdnELbAICfwF9IAEoAgwhBUEAIQYCQAJAAkACQAJAIAEoAggOAwIAAQQLIAW+IQcMAgsgAyAFvpQhByACIQYMAgsgAkEBcUUNASAFQQN2QX9qIAMQgICAgAAhBwtBASEGCyAAIAc4AgQgACAGNgIACyABAX8gACABKAIEIgI2AgAgACACIAEoAghBDGxqNgIECxAAIAAgAUEEQRQQt4GAgAALdgEBfyOAgICAAEEQayIEJICAgIAAAkACQCAADQBBACEAIARBDGohAwwBCyAEIAI2AgwgACADbCEAIARBCGohAwsgAyAANgIAAkAgBCgCDCIARQ0AIAQoAggiA0UNACABIAMgABDAg4CAAAsgBEEQaiSAgICAAAtEAQN/IAAoAgghASAAKAIEIgIhAwJAA0AgAUUNASABQX9qIQEg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IGsiASSAgICAACABQRhqEMiBgIAAIAAoAvgOIQIgACABKAIYNgL4DiAAKAL8DiEDIAAgASgCHDYC/A4gAiADEMmBgIAAIAFBEGoQyIGAgAAgACgCgA8hAiAAIAEoAhA2AoAPIAAoAoQPIQMgACABKAIUNgKEDyACIAMQyYGAgAAgAUEIahDIgYCAACAAKALgDiECIAAgASgCCDYC4A4gACgC5A4hAyAAIAEoAgw2AuQOIAIgAxDJgYCAACAAQZAOahCShICAACAAQagOahCShICAACAAQcAOahCShICAACABQSBqJICAgIAAC1oBAn8jgICAgABBIGsiASSAgICAACABQQA2AhwgAUKAgICAEDcCFCABQQhqIAFBFGoQtoSAgAAgASgCDCECIAAgASgCCDYCACAAIAI2AgQgAUEgaiSAgICAAAsWAAJAIAFFDQAgAEEBIAEQu4GAgAALC1oBAn8jgICAgABBIGsiASSAgICAACABQQA2AhwgAUKAgICAIDcCFCABQQhqIAFBFGoQvISAgAAgASgCDCECIAAgASgCCDYCACAAIAI2AgQgAUEgaiSAgICAAAtiAQJ/I4CAgIAAQRBrIgEkgICAgAACQCAAKAIQIgJFDQAgAUEEaiAAKAIEIAAoAgggAkEBahC+gYCAACAAKAIMIAEoAgxrIAEoAgQgASgCCBC7gYCAAAsgAUEQaiSAgICAAAsSACAAKAIAIAAoAgQQuYCAgAALcwAgAEEIahDCgYCAACAAQRRqEMKBgIAAIAAoAiAgACgCJBDxgICAACAAKAIsIAAoAjAQ8YCAgAAgAEHQAGoQxIGAgAAgAEE4ahDDgYCAACAAQcQAahDDgYCAACAAQeAAahDOgYCAACAAQYABahDOgYCAAAsVACAAENGBgIAAIABBEGoQ0YGAgAALJwEBfyAAQXhqIgAgACgCAEF/aiIBNgIAAkAgAQ0AIAAQ8YSAgAALC2wAAkACQAJAAkACQCAAKAIADgQBAgMEAAsgACgCBCAAKAIIELmAgIAADwsgACgCBCAAKAIIELmAgIAADwsgACgCBCAAKAIIELmAgIAADwsgAEEEahDFgICAAA8LIAAoAgQgACgCCBC5gICAAAstAQF/AkACQCAALwEAIgFBA0sNACABQQJHDQELIAAoAgQgACgCCBC5gICAAAsLEAAgACABQQhBCBC3gYCAAAsVACAAELiBgIAAIABBDGoQuIGAgAALEQAgACABQQhBmAIQt4GAgAALEAAgACABQQRBMBC3gYCAAAubAQECfwJAAkAgAEF3aiIBQRdLDQBBASECQZ+AgAQgAXZBAXENAQtBACECIABBgAFJDQACQAJAIABBCHYiAUUNAAJAIAFBMEYNACABQSBGDQIgAUEWRw0DIABBgC1GIQIMAwsgAEGA4ABGIQIMAgsgAEH/AXEtAJTnyIAAIQIMAQsgAEH/AXEtAJTnyIAAQQJxQQF2IQILIAJBAXELCwAgABDmhICAAAALMgEBfwJAQQAoAti5yYAAIgFB/////wdJDQAgABDZgYCAAAALQQAgAUEBajYC2LnJgAALCwAgABDohICAAAALjwIDAn8BfgF/IAAgACgCOCACajYCOAJAAkACQCAAKAI8IgMNAEEAIQQMAQsgASACQQBBCCADayIEIAIgBCACSRsQ3IGAgAAhBSAAIAApAzAgBSADQQN0QThxrYaEIgU3AzACQCACIARJDQAgACAAKQMYIAWFNwMYIAAQyIOAgAAgAEEANgI8IAAgACkDACAAKQMwhTcDAAwBCyADIAJqIQMMAQsgAiAEayIGQXhxIQMCQANAIAQgA08NASAAIAApAxggASAEaikAACIFhTcDGCAAEMiDgIAAIAAgBSAAKQMAhTcDACAEQQhqIQQMAAsLIAAgASACIAQgBkEHcSIDENyBgIAANwMwCyAAIAM2AjwLpQEBAX8jgICAgABBwABrIgQkgICAgAAgBEE4akIANwMAIARCADcDMCAEIAE3AyggBCABQvPK0cunjNmy9ACFNwMYIAQgAULt3pHzlszct+QAhTcDECAEIAA3AyAgBCAAQuHklfPW7Nm87ACFNwMIIAQgAEL1ys2D16zbt/MAhTcDACACIAMgBBCYgYCAACAEEJmBgIAAIQEgBEHAAGokgICAgAAgAQt5AgF/AX5BBCEEAkACQCADQQRPDQBCACEFQQAhBAwBCyAAIAJqNQAAIQULAkAgBEEBciADTw0AIAAgAmogBGozAAAgBEEDdK2GIAWEIQUgBEECciEECwJAIAQgA08NACAAIAQgAmpqMQAAIARBA3SthiAFhCEFCyAFC1sCAX8BfQJAIAAgAUcNAEMAAACADwsgAEEMaiECIAEgAGtBMG4hAEMAAACAIQMDQCADIAIqAgCSIAMgAkF8aigCAEEERhshAyACQTBqIQIgAEF/aiIADQALIAMLSAECfwJAAkAgASgCBCABKAIAIgJHDQBBACEDDAELQQEhAyABIAJBAWo2AgAgASACQQJ0aigCCCEBCyAAIAE2AgQgACADNgIACxQAIABBKDYCBCAAQcSxwIAANgIACwkAIABBADYCAAsCAAshACAAQQhqQQApAvSxwIAANwIAIABBACkC7LHAgAA3AgALfgEBfyOAgICAAEEgayIFJICAgIAAAkAgAiADTw0AIAVBADYCGCAFQQE2AgwgBUHs5ciAADYCCCAFQgQ3AhAgBUEIaiAEEOeAgIAAAAsgACADNgIEIAAgATYCACAAIAIgA2s2AgwgACABIANBiAJsajYCCCAFQSBqJICAgIAACy0AAkAgAUECSQ0AAkAgAUEVSQ0AIAAgARDlgYCAAA8LIAAgAUEBEOaBgIAACwvzAQEDfwJAAkACQAJAIAAoAgQgACgCAEkiAg0AIABBCGohA0ECIQQDQCABIARGDQMgAygCACADQXxqKAIASQ0CIANBBGohAyAEQQFqIQQMAAsLIABBCGohA0ECIQQDQCABIARGDQIgAygCACADQXxqKAIATw0BIANBBGohAyAEQQFqIQQMAAsLIAAgAUEAIAFBAXJnQQF0QT5zEI+CgIAADAELIAJFDQAgAUEBdiEEIAFBAnQgAGpBfGohAwNAIARFDQEgACgCACEBIAAgAygCADYCACADIAE2AgAgBEF/aiEEIABBBGohACADQXxqIQMMAAsLC6MBAQV/AkACQCACIAFLDQAgACACQQJ0IgNqIQQgACABQQJ0aiEFA0AgBCAFRg0CAkAgBCgCACIGIARBfGooAgAiAk8NACADIQECQANAIAAgAWoiByACNgIAAkAgAUEERw0AIAAhAQwCCyABQXxqIQEgBiAHQXhqKAIAIgJJDQALIAAgAWohAQsgASAGNgIACyADQQRqIQMgBEEEaiEEDAALCwALC10BAX8jgICAgABBEGsiAySAgICAACADIAAoAgAgARCJgYCAADYCCCADIAAoAgAgAhCJgYCAADYCDCADQQhqIANBDGpBBBDDhYCAACEAIANBEGokgICAgAAgAEEfdgt1AQR/QQAhAkEAIAFBAXYiA2shBCABQZgCbCAAakHofWohBSABQQJJIQECQANAIAQgAkYNASACQX9qIQICQCABDQAgACAFQcYAEKCBgIAAIABBmAJqIQAgBUHofWohBQwBCwsgAiADQfyxwIAAENCAgIAAAAsLiwEBA38CQCADQQhJDQAgACAAIANBA3YiA0EEdCIEaiAAIANBHGwiBWogAxDpgYCAACEAIAEgASAEaiABIAVqIAMQ6YGAgAAhASACIAIgBGogAiAFaiADEOmBgIAAIQILIAAgAiABIAAoAgAiAyABKAIAIgRJIgUgBCACKAIAIgZJcxsgBSADIAZJcxsLrgEBAn8CQCADQQhJDQAgACAAIANBA3YiA0HgCGwiBWogACADQagPbCIGaiADIAQQ6oGAgAAhACABIAEgBWogASAGaiADIAQQ6oGAgAAhASACIAIgBWogAiAGaiADIAQQ6oGAgAAhAgsgACACIAEgAEHoAUHsASAEKAIAKAIALQAAGyIEai4BACIDIAEgBGouAQAiBUgiBiAFIAIgBGouAQAiBEhzGyAGIAMgBEhzGwunAQECfwJAIANBCEkNACAAIAAgA0EDdiIDQeAIbCIFaiAAIANBqA9sIgZqIAMgBBDrgYCAACEAIAEgASAFaiABIAZqIAMgBBDrgYCAACEBIAIgAiAFaiACIAZqIAMgBBDrgYCAACECCwJAIAQoAgAtAAAiBCAAIAEQ7IGAgAAiAyAEIAAgAhDsgYCAAEcNACACIAEgAyAEIAEgAhDsgYCAAHMbIQALIAALxAEBA39BASEDIAJBjgJBjwIgAEEBcRsiBGotAAAhBQJAAkACQCABIARqLQAADQAgBUEBcUUNAQwCC0EAIQMgBUEBcUUNAQtBASEDAkACQCABQeoBQe4BIABBAXEiABsiBGovAQAgAUHoAUHsASAAGyIAai4BACIFa8EiAUEAIAFBAEobIgEgAiAEai8BACACIABqLgEAIgBrwSICQQAgAkEAShsiAksgASACSWtB/wFxDgIAAQILIAUgAEgPC0EAIQMLIAMLuAEBAn8CQCADQQhJDQAgACAAIANBeHEiBWogACADQQN2IgNBDmwiBmogAyAEEO2BgIAAIQAgASABIAVqIAEgBmogAyAEEO2BgIAAIQEgAiACIAVqIAIgBmogAyAEEO2BgIAAIQILAkAgBCgCACAALwEAIAEvAQAQ54GAgAAiAyAE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QbuyyYAAQQUgASgCBCgCDBGCgICAAICAgIAACz8BAX8jgICAgABBEGsiASSAgICAACABQQA2AgwgACABQQxqQQQQmIKAgAAgASgCDCEAIAFBEGokgICAgAAgAAtrAQJ/I4CAgIAAQRBrIgMkgICAgAACQCAAKAIEIgQgAkkNACABIAIgACgCACACQZDAwIAAELyDgIAAIAAgAhCagoCAACADQRBqJICAgIAADwsgAyAENgIMIAMgAjYCCCADQQhqELKCgIAAAAtEAQF/AkACQCABKAIEDQAgAEIBNwIEQQEhAQwBCyABKAIALQAAIQIgAUEBEJqCgIAAIAAgAjoAAUEAIQELIAAgAToAAAthAQJ/I4CAgIAAQRBrIgIkgICAgAACQCAAKAIEIgMgAUkNACAAIAMgAWs2AgQgACAAKAIAIAFqNgIAIAJBEGokgICAgAAPCyACIAM2AgwgAiABNgIIIAJBCGoQsoKAgAAAC9gBAQR/I4CAgIAAQRBrIgIkgICAgABBACEDQQAhBAJAAkACQANAAkACQCADQXtGDQAgAkEEaiABEJmCgIAAIAItAARFDQEgAEECOgABQQEhAwwFC0EBIQMgAEEBOgABDAQLIAIsAAUhBQJAIAMNACAFQYB/Rg0CCyAEQYCAgBBPDQIgBEEHdCAFQf8AcXIhBCADQX9qIQMgBUF/TA0ACyAAIAQ2AgRBACEDDAILIABBADoAAUEBIQMMAQsgAEEDOgABQQEhAwsgACADOgAAIAJBEGokgICAgAALDgAgACABEOGAgIAAQQALEAAgACABIAIQnoKAgABBAAsRACAAIAEgASACahDjgICAAAtHAQF/I4CAgIAAQSBrIgAkgICAgAAgAEEANgIYIABBATYCDCAAQfTKwIAANgIIIABCBDcCECAAQQhqQfzKwIAAEOeAgIAAAAuLBQEIfyOAgICAAEEQayIDJICAgIAAIAMgATYCBCADIAA2AgAgA0KggICADjcCCAJAAkACQAJAAkAgAigCECIERQ0AIAIoAhQiAQ0BDAILIAIoAgwiAEUNASACKAIIIgEgAEEDdCIAaiEFIABBeGpBA3ZBAWohBiACKAIAIQADQAJAIABBBGooAgAiB0UNACADKAIAIAAoAgAgByADKAIEKAIMEYKAgIAAgICAgABFDQBBASEBDAULAkAgASgCACAD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IiAjEMiFgIAAICJDAACAf1sbIiI4AgALIARBADYCACAJQQA6AAACQCAiIAlBZmoqAgAiI11FDQAgBSAjOAIACyAKQVBqIQogCUEwaiEJDAALCwJAIAMgDCAEai8BAEEBakH//wNxIgpLDQAgCiADQYy5wIAAENCAgIAAAAsgHSAEaiEJAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIgCkEwbGoiCigCACIFDggLAwECCgoKAAkLIAoqAhQhIiALKAKkASEFIAsoAqgBISQgCy0AsAEhJSALQeABakEIaiAPKQMANwMAIAsgCykDkAE3A+ABIAtBwAFqIAkgJSACIAMgBSAkIAtB4AFqIAsoAqABIAsoAqwBENmCgIAAIAsgCygCzAE2AtwBIAsgCygCxAEiJDYC1AEgC0EAIAsoAsgBIAstALABQQFxIgUbNgLYASALIAsoAsABQQAgBRsiBTYC0AEgCUHIAWooAgAgCUHMAWooAgAQjoGAgAAhIyAJQdABaigCACAJQdQBaigCABCOgYCAACEmIAlB2AFqKAIAIAlB3AFqKAIAIAUgJL4iJxCOgICAACEoIAlB8AFqKgIAISkgCUHgAWooAgAgCUHkAWooAgAgBSAnEI6AgIAAIScgCygCoAEhJCALIAstALABIgU6ALgBICcgKCApkpIhJyAjICaSISMCQAJAIAlBGGogCUEQaiAFQQFxIiUbKAIAQQFxRQ0AIAlBHGogCUEUaiAlGyoCACEmDAELIAsgJDYC6AEgCyAJNgLgASALIAtB0AFqNgLwASALIAtBwAFqNgLsASALIAtBuAFqNgLkASALQeABahDagoCAACEmIAstALABIQULICIgJiAnICMgBUEBcRuSEMiFgIAAISMMEAsgCioCFCEjIAsoAogBDQ8gCygCpAEhBSALKAKoASEkIAstALABISUgC0HgAWpBCGogDykDADcDACALIAspA5ABNwPgASALQcABaiAJICUgAiADIAUgJCALQeABaiALKAKgASALKAKsARDZgoCAACALIAsoAswBNgLcASALIAsoAsQBIiQ2AtQBIAtBACALKALIASALLQCwAUEBcSIFGzYC2AEgCyALKALAAUEAIAUbIgU2AtABIAlByAFqKAIAIAlBzAFqKAIAEI6BgIAAISIgCUHQAWooAgAgCUHUAWooAgAQjoGAgAAhJiAJQdgBaigCACAJQdwBaigCACAFICS+IicQjoCAgAAhKCAJQfABaioCACEpIAlB4AFqKAIAIAlB5AFqKAIAIAUgJxCOgICAACEnIAsoAqABISQgCyALLQCwASIFOgC4ASAnICggKZKSIScgIiAmkiEiIAlBGGogCUEQaiAFQQFxIiUbKAIAQQFxRQ0CIAlBHGogCUEUaiAlGyoCACEmDAMLIAgOAwsEAwsLIAoqAhQhIwwNCyALICQ2AugBIAsgCTYC4AEgCyALQdABajYC8AEgCyALQcABajYC7AEgCyALQbgBajYC5AEgC0HgAWoQ2oKAgAAhJiALLQCwASEFCyAjICYgJyAiIAVBAXEbkhDIhYCAACEjDAsLIAkgG2otAABBAkkNAQwHCyAJIBtqLQAAQQFLDQYLIAsoAqQBIQUgCygCqAEhJCALLQCwASElIAtB4AFqQQhqIiogDykDADcDACALIAspA5ABNwPgASALQcABaiAJICUgAiADIAUgJCALQeABaiALKAKgASALKAKsARDZgoCAACALLQCwASEFIAsoAsABISQgCyoCxAEhIiAJQcgBaiIlKAIAIAlBzAFqIiEoAgAQjoGAgAAhIyAJQdABaiIrKAIAIAlB1AFqIhwoAgAQjoGAgAAhJiAJQdgBaiIsKAIAIAlB3AFqIiAoAgAgJEEAIAVBAXEbIgUgIhCOgICAACEnIAlB8AFqIh8qAgAhKCAJQeABaiItKAIAIAlB5AFqIi4oAgAgBSAiEI6AgIAAISIgCygCoAEhJCALLQCwASEFIAtB0AFqQQhqIA8pAwA3AwAgCyALKQOQATcD0AEgCyAFOgC4ASAiICcgKJKSISIgIyAmkiEjAkACQCAJQShqIAlBIGogBUEBcSIvGygCAEEBcUUNACAJQSxqIAlBJGogLxsqAgAhJgwBCyALIAM2AvABIAsgAjYC7AEgCyAkNgLkASALIAk2AuABIAsgC0HQAWo2AvgBIAsgC0HAAWo2AvQBIAsgC0G4AWo2AugBIAtB4AFqENuCgIAAISYgCygCoAEhJCALLQCwASEFCyALKAKkASEvIAsoAqgBITAgKiAPKQMANwMAIAsgCykDkAE3A+ABIAtBwAFqIAkgBUEBcSIqIAIgAyAvIDAgC0HgAWogJCALKAKsARDZgoCAACALIAsoAswBNgLcASALIAsoAsQBIiQ2AtQBIAtBACALKALIASALLQCwAUEBcSIFGzYC2AEgCyALKALAAUEAIAUbIgU2AtABICUoAgAgISgCABCOgYCAACEnICsoAgAgHCgCABCOgYCAACEoICwoAgAgICgCACAFICS+IikQjoCAgAAhMSAfKgIAITIgLSgCACAuKAIAIAUgKRCOgICAACEpIAsoAqABISQgCyALLQCwASIFOgC4ASApIDEgMpKSISkgJyAokiEnICIgIyAqGyEiAkACQCAJQRhqIAlBEGogBUEBcSIlGygCAEEBcUUNACAJQRxqIAlBFGogJRsqAgAhIwwBCyALICQ2AugBIAsgCTYC4AEgCyALQdABajYC8AEgCyALQcABajYC7AEgCyALQbgBajYC5AEgC0HgAWoQ2oKAgAAhIyALLQCwASEFCyAmICKSISYgIyApICcgBUEBcRuSISIgCigCDCEkQQAhBQJAAkACQAJAIAooAggiJQ4DAgMBAAsgJUEXRg0CICVBH0cNByAOICS+lCEjDAYLIA4gJL6UISMMBQsgDUEBcUUNBUEBIQUgJEEDdkF/aiAOEICAgIAAISMMBQsgJL4hI0EBIQUMBAsgBUEPRg0GC0G4mcmAAEEoQZy5wIAAEIWAgIAAAAsgCioCFCEjIAsoAogBDQUgCygCpAEhBSALKAKoASEkIAstALABISUgC0HgAWpBCGogDykDADcDACALIAspA5ABNwPgASALQcABaiAJICUgAiADIAUgJCALQeABaiALKAKgASALKAKsARDZgoCAACALIAsoAswBNgLcASALIAsoAsQBIiQ2AtQBIAtBACALKALIASALLQCwAUEBcSIFGzYC2AEgCyALKALAAUEAIAUbIgU2AtABIAlByAFqKAIAIAlBzAFqKAIAEI6BgIAAISIgCUHQAWooAgAgCUHUAWooAgAQjoGAgAAhJiAJQdgBaigCACAJQdwBaigCACAFICS+IicQjoCAgAAhKCAJQfABaioCACEpIAlB4AFqKAIAIAlB5AFqKAIAIAUgJxCOgICAACEnIAsoAqABISQgCyALLQCwASIFOgC4ASAnICggKZKSIScgIiAmkiEiAkACQCAJQRhqIAlBEGogBUEBcSIlGygCAEEBcUUNACAJQRxqIAlBFGogJRsqAgAhJgwBCyALICQ2AugBIAsgCTYC4AEgCyALQdABajYC8AEgCyALQcABajYC7AEgCyALQbgBajYC5AEgC0HgAWoQ2oKAgAAhJiALLQCwASEFCyAjICYgJyAiIAVBAXEbkhDIhYCAACEjDAULIA0hBQsgIiAjEMeFgIAAICIgBUEBcRsgJhDIhYCAACEiDAELIAsoAqQBIQUgCygCqAEhJCALLQCwASElIAtB4AFqQQhqIA8pAwA3AwAgCyALKQOQATcD4AEgC0HAAWogCSAlIAIgAyAFICQgC0HgAWogCygCoAEgCygCrAEQ2YKAgAAgCy0AsAEhBSALKALAASEkIAsqAsQBISIgCUHIAWooAgAgCUHMAWooAgAQjoGAgAAhIyAJQdABaigCACAJQdQBaigCABCOgYCAACEmIAlB2AFqKAIAIAlB3AFqKAIAICRBACAFQQFxGyIFICIQjoCAgAAhJyAJQfABaioCACEoIAlB4AFqKAIAIAlB5AFqKAIAIAUgIhCOgICAACEiIAsoAqABISQgCy0AsAEhBSALQdABakEIaiAPKQMANwMAIAsgCykDkAE3A9ABIAsgBToAuAEgIiAnICiSkiEiICMgJpIhIwJAAkAgCUEoaiAJQSBqIAVBAXEiJRsoAgBBAXFFDQAgCUEsaiAJQSRqICUbKgIAISYMAQsgCyADNgLwASALIAI2AuwBIAsgJDYC5AEgCyAJNgLgASALIAtB0AFqNgL4ASALIAtBwAFqNgL0ASALIAtBuAFqNgLoASALQeABahDbgoCAACEmIAstALABIQULICYgIiAjIAVBAXEbkiEiCyAKKgIUICIQyIWAgAAhIwwBCyAKKgIUISIgCygCpAEhBSALKAKoASEkIAstALABISUgC0HgAWpBCGogDykDADcDACALIAspA5ABNwPgASALQcABaiAJICUgAiADIAUgJCALQeABaiALKAKgASALKAKsARDZgoCAACALIAsoAswBNgLcASALIAsoAsQBIiQ2AtQBIAtBACALKALIASALLQCwAUEBcSIFGzYC2AEgCyALKALAAUEAIAUbIgU2AtABIAlByAFqKAIAIAlBzAFqKAIAEI6BgIAAISMgCUHQAWooAgAgCUHUAWooAgAQjoGAgAAhJiAJQdgBaigCACAJQdwBaigCACAFICS+IicQjoCAgAAhKCAJQfABaioCACEpIAlB4AFqKAIAIAlB5AFqKAIAIAUgJxCOgICAACEnIAsoAqABISQgCyALLQCwASIFOgC4ASAnICggKZKSIScgIyAmkiEjAkACQCAJQThqIAlBMGogBUEBcSIlGygCAEEBcUUNACAJQTxqIAlBNGogJRsqAgAhJgwBCyALICQ2AugBIAsgCTYC4AEgCyALQdABajYC8AEgCyALQcABajYC7AEgCyALQbgBajYC5AEgC0HgAWoQxoKAgAAhJiALLQCwASEFCyAiICYgJyAjIAVBAXEbkhDIhYCAACEjCyALLQCwASEFAkACQCAJIBtqLQAAIjNBAkkNAAwBCyALKAKkASEkIAsoAqgBISUgC0HgAWpBCGogDykDADcDACALIAspA5ABNwPgASALQcABaiAJIAVBAXEgAiADICQgJSALQeABaiALKAKgASALKAKsARDZgoCAACALIAsoAswBNgLcASALIAsoAsQBIiQ2AtQBIAtBACALKALIASALLQCwAUEBcSIFGzYC2AEgCyALKALAAUEAIAUbIgU2AtABIAlByAFqKAIAIAlBzAFqKAIAEI6BgIAAISIgCUHQAWooAgAgCUHUAWooAgAQjoGAgAAhJiAJQdgBaigCACAJQdwBaigCACAFICS+IicQjoCAgAAhKCAJQfABaioCACEpIAlB4AFqKAIAIAlB5AFqKAIAIAUgJxCOgICAACEnIAsoAqABISQgCyALLQCwASIFOgC4ASAnICggKZKSIScgIiAmkiEiAkACQCAJQRhqIAlBEGogBUEBcSIlGygCAEEBcUUNACAJQRxqIAlBFGogJRsqAgAhJgwBCyALICQ2AugBIAsgCTYC4AEgCyALQdABajYC8AEgCyALQcABajYC7AEgCyALQbgBajYC5AEgC0HgAWoQ2oKAgAAhJiALLQCwASEFCyAmICcgIiAFQQFxG5IhMQsgCygCpAEhJCALKAKoASElIAtB4AFqQQhqIiogDykDADcDACALIAspA5ABNwPgASALQcABaiAJIAVBAXEgAiADICQgJSALQeABaiALKAKgASALKAKsARDZgoCAACALIAsoAswBNgLcASALIAsoAsQBIiQ2AtQBIAtBACALKALIASALLQCwAUEBcSIFGzYC2AEgCyALKALAAUEAIAUbIgU2AtABIAlByAFqIiUoAgAgCUHMAWoiISgCABCOgYCAACEiIAlB0AFqIisoAgAgCUHUAWoiHCgCABCOgYCAACEmIAlB2AFqIiwoAgAgCUHcAWoiICgCACAFICS+IicQjoCAgAAhKCAJQfABaiIfKgIAISkgCUHgAWoiLSgCACAJQeQBaiIuKAIAIAUgJxCOgICAACEnIAsoAqABISQgCyALLQCwASIFOgC4ASAnICggKZKSIScgIiAmkiEiAkACQCAJQThqIAlBMGogBUEBcSIvGygCAEEBcUUNACAJQTxqIAlBNGogLxsqAgAhJgwBCyALICQ2AugBIAsgCTYC4AEgCyALQdABajYC8AEgCyALQcABajYC7AEgCyALQbgBajYC5AEgC0HgAWoQxoKAgAAhJiALKAKgASEkIAstALABIQULIAsoAqQBIS8gCygCqAEhMCAqIA8pAwA3AwAgCyALKQOQATcD4AEgC0HAAWogCSAFQQFxIiogAiADIC8gMCALQeABaiAkIAsoAqwBENmCgIAAIAsgCygCzAE2AtwBIAsgCygCxAEiJDYC1AEgC0EAIAsoAsgBIAstALABQQFxIgUbNgLYASALIAsoAsABQQAgBRsiBTYC0AEgJSgCACAhKAIAEI6BgIAAISkgKygCACAcKAIAEI6BgIAAITIgLCgCACAgKAIAIAUgJL4iKBCOgICAACE0IB8qAgAhNSAtKAIAIC4oAgAgBSAoEI6AgIAAISggCygCoAEhJCALIAstALABIgU6ALgBICcgIiAqGyEiAkACQCAJQRhqIAlBEGogBUEBcSIlGygCAEEBcUUNACAJQRxqIAlBFGogJRsqAgAhJwwBCyALICQ2AugBIAsgCTYC4AEgCyALQdABajYC8AEgCyALQcABajYC7AEgCyALQbgBajYC5AEgC0HgAWoQ2oKAgAAhJyALLQCwASEFCyAmICKSISIgCiAjOAIUAkACQAJAIAooAggiCUFpakF3cUUNAAJAIAlBfWpBHnciJEEHSw0AQQEgJHRBqQFxDQILAkACQAJAIAkOAwECAQALIAlBH0cNAQsgCygCiAFFDQILICRBBUsNAkEBICR0QStxRQ0CICcgNCA1kiAokiApIDKSIAVBAXEbkiEiDAELAkAgM0EBSw0AIAogCioCKCAxEMiFgIAAOAIoC0MAAIB/ISMCQAJAIAlBH0YNACAJQRdHDQEgCioCDCEjDAELIA1BAXFFDQAgDiAKKgIMlCEjCyAiICMQx4WAgAAhIgsgCiAKKgIoICIQyIWAgAA4AigLIABB6H1qIQAgHUGYAmohHSAMQZgCaiEMDAALCyAAIB4gB0GcuMCAABCcgICAAAALA0ACQCAhIgogIEcNACAXIQogAiEJA0ACQCAKDQAgHCEhAkACQANAAkACQAJAAkACQAJAICEiCiAgRw0AIBchCiACIQkDQCAKRQ0CIAkqAiQhIiAJQQA2AiQgCSAiIAkqAhSSOAIUIApBUGohCiAJQTBqIQkMAAsLIAsoAqQBIQkgCygCqAEhBSALLQCwASEEIAtB4AFqQQhqIA8pAwA3AwAgCyALKQOQATcD4AEgC0HAAWogCiAEIAIgAyAJIAUgC0HgAWogCygCoAEgCygCrAEQ2YKAgAAgCyALKALMATYC3AEgCyALKALEASIFNgLUASALQQAgCygCyAEgCy0AsAFBAXEiCRs2AtgBIAsgCygCwAFBACAJGyIJNgLQASAKKALIASAKKALMARCOgYCAACEiIAooAtABIAooAtQBEI6BgIAAISMgCigC2AEgCigC3AEgCSAFviImEI6AgIAAIScgCioC8AEhKCAKKALgASAKKALkASAJICYQjoCAgAAhJiALKAKgASEFIAsgCy0AsAEiCToAuAEgIiAjkiEiICYgJyAokpIhIwJAAkAgCkEYaiAKQRBqIAlBAXEiBBsoAgBBAXFFDQAgCkEcaiAKQRRqIAQbKgIAISYMAQsgCyAFNgLoASALIAo2AuABIAsgC0HQAWo2AvABIAsgC0HAAWo2AuwBIAsgC0G4AWo2AuQBIAtB4AFqENqCgIAAISYgCy0AsAEhCQsgCkGYAmohISALQeAAaiAKIAEQxYKAgAAgC0HYAGogCygCYCALKAJkIAIgA0H8ucCAABCbgICAACAmICMgIiAJQQFxG5IiI0MAAAAAXkUNBSALKAJcISQgCygCWCEJIAogG2otAABBAUsNASAfDQIgCyAOOALUASALIA02AtABIAsgCTYC4AEgCyAJICRBMGwiAGoiHTYC5AEgC0HgAWoQ3IKAgABFDQUgJA0DQwAAAIAhIgwECyAcIQogHCEJIBoNBgNAAkAgCiAgRw0AIBchCiACIQkDQAJAIAoNACAcIQkMCgsgCSoCJCEiIAlBADYCJCAJICIgCSoCFJI4AhQgCkFQaiEKIAlBMGohCQwACwsgCygCpAEhCSALKAKoASEFIAstALABIQQgC0HgAWpBCGogDykDADcDACALIAspA5ABNwPgASALQcABaiAKIAQgAiADIAkgBSALQeABaiALKAKgASALKAKsARDZgoCAACALIAsoAswBNgLcASALIAsoAsQBIgU2AtQBIAtBACALKALIASALLQCwAUEBcSIJGzYC2AEgCyALKALAAUEAIAkbIgk2AtABIAooAsgBIAooAswBEI6BgIAAISIgCigC0AEgCigC1AEQjoGAgAAhIyAKKALYASAKKALcASAJIAW+IiYQjoCAgAAhJyAKKgLwASEoIAooAuABIAooAuQBIAkgJhCOgICAACEmIAsoAqABIQUgCyALLQCwASIJOgC4ASAiICOSISIgJiAnICiSkiEjAkACQCAKQThqIApBMGogCUEBcSIEGygCAEEBcUUNACAKQTxqIApBNGogBBsqAgAhJgwBCyALIAU2AugBIAsgCjYC4AEgCyALQdABajYC8AEgCyALQcABajYC7AEgCyALQbgBajYC5AEgC0HgAWoQxoKAgAAhJiALLQCwASEJCyALIAtBkAFqNgLgASALQdAAaiAKIAEgAiADIA0gDiALQeABakGIv8CAABDdgoCAACALKAJQIQUgJiAjICIgCUEBcRuSIiIgCyoCVBDHhYCAACAiIAVBAXEbISMCQCAfRQ0AIAtByABqIAogARDFgoCAAAJAAkAgCygCTCIJIAsoAkgiBUkNACAJIANNDQELIAUgCSADQdy5wIAAEJyAgIAAAAsgAiAJQTBsIh1qIQQgAiAFQTBsIgBqIQxDAAAAgCEiAkAgBSAJRg0AIBYgAGohCSAdIABrQTBuIQVDAAAAgCEiA0AgIiAiIAkqAgCSIAlBdGooAgBBBEYbISIgCUEwaiEJIAVBf2oiBQ0ACwsgIiAMIAQQ3YGAgABDAACAPxDHhYCAACAjICKTQwAAAAAQyIWAgACUkiEjCyALQcAAaiAKIAEQxYKAgAAgC0E4aiALKAJAIAsoAkQgAiADQey5wIAAEJuAgIAAIApBmAJqIi0hCiAjQwAAAABeRQ0AIAsoAjgiCiALKAI8IitBMGwiCWohAEEAIQUCQAJAAkACQAJAAkACQANAIAkgBUYNASAKIAVqIQQgBUEwaiEFIAQoAgBBD0cNAAsgHw0BIAsgDjgC5AEgCyANNgLgAUEAIQUDQCAJIAVGDQcgCiAFaiEEIAVBMGohBSAEKAIAQQ9HDQALICsNAkMAAACAISIMAwsgHw0DIAsgDjgC5AEgCyANNgLgASALIA44AtQBIAsgDTYC0AEgCSEEIAohDANAIAwhBSAERQ0GIARBUGohBCAFQTBqIQwgBSgCAEEDRw0AIAUoAghBB0YNAAsCQAJAICsNAEMAAACAISIMAQsgCkEUaiEFQwAAAIAhIiArIQQDQCAiIAUqAgCSISIgBUEwaiEFIARBf2oiBA0ACwsgCkEwaiEqIAlBUGohIUEAISQgIyAik0MAAAAAEMiFgIAAIScCQAJAA0AgJCArSw0BICdDCtcjPF8NASArRQ0HICQgJCArTWohJEMAAACAISIgCiEFICshBANAAkAgBUEUaioCACAFQSBqKgIAkiANIA4gBRCngYCAAF1FDQAgIkMAAIA/kiAiIAVBCGooAgBBB0cbICIgBSgCAEEDRhshIgsgBUEwaiEFIARBf2oiBA0ACyAiQwAAAABbDQFBACEFICohBCAhIQwDQCAJIAVGDQMCQAJAIAtB0AFqIAogBWoiHRDVgoCAAEUNACAdKAIAQQNHDQAgHUEIaigCAEEHRw0BCyAEQTBqIQQgDEFQaiEMIAVBMGohBQwBCwsgC0HQAWogHRDRgoCAACEjAkAgHUEwaiAARg0AIAxBMG4hBQNAAkAgC0HQAWogBBDVgoCAAEUNACAEKAIAQQNHDQAgBEEIaigCAEEHRg0AIAtB0AFqIAQQ0YKAgAAiJiAjICO8IgxBH3VBAXYgDHMgJrwiDEEfdUEBdiAMc0obISMLIARBMGohBCAFQX9qIgUNAAsLICMgJyAilRDHhYCAACEiIAohBANAIAQiBSAARg0BIAVBMGohBCAFQQhqKAIAIQwgBSgCAEEDRw0AIAxBB0YNACAiQwAAAABeRQ0AICIgBUEUaioCACAFQSBqKgIAIiOSkiANIA4gBRCngYCAAEMK1yM8kl9FDQAgBSAiICOSOAIgICcgIpMhJwwACwsLICdDvTeGNV5FDQUgK0UNBUEAISQgCiEFICshBANAAkAgBSgCAEEDRw0AIAVBCGooAgAiDEEHRg0AQQAhHQJAIAxBH0sNAEEBIAx0QYCAgoR4cUUNAEEBIR0LIB0gJGohJAsgBUEwaiEFIARBf2oiBA0AC0GOgICAAEGPgICAACAkGyEkQQAhJQNAICUgK0sNBiAnQwrXIzxfDQYgJSAlICtNaiElQwAAAIAhJiAKIQUgKyEMA0AgBUEUaioCACAFQSBqKgIAkiEjIAVBDGooAgAhHUMAAIB/ISICQAJAIAVBCGooAgAiBEEfRg0AIARBF0cNASAdviEiDAELIA1BAXFFDQAgDiAdvpQhIgsCQCAjICJdRQ0AIAUoAgBBA0cNACAEQQdGDQAgJkMAAIA/kiAmIAUgJBGEgICAAICAgIAAGyEmCyAFQTBqIQUgDEF/aiIMDQALICZDAAAAAFsNBkEAIQUgKiEEICEhHQNAAkACQCAJIAVGDQAgC0HgAWogCiAFaiIMEM+CgIAARQ0BIAwoAgBBA0cNASAMQQhqKAIAQQdGDQEgDCAkEYSAgIAAgICAgABFDQEgC0HgAWogDBDQgoCAACEiAkAgDEEwaiAARg0AIB1BMG4hBQNAAkAgC0HgAWogBBDPgoCAAEUNACAEKAIAQQNHDQAgBEEIaigCAEEHRg0AIAQgJBGEgICAAICAgIAARQ0AIAtB4AFqIAQQ0IKAgAAiIyAiICK8IgxBH3VBAXYgDHMgI7wiDEEfdUEBdiAMc0obISILIARBMGohBCAFQX9qIgUNAAsLICIgJyAmlRDHhYCAACEiIAohBANAIAQiBSAARg0EIAVBMGohBCAFKAIAQQNHDQAgBUEIaiIMKAIAQQdGDQAgBSAkEYSAgIAAgICAgAAhHSAiQwAAAABeRQ0AIB1FDQAgIiAFQRRqKgIAIAVBIGoqAgAiKJKSISYgBUEMaigCACEdQwAAgH8hIwJAAkAgDCgCACIMQR9GDQAgDEEXRw0BIB2+ISMMAQsgDUEBcUUNACAOIB2+lCEjCyAmICNDCtcjPJJfRQ0AIAUgIiAokjgCICAnICKTIScMAAsLQey4wIAAEM+AgIAAAAsgBEEwaiEEIB1BUGohHSAFQTBqIQUMAAsLC0HsuMCAABDPgICAAAALAkACQAJAICtFDQBDAAAAgCEiIAohBSArIQQDQCAiIAVBDGoqAgCSICIgBSgCAEEPRhsgIiAFQQhqKAIAQQRGGyEiIAVBMGohBSAEQX9qIgQNAAsgIkMAAAAAXg0BCyALIA44AtQBIAsgDTYC0AEgCyAANgLkASALIAo2AuABIAtB4AFqEN6CgIAARQ0GAkACQCArDQBDAAAAgCEiDAELIApBFGohBUMAAACAISIgKyEEA0AgIiAFKgIAkiEiIAVBMGohBSAEQX9qIgQNAAsLIApBMGohJSAJQVBqISpBACEkICMgIpNDAAAAABDIhYCAACEpAkACQANAICQgK0sNASApQwrXIzxfDQEgK0UNBCAkICQgK01qISRDAAAAgCEjIAohBSArIQQDQAJAIAVBFGoqAgAgBUEgaioCAJIiIkMAAIB/XiAiQwAAgH9dckEBRw0AICNDAACAP5IgIyAFKAIAQQ9GGyAjIAVBCGooAgBBBEYbISMLIAVBMGohBSAEQX9qIgQNAAsgI0MAAAAAWw0BQQAhBSAlIQQgKiEdA0AgCSAFRg0DAkACQCAKIAVqIgxBFGoqAgAiJiAMQSBqKgIAIieSIiJDAACAf14gIkMAAIB/XXJBAUcNACAMQQhqKAIAQQRHDQAgDCgCAEEPRg0BCyAEQTBqIQQgHUFQaiEdIAVBMGohBQwBCwtDAACAfyAmkyAnkyEoAkAgDEEwaiAARg0AIB1BMG4hBQNAAkAgBEEUaioCACImIARBIGoqAgAiJ5IiIkMAAIB/XiAiQwAAgH9dckEBRw0AIARBCGooAgBBBEcNACAEKAIAQQ9HDQBDAACAfyAmkyAnkyIiICggKLwiDEEfdUEBdiAMcyAivCIMQR91QQF2IAxzShshKAsgBEEwaiEEIAVBf2oiBQ0ACwsgKCApICOVEMeFgIAAISIgCiEEA0AgBCIFIABGDQEgBUEwaiEEIAUoAgAhDCAFQQhqKAIAQQRHDQAgDEEPRw0AICJDAAAAAF5FDQAgIiAFQRRqKgIAIAVBIGoqAgAiJpKSIiMgI1wNACAFICIgJpI4AiAgKSAikyEpDAALCwsgKUO9N4Y1XkUNAiArRQ0CQQAhJANAICQgK0sNAyApQwrXIzxfDQMgJCAkICtNaiEkQwAAAIAhJiAKIQUgKyEMA0AgBUEUaioCACAFQSBqKgIAkiEjIAVBDGooAgAhHUMAAIB/ISICQAJAIAVBCGooAgAiBEEfRg0AIARBF0cNASAdviEiDAELIA1BAXFFDQAgDiAdvpQhIgsCQCAjICJdRQ0AIARBBEcNACAFKAIAQQ9HDQAgJkMAAIA/kiAmIAUQsoGAgAAbISYLIAVBMGohBSAMQX9qIgwNAAsgJkMAAAAAWw0DQQAhBSAlIQQgKiEdA0ACQAJAIAkgBUYNACALQdABaiAKIAVqIgwQz4KAgABFDQEgDEEIaigCAEEERw0BIAwoAgBBD0cNASAMELKBgIAARQ0BIAtB0AFqIAwQ0IKAgAAhIgJAIAxBMGogAEYNACAdQTBuIQUDQAJAIAtB0AFqIAQQz4KAgABFDQAgBEEIaigCAEEERw0AIAQoAgBBD0cNACAEELKBgIAARQ0AIAtB0AFqIAQQ0IKAgAAiIyAiICK8IgxBH3VBAXYgDHMgI7wiDEEfdUEBdiAMc0obISILIARBMGohBCAFQX9qIgUNAAsLICIgKSAmlRDHhYCAACEiIAohBANAIAQiBSAARg0EIAVBMGohBCAFQQhqKAIAQQRHDQAgBSgCAEEPRw0AIAUQsoGAgAAhDCAiQwAAAABeRQ0AIAxFDQAgIiAFQRRqKgIAIAVBIGoqAgAiJpKSIiMgI1wNACAFICIgJpI4AiAgKSAikyEpDAALC0HsuMCAABDPgICAAAALIARBMGohBCAdQVBqIR0gBUEwaiEFDAALCwtB7LjAgAAQz4CAgAAACyALIA44AtQBIAsgDTYC0AEgCyAANgLkASALIAo2AuABIAtB4AFqEN6CgIAARQ0FIApBFGohBUMAAACAISIgKyEEA0AgIiAFKgIAkiEiIAVBMGohBSAEQX9qIgQNAAsgCkEwaiElIAlBUGohKkEAISQgIyAik0MAAAAAEMiFgIAAISgCQAJAAkADQCAkICtLDQEgKEMK1yM8Xw0BICQgJCArTWohJEMAAACAISMgCiEFICshBANAAkAgBUEUaioCACAFQSBqKgIAkiIiQwAAgH9eICJDAACAf11yQQFHDQAgIyAFQQxqKgIAkiAjIAUoAgBBD0YbICMgBUEIaigCAEEERhshIwsgBUEwaiEFIARBf2oiBA0ACyAjQwAAAABbDQFBACEEICUhBSAqIR0DQCAJIARGDQMCQAJAIAogBGoiDEEUaioCACAMQSBqKgIAkiIiQwAAgH9eICJDAACAf11yQQFHDQAgDEEIaigCAEEERw0AIAwoAgBBD0YNAQsgBUEwaiEFIB1BUGohHSAEQTBqIQQMAQsLIAwQ14KAgAAhJgJAIAxBMGogAEYNACAdQTBuIQQDQAJAIAVBFGoqAgAgBUEgaioCAJIiIkMAAIB/XiAiQwAAgH9dckEBRw0AIAVBCGooAgBBBEcNACAFKAIAQQ9HDQAgBRDXgoCAACIiICYgJrwiDEEfdUEBdiAMcyAivCIMQR91QQF2IAxzShshJgsgBUEwaiEFIARBf2oiBA0ACwsgJiAoICOVEMeFgIAAISMgCiEEA0AgBCIFIABGDQEgBUEwaiEEIAVBCGooAgBBBEcNACAFKAIAQQ9HDQAgIyAFQQxqKgIAlCIiQwAAAABeRQ0AICIgBUEUaioCACAFQSBqKgIAIieSkiImICZcDQAgBSAiICeSOAIgICggIpMhKAwACwsLIChDvTeGNV5FDQFBACEkA0AgJCArSw0CIChDCtcjPF8NAiAkICQgK01qISRDAAAAgCEmIAohBSArIQwDQCAFQRRqKgIAIAVBIGoqAgCSISMgBUEMaigCACEdQwAAgH8hIgJAAkAgBUEIaigCACIEQR9GDQAgBEEXRw0BIB2+ISIMAQsgDUEBcUUNACAOIB2+lCEiCwJAICMgIl1FDQAgBEEERw0AIAUoAgBBD0cNACAFELKBgIAARQ0AICYgHb6SISYLIAVBMGohBSAMQX9qIgwNAAsgJkMAAAAAWw0CQQAhBSAlIQQgKiEdA0ACQAJAIAkgBUYNACALQdABaiAKIAVqIgwQz4KAgABFDQEgDEEIaigCAEEERw0BIAwoAgBBD0cNASAMELKBgIAARQ0BIAtB0AFqIAwQ1IKAgAAhIgJAIAxBMGogAEYNACAdQTBuIQUDQAJAIAtB0AFqIAQQz4KAgABFDQAgBEEIaigCAEEERw0AIAQoAgBBD0cNACAEELKBgIAARQ0AIAtB0AFqIAQQ1IKAgAAiIyAiICK8IgxBH3VBAXYgDHMgI7wiDEEfdUEBdiAMc0obISILIARBMGohBCAFQX9qIgUNAAsLICIgKCAmlRDHhYCAACEjIAohBANAIAQiBSAARg0EIAVBMGohBCAFQQhqKAIAQQRHDQAgBSgCAEEPRw0AIAUQsoGAgABFDQAgIyAFQQxqKgIAlCIiQwAAAABeRQ0AICIgBUEUaioCACAFQSBqKgIAIieSkiImICZcDQAgBSAiICeSOAIgICggIpMhKAwACwtB7LjAgAAQz4CAgAAACyAEQTBqIQQgHUFQaiEdIAVBMGohBQwACwsLQey4wIAAEM+AgIAAAAsgCkEgaiEKA0AgCUUNBgJAIAoqAgAiIiAKQQRqIgUqAgBeRQ0AIAUgIjgCAAsgCkEANgIAIAlBUGohCSAKQTBqIQoMAAsLIApBIGohCgNAIAlFDQUCQCAKKgIAIiIgCkEEaiIFKgIAXkUNACAFICI4AgALIApBADYCACAJQVBqIQkgCkEwaiEKDAALCyAKQRRqIQVDAAAAgCEiICshBANAICIgBSoCAJIhIiAFQTBqIQUgBEF/aiIEDQALCyAKQTBqIS4gCUFQaiEvQQAhLCAjICKTQwAAAAAQyIWAgAAiMSEpAkACQAJAAkACQAJAAkACQAJAAkADQCAsICtLDQEgKUMK1yM8Xw0BICtFDQIgLCAsICtNaiEsQwAAAIAhIiAKIQUgKyEEA0AgIkMAAIA/kiAiIAUoAgBBD0YbICIgBUEUaioCACAFQSBqKgIAkiIjQwAAgH9eICNDAACAf11yGyEiIAVBMGohBSAEQX9qIgQNAAsgIkMAAAAAWw0EQQAhDCAuIR0gCiEFA0AgHSEEIAkgDCIkRg0JIAUqAiAhIyAFKgIUISYgBEEwaiEdIAogJEEwaiIMaiEhIAUoAgAhJSAFQTBqIiohBSAmICOSIidDAACAf14gJ0MAAIB/XXJBAUcNACAqIQUgJUEPRw0AC0MAAIB/ICaTICOTISYCQCAhIABGDQAgLyAka0EwbiEFA0ACQCAEQRRqKgIAIicgBEEgaioCACIokiIjQwAAgH9eICNDAACAf11yQQFHDQAgBCgCAEEPRw0AQwAAgH8gJ5MgKJMiIyAmICa8IgxBH3VBAXYgDHMgI7wiDEEfdUEBdiAMc0obISYLIARBMGohBCAFQX9qIgUNAAsLICYgKSAilRDHhYCAACEiIAohBANAIAQiBSAARg0BIAVBMGohBCAFKAIAQQ9HDQAgIkMAAAAAXkUNACAiIAVBFGoqAgAgBUEgaioCACImkpIiIyAjXA0AIAUgIiAmkjgCICApICKTISkMAAsLCyApQ703hjVeDQEMCAsgMUO9N4Y1XkUNB0GPgICAACEkDAQLICsNAUGPgICAACEkDAILIClDvTeGNV5FDQULQQAhHSAKIQUgKyEEA0ACQCAFKAIAQQ9HDQBBACEMAkAgBUEIaigCACIkQR9LDQBBASAkdEGAgIKEeHFFDQBBASEMCyAMIB1qIR0LIAVBMGohBSAEQX9qIgQNAAtBjoCAgABBj4CAgAAgHRshJAsgKSExC0EAISUDQCAlICtLDQMgMUMK1yM8Xw0DICtFDQMgJSAlICtNaiElQwAAAIAhJiAKIQUgKyEEA0AgBUEUaioCACAFQSBqKgIAkiEjIAVBDGooAgAhHUMAAIB/ISICQAJAIAVBCGooAgAiDEEfRg0AIAxBF0cNASAdviEiDAELIA1BAXFFDQAgDiAdvpQhIgsCQCAjICJdRQ0AIAUoAgBBD0cNACAmQwAAgD+SICYgBSAkEYSAgIAAgICAgAAbISYLIAVBMGohBSAEQX9qIgQNAAsgJkMAAAAAWw0DQQAhBSAuIQQgLyEMA0AgCSAFRg0DAkACQCALQeABaiAKIAVqIh0Qz4KAgABFDQAgHSgCAEEPRw0AIB0gJBGEgICAAICAgIAADQELIARBMGohBCAMQVBqIQwgBUEwaiEFDAELCyALQeABaiAdENCCgIAAISICQCAdQTBqIABGDQAgDEEwbiEFA0ACQCALQeABaiAEEM+CgIAARQ0AIAQoAgBBD0cNACAEICQRhICAgACAgICAAEUNACALQeABaiAEENCCgIAAIiMgIiAivCIMQR91QQF2IAxzICO8IgxBH3VBAXYgDHNKGyEiCyAEQTBqIQQgBUF/aiIFDQALCyAiIDEgJpUQx4WAgAAhIiAKIQQDQCAEIgUgAEYNASAFQTBqIQQgBSgCAEEPRw0AIAUgJBGEgICAAICAgIAAIQwgIkMAAAAAXkUNACAMRQ0AICIgBUEUaioCACAFQSBqKgIAIieSkiEmIAVBDGooAgAhHUMAAIB/ISMCQAJAIAVBCGooAgAiDEEfRg0AIAxBF0cNASAdviEjDAELIA1BAXFFDQAgDiAdvpQhIwsgJiAjQwrXIzySX0UNACAFICIgJ5I4AiAgMSAikyExDAALCwtB7LjAgAAQz4CAgAAAC0HsuMCAABDPgICAAAALIApBIGohCgNAIAlFDQMCQCAKKgIAIiIgCkEEaiIFKgIAXkUNACAFICI4AgALIApBADYCACAJQVBqIQkgCkEwaiEKDAALCwJAAkACQCArRQ0AQwAAAIAhIiAKIQUgKyEEA0AgIiAFQQxqKgIAkiAiIAUoAgBBA0YbICIgBUEIaigCAEEERhshIiAFQTBqIQUgBEF/aiIEDQALICJDAAAAAF4NAQsgCyAOOALUASALIA02AtABIAsgDjgCxAEgCyANNgLAASALIAA2AuQBIAsgCjYC4AEgC0HgAWoQ34KAgABFDQMCQAJAICsNAEMAAACAISIMAQsgCkEUaiEFQwAAAIAhIiArIQQDQCAiIAUqAgCSISIgBUEwaiEFIARBf2oiBA0ACwsgCkEwaiElIAlBUGohKkEAISQgIyAik0MAAAAAEMiFgIAAIScCQAJAA0AgJCArSw0BICdDCtcjPF8NASArRQ0EICQgJCArTWohJEMAAACAISIgCiEFICshBANAAkAgBUEUaioCACAFQSBqKgIAkiANIA4gBRCngYCAAF1FDQAgIkMAAIA/kiAiIAUoAgBBA0YbICIgBUEIaigCAEEERhshIgsgBUEwaiEFIARBf2oiBA0ACyAiQwAAAABbDQFBACEFICUhBCAqIQwDQCAJIAVGDQMCQAJAIAtBwAFqIAogBWoiHRDVgoCAAEUNACAdQQhqKAIAQQRHDQAgHSgCAEEDRg0BCyAEQTBqIQQgDEFQaiEMIAVBMGohBQwBCwsgC0HAAWogHRDRgoCAACEjAkAgHUEwaiAARg0AIAxBMG4hBQNAAkAgC0HAAWogBBDVgoCAAEUNACAEQQhqKAIAQQRHDQAgBCgCAEEDRw0AIAtBwAFqIAQQ0YKAgAAiJiAjICO8IgxBH3VBAXYgDHMgJrwiDEEfdUEBdiAMc0obISMLIARBMGohBCAFQX9qIgUNAAsLICMgJyAilRDHhYCAACEiIAohBANAIAQiBSAARg0BIAVBMGohBCAFKAIAIQwgBUEIaigCAEEERw0AIAxBA0cNACAiQwAAAABeRQ0AICIgBUEUaioCACAFQSBqKgIAIiOSkiANIA4gBRCngYCAAEMK1yM8kl9FDQAgBSAiICOSOAIgICcgIpMhJwwACwsLICdDvTeGNV5FDQIgK0UNAkEAISQDQCAkICtLDQMgJ0MK1yM8Xw0DICQgJCArTWohJEMAAACAISYgCiEFICshDANAIAVBFGoqAgAgBUEgaioCAJIhIyAFQQxqKAIAIR1DAACAfyEiAkACQCAFQQhqKAIAIgRBH0YNACAEQRdHDQEgHb4hIgwBCyANQQFxRQ0AIA4gHb6UISILAkAgIyAiXUUNACAEQQRHDQAgBSgCAEEDRw0AICZDAACAP5IgJiAFELKBgIAAGyEmCyAFQTBqIQUgDEF/aiIMDQALICZDAAAAAFsNA0EAIQUgJSEEICohHQNAAkACQCAJIAVGDQAgC0HQAWogCiAFaiIMEM+CgIAARQ0BIAxBCGooAgBBBEcNASAMKAIAQQNHDQEgDBCygYCAAEUNASALQdABaiAMENCCgIAAISICQCAMQTBqIABGDQAgHUEwbiEFA0ACQCALQdABaiAEEM+CgIAARQ0AIARBCGooAgBBBEcNACAEKAIAQQNHDQAgBBCygYCAAEUNACALQdABaiAEENCCgIAAIiMgIiAivCIMQR91QQF2IAxzICO8IgxBH3VBAXYgDHNKGyEiCyAEQTBqIQQgBUF/aiIFDQALCyAiICcgJpUQx4WAgAAhIiAKIQQDQCAEIgUgAEYNBCAFQTBqIQQgBUEIaigCAEEERw0AIAUoAgBBA0cNACAFELKBgIAAIQwgIkMAAAAAXkUNACAMRQ0AICIgBUEUaioCACAFQSBqKgIAIiaSkiIjICNcDQAgBSAiICaSOAIgICcgIpMhJwwACwtB7LjAgAAQz4CAgAAACyAEQTBqIQQgHUFQaiEdIAVBMGohBQwACwsLQey4wIAAEM+AgIAAAAsgCyAOOALUASALIA02AtABIAsgDjgCxAEgCyANNgLAASALIAA2AuQBIAsgCjYC4AEgC0HgAWoQ34KAgABFDQIgCkEUaiEFQwAAAIAhIiArIQQDQCAiIAUqAgCSISIgBUEwaiEFIARBf2oiBA0ACyAKQTBqISUgCUFQaiEqQQAhJCAjICKTQwAAAAAQyIWAgAAhJwJAAkACQANAICQgK0sNASAnQwrXIzxfDQEgJCAkICtNaiEkQwAAAIAhIiAKIQUgKyEEA0ACQCAFQRRqKgIAIAVBIGoqAgCSIA0gDiAFEKeBgIAAXUUNACAiIAVBDGoqAgCSICIgBSgCAEEDRhsgIiAFQQhqKAIAQQRGGyEiCyAFQTBqIQUgBEF/aiIEDQALICJDAAAAAFsNAUEAIQUgJSEEICohDANAIAkgBUYNAwJAAkAgC0HAAWogCiAFaiIdENWCgIAARQ0AIB1BCGooAgBBBEcNACAdKAIAQQNGDQELIARBMGohBCAMQVBqIQwgBUEwaiEFDAELCyALQcABaiAdENaCgIAAISMCQCAdQTBqIABGDQAgDEEwbiEFA0ACQCALQcABaiAEENWCgIAARQ0AIARBCGooAgBBBEcNACAEKAIAQQNHDQAgC0HAAWogBBDWgoCAACImICMgI7wiDEEfdUEBdiAMcyAmvCIMQR91QQF2IAxzShshIwsgBEEwaiEEIAVBf2oiBQ0ACwsgIyAnICKVEMeFgIAAISMgCiEEA0AgBCIFIABGDQEgBUEwaiEEIAVBCGooAgBBBEcNACAFKAIAQQNHDQAgIyAFQQxqKgIAlCIiQwAAAABeRQ0AICIgBUEUaioCACAFQSBqKgIAIiaSkiANIA4gBRCngYCAAEMK1yM8kl9FDQAgBSAiICaSOAIgICcgIpMhJwwACwsLICdDvTeGNV5FDQFBACEkA0AgJCArSw0CICdDCtcjPF8NAiAkICQgK01qISRDAAAAgCEmIAohBSArIQwDQCAFQRRqKgIAIAVBIGoqAgCSISMgBUEMaigCACEdQwAAgH8hIgJAAkAgBUEIaigCACIEQR9GDQAgBEEXRw0BIB2+ISIMAQsgDUEBcUUNACAOIB2+lCEiCwJAICMgIl1FDQAgBEEERw0AIAUoAgBBA0cNACAFELKBgIAARQ0AICYgHb6SISYLIAVBMGohBSAMQX9qIgwNAAsgJkMAAAAAWw0CQQAhBSAlIQQgKiEdA0ACQAJAIAkgBUYNACALQdABaiAKIAVqIgwQz4KAgABFDQEgDEEIaigCAEEERw0BIAwoAgBBA0cNASAMELKBgIAARQ0BIAtB0AFqIAwQ1IKAgAAhIgJAIAxBMGogAEYNACAdQTBuIQUDQAJAIAtB0AFqIAQQz4KAgABFDQAgBEEIaigCAEEERw0AIAQoAgBBA0cNACAEELKBgIAARQ0AIAtB0AFqIAQQ1IKAgAAiIyAiICK8IgxBH3VBAXYgDHMgI7wiDEEfdUEBdiAMc0obISILIARBMGohBCAFQX9qIgUNAAsLICIgJyAmlRDHhYCAACEjIAohBANAIAQiBSAARg0EIAVBMGohBCAFQQhqKAIAQQRHDQAgBSgCAEEDRw0AIAUQsoGAgABFDQAgIyAFQQxqKgIAlCIiQwAAAABeRQ0AICIgBUEUaioCACAFQSBqKgIAIiiSkiImICZcDQAgBSAiICiSOAIgICcgIpMhJwwACwtB7LjAgAAQz4CAgAAACyAEQTBqIQQgHUFQaiEdIAVBMGohBQwACwsLQey4wIAAEM+AgIAAAAsgCkEgaiEKA0AgCUUNAwJAIAoqAgAiIiAKQQRqIgUqAgBeRQ0AIAUgIjgCAAsgCkEANgIAIAlBUGohCSAKQTBqIQoMAAsLIApBIGohCgNAIAlFDQICQCAKKgIAIiIgCkEEaiIFKgIAXkUNACAFICI4AgALIApBADYCACAJQVBqIQkgCkEwaiEKDAALCyAKQSBqIQoDQCAJRQ0BAkAgCioCACIiIApBBGoiBSoCAF5FDQAgBSAiOAIACyAKQQA2AgAgCUFQaiEJIApBMGohCgwACwsgLSEKDAALCwJAAkACQAJAAkACQAJAIB8NACALIA44AtQBIAsgDTYC0AEgCyAOOALEASALIA02AsABIAsgCTYC4AEgCyAJICRBMGwiAGoiHTYC5AEgC0HgAWoQ3IKAgABFDQoCQAJAICQNAEMAAACAISIMAQsgCUEUaiEKQwAAAIAhIiAkIQUDQCAiIAoqAgCSISIgCkEwaiEKIAVBf2oiBQ0ACwsgCUEwaiErIABBUGohLEEAISUgIyAik0MAAAAAEMiFgIAAIScCQAJAA0AgJSAkSw0BICdDCtcjPF8NASAkRQ0CICUgJSAkTWohJUMAAACAISIgCSEKICQhBQNAAkAgCkEUaioCACAKQSBqKgIAkiANIA4gChCngYCAAF1FDQAgIiAiQwAAgD+SIAooAgBBeWpBd3EbISILIApBMGohCiAFQX9qIgUNAAsgIkMAAAAAWw0BQQAhCiArIQUgLCEEA0AgACAKRg0FAkACQCALQcABaiAJIApqIgwQ1YKAgABFDQAgDCgCAEF5akF3cUUNAQsgBUEwaiEFIARBUGohBCAKQTBqIQoMAQsLIAtBwAFqIAwQ0YKAgAAhIwJAIAxBMGogHUYNACAEQTBuIQoDQAJAIAtBwAFqIAUQ1YKAgABFDQAgBSgCAEF5akF3cQ0AIAtBwAFqIAUQ0YKAgAAiJiAjICO8IgRBH3VBAXYgBHMgJrwiBEEfdUEBdiAEc0obISMLIAVBMGohBSAKQX9qIgoNAAsLICMgJyAilRDHhYCAACEiIAkhBQNAIAUiCiAdRg0BIApBMGohBSAKKAIAQXlqQXdxDQAgIkMAAAAAXkUNACAiIApBFGoqAgAgCkEgaioCACIjkpIgDSAOIAoQp4GAgABDCtcjPJJfRQ0AIAogIiAjkjgCICAnICKTIScMAAsLCyAnQ703hjVeRQ0AICRFDQBBACEMIAkhCiAkIQUDQAJAIAooAgBBeWpBd3ENAEEAIQQCQCAKQQhqKAIAQX1qQR53IiVBB0sNACAlQQJ0KAKcycCAACEECyAEIAxqIQwLIApBMGohCiAFQX9qIgUNAAtBkICAgABBj4CAgAAgDBshJUEAISoDQCAqICRLDQEgJ0MK1yM8Xw0BICogKiAkTWohKkMAAACAISYgCSEKICQhBQNAIApBFGoqAgAgCkEgaioCAJIhIyAKQQxqKAIAIQxDAACAfyEiAkACQCAKQQhqKAIAIgRBH0YNACAEQRdHDQEgDL4hIgwBCyANQQFxRQ0AIA4gDL6UISILAkAgIyAiXUUNACAKKAIAQXlqQXdxDQAgJkMAAIA/kiAmIAogJRGEgICAAICAgIAAGyEmCyAKQTBqIQogBUF/aiIFDQALICZDAAAAAFsNAUEAIQogKyEFICwhBANAIAAgCkYNBQJAAkAgC0HQAWogCSAKaiIMEM+CgIAARQ0AIAwoAgBBeWpBd3ENACAMICURhICAgACAgICAAA0BCyAFQTBqIQUgBEFQaiEEIApBMGohCgwBCwsgC0HQAWogDBDQgoCAACEiAkAgDEEwaiAdRg0AIARBMG4hCgNAAkAgC0HQAWogBRDPgoCAAEUNACAFKAIAQXlqQXdxDQAgBSAlEYSAgIAAgICAgABFDQAgC0HQAWogBRDQgoCAACIjICIgIrwiBEEfdUEBdiAEcyAjvCIEQR91QQF2IARzShshIgsgBUEwaiEFIApBf2oiCg0ACwsgIiAnICaVEMeFgIAAISIgCSEFA0AgBSIKIB1GDQEgCkEwaiEFIAooAgBBeWpBd3ENACAKICURhICAgACAgICAACEEICJDAAAAAF5FDQAgBEUNACAiIApBFGoqAgAgCkEgaioCACIokpIhJiAKQQxqKAIAIQxDAACAfyEjAkACQCAKQQhqKAIAIgRBH0YNACAEQRdHDQEgDL4hIwwBCyANQQFxRQ0AIA4gDL6UISMLICYgI0MK1yM8kl9FDQAgCiAiICiSOAIgICcgIpMhJwwACwsLIAlBIGohCQNAIABFDQsCQCAJKgIAIiIgCUEEaiIKKgIAXkUNACAKICI4AgALIAlBADYCACAAQVBqIQAgCUEwaiEJDAALCwJAAkAgJEUNAEMAAACAISIgCSEKICQhBQNAICIgIiAKQQxqKgIAkiAKKAIAQXlqQXdxGyAiIApBCGooAgBBBEYbISIgCkEwaiEKIAVBf2oiBQ0ACyAiQwAAAABeDQELIAsgDjgC1AEgCyANNgLQASALIA44AsQBIAsgDTYCwAEgCyAJNgLgASALIAkgJEEwbCIMaiIdNgLkASALQeABahDggoCAAEUNCgJAAkAgJA0AQwAAAIAhIgwBCyAJQRRqIQpDAAAAgCEiICQhBQNAICIgCioCAJIhIiAKQTBqIQogBUF/aiIFDQALCyAJQTBqISogDEFQaiErQQAhJSAjICKTQwAAAAAQyIWAgAAhKAJAAkADQCAlICRLDQEgKEMK1yM8Xw0BICRFDQIgJSAlICRNaiElQwAAAIAhIiAJIQogJCEFA0ACQCAKQRRqKgIAIApBIGoqAgCSIA0gDiAKEKeBgIAAXUUNACAiICJDAACAP5IgCigCAEF5akF3cRsgIiAKQQhqKAIAQQRGGyEiCyAKQTBqIQogBUF/aiIFDQALICJDAAAAAFsNAUEAIQogKiEFICshBANAIAwgCkYNBwJAAkAgC0HAAWogCSAKaiIAENWCgIAARQ0AIABBCGooAgBBBEcNACAAKAIAQXlqQXdxRQ0BCyAFQTBqIQUgBEFQaiEEIApBMGohCgwBCwsgC0HAAWogABDRgoCAACEjAkAgAEEwaiAdRg0AIARBMG4hCgNAAkAgC0HAAWogBRDVgoCAAEUNACAFQQhqKAIAQQRHDQAgBSgCAEF5akF3cQ0AIAtBwAFqIAUQ0YKAgAAiJiAjICO8IgRBH3VBAXYgBHMgJrwiBEEfdUEBdiAEc0obISMLIAVBMGohBSAKQX9qIgoNAAsLICMgKCAilRDHhYCAACEiIAkhBQNAIAUiCiAdRg0BIApBMGohBSAKKAIAQXlqQXdxIQQgCkEIaigCAEEERw0AIAQNACAiQwAAAABeRQ0AICIgCkEUaioCACAKQSBqKgIAIiOSkiANIA4gChCngYCAAEMK1yM8kl9FDQAgCiAiICOSOAIgICggIpMhKAwACwsLIChDvTeGNV5FDQAgJEUNAEEAISUDQCAlICRLDQEgKEMK1yM8Xw0BICUgJSAkTWohJUMAAACAISYgCSEKICQhBQNAIApBFGoqAgAgCkEgaioCAJIhIyAKQQxqKAIAIQBDAACAfyEiAkACQCAKQQhqKAIAIgRBH0YNACAEQRdHDQEgAL4hIgwBCyANQQFxRQ0AIA4gAL6UISILAkAgIyAiXUUNACAmQwAAgD+SICZBj4CAgAAgChDhgoCAABshJgsgCkEwaiEKIAVBf2oiBQ0ACyAmQwAAAABbDQFBACEKICohBSArIQQDQCAMIApGDQcCQAJAIAtB0AFqIAkgCmoiABDPgoCAAEUNAEGPgICAACAAEOGCgIAADQELIAVBMGohBSAEQVBqIQQgCkEwaiEKDAELCyALQdABaiAAENCCgIAAISICQCAAQTBqIB1GDQAgBEEwbiEKA0ACQCALQdABaiAFEM+CgIAARQ0AQY+AgIAAIAUQ4YKAgABFDQAgC0HQAWogBRDQgoCAACIjICIgIrwiBEEfdUEBdiAEcyAjvCIEQR91QQF2IARzShshIgsgBUEwaiEFIApBf2oiCg0ACwsgIiAoICaVEMeFgIAAISIgCSEFA0AgBSIKIB1GDQEgCkEwaiEFQY+AgIAAIAoQ4YKAgAAhBCAiQwAAAABeRQ0AIARFDQAgIiAKQRRqKgIAIApBIGoqAgAiJ5KSISYgCkEMaigCACEAQwAAgH8hIwJAAkAgCkEIaigCACIEQR9GDQAgBEEXRw0BIAC+ISMMAQsgDUEBcUUNACAOIAC+lCEjCyAmICNDCtcjPJJfRQ0AIAogIiAnkjgCICAoICKTISgMAAsLCyAJQSBqIQkDQCAMRQ0LAkAgCSoCACIiIAlBBGoiCioCAF5FDQAgCiAiOAIACyAJQQA2AgAgDEFQaiEMIAlBMGohCQwACwsgCyAOOALUASALIA02AtABIAsgDjgCxAEgCyANNgLAASALIAk2AuABIAsgCSAkQTBsIgxqIh02AuQBIAtB4AFqEOCCgIAARQ0JIAlBFGohCkMAAACAISIgJCEFA0AgIiAKKgIAkiEiIApBMGohCiAFQX9qIgUNAAsgCUEwaiEsIAxBUGohLUEAISUgIyAik0MAAAAAEMiFgIAAITECQANAICUgJEsNASAxQwrXIzxfDQEgJSAlICRNaiElQwAAAIAhIiAJIQogJCEFA0ACQCAKQRRqKgIAIApBIGoqAgCSIA0gDiAKEKeBgIAAXUUNACAiICIgCkEMaioCAJIgCigCAEF5akF3cRsgIiAKQQhqKAIAQQRGGyEiCyAKQTBqIQogBUF/aiIFDQALICJDAAAAAFsNAUEAIQogLCEFIC0hBANAIAwgCkYNBwJAAkAgC0HAAWogCSAKaiIAENWCgIAARQ0AIABBCGooAgBBBEcNACAAKAIAQXlqQXdxRQ0BCyAFQTBqIQUgBEFQaiEEIApBMGohCgwBCwsgC0HAAWogABDWgoCAACEjAkAgAEEwaiAdRg0AIARBMG4hCgNAAkAgC0HAAWogBRDVgoCAAEUNACAFQQhqKAIAQQRHDQAgBSgCAEF5akF3cQ0AIAtBwAFqIAUQ1oKAgAAiJiAjICO8IgRBH3VBAXYgBHMgJrwiBEEfdUEBdiAEc0obISMLIAVBMGohBSAKQX9qIgoNAAsLICMgMSAilRDHhYCAACEjIAkhBQNAIAUiCiAdRg0BIApBMGohBSAKQQhqKAIAQQRHDQAgCigCAEF5akF3cQ0AICMgCkEMaioCAJQiIkMAAAAAXkUNACAiIApBFGoqAgAgCkEgaioCACImkpIgDSAOIAoQp4GAgABDCtcjPJJfRQ0AIAogIiAmkjgCICAxICKTITEMAAsLCwJAIDFDvTeGNV5FDQBBACErA0AgKyAkSw0BIDFDCtcjPF8NASArICsgJE1qIStDAAAAgCEmIAkhCiAkIQUDQCAKQRRqKgIAIApBIGoqAgCSISMgCkEMaiIlKAIAIQBDAACAfyEiAkACQCAKQQhqIiooAgAiBEEfRg0AIARBF0cNASAAviEiDAELIA1BAXFFDQAgDiAAvpQhIgsCQCAjICJdRQ0AQY+AgIAAIAoQ4YKAgABFDQAgJiAlKgIAQwAAAAAgKigCAEEERhuSISYLIApBMGohCiAFQX9qIgUNAAsgJkMAAAAAWw0BQQAhCiAsIQUgLSEEA0AgDCAKRg0IAkACQCALQdABaiAJIApqIgAQz4KAgABFDQBBj4CAgAAgABDhgoCAAA0BCyAFQTBqIQUgBEFQaiEEIApBMGohCgwBCwsgC0HQAWogABDUgoCAACEiAkAgAEEwaiAdRg0AIARBMG4hCgNAAkAgC0HQAWogBRDPgoCAAEUNAEGPgICAACAFEOGCgIAARQ0AIAtB0AFqIAUQ1IKAgAAiIyAiICK8IgRBH3VBAXYgBHMgI7wiBEEfdUEBdiAEc0obISILIAVBMGohBSAKQX9qIgoNAAsLICIgMSAmlRDHhYCAACEnIAkhBQNAIAUiCiAdRg0BIApBMGohBUGPgICAACAKEOGCgIAARQ0AICcgCkEMaioCACIjQwAAAAAgCkEIaigCACIEQQRGG5QiIkMAAAAAXkUNACAiIApBFGoqAgAgCkEgaioCACIpkpIhKAJAAkAgBEEfRg0AQwAAgH8hJiAEQRdHDQEgIyEmDAELIA4gI5RDAACAfyANQQFxGyEmCyAoICZDCtcjPJJfRQ0AIAogIiApkjgCICAxICKTITEMAAsLCyAJQSBqIQkDQCAMRQ0KAkAgCSoCACIiIAlBBGoiCioCAF5FDQAgCiAiOAIACyAJQQA2AgAgDEFQaiEMIAlBMGohCQwACwtB7LjAgAAQz4CAgAAAC0HsuMCAABDPgICAAAALQey4wIAAEM+AgIAAAAtB7LjAgAAQz4CAgAAAC0HsuMCAABDPgICAAAALQey4wIAAEM+AgIAAAAsCQAJAAkACQAJAAkAgJEUNAEMAAACAISIgCSEKICQhBQNAICIgIiAKQQxqKgIAkiAKKAIAQXlqQXdxGyAiIApBCGooAgBBBEYbISIgCkEwaiEKIAVBf2oiBQ0ACyAiQwAAAABeDQELIAsgDjgC1AEgCyANNgLQASALIAk2AuABIAsgCSAkQTBsIgxqIh02AuQBIAtB4AFqEOCCgIAARQ0HAkACQCAkDQBDAAAAgCEiDAELIAlBFGohCkMAAACAISIgJCEFA0AgIiAKKgIAkiEiIApBMGohCiAFQX9qIgUNAAsLIAxBUGohKkEAISUgIyAik0MAAAAAEMiFgIAAISkCQAJAA0AgJSAkSw0BIClDCtcjPF8NASAkRQ0CICUgJSAkTWohJUMAAACAISIgCSEKICQhBQNAAkAgCkEUaioCACAKQSBqKgIAkiAKQRhqKgIAXUUNACAiICJDAACAP5IgCigCAEF5akF3cRsgIiAKQQhqKAIAQQRGGyEiCyAKQTBqIQogBUF/aiIFDQALICJDAAAAAFsNAUEAIQogCSEFICohAANAIAwgCkYNBQJAAkAgCSAKaiIEQRRqKgIAIiMgBEEgaioCACImkiAEQRhqKgIAIiddRQ0AIARBCGooAgBBBEcNACAEKAIAQXlqQXdxRQ0BCyAFQTBqIQUgAEFQaiEAIApBMGohCgwBCwsgJyAjkyAmkyEoAkAgBEEwaiAdRg0AIABBMG4hCgNAAkAgBUHEAGoqAgAiIyAFQdAAaioCACImkiAFQcgAaioCACInXUUNACAFQThqKAIAQQRHDQAgBUEwaigCAEF5akF3cQ0AICcgI5MgJpMiIyAoICi8IgRBH3VBAXYgBHMgI7wiBEEfdUEBdiAEc0obISgLIAVBMGohBSAKQX9qIgoNAAsLICggKSAilRDHhYCAACEiIAkhBQNAIAUiCiAdRg0BIApBMGohBSAKKAIAQXlqQXdxIQQgCkEIaigCAEEERw0AIAQNACAiQwAAAABeRQ0AICIgCkEUaioCACAKQSBqKgIAIiOSkiAKQRhqKgIAQwrXIzySX0UNACAKICIgI5I4AiAgKSAikyEpDAALCwsgKUO9N4Y1XkUNACAkRQ0AIAlBMGohK0EAISUDQCAlICRLDQEgKUMK1yM8Xw0BICUgJSAkTWohJUMAAACAISYgCSEKICQhBQNAIApBFGoqAgAgCkEgaioCAJIhIyAKQQxqKAIAIQBDAACAfyEiAkACQCAKQQhqKAIAIgRBH0YNACAEQRdHDQEgAL4hIgwBCyANQQFxRQ0AIA4gAL6UISILAkAgIyAiXUUNACAmQwAAgD+SICZBj4CAgAAgChDhgoCAABshJgsgCkEwaiEKIAVBf2oiBQ0ACyAmQwAAAABbDQFBACEKICshBSAqIQQDQCAMIApGDQUCQAJAIAtB0AFqIAkgCmoiABDPgoCAAEUNAEGPgICAACAAEOGCgIAADQELIAVBMGohBSAEQVBqIQQgCkEwaiEKDAELCyALQdABaiAAENCCgIAAISICQCAAQTBqIB1GDQAgBEEwbiEKA0ACQCALQdABaiAFEM+CgIAARQ0AQY+AgIAAIAUQ4YKAgABFDQAgC0HQAWogBRDQgoCAACIjICIgIrwiBEEfdUEBdiAEcyAjvCIEQR91QQF2IARzShshIgsgBUEwaiEFIApBf2oiCg0ACwsgIiApICaVEMeFgIAAISIgCSEFA0AgBSIKIB1GDQEgCkEwaiEFQY+AgIAAIAoQ4YKAgAAhBCAiQwAAAABeRQ0AIARFDQAgIiAKQRRqKgIAIApBIGoqAgAiJ5KSISYgCkEMaigCACEAQwAAgH8hIwJAAkAgCkEIaigCACIEQR9GDQAgBEEXRw0BIAC+ISMMAQsgDUEBcUUNACAOIAC+lCEjCyAmICNDCtcjPJJfRQ0AIAogIiAnkjgCICApICKTISkMAAsLCyAJQSBqIQkDQCAMRQ0IAkAgCSoCACIiIAlBBGoiCioCAF5FDQAgCiAiOAIACyAJQQA2AgAgDEFQaiEMIAlBMGohCQwACwsgCyAOOALUASALIA02AtABIAsgCTYC4AEgCyAJICRBMGwiDGoiHTYC5AEgC0HgAWoQ4IKAgABFDQYgCUEUaiEKQwAAAIAhIiAkIQUDQCAiIAoqAgCSISIgCkEwaiEKIAVBf2oiBQ0ACyAJQTBqISwgDEFQaiEtQQAhJSAjICKTQwAAAAAQyIWAgAAhMQJAA0AgJSAkSw0BIDFDCtcjPF8NASAlICUgJE1qISVDAAAAgCEiIAkhCiAkIQUDQAJAIApBFGoqAgAgCkEgaioCAJIgCkEYaioCAF1FDQAgIiAiIApBDGoqAgCSIAooAgBBeWpBd3EbICIgCkEIaigCAEEERhshIgsgCkEwaiEKIAVBf2oiBQ0ACyAiQwAAAABbDQFBACEKICwhBSAtIQADQCAMIApGDQUCQAJAIAkgCmoiBEEUaioCACAEQSBqKgIAkiAEQRhqKgIAXUUNACAEQQhqKAIAQQRHDQAgBCgCAEF5akF3cUUNAQsgBUEwaiEFIABBUGohACAKQTBqIQoMAQsLIAQQ2IKAgAAhIwJAIARBMGogHUYNACAAQTBuIQoDQAJAIAVBFGoqAgAgBUEgaioCAJIgBUEYaioCAF1FDQAgBUEIaigCAEEERw0AIAUoAgBBeWpBd3ENACAFENiCgIAAIiYgIyAjvCIEQR91QQF2IARzICa8IgRBH3VBAXYgBHNKGyEjCyAFQTBqIQUgCkF/aiIKDQALCyAjIDEgIpUQx4WAgAAhIyAJIQUDQCAFIgogHUYNASAKQTBqIQUgCkEIaigCAEEERw0AIAooAgBBeWpBd3ENACAjIApBDGoqAgCUIiJDAAAAAF5FDQAgIiAKQRRqKgIAIApBIGoqAgAiJpKSIApBGGoqAgBDCtcjPJJfRQ0AIAogIiAmkjgCICAxICKTITEMAAsLCwJAIDFDvTeGNV5FDQBBACErA0AgKyAkSw0BIDFDCtcjPF8NASArICsgJE1qIStDAAAAgCEmIAkhCiAkIQUDQCAKQRRqKgIAIApBIGoqAgCSISMgCkEMaiIlKAIAIQBDAACAfyEiAkACQCAKQQhqIiooAgAiBEEfRg0AIARBF0cNASAAviEiDAELIA1BAXFFDQAgDiAAvpQhIgsCQCAjICJdRQ0AQY+AgIAAIAoQ4YKAgABFDQAgJiAlKgIAQwAAAAAgKigCAEEERhuSISYLIApBMGohCiAFQX9qIgUNAAsgJkMAAAAAWw0BQQAhCiAsIQUgLSEEA0AgDCAKRg0GAkACQCALQdABaiAJIApqIgAQz4KAgABFDQBBj4CAgAAgABDhgoCAAA0BCyAFQTBqIQUgBEFQaiEEIApBMGohCgwBCwsgC0HQAWogABDUgoCAACEiAkAgAEEwaiAdRg0AIARBMG4hCgNAAkAgC0HQAWogBRDPgoCAAEUNAEGPgICAACAFEOGCgIAARQ0AIAtB0AFqIAUQ1IKAgAAiIyAiICK8IgRBH3VBAXYgBHMgI7wiBEEfdUEBdiAEc0obISILIAVBMGohBSAKQX9qIgoNAAsLICIgMSAmlRDHhYCAACEnIAkhBQNAIAUiCiAdRg0BIApBMGohBUGPgICAACAKEOGCgIAARQ0AICcgCkEMaioCACIjQwAAAAAgCkEIaigCACIEQQRGG5QiIkMAAAAAXkUNACAiIApBFGoqAgAgCkEgaioCACIpkpIhKAJAAkAgBEEfRg0AQwAAgH8hJiAEQRdHDQEgIyEmDAELIA4gI5RDAACAfyANQQFxGyEmCyAoICZDCtcjPJJfRQ0AIAogIiApkjgCICAxICKTITEMAAsLCyAJQSBqIQkDQCAMRQ0HAkAgCSoCACIiIAlBBGoiCioCAF5FDQAgCiAiOAIACyAJQQA2AgAgDEFQaiEMIAlBMGohCQwACwtB7LjAgAAQz4CAgAAAC0HsuMCAABDPgICAAAALQey4wIAAEM+AgIAAAAtB7LjAgAAQz4CAgAAACyAJQRRqIQpDAAAAgCEiICQhBQNAICIgCioCAJIhIiAKQTBqIQogBUF/aiIFDQALCyAJQTBqISsgAEFQaiEsQQAhJSAjICKTQwAAAAAQyIWAgAAhKQJAAkACQANAICUgJEsNASApQwrXIzxfDQEgJEUNAiAlICUgJE1qISVDAAAAgCEnIAkhCiAkIQUDQAJAIApBFGoqAgAgCkEgaioCAJIgCkEYaioCAF1FDQAgJyAnQwAAgD+SIAooAgBBeWpBd3EbIScLIApBMGohCiAFQX9qIgUNAAsgJ0MAAAAAWw0BQQAhCiArIQUgLCEMA0AgACAKRg0EAkACQCAJIApqIgRBFGoqAgAiIiAEQSBqKgIAIiOSIARBGGoqAgAiJl1FDQAgBCgCAEF5akF3cUUNAQsgBUEwaiEFIAxBUGohDCAKQTBqIQoMAQsLICYgIpMgI5MhKAJAIARBMGogHUYNACAMQTBuIQoDQAJAIAVBFGoqAgAiIiAFQSBqKgIAIiOSIAVBGGoqAgAiJl1FDQAgBSgCAEF5akF3cQ0AICYgIpMgI5MiIiAoICi8IgRBH3VBAXYgBHMgIrwiBEEfdUEBdiAEc0obISgLIAVBMGohBSAKQX9qIgoNAAsLICggKSAnlRDHhYCAACEiIAkhBQNAIAUiCiAdRg0BIApBMGohBSAKKAIAQXlqQXdxDQAgIkMAAAAAXkUNACAiIApBFGoqAgAgCkEgaioCACIjkpIgCkEYaioCAEMK1yM8kl9FDQAgCiAiICOSOAIgICkgIpMhKQwACwsLIClDvTeGNV5FDQAgJEUNAEEAIQwgCSEKICQhBQNAAkAgCigCAEF5akF3cQ0AQQAhBAJAIApBCGooAgBBfWpBHnciJUEHSw0AICVBAnQoApzJwIAAIQQLIAQgDGohDAsgCkEwaiEKIAVBf2oiBQ0AC0GQgICAAEGPgICAACAMGyElQQAhKgNAICogJEsNASApQwrXIzxfDQEgKiAqICRNaiEqQwAAAIAhJiAJIQogJCEFA0AgCkEUaioCACAKQSBqKgIAkiEjIApBDGooAgAhDEMAAIB/ISICQAJAIApBCGooAgAiBEEfRg0AIARBF0cNASAMviEiDAELIA1BAXFFDQAgDiAMvpQhIgsCQCAjICJdRQ0AIAooAgBBeWpBd3ENACAmQwAAgD+SICYgCiAlEYSAgIAAgICAgAAbISYLIApBMGohCiAFQX9qIgUNAAsgJkMAAAAAWw0BQQAhCiArIQUgLCEEA0AgACAKRg0FAkACQCALQdABaiAJIApqIgwQz4KAgABFDQAgDCgCAEF5akF3cQ0AIAwgJRGEgICAAICAgIAADQELIAVBMGohBSAEQVBqIQQgCkEwaiEKDAELCyALQdABaiAMENCCgIAAISICQCAMQTBqIB1GDQAgBEEwbiEKA0ACQCALQdABaiAFEM+CgIAARQ0AIAUoAgBBeWpBd3ENACAFICURhICAgACAgICAAEUNACALQdABaiAFENCCgIAAIiMgIiAivCIEQR91QQF2IARzICO8IgRBH3VBAXYgBHNKGyEiCyAFQTBqIQUgCkF/aiIKDQALCyAiICkgJpUQx4WAgAAhIiAJIQUDQCAFIgogHUYNASAKQTBqIQUgCigCAEF5akF3cQ0AIAogJRGEgICAAICAgIAAIQQgIkMAAAAAXkUNACAERQ0AICIgCkEUaioCACAKQSBqKgIAIieSkiEmIApBDGooAgAhDEMAAIB/ISMCQAJAIApBCGooAgAiBEEfRg0AIARBF0cNASAMviEjDAELIA1BAXFFDQAgDiAMvpQhIwsgJiAjQwrXIzySX0UNACAKICIgJ5I4AiAgKSAikyEpDAALCwsgCUEgaiEJA0AgAEUNAgJAIAkqAgAiIiAJQQRqIgoqAgBeRQ0AIAogIjgCAAsgCUEANgIAIABBUGohACAJQTBqIQkMAAsLC0HsuMCAABDPgICAAAALQey4wIAAEM+AgIAAAAsDQAJAAkACQAJAAkACQCAJICBHDQAgFyEKIAIhCQwBCyALKAKkASEKIAsoAqgBIQUgCy0AsAEhBCALQeABakEIaiAPKQMANwMAIAsgCykDkAE3A+ABIAtBwAFqIAkgBCACIAMgCiAFIAtB4AFqIAsoAqABIAsoAqwBENmCgIAAIAsgCygCzAE2AtwBIAsgCygCxAEiBTYC1AEgC0EAIAsoAsgBIAstALABQQFxIgobNgLYASALIAsoAsABQQAgChsiCjYC0AEgCSgCyAEgCSgCzAEQjoGAgAAhIiAJKALQASAJKALUARCOgYCAACEjIAkoAtgBIAkoAtwBIAogBb4iJhCOgICAACEnIAkqAvABISggCSgC4AEgCSgC5AEgCiAmEI6AgIAAISYgCygCoAEhBSALIAstALABIgo6ALgBICIgI5IhIiAmICcgKJKSISMCQAJAIAlBOGogCUEwaiAKQQFxIgQbKAIAQQFxRQ0AIAlBPGogCUE0aiAEGyoCACEmDAELIAsgBTYC6AEgCyAJNgLgASALIAtB0AFqNgLwASALIAtBwAFqNgLsASALIAtBuAFqNgLkASALQeABahDGgoCAACEmIAstALABIQoLIAtBMGogCSABEMWCgIAAIAtBKGogCygCMCALKAI0IAIgA0HMucCAABCbgICAACAJQZgCaiIvIQkgJiAjICIgCkEBcRuSIiNDAAAAAF5FDQUgCygCLCErIAsoAighCiAfDQEgCyAOOALkASALIA02AuABIAogK0EwbCIMaiEkQQAhCQNAIAwgCUYNBSAKIAlqIQUgCUEwaiEJIAUoAgBBD0cNAAsgKw0CQwAAAIAhIgwDCwJAA0AgCkUNASAJKgIkISIgCUEANgIkIAkgIiAJKgIUkjgCFCAKQVBqIQogCUEwaiEJDAALC0EAIQkDQAJAAkACQAJAAkAgFyAJRg0AIAIgCWoiCkEYaiIFKgIAIApBFGoqAgAiIl0NAQwEC0EBIQkgHiEAIB8NECAcIQkDQAJAIAkgIEcNAEEAIQogAiEJA0AgFyAKRg0FQQAhBQJAIAkqAigiIkMAAAAAXkUNAAJAIAIgCmoiBEEYaiIFKgIAIiNDAACAf1wNACAEQRRqKgIAISMLIAUgIiAjkjgCAEEBIQULIAlBADYCKCAJIAU6AC4gCkEwaiEKIAlBMGohCQwACwsgCygCpAEhCiALKAKoASEFIAstALABIQQgC0HgAWpBCGogDykDADcDACALIAspA5ABNwPgASALQcABaiAJIAQgAiADIAogBSALQeABaiALKAKgASALKAKsARDZgoCAACALIAsoAswBNgLcASALIAsoAsQBIgU2AtQBIAtBACALKALIASALLQCwAUEBcSIKGzYC2AEgCyALKALAAUEAIAobIgo2AtABIAkoAsgBIAkoAswBEI6BgIAAISIgCSgC0AEgCSgC1AEQjoGAgAAhIyAJKALYASAJKALcASAKIAW+IiYQjoCAgAAhJyAJKgLwASEoIAkoAuABIAkoAuQBIAogJhCOgICAACEmIAsoAqABIQUgCyALLQCwASIKOgC4ASAiICOSISIgJiAnICiSkiEjAkACQCAJQRhqIAlBEGogCkEBcSIEGygCAEEBcUUNACAJQRxqIAlBFGogBBsqAgAhJgwBCyALIAU2AugBIAsgCTYC4AEgCyALQdABajYC8AEgCyALQcABajYC7AEgCyALQbgBajYC5AEgC0HgAWoQ2oKA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IAsgC0HAAWo2AvQBIAsgC0G4AWo2AugBIAtB4AFqENuCgIAAISYgCygCoAEhBSALLQCwASEJCyALKAKkASEEIAsoAqgBIQwgACAPKQMANwMAIAsgCykDkAE3A+ABIAtBwAFqIAogCUEBcSIAIAIgAyAEIAwgC0HgAWogBSALKAKsARDZgoCAACALIAsoAswBNgLcASALIAsoAsQBIgU2AtQBIAtBACALKALIASALLQCwAUEBcSIJGzYC2AEgCyALKALAAUEAIAkbIgk2AtABIAooAsgBIAooAswBEI6BgIAAIScgCigC0AEgCigC1AEQjoGAgAAhKCAKKALYASAKKALcASAJIAW+IikQjoCAgAAhMSAKKgLwASEyIAooAuABIAooAuQBIAkgKRCOgICAACEpIAsoAqABIQUgCyALLQCwASIJOgC4ASAnICiSIScgKSAxIDKSkiEoICYgIiAjIAAbkiEmAkACQCAKQRhqIApBEGogCUEBcSIEGygCAEEBcUUNACAKQRxqIApBFGogBBsqAgAhIgwBCyALIAU2AugBIAsgCjYC4AEgCyALQdABajYC8AEgCyALQcABajYC7AEgCyALQbgBajYC5AEgC0HgAWoQ2oKAgAAhIiALLQCwASEJCyALIAtBkAFqNgLgASALQYABaiAKIAEgAiADIA0gDiALQeABakGIv8CAABDdgoCAACALKAKAASEFICIgKCAnIAlBAXEbkiIiIAsqAoQBEMeFgIAAICIgBUEBcRsgJhDIhYCAACEjIB9FDQEgC0H4AGogCiABEMWCgIAAAkAgCygCfCIJIAsoAngiBUkNACAJIANLDQAgAiAJQTBsIh1qIQQgAiAFQTBsIgBqIQxDAAAAgCEiAkAgBSAJRg0AIBYgAGohCSAdIABrQTBuIQVDAAAAgCEiA0AgIiAiIAkqAgCSIAlBdGooAgBBBEYbISIgCUEwaiEJIAVBf2oiBQ0ACwsgJiAiIAwgBBDdgYCAAEMAAIA/EMeFgIAAICMgIpNDAAAAABDIhYCAAJSSEMiFgIAAISMMAgsgBSAJIANBjLrAgAAQnICAgAAACyALKAKkASEJIAsoAqgBIQUgCy0AsAEhBCALQeABakEIaiAPKQMANwMAIAsgCykDkAE3A+ABIAtBwAFqIAogBCACIAMgCSAFIAtB4AFqIAsoAqABIAsoAqwBENmCgIAAIAstALABIQkgCygCwAEhBSALKgLEASEiIAooAsgBIAooAswBEI6BgIAAISMgCigC0AEgCigC1AEQjoGAgAAhJiAKKALYASAKKALcASAFQQAgCUEBcRsiCSAiEI6AgIAAIScgCioC8AEhKCAKKALgASAKKALkASAJICIQjoCAgAAhIiALKAKgASEFIAstALABIQkgC0HQAWpBCGogDykDADcDACALIAspA5ABNwPQASALIAk6ALgBICMgJpIhIyAiICcgKJKSISICQAJAIApBKGogCkEgaiAJQQFxIgQbKAIAQQFxRQ0AIApBLGogCkEkaiAEGyoCACEmDAELIAsgAzYC8AEgCyACNgLsASALIAU2AuQBIAsgCjYC4AEgCyALQdABajYC+AEgCyALQcABajYC9AEgCyALQbgBajYC6AEgC0HgAWoQ24KAgAAhJiALLQCwASEJCyAmICIgIyAJQQFxG5IhIwsgC0HwAGogCiABEMWCgIAAIAtB6ABqIAsoAnAgCygCdCACIANBnLrAgAAQm4CAgAAgI0MAAAAAXkUNACALKAJsISQgCygCaCEJAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAogG2otAABBAUsNACALIAtBkAFqNgLEASALIAtBiAFqNgLAAQJAIB8NACALIA44AtQBIAsgDTYC0AEgCyAJNgLgASALIAkgJEEwbCIMaiIdNgLkASALQeABaiALQYgBahDkgoCAAEUNFgJAAkAgJA0AQwAAAIAhIgwBCyAJQRRqIQpDAAAAgCEiICQhBQNAICIgCioCAJIhIiAKQTBqIQogBUF/aiIFDQALCyAMQVBqISpBACElICMgIpNDAAAAABDIhYCAACIxISkCQANAICUgJEsNASApQwrXIzxfDQECQCAkRQ0AICUgJSAkTWohJUMAAACAISIgCSEKICQhBQNAAkAgCkEUaioCACAKQSBqKgIAkiAKQRhqKgIAXUUNACAiQwAAgD+SICIgCygCiAEgCyoCjAEgCigCACAKQQRqKAIAEOWCgIAAGyEiCyAKQTBqIQogBUF/aiIFDQALICJDAAAAAFsNAkEAIQUgCSEEICohAANAIAwgBUYNBgJAAkAgCSAFaiIKQRRqKgIAIApBIGoqAgCSIApBGGoqAgBdRQ0AIAsoAogBIAsqAowBIAooAgAgCkEEaigCABDlgoCAAA0BCyAEQTBqIQQgAEFQaiEAIAVBMGohBQwBCwsgCioCGCAKKgIUkyAKKgIgkyEoAkAgCkEwaiAdRg0AIABBMG4hCgNAAkAgBEHEAGoqAgAiIyAEQdAAaioCACImkiAEQcgAaioCACInXUUNACALKAKIASALKgKMASAEQTBqKAIAIARBNGooAgAQ5YKAgABFDQAgJyAjkyAmkyIjICggKLwiBUEfdUEBdiAFcyAjvCIFQR91QQF2IAVzShshKAsgBEEwaiEEIApBf2oiCg0ACwsgKCApICKVEMeFgIAAISIgCSEFA0AgBSIKIB1GDQIgCkEwaiEFIAsoAogBIAsqAowBIAooAgAgCkEEaigCABDlgoCAACEEICJDAAAAAF5FDQAgBEUNACAiIApBFGoqAgAgCkEgaioCACIjkpIgCkEYaioCAEMK1yM8kl9FDQAgCiAiICOSOAIgICkgIpMhKQwACwsLIDFDvTeGNV5FDRYMFQsgKUO9N4Y1XkUNFSALQZCAgIAANgLgASAkRQ0UQQAhACAJIQogJCEFA0ACQCALKAKIASALKgKMASAKKAIAIApBBGooAgAQ5YKAgABFDQBBACEEAkAgCkEIaigCAEF9akEedyIlQQdLDQAgJUECdCgCnMnAgAAhBAsgBCAAaiEACyAKQTBqIQogBUF/aiIFDQALAkAgAA0AIAtBj4CAgAA2AuABCyAJQTBqIStBACElA0AgJSAkSw0WIClDCtcjPF8NFiAlICUgJE1qISVDAAAAgCEmIAkhCiAkIQUDQCAKQRRqKgIAIApBIGoqAgCSISMgCkEMaigCACEAQwAAgH8hIgJAAkAgCkEIaigCACIEQR9GDQAgBEEXRw0BIAC+ISIMAQsgDUEBcUUNACAOIAC+lCEiCwJAICMgIl1FDQAgJkMAAIA/kiAmIAtBiAFqIAtB4AFqIAoQ5oKAgAAbISYLIApBMGohCiAFQX9qIgUNAAsgJkMAAAAAWw0WQQAhCiArIQUgKiEEA0AgDCAKRg0FAkACQCALQdABaiAJIApqIgAQz4KAgABFDQAgC0GIAWogC0HgAWogABDmgoCAAA0BCyAFQTBqIQUgBEFQaiEEIApBMGohCgwBCwsgC0HQAWogABDQgoCAACEiAkAgAEEwaiAdRg0AIARBMG4hCgNAAkAgC0HQAWogBRDPgoCAAEUNACALQYgBaiALQeABaiAFEOaCgIAARQ0AIAtB0AFqIAUQ0IKAgAAiIyAiICK8IgRBH3VBAXYgBHMgI7wiBEEfdUEBdiAEc0obISILIAVBMGohBSAKQX9qIgoNAAsLICIgKSAmlRDHhYCAACEiIAkhBQNAIAUiCiAdRg0BIApBMGohBSALQYgBaiALQeABaiAKEOaCgIAAIQQgIkMAAAAAXkUNACAERQ0AICIgCkEUaioCACAKQSBqKgIAIieSkiEmIApBDGooAgAhAEMAAIB/ISMCQAJAIApBCGooAgAiBEEfRg0AIARBF0cNASAAviEjDAELIA1BAXFFDQAgDiAAvpQhIwsgJiAjQwrXIzySX0UNACAKICIgJ5I4AiAgKSAikyEpDAALCwsCQAJAICRFDQBDAAAAgCEiIAkhCiAkIQUDQAJAIAtBwAFqIAoQ54KAgABFDQAgIiAKQQxqKgIAQwAAAAAgCkEIaigCAEEERhuSISILIApBMGohCiAFQX9qIgUNAAsgIkMAAAAAXg0BCyALIA44AtQBIAsgDTYC0AEgCyAJNgLgASALIAkgJEEwbCIMaiIdNgLkASALQeABaiALQcABahDogoCAAEUNFgJAAkAgJA0AQwAAAIAhIgwBCyAJQRRqIQpDAAAAgCEiICQhBQNAICIgCioCAJIhIiAKQTBqIQogBUF/aiIFDQALCyAJQTBqISogDEFQaiErQQAhJSAjICKTQwAAAAAQyIWAgAAiMSEpAkADQCAlICRLDQEgKUMK1yM8Xw0BAkAgJEUNACAlICUgJE1qISVDAAAAgCEiIAkhCiAkIQUDQAJAIApBFGoqAgAgCkEgaioCAJIgCkEYaioCAF1FDQAgIkMAAIA/kiAiIAtBwAFqIAoQ54KAgAAbISILIApBMGohCiAFQX9qIgUNAAsgIkMAAAAAWw0CQQAhCiAqIQUgKyEAA0AgDCAKRg0IAkACQCAJIApqIgRBFGoqAgAgBEEgaioCAJIgBEEYaioCAF1FDQAgC0HAAWogBBDngoCAAA0BCyAFQTBqIQUgAEFQaiEAIApBMGohCgwBCwsgBCoCGCAEKgIUkyAEKgIgkyEoAkAgBEEwaiAdRg0AIABBMG4hCgNAAkAgBUEUaioCACIjIAVBIGoqAgAiJpIgBUEYaioCACInXUUNACALQcABaiAFEOeCgIAARQ0AICcgI5MgJpMiIyAoICi8IgRBH3VBAXYgBHMgI7wiBEEfdUEBdiAEc0obISgLIAVBMGohBSAKQX9qIgoNAAsLICggKSAilRDHhYCAACEiIAkhBQNAIAUiCiAdRg0CIApBMGohBSALQcABaiAKEOeCgIAAIQQgIkMAAAAAXkUNACAERQ0AICIgCkEUaioCACAKQSBqKgIAIiOSkiAKQRhqKgIAQwrXIzySX0UNACAKICIgI5I4AiAgKSAikyEpDAALCwsgMUO9N4Y1XkUNFAwTCyApQ703hjVeRQ0TIAtBkICAgAA2AuABICRFDRJBACEAIAkhCiAkIQUDQAJAIAtBwAFqIAoQ54KAgABFDQBBACEEAkAgCkEIaigCAEF9akEedyIlQQdLDQAgJUECdCgCnMnAgAAhBAsgBCAAaiEACyAKQTBqIQogBUF/aiIFDQALAkAgAA0AIAtBj4CAgAA2AuABC0EAISUDQCAlICRLDRQgKUMK1yM8Xw0UICUgJSAkTWohJUMAAACAISYgCSEKICQhBQNAIApBFGoqAgAgCkEgaioCAJIhIyAKQQxqKAIAIQBDAACAfyEiAkACQCAKQQhqKAIAIgRBH0YNACAEQRdHDQEgAL4hIgwBCyANQQFxRQ0AIA4gAL6UISILAkAgIyAiXUUNACAmQwAAgD+SICYgC0HAAWogC0HgAWogChDpgoCAABshJgsgCkEwaiEKIAVBf2oiBQ0ACyAmQwAAAABbDRRBACEKICohBSArIQQDQCAMIApGDQcCQAJAIAtB0AFqIAkgCmoiABDPgoCAAEUNACALQcABaiALQeABaiAAEOmCgIAADQELIAVBMGohBSAEQVBqIQQgCkEwaiEKDAELCyALQdABaiAAENCCgIAAISICQCAAQTBqIB1GDQAgBEEwbiEKA0ACQCALQdABaiAFEM+CgIAARQ0AIAtBwAFqIAtB4AFqIAUQ6YKAgABFDQAgC0HQAWogBRDQgoCAACIjICIgIrwiBEEfdUEBdiAEcyAjvCIEQR91QQF2IARzShshIgsgBUEwaiEFIApBf2oiCg0ACwsgIiApICaVEMeFgIAAISIgCSEFA0AgBSIKIB1GDQEgCkEwaiEFIAtBwAFqIAtB4AFqIAoQ6YKAgAAhBCAiQwAAAABeRQ0AIARFDQAgIiAKQRRqKgIAIApBIGoqAgAiJ5KSISYgCkEMaigCACEAQwAAgH8hIwJAAkAgCkEIaigCACIEQR9GDQAgBEEXRw0BIAC+ISMMAQsgDUEBcUUNACAOIAC+lCEjCyAmICNDCtcjPJJfRQ0AIAogIiAnkjgCICApICKTISkMAAsLCyALIA44AtQBIAsgDTYC0AEgCyAJNgLgASALIAkgJEEwbCIMaiIdNgLkASALQeABaiALQcABahDogoCAAEUNFSAJQRRqIQpDAAAAgCEiICQhBQNAICIgCioCAJIhIiAKQTBqIQogBUF/aiIFDQALIAlBMGohLCAMQVBqIS1BACElICMgIpNDAAAAABDIhYCAACExAkADQCAlICRLDQEgMUMK1yM8Xw0BICUgJSAkTWohJUMAAACAISIgCSEKICQhBQNAAkAgCkEUaioCACAKQSBqKgIAkiAKQRhqKgIAXUUNACALQcABaiAKEOeCgIAARQ0AICIgCkEMaioCAEMAAAAAIApBCGooAgBBBEYbkiEiCyAKQTBqIQogBUF/aiIFDQALICJDAAAAAFsNAUEAIQogLCEFIC0hAANAIAwgCkYNCAJAAkAgCSAKaiIEQRRqKgIAIARBIGoqAgCSIARBGGoqAgBdRQ0AIAtBwAFqIAQQ54KAgAANAQsgBUEwaiEFIABBUGohACAKQTBqIQoMAQsLIAQQ2IKAgAAhIwJAIARBMGogHUYNACAAQTBuIQoDQAJAIAVBFGoqAgAgBUEgaioCAJIgBUEYaioCAF1FDQAgC0HAAWogBRDngoCAAEUNACAFENiCgIAAIiYgIyAjvCIEQR91QQF2IARzICa8IgRBH3VBAXYgBHNKGyEjCyAFQTBqIQUgCkF/aiIKDQALCyAjIDEgIpUQx4WAgAAhIyAJIQUDQCAFIgogHUYNASAKQTBqIQUgC0HAAWogChDngoCAAEUNACAjIApBDGoqAgBDAAAAACAKQQhqKAIAQQRGG5QiIkMAAAAAXkUNACAiIApBFGoqAgAgCkEgaioCACImkpIgCkEYaioCAEMK1yM8kl9FDQAgCiAiICaSOAIgIDEgIpMhMQwACwsLAkAgMUO9N4Y1XkUNACALQZCAgIAANgLgAUEAIQAgCSEKICQhBQNAAkAgC0HAAWogChDngoCAAEUNAEEAIQQCQCAKQQhqKAIAQX1qQR53IiVBB0sNACAlQQJ0KAKcycCAACEECyAEIABqIQALIApBMGohCiAFQX9qIgUNAAsCQCAADQAgC0GPgICAADYC4AELQQAhKwNAICsgJEsNASAxQwrXIzxfDQEgKyArICRNaiErQwAAAIAhJiAJIQogJCEFA0AgCkEUaioCACAKQSBqKgIAkiEjIApBDGoiJSgCACEAQwAAgH8hIgJAAkAgCkEIaiIqKAIAIgRBH0YNACAEQRdHDQEgAL4hIgwBCyANQQFxRQ0AIA4gAL6UISILAkAgIyAiXUUNACALQcABaiALQeABaiAKEOmCgIAARQ0AICYgJSoCAEMAAAAAICooAgBBBEYbkiEmCyAKQTBqIQogBUF/aiIFDQALICZDAAAAAFsNAUEAIQogLCEFIC0hBANAIAwgCkYNCQJAAkAgC0HQAWogCSAKaiIAEM+CgIAARQ0AIAtBwAFqIAtB4AFqIAAQ6YKAgAANAQsgBUEwaiEFIARBUGohBCAKQTBqIQoMAQsLIAtB0AFqIAAQ1IKAgAAhIgJAIABBMGogHUYNACAEQTBuIQoDQAJAIAtB0AFqIAUQz4KAgABFDQAgC0HAAWogC0HgAWogBRDpgoCAAEUNACALQdABaiAFENSCgIAAIiMgIiAivCIEQR91QQF2IARzICO8IgRBH3VBAXYgBHNKGyEiCyAFQTBqIQUgCkF/aiIKDQALCyAiIDEgJpUQx4WAgAAhJyAJIQUDQCAFIgogHUYNASAKQTBqIQUgC0HAAWogC0HgAWogChDpgoCAAEUNACAnIApBDGoqAgAiI0MAAAAAIApBCGooAgAiBEEERhuUIiJDAAAAAF5FDQAgIiAKQRRqKgIAIApBIGoqAgAiKZKSISgCQAJAIARBH0YNAEMAAIB/ISYgBEEXRw0BICMhJgwBCyAOICOUQwAAgH8gDUEBcRshJgsgKCAmQwrXIzySX0UNACAKICIgKZI4AiAgMSAikyExDAALCwsgCUEgaiEJA0AgDEUNFgJAIAkqAgAiIiAJQQRqIgoqAgBeRQ0AIAogIjgCAAsgCUEANgIAIAxBUGohDCAJQTBqIQkMAAsLIAsgC0GQAWo2ArwBIAsgC0GIAWo2ArgBAkAgHw0AIAsgDjgC1AEgCyANNgLQASALIA44AsQBIAsgDTYCwAEgCyAJNgLgASALIAkgJEEwbCIMaiIdNgLkASALQeABaiALQYgBahDkgoCAAEUNFQJAAkAgJA0AQwAAAIAhIgwBCyAJQRRqIQpDAAAAgCEiICQhBQNAICIgCioCAJIhIiAKQTBqIQogBUF/aiIFDQALCyAJQTBqISogDEFQaiErQQAhJSAjICKTQwAAAAAQyIWAgAAiJyEoAkADQCAlICRLDQEgKEMK1yM8Xw0BAkAgJEUNACAlICUgJE1qISVDAAAAgCEiIAkhCiAkIQUDQAJAIApBFGoqAgAgCkEgaioCAJIgDSAOIAoQp4GAgABdRQ0AICJDAACAP5IgIiALKAKIASALKgKMASAKKAIAIApBBGooAgAQ5YKAgAAbISILIApBMGohCiAFQX9qIgUNAAsgIkMAAAAAWw0CQQAhCiAqIQUgKyEAA0AgDCAKRg0LAkACQCALQcABaiAJIApqIgQQ1YKAgABFDQAgCygCiAEgCyoCjAEgBCgCACAEQQRqKAIAEOWCgIAADQELIAVBMGohBSAAQVBqIQAgCkEwaiEKDAELCyALQcABaiAEENGCgIAAISMCQCAEQTBqIB1GDQAgAEEwbiEKA0ACQCALQcABaiAFENWCgIAARQ0AIAsoAogBIAsqAowBIAUoAgAgBUEEaigCABDlgoCAAEUNACALQcABaiAFENGCgIAAIiYgIyAjvCIEQR91QQF2IARzICa8IgRBH3VBAXYgBHNKGyEjCyAFQTBqIQUgCkF/aiIKDQALCyAjICggIpUQx4WAgAAhIiAJIQUDQCAFIgogHUYNAiAKQTBqIQUgCygCiAEgCyoCjAEgCigCACAKQQRqKAIAEOWCgIAAIQQgIkMAAAAAXkUNACAERQ0AICIgCkEUaioCACAKQSBqKgIAIiOSkiANIA4gChCngYCAAEMK1yM8kl9FDQAgCiAiICOSOAIgICggIpMhKAwACwsLICdDvTeGNV5FDREMEAsgKEO9N4Y1XkUNECALQZCAgIAANgLgASAkRQ0PQQAhACAJIQogJCEFA0ACQCALKAKIASALKgKMASAKKAIAIApBBGooAgAQ5YKAgABFDQBBACEEAkAgCkEIaigCAEF9akEedyIlQQdLDQAgJUECdCgCnMnAgAAhBAsgBCAAaiEACyAKQTBqIQogBUF/aiIFDQALAkAgAA0AIAtBj4CAgAA2AuABC0EAISUDQCAlICRLDREgKEMK1yM8Xw0RICUgJSAkTWohJUMAAACAISYgCSEKICQhBQNAIApBFGoqAgAgCkEgaioCAJIhIyAKQQxqKAIAIQBDAACAfyEiAkACQCAKQQhqKAIAIgRBH0YNACAEQRdHDQEgAL4hIgwBCyANQQFxRQ0AIA4gAL6UISILAkAgIyAiXUUNACAmQwAAgD+SICYgC0GIAWogC0HgAWogChDmgoCAABshJgsgCkEwaiEKIAVBf2oiBQ0ACyAmQwAAAABbDRFBACEKICohBSArIQQDQCAMIApGDQoCQAJAIAtB0AFqIAkgCmoiABDPgoCAAEUNACALQYgBaiALQeABaiAAEOaCgIAADQELIAVBMGohBSAEQVBqIQQgCkEwaiEKDAELCyALQdABaiAAENCCgIAAISICQCAAQTBqIB1GDQAgBEEwbiEKA0ACQCALQdABaiAFEM+CgIAARQ0AIAtBiAFqIAtB4AFqIAUQ5oKAgABFDQAgC0HQAWogBRDQgoCAACIjICIgIrwiBEEfdUEBdiAEcyAjvCIEQR91QQF2IARzShshIgsgBUEwaiEFIApBf2oiCg0ACwsgIiAoICaVEMeFgIAAISIgCSEFA0AgBSIKIB1GDQEgCkEwaiEFIAtBiAFqIAtB4AFqIAoQ5oKAgAAhBCAiQwAAAABeRQ0AIARFDQAgIiAKQRRqKgIAIApBIGoqAgAiJ5KSISYgCkEMaigCACEAQwAAgH8hIwJAAkAgCkEIaigCACIEQR9GDQAgBEEXRw0BIAC+ISMMAQsgDUEBcUUNACAOIAC+lCEjCyAmICNDCtcjPJJfRQ0AIAogIiAnkjgCICAoICKTISgMAAsLCwJAAkAgJEUNAEMAAACAISIgCSEKICQhBQNAAkAgC0G4AWogChDngoCAAEUNACAiIApBDGoqAgBDAAAAACAKQQhqKAIAQQRGG5IhIgsgCkEwaiEKIAVBf2oiBQ0ACyAiQwAAAABeDQELIAsgDjgC1AEgCyANNgLQASALIA44AsQBIAsgDTYCwAEgCyAJNgLgASALIAkgJEEwbCIMaiIdNgLkASALQeABaiALQbgBahDogoCAAEUNFQJAAkAgJA0AQwAAAIAhIgwBCyAJQRRqIQpDAAAAgCEiICQhBQNAICIgCioCAJIhIiAKQTBqIQogBUF/aiIFDQALCyAJQTBqISogDEFQaiErQQAhJSAjICKTQwAAAAAQyIWAgAAiJyEoAkADQCAlICRLDQEgKEMK1yM8Xw0BAkAgJEUNACAlICUgJE1qISVDAAAAgCEiIAkhCiAkIQUDQAJAIApBFGoqAgAgCkEgaioCAJIgDSAOIAoQp4GAgABdRQ0AICJDAACAP5IgIiALQbgBaiAKEOeCgIAAGyEiCyAKQTBqIQogBUF/aiIFDQALICJDAAAAAFsNAkEAIQogKiEFICshBANAIAwgCkYNDQJAAkAgC0HAAWogCSAKaiIAENWCgIAARQ0AIAtBuAFqIAAQ54KAgAANAQsgBUEwaiEFIARBUGohBCAKQTBqIQoMAQsLIAtBwAFqIAAQ0YKAgAAhIwJAIABBMGogHUYNACAEQTBuIQoDQAJAIAtBwAFqIAUQ1YKAgABFDQAgC0G4AWogBRDngoCAAEUNACALQcABaiAFENGCgIAAIiYgIyAjvCIEQR91QQF2IARzICa8IgRBH3VBAXYgBHNKGyEjCyAFQTBqIQUgCkF/aiIKDQALCyAjICggIpUQx4WAgAAhIiAJIQUDQCAFIgogHUYNAiAKQTBqIQUgC0G4AWogChDngoCAACEEICJDAAAAAF5FDQAgBEUNACAiIApBFGoqAgAgCkEgaioCACIjkpIgDSAOIAoQp4GAgABDCtcjPJJfRQ0AIAogIiAjkjgCICAoICKTISgMAAsLCyAnQ703hjVeRQ0PDA4LIChDvTeGNV5FDQ4gC0GQgICAADYC4AEgJEUNDUEAIQAgCSEKICQhBQNAAkAgC0G4AWogChDngoCAAEUNAEEAIQQCQCAKQQhqKAIAQX1qQR53IiVBB0sNACAlQQJ0KAKcycCAACEECyAEIABqIQALIApBMGohCiAFQX9qIgUNAAsCQCAADQAgC0GPgICAADYC4AELQQAhJQNAICUgJEsNDyAoQwrXIzxfDQ8gJSAlICRNaiElQwAAAIAhJiAJIQogJCEFA0AgCkEUaioCACAKQSBqKgIAkiEjIApBDGooAgAhAEMAAIB/ISICQAJAIApBCGooAgAiBEEfRg0AIARBF0cNASAAviEiDAELIA1BAXFFDQAgDiAAvpQhIgsCQCAjICJdRQ0AICZDAACAP5IgJiALQbgBaiALQeABaiAKEOmCgIAAGyEmCyAKQTBqIQogBUF/aiIFDQALICZDAAAAAFsND0EAIQogKiEFICshBANAIAwgCkYNDAJAAkAgC0HQAWogCSAKaiIAEM+CgIAARQ0AIAtBuAFqIAtB4AFqIAAQ6YKAgAANAQsgBUEwaiEFIARBUGohBCAKQTBqIQoMAQsLIAtB0AFqIAAQ0IKAgAAhIgJAIABBMGogHUYNACAEQTBuIQoDQAJAIAtB0AFqIAUQz4KAgABFDQAgC0G4AWogC0HgAWogBRDpgoCAAEUNACALQdABaiAFENCCgIAAIiMgIiAivCIEQR91QQF2IARzICO8IgRBH3VBAXYgBHNKGyEiCyAFQTBqIQUgCkF/aiIKDQALCyAiICggJpUQx4WAgAAhIiAJIQUDQCAFIgogHUYNASAKQTBqIQUgC0G4AWogC0HgAWogChDpgoCAACEEICJDAAAAAF5FDQAgBEUNACAiIApBFGoqAgAgCkEgaioCACInkpIhJiAKQQxqKAIAIQBDAACAfyEjAkACQCAKQQhqKAIAIgRBH0YNACAEQRdHDQEgAL4hIwwBCyANQQFxRQ0AIA4gAL6UISMLICYgI0MK1yM8kl9FDQAgCiAiICeSOAIgICggIpMhKAwACwsLIAsgDjgC1AEgCyANNgLQASALIA44AsQBIAsgDTYCwAEgCyAJNgLgASALIAkgJEEwbCIAaiIdNgLkASALQeABaiALQbgBahDogoCAAEUNFCAJQRRqIQpDAAAAgCEiICQhBQNAICIgCioCAJIhIiAKQTBqIQogBUF/aiIFDQALIAlBMGohLCAAQVBqIS1BACElICMgIpNDAAAAABDIhYCAACExAkADQCAlICRLDQEgMUMK1yM8Xw0BICUgJSAkTWohJUMAAACAISIgCSEKICQhBQNAAkAgCkEUaioCACAKQSBqKgIAkiANIA4gChCngYCAAF1FDQAgC0G4AWogChDngoCAAEUNACAiIApBDGoqAgBDAAAAACAKQQhqKAIAQQRGG5IhIgsgCkEwaiEKIAVBf2oiBQ0ACyAiQwAAAABbDQFBACEKICwhBSAtIQQDQCAAIApGDQ0CQAJAIAtBwAFqIAkgCmoiDBDVgoCAAEUNACALQbgBaiAMEOeCgIAADQELIAVBMGohBSAEQVBqIQQgCkEwaiEKDAELCyALQcABaiAMENaCgIAAISMCQCAMQTBqIB1GDQAgBEEwbiEKA0ACQCALQcABaiAFENWCgIAARQ0AIAtBuAFqIAUQ54KAgABFDQAgC0HAAWogBRDWgoCAACImICMgI7wiBEEfdUEBdiAEcyAmvCIEQR91QQF2IARzShshIwsgBUEwaiEFIApBf2oiCg0ACwsgIyAxICKVEMeFgIAAISMgCSEFA0AgBSIKIB1GDQEgCkEwaiEFIAtBuAFqIAoQ54KAgABFDQAgIyAKQQxqKgIAQwAAAAAgCkEIaigCAEEERhuUIiJDAAAAAF5FDQAgIiAKQRRqKgIAIApBIGoqAgAiJpKSIA0gDiAKEKeBgIAAQwrXIzySX0UNACAKICIgJpI4AiAgMSAikyExDAALCwsCQCAxQ703hjVeRQ0AIAtBkICAgAA2AuABQQAhDCAJIQogJCEFA0ACQCALQbgBaiAKEOeCgIAARQ0AQQAhBAJAIApBCGooAgBBfWpBHnciJUEHSw0AICVBAnQoApzJwIAAIQQLIAQgDGohDAsgCkEwaiEKIAVBf2oiBQ0ACwJAIAwNACALQY+AgIAANgLgAQtBACErA0AgKyAkSw0BIDFDCtcjPF8NASArICsgJE1qIStDAAAAgCEmIAkhCiAkIQUDQCAKQRRqKgIAIApBIGoqAgCSISMgCkEMaiIlKAIAIQxDAACAfyEiAkACQCAKQQhqIiooAgAiBEEfRg0AIARBF0cNASAMviEiDAELIA1BAXFFDQAgDiAMvpQhIgsCQCAjICJdRQ0AIAtBuAFqIAtB4AFqIAoQ6YKAgABFDQAgJiAlKgIAQwAAAAAgKigCAEEERhuSISYLIApBMGohCiAFQX9qIgUNAAsgJkMAAAAAWw0BQQAhCiAsIQUgLSEEA0AgACAKRg0OAkACQCALQdABaiAJIApqIgwQz4KAgABFDQAgC0G4AWogC0HgAWogDBDpgoCAAA0BCyAFQTBqIQUgBEFQaiEEIApBMGohCgwBCwsgC0HQAWogDBDUgoCAACEiAkAgDEEwaiAdRg0AIARBMG4hCgNAAkAgC0HQAWogBRDPgoCAAEUNACALQbgBaiALQeABaiAFEOmCgIAARQ0AIAtB0AFqIAUQ1IKAgAAiIyAiICK8IgRBH3VBAXYgBHMgI7wiBEEfdUEBdiAEc0obISILIAVBMGohBSAKQX9qIgoNAAsLICIgMSAmlRDHhYCAACEnIAkhBQNAIAUiCiAdRg0BIApBMGohBSALQbgBaiALQeABaiAKEOmCgIAARQ0AICcgCkEMaioCACIjQwAAAAAgCkEIaigCACIEQQRGG5QiIkMAAAAAXkUNACAiIApBFGoqAgAgCkEgaioCACIpkpIhKAJAAkAgBEEfRg0AQwAAgH8hJiAEQRdHDQEgIyEmDAELIA4gI5RDAACAfyANQQFxGyEmCyAoICZDCtcjPJJfRQ0AIAogIiApkjgCICAxICKTITEMAAsLCyAJQSBqIQkDQCAARQ0VAkAgCSoCACIiIAlBBGoiCioCAF5FDQAgCiAiOAIACyAJQQA2AgAgAEFQaiEAIAlBMGohCQwACwtB7LjAgAAQz4CAgAAAC0HsuMCAABDPgICAAAALQey4wIAAEM+AgIAAAAtB7LjAgAAQz4CAgAAAC0HsuMCAABDPgICAAAALQey4wIAAEM+AgIAAAAtB7LjAgAAQz4CAgAAAC0HsuMCAABDPgICAAAALQey4wIAAEM+AgIAAAAtB7LjAgAAQz4CAgAAAC0HsuMCAABDPgICAAAALQey4wIAAEM+AgIAAAAsgC0GPgICAADYC4AELIAlBIGohCQNAIAxFDQcCQCAJKgIAIiIgCUEEaiIKKgIAXkUNACAKICI4AgALIAlBADYCACAMQVBqIQwgCUEwaiEJDAALCyALQY+AgIAANgLgAQsgCUEgaiEJA0AgDEUNBQJAIAkqAgAiIiAJQQRqIgoqAgBeRQ0AIAogIjgCAAsgCUEANgIAIAxBUGohDCAJQTBqIQkMAAsLIAtBj4CAgAA2AuABCyAJQSBqIQkDQCAMRQ0DAkAgCSoCACIiIAlBBGoiCioCAF5FDQAgCiAiOAIACyAJQQA2AgAgDEFQaiEMIAlBMGohCQwACwsgC0GPgICAADYC4AELIAlBIGohCQNAIAxFDQECQCAJKgIAIiIgCUEEaiIKKgIAXkUNACAKICI4AgALIAlBADYCACAMQVBqIQwgCUEwaiEJDAALCwtBAEEAQfy4wIAAENCAgIAAAAtBACEJIB4hAAwACwsaACACKgIUIAIqAiCSIAIgACABEKiBgIAAXQsaACACIAAgARCogYCAACACKgIUkyACKgIgkws/AQJ/AkACQCABwSICQQAgAC8BACIDa8FIDQAgAiAALwEEIAAvAQJqwUwNAQsgARDOgoCAAAALIAMgAWpBAXQLhAEBAX8jgICAgABBIGsiASSAgICAAAJAIADBQQBKDQAgAUEANgIYIAFBATYCDCABQdydyYAANgIIIAFCBDcCECABQQhqQeSdyYAAEOeAgIAAAAsgAUEANgIYIAFBATYCDCABQcCeyYAANgIIIAFCBDcCECABQQhqQcieyYAAEOeAgIAAAAtlAgF/A30gAUEMaigCACECIAEqAiAhAyABKgIUIQRDAACAfyEFAkACQCABQQhqKAIAIgFBH0YNACABQRdHDQEgAr4hBQwBCyAAKAIAQQFHDQAgACoCBCACvpQhBQsgBCADkiAFXQtZAwF/AX0BfyABKAIMIQJDAACAfyEDAkACQCABKAIIIgRBH0YNACAEQRdHDQEgAr4hAwwBCyAAKAIAQQFHDQAgACoCBCACvpQhAwsgAyABKgIUkyABKgIgkwsjACAAKAIAIABBBGoqAgAgARCngYCAACABKgIUkyABKgIgkwtyAgF/BH0gAkEMaigCACEDIAIqAiAhBCACKgIUIQUgAioCGCEGQwAAgH8hBwJAAkAgAkEIaigCACICQR9GDQAgAkEXRw0BIAO+IQcMAQsgAEEBcUUNACABIAO+lCEHCyAFIAYgBkMAAIB/WxsgBJIgB10LZAMBfwF9AX8gAigCDCEDQwAAgH8hBAJAAkAgAigCCCIFQR9GDQAgBUEXRw0BIAO+IQQMAQsgAEEBcUUNACABIAO+lCEECyAEIAIqAhQgAioCGCIBIAFDAACAf1sbkyACKgIgkwtoAwF/AX0BfyABKAIMIQJDAACAfyEDAkACQCABKAIIIgRBH0YNACAEQRdHDQEgAr4hAwwBCyAAKAIAQQFHDQAgACoCBCACvpQhAwsgAyABKgIUkyABKgIgkyACvkMAAAAAIARBBEYblQsjACABKgIUIAEqAiCSIAAoAgAgAEEEaioCACABEKeBgIAAXQs3ACAAKAIAIABBBGoqAgAgARCngYCAACABKgIUkyABKgIgkyABKgIMQwAAAAAgASgCCEEERhuVCycAQwAAgH8gACoCFJMgACoCIJMgACoCDEMAAAAAIAAoAghBBEYblQsnACAAKgIYIAAqAhSTIAAqAiCTIAAqAgxDAAAAACAAKAIIQQRGG5ULhAYIAn8BfQF/AX0CfwJ9A38CfSOAgICAAEEgayIKJICAgIAAAkACQCABKAJAIgtBAkYNACAAIAs2AgAgACABKQJENwIEIABBDGogAUHMAGooAgA2AgAMAQsgByoCDCEMIAcoAgghDSAHKgIEIQ4gBygCACEPIApBGGogASACEMWCgIAAAkACQAJAIAooAhwiByAKKAIYIgtJDQAgByAESw0AIAFBwABqIRAgDCAOIAIbIREgB0EwbCALQTBsIgdrIQQgAyAHaiEHQwAAAIAhEiANIA8gAhsiE0EBcSEUA0ACQCAEDQBBASEDDAMLIAcoAgQhFUEAIQMCQAJAAkACQCAHKAIADgMAAgEHCwJAIBQNAAwHCyAVIBEQpoGAgAAhFgwCCwJAIBRFDQAgESAVvpQhFgwCC0EAIQMMBAsgFb4hFgsgBygCDCEVAkACQAJAAkAgBygCCA4DAgABBwsgFb4hF0EBIQsMAgsgESAVvpQhFyATIQsMAQsgFEUNBEEBIQsgFSAREKaBgIAAIRcLQQAhAwJAIAtBAXENAAwDCyAWIBdcDQIgBEFQaiEEIBIgByoCFJIhEiAHQTBqIQcMAAsLIAsgByAEQdi+wIAAEJyAgIAAAAsgErwhCwsgCkEQaiABIAJBAXMQxYKAgAACQAJAIAooAhQiByAKKAIQIgRJDQAgByAGTQ0BCyAEIAcgBkHovsCAABCcgICAAAALIA4gDCACGyEWIA8gDSACGyEVIAdBMGwgBEEwbCIHayEEIAUgB2ohB0MAAACAIRJBASEUA0ACQAJAIARFDQAgCkEIaiAHIBUgFiAIIAkRg4CAgACAgICAACAKKAIIQQFxDQFBACEUCyAAIBQgAyACGzYCACAAIBK8IgcgCyACGzYCBCAAQQhqIgQgAyAUIAIbNgIAIAAgCyAHIAIbNgIMIBAgACkCADcCACAQQQhqIAQpAgA3AgAMAgsgBEFQaiEEIBIgCioCDCAHKgIckpIhEiAHQTBqIQcMAAsLIApBIGokgICAgAALzQECBn8BfSOAgICAAEEgayIBJICAgIAAIAAoAgghAiAAKAIEIgMtAAAhBCAAKAIAIQUgAUEIaiAAKAIMIgZBCGopAgA3AwAgASAGKQIANwMAIAFBEGpBCGogACgCECIAQQhqKQIANwMAIAEgACkCADcDECAFQRBqIQAgBSAEIAIgASABQRBqEIGDgIAAIQcCQAJAIAMtAABBAUcNACAFQQE2AhhBDCEFDAELIABBATYCAEEEIQULIAAgBWogBzgCACABQSBqJICAgIAAIAcLpBAIBX8BfQF/AX0CfwF9CX8JfSOAgICAAEHwAGsiASSAgICAACAAKAIQIQIgACgCDCEDIAAoAgQhBCAAKAIYIgUqAgwhBiAFKAIIIQcgBSoCBCEIIAUoAgAhCSAAKAIUIgoqAgwhCyAKKAIIIQwgACgCCCINLQAAIQ4gACgCACIAKAKkASEPIAAoAqABIRAgACgCnAEhESAAKAKYASESIAAoApQBIRMgACgCkAEhFCAAKAKIASAAKAKMASAKKAIAIgUgCioCBCIVEImAgIAAIRYgFCATIAUgFRCJgICAACEXIBIgESAFIBUQiYCAgAAhGCAQIA8gBSAVEImAgIAAIRkgACgCxAEhCiAAKALAASEPIAAoArwBIRAgACgCuAEhESAAKAK0ASESIAAoArABIRMgACgCqAEgACgCrAEgBSAVEImAgIAAIRogEyASIAUgFRCJgICAACEbIBEgECAFIBUQiYCAgAAhHCAPIAogBSAVEImAgIAAIR0CQAJAIAAtAI0CDQBDAAAAACEWQwAAAAAhFwwBCyAWIBqSIBcgG5KSIRYgGCAckiAZIB2SkiEXCyAAKAJkIQ8gACgCYCEQIAFBMGogACgCWCAAKAJcIAUgFRCKgICAACABKgI0IRggASgCMCEKIAFBKGogECAPIAwgCxCKgICAACABKgIsIRkgASgCKCEPAkAgACgCAEEBRw0AIAAqAgQhGgJAAkAgCkEBcUUNAEEBIQogD0EBcQ0BIBggGpUhGQwBC0EBIQogD0EBcSEQQQAhDwJAIBANAEEAIQoMAgsgGSAalCEYC0EBIQ8LAkACQCAPIAogDkEBcSIQG0EBcUUNACAZIBeSIBggFpIgEBshFgwBCyAAKAJ0IQ8gACgCcCEQIAFBIGogACgCaCAAKAJsIAUgFRCLgICAACABKgIkIRggASgCICEKIAFBGGogECAPIAwgCxCLgICAACABKgIcIRkgASgCGCEPAkAgACgCAEEBRw0AIAAqAgQhGgJAAkAgCkEBcUUNAEEBIQogD0EBcQ0BIBggGpUhGQwBC0EBIQogD0EBcSEQQQAhDwJAIBANAEEAIQoMAgsgGSAalCEYC0EBIQ8LAkAgDyAKIA5BAXEiEBtBAXFFDQAgGSAXkiAYIBaSIBAbIRYMAQtDAAAAACEWIABBiQJBiAIgDkEBcSIKG2otAABBAUsNACABQRBqIAAgChDFgoCAAAJAAkAgASgCFCIKIAEoAhAiEEkNACAKIAJLDQAgAkEwbCEPIAogEGshEyADIQoCQANAIA8iEEUNASAQQVBqIQ8gCigCACERIApBMGohCiARQQNHDQALCyACQTBsIQ8gAyEKAkADQCAPIhFFDQEgEUFQaiEPIAooAgghEiAKQTBqIQogEkEERw0ACwtDAAAAACEWIBBFDQIgE0EBRiARRXJFDQIgAUE4akEIaiIKIAw2AgAgASAVOAI8IAEgBTYCOCABIAs4AkQgAUHIAGpBCGogCikCADcDACABIAEpAjg3A0ggASAOOgBbAkACQCAAQRhqIABBEGogDkEBcSIFGygCAEEBcUUNACAAQRxqIABBFGogBRsqAgAhFwwBCyABIAQ2AmQgASAANgJcIAEgAUE4ajYCbCABIAFByABqNgJoIAEgAUHbAGo2AmAgAUHcAGoQ2oKAgAAhFwsgAC0AjAJFDQEgAEHkAGogAEHcAGogDkEBcSIFGygCACEPQQAhCgJAAkACQAJAAkACQAJAIABB4ABqIABB2ABqIAUbKAIAIhAOBAIEAQYACyAQQTdHDQIMBQsgD75DAAAAAJQhFQwDCyAPQQN2QX9qQwAAAAAQgICAgAAhFQwCCyAQQXlqQR13QQZJDQJBuJnJgABBKEH0r8CAABCFgICAAAALIA++IRULQQEhCgsgAEGEAWogAEH8AGogBRsoAgAhDwJAAkACQAJAAkACQCAAQYABaiAAQfgAaiAFGygCAA4EAgQAAwELIA++QwAAAACUIRYMBAtBuJnJgABBKEGUsMCAABCFgICAAAALIA9BA3ZBf2pDAAAAABCAgICAACEWDAILIBcgFRDHhYCAACAXIAobIRcMAwsgD74hFgsgFyAVEMeFgIAAIBcgChsgFhDHhYCAACEXDAELIBAgCiACQfi+wIAAEJyAgIAAAAsgASAENgJcIAFBCGogACAOQQFxIgUQxYKAgAACQCABKAIMIg8gASgCCCIRSQ0AIA8gAksNACAGIAggBRshCyAPQTBsIgwgEUEwbCISayEKIAcgCSAOQQFxGyEQIAMgEmohBQJAAkADQCAKRQ0BAkACQAJAIAUoAggOAwECAAULIBANAQwECyAQQQFxRQ0DIAAgBSgCDCALEK+BgIAAGgsgBUEwaiEFIApBUGohCgwACwtDAAAAgCEVIBEgD0YNACADIBJqQQxqIQUgDCASa0EwbiEPQwAAAIAhFSAQQQFxIREDQCAFKAIAIRACQAJAAkACQAJAIAVBfGooAgAOAwADAQILIBFFDQEgAUHcAGogECALEK+BgIAAIRYMAwsgEUUNACALIBC+lCEWDAILQZygyYAAEM+AgIAAAAsgEL4hFgsgBUEwaiEFIBUgFpIhFSAPQX9qIg8NAAsLIBcgFyAVEMeFgIAAIAobIRYMAQsgESAPIAJBjKDJgAAQnICAgAAACyAAQSBqIQUCQAJAIA0tAABBAUcNACAAQQE2AihBDCEADAELIAVBATYCAEEEIQALIAUgAGogFjgCACABQfAAaiSAgICAACAWCz8BA38gACgCACEBIAAoAgQhAgJAA0AgASIDIAJGDQEgACADQTBqIgE2AgAgAygCAEF5akF3cQ0ACwsgAyACRwvMAwIHfwJ9I4CAgIAAQRBrIgkkgICAgAAgCUEIaiABIAIQxYKAgAACQCAJKAIMIgogCSgCCCILSQ0AIAogBEsNACAKQTBsIgwgC0EwbCINayECIAMgDWohBCAIKAIUIQ4gBUEBcSEPAkACQANAIAJFDQFBACEIAkACQAJAAkAgBCgCCCIBDgMCAwEACyABQRdGDQIgAUEfRg0ADAULIAUNAQwECyAPRQ0DIAcgBCgCDCAGIA4RhYCAgACAgICAABoLIARBMGohBCACQVBqIQIMAAsLAkAgCyAKRw0AQQEhCEMAAACAIRAMAQsgAyANakEMaiEEIAwgDWtBMG4hAkMAAACAIRAgBUEBcSEFA0AgBCgCACEBAkACQAJAAkACQAJAIARBfGooAgAiCA4DAgQBAAsgCEEXRg0DIAhBH0cNAgsgBUUNASAGIAG+lCERDAMLIAVFDQAgByABIAYgDhGFgICAAICAgIAAIREMAgtB/J/JgAAQz4CAgAAACyABviERCyAEQTBqIQQgECARkiEQIAJBf2oiAg0AC0EBIQgLIAAgEDgCBCAAIAg2AgAgCUEQaiSAgICAAA8LIAsgCiAEQeyfyYAAEJyAgIAAAAtJAQN/IAAoAgAhASAAKAIEIQICQANAIAEiAyACRg0BIAAgA0EwaiIBNgIAIANBCGooAgBBBEcNACADKAIAQQ9HDQALCyADIAJHC0kBA38gACgCACEBIAAoAgQhAgJAA0AgASIDIAJGDQEgACADQTBqIgE2AgAgA0EIaigCAEEERw0AIAMoAgBBA0cNAAsLIAMgAkcLTAEDfyAAKAIAIQEgACgCBCECAkADQCABIgMgAkYNASAAIANBMGoiATYCACADQQhqKAIAQQRHDQAgAygCAEF5akF3cQ0ACwsgAyACRws1AQF/QQAhAgJAIAEoAghBBEcNACABKAIAQXlqQXdxDQAgASAAEYSAgIAAgICAgAAhAgsgAgs3AQF/QQEhAgJAAkACQAJAIAEOAwEDAAILIABBAEchAgwCCyAAQQBHIQIMAQtBACECCyACQQFzC0wBAn8CQAJAIAFBfWpBHnciAkEHSw0AQQEhA0GpASACQf8BcXZBAXENAQtBACEDAkACQCABDgMBAgEACyABQR9HDQELIABFIQMLIAMLVQEDfyAAKAIAIQIgACgCBCEDAkADQCACIgQgA0YNASAAIARBMGoiAjYCACABKAIAIAFBBGoqAgAgBCgCACAEQQRqKAIAEOWCgIAARQ0ACwsgBCADRwtDAQF/QQEhBAJAAkACQAJAIAIOAwECAAMLIABFDwtBASEEIABBAXFFDQEgA0EDdkF/aiABEICAgIAAGgtBACEECyAEC0EBAX9BACEDAkAgACgCACAAQQRqKgIAIAIoAgAgAigCBBDlgoCAAEUNACACIAEoAgARhICAgACAgICAACEDCyADCzsBAX9BACECAkAgASgCCEEERw0AIAAoAgAiAigCACACQQRqKgIAIAEoAgAgASgCBBDlgoCAACECCyACCz8BA38gACgCACECIAAoAgQhAwJAA0AgAiIEIANGDQEgACAEQTBqIgI2AgAgASAEEOeCgIAARQ0ACwsgBCADRwsuAQF/QQAhAwJAIAAgAhDngoCAAEUNACACIAEoAgARhICAgACAgICAACEDCyADC6UCAwN/An4DfyOAgICAAEEwayIFJICAgIAAIAVBEGohBiABQf//A3EhB0EAIQECQAJAA0AgAUH//wNxIAdPDQEgBSACEIOAgIAAIAUoAgBFDQIgBSkCBCEIIAUpAgwhCSAGQgA3AgAgBkEIaiIKQgA3AgAg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BCEFCwNAIAYgBU8NASADIAVBf2oiBTYCAAwACwsLHAAgACABEMmDgIAAIABBEGogAUEQahDJg4CAAAtIAgF/AX4jgICAgABBEGsiAiSAgICAACACQQhqIAFBBEEUEKWDgIAAIAIpAwghAyAAQQA2AgggACADNwIAIAJBEGokgICAgAALzAYCFX8CfiOAgICAAEHgAGsiAySAgICAAAJAAkAgASAAKAIIIgRLDQAgACABNgIIIAQgAWshBCAAKAIEIAFBFGxqIQECQANAIARFDQEgBEF/aiEEIAEQuYGAgAAgAUEUaiEBDAALCyACELmBgIAADAELIANBGGpBEGoiBSACQRBqKAIANgIAIANBGGpBCGoiBiACQQhqKQIANwMAIAMgAikCADcDGCAAIAEgBGsiBxCihYCAACAGKAIAIANBGGpBAnIgBSgCACIEQQJLIgEbIQggACgCBCAAKAIIIglBFGxqIQogAygCHCAEIAEbIgtBBmwhDCADQcQAakEEaiENIANBxABqQQJyIQ4gA0HEAGpBEGohDyALQQNJIRBBASERAkADQCARIAdGDQEgA0EAOwFEIANBADYCVAJAAkAgEEUNAEGBgICAeCEEDAELIANBEGpBASALEKWFgIAAAkAgAygCEEEBcQ0AQQAhBAwBCyADQQhqIANBxABqIAMoAhQQpoWAgAAgAygCDCEBIAMoAgghBAsgBCABENqDgIAAAkACQCADKAJUIhJBA08NACASIQYgDiEEIA8hE0ECIRIMAQsgAygCSCEGIAMoAkwhBCANIRMLIBFBAWohESAEIAZBBmxqIRRBACEFIAwhAQJAA0AgCCAFaiEEAkAgBiASSQ0AIBMgBjYCAANAIAFFDQMgAyAELQAEOgBeIAMgBCgBADYBWiABQXpqIQEgBEEGaiEEIANBxABqIANB2gBqEKOFgIAADAALCwJAIAwgBUYNACAEQQJqLwEAIRUgBC8BACEWIBQgBWoiF0EEaiAEQQRqLQAAOgAAIBdBAmogFTsBACAXIBY7AQAgAUF6aiEBIAVBBmohBSAGQQFqIQYMAQsLIBMgBjYCAAsgA0EwakEIaiADQcQAakEIaikCACIYNwMAIANBMGpBEGogA0HEAGpBEGooAgAiBDYCACADIAMpAkQiGTcDMCAKQRBqIAQ2AgAgCkEIaiAYNwIAIAogGTcCACAKQRRqIQoMAAsLIAogAikCADcCACAAIAkgB2o2AgggCkEQaiACQRBqKAIANgIAIApBCGogAkEIaikCADcCAAsgA0HgAGokgICAgAALYQECfyABKAIAIgNBOGooAgAgA0E8aigCACACQiCIp0EBciACp0HMocCAABC5goCAACIDKAIIIQQgAygCBCEDIAAgATYCDCAAQQA2AgggACADNgIAIAAgAyAEQQN0ajYCBAs9ACAAIAFBJGooAgAgAUEoaigCACADQiCIp0EBciADp0HUosCAABCIgICAADYCDCAAIAM3AwAgACACNgIIC5UDBAJ/AX4Cfwh+I4CAgIAAQfAAayIDJICAgIAAIAIoAgghBCACKQMAIQUgASgCACEGIANBKGogAigCDCICQYABahD4goCAACADQdAAaiAGQSBqIAYvAWQgA0EoahCFg4CAACADQSBqIAEvAQQiByADLwFQIAMvAVIQmYOAgAAgAzMBICEIIAMzASIhCSADQRhqIAcgAy8BVCADLwFWEJmDgIAAIAMzARohCiADMwEYIQsgA0HQAGogAkHgAGoQ+IKAgAAgA0HIAGogBiAGLwFmIANB0ABqEIWDgIAAIANBEGogAS8BBiIGIAMvAUggAy8BShCZg4CAACADMwEQIQwgAzMBEiENIANBCGogBiADLwFMIAMvAU4QmYOAgAAgAzMBCiEOIAMzAQghDyADQdAAahDOgYCAACADQShqEM6BgIAAIAAgBTcDECAAIAQ2AhggACACNgIcIAAgDCAOQjCGIA9CIIaEIA1CEIaEhDcDCCAAIAggCkIwhiALQiCGhCAJQhCGhIQ3AwAgA0HwAGokgICAgAALjwIBBH8jgICAgABBIGsiAiSAgICAACABLwEGIQMgAS8BBCEEIAEvAQIhBQJAAkACQAJAAkACQAJAAkAgAS8BAA4DAQAFAQsgBA4DAQMCAQsgBEEBRw0EIANBf2ohBQwFCyAFQQFqIQMMBAsgAyAFaiEDDAMLAkAgA0H//wNxIAVB//8DcUYNACADwSIBIAXBIgUgASAFShshAyABIAUgASAFSBshBQwDCyAFQQFqIQMMAgsgBEEBRw0AIAMgBWshBQwBCyACQQA2AhggAkEBNgIMIAJBoJvJgAA2AgggAkIENwIQIAJBCGpBqJvJgAAQ54CAgAAACyAAIAM7AQIg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QQJ0ajUCACEFCyAFQoCAfiAFQoCAflUbIgVC//8BIAVC//8BUxunCxAAIAAgAzYCBCAAIAI2AgALhQEBBH8CQAJAIAMNAEEAIQEMAQsgASgCACgCACEEQQAhBSADIQECQANAIAFBAkkNASAFIAFBAXYiBiAFaiIHIAIgB0ECdGooAgAgBEsbIQUgASAGayEBDAALCyAFIAIgBUECdGooAgAgBE1qIQELIAAgAyABazYCBCAAIAIgAUECdGo2AgALeAEDfwJAAkAgAw0AQQAhAwwBCyABKAIAKAIAIQRBACEBAkADQCADQQJJDQEgA0EBdiIFIAFqIgYgASACIAZBAnRqKAIAIARJGyEBIAMgBWshAwwACwsgASACIAFBAnRqKAIAIARJaiEDCyAAIAM2AgQgACACNgIAC9cMDwF/AX0CfwF9AX8BfQF/An0BfwJ9B38JfQN/AX0BfyOAgICAAEGAAWsiAySAgICAACACKgIEIQQgAigCACEFIAEoAsgBIgYgASgCzAEQjoGAgAAhByABKALQASIIIAEoAtQBEI6BgIAAIQkgASgC2AEiCiABKALcASAFIAQQjoCAgAAhCyABKgLwASEMIAEoAuABIg0gASgC5AEgBSAEEI6AgIAAIQ4gASoCBCEPIAEoAgAhECABKAKkASERIAEoAqABIRIgASgCnAEhEyABKAKYASEUIAEoApQBIRUgASgCkAEhFiABKAKIASABKAKMASAFIAQQiYCAgAAhFyAWIBUgBSAEEImAgIAAIRggFCATIAUgBBCJgICAACEZIBIgESAFIAQQiYCAgAAhGiABKALEASERIAEoAsABIRIgASgCvAEhEyABKAK4ASEUIAEoArQBIRUgASgCsAEhFiABKAKoASABKAKsASAFIAQQiYCAgAAhGyAWIBUgBSAEEImAgIAAIRwgFCATIAUgBBCJgICAACEdIBIgESAFIAQQiYCAgAAhHiABLQCNAiEUIAIqAgwhHyACKAIIIREgASgCZCEgIAEoAmAhFSADQTBqIAEoAlgiISABKAJcIiIgBSAEEIqAgIAAIAMqAjQhIyADKAIwIRIgA0EoaiAVICAgESAfEIqAgIAAIBcgG5IgGCAckpIhFyAZIB2SIBogHpKSIRogAyoCLCEZIAMoAighEwJAIBBBAUcNAAJAAkAgEkEBcUUNAEEBIRIgE0EBcQ0BICMgD5UhGQwBC0EBIRIgE0EBcSEWQQAhEwJAIBYNAEEAIRIMAgsgDyAZlCEjC0EBIRMLIBdDAAAAACAUGyEYIBpDAAAAACAUGyEXIAsgDJIhGiABKAJ0IRQgASgCcCEWIANBIGogASgCaCABKAJsIAUgBBCLgICAACADKgIkIQsgAygCICEkIANBGGogFiAUIBEgHxCLgICAACADKgIcIQwgAygCGCEUAkACQCAQDQAgJCEWDAELQQEhFgJAAkAgJEEBcUUNACAUQQFxDQEgCyAPlSEMDAELIBRBAXEhFEEAIRYCQCAUDQBBACEUDAILIA8gDJQhC0EBIRYLQQEhFAsgGiAOkiEOIAcgCZIhByADIBQ2AkAgAyAWNgI4IAMgDCAXkjgCRCADIAsgGJI4AjwgASgCgAEhFCABKAKEASEWIANBEGogASgCeCABKAJ8IAUgBBCLgICAACADKgIUIQsgAygCECEkIANBCGogFCAWIBEgHxCLgICAACADKgIMIQwgAygCCCEUAkACQCAQDQAgJCEWDAELQQEhFgJAAkAgJEEBcUUNACAUQQFxDQEgCyAPlSEMDAELIBRBAXEhFEEAIRYCQCAUDQBBACEUDAILIA8gDJQhC0EBIRYLQQEhFAsgAyAUNgJQIAMgFjYCSCADIAwgF5I4AlQgAyALIBiSOAJMIANB2ABqIAIgByAOEJGBgIAAQQEhAgJAAkAgEkEBcUUNACAjIBiSIRgMAQsCQAJAICFBeWpBHXdBBkkNAEEAIQIgBkEDRg0BIAhBA0YNASABLQCHAkEIRw0BIAEtAIYCQf8BcQ0CIAMqAlwhGCADKAJYIQIMAgsgA0H4AGogISAiIAMoAlggAyoCXCAFIAQQlIOAgAAgAygCeEEDRiECIAMqAnwhGAwBCwsgGSAXkiEEAkACQAJAAkACQAJAAkAgEEUNAAJAIAJFDQBBASESIBNBAXFFDQMMBQtBASESIBNBAXFFDQEgDyAElCEYDAQLQQEhBSATQQFxDQQLAkACQAJAIBVBeWpBHXdBBkkNAEEAIQUgCkEDRg0BIA1BA0YNASABLQCFAkEIRw0BIAEtAIQCQf8BcQ0CIAMqAmQhBCADKAJgIQUMAgsgA0H4AGogFSAgIAMoAmAgAyoCZCARIB8QlIOAgAAgAygCeEEDRiEFIAMqAnwhBAwBCwsgEEUNAyACRQ0BQQEhEiAFDQILIBggD5UhBAwBC0EAIRICQCAFDQBBACEFDAMLIA8gBJQhGEEBIRILQQEhBQwBCyACIRILIAMgBDgCdCADIAU2AnAgAyAYOAJsIAMgEjYCaCAAIANB6ABqIANBOGogA0HIAGoQj4GAgAAgA0GAAWokgICAgAALuAEAAkACQAJAAkACQAJAAkAgAUF5akEddw4GAQIDBAUGAAsgAEEENgIADwsgAEEBNgIADwsgAEECNgIADwsgACACNgIEIABBADYCAA8LQQQhAQJAIAVBAXFFDQAgACAGIAK+lDgCBEEAIQELIAAgATYCAA8LQQQhAQJAIANBAXFFDQAgACAEOAIEQQAhAQsgACABNgIADwtBBCEBAkAgA0EBcUUNACAAIAQ4AgRBAyEBCyAAIAE2AgALggQFA38BfQF/BX0IfyOAgICAAEEgayIEJICAgIAAIAEoAmAhBQJAAkAgASgCWCIGQXlqQR13QQZJDQAgBUF5akEdd0EGSQ0AIAAgAykCADcCACAAQQhqIANBCGopAgA3AgAMAQsgAioCBCEHIAIoAgAhCCABKALIASABKALMARCOgYCAACEJIAEoAtABIAEoAtQBEI6BgIAAIQogASgC2AEgASgC3AEgCCAHEI6AgIAAIQsgASoC8AEhDCABKALgASABKALkASAIIAcQjoCAgAAhDSADKAIMIQ4gAygCCCEPIAMoAgQhECADKAIAIREgBEGAAjsBFCANIAsgDJKSIQsgCSAKkiEJIAIqAgwhCiACKAIIIRIgASgCZCETIAEoAlwhFEEAIQEDQAJAAkAgAUECRg0AIARBDGogAWohAyABQQFqIgIhASAFIAYgA0EIai0AACIDGyIVQXlqQR13QQZPDQIgBEEYaiAVIBMgFCADGyASIAggAxsiASAKIAcgAxsiDCALIAkgAxuTIAEgDBCUg4CAACAEKAIYIgFBfWpBAU0NASARIAEgAxshESABIA8gAxshDyAEKAIcIgEgDiADGyEOIBAgASADGyEQDAELIAAgDjYCDCAAIA82AgggACAQNgIEIAAgETYCAAwCCyACIQEMAAsLIARBIGokgICAgAALrQECAn8BfSOAgICAAEEgayIEJICAgIAAQQAhBQJAAkACQAJAAkAgAg4EAwABBAILIAO+IQZBASEFDAML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IA82AgAgCkEMaiAONgIAIApBCGogDTYCACAKQQRqIAw2AgAgCUF/aiEJIAZBHGohBgwACwsgACACNgIIIAAgBzYCBCAAIAg2AgAgA0EwaiSAgICAAAuiEAcBfwJ9LX8BfRl/AX0PfyOAgICAAEGQAWsiAiSAgICAACABKgLwAiEDIAEqAuwCIQQgASgC6AIhBSABKALkAiEGIAEtAIgDIQcgAS0AiwMhCCABLQCKAyEJIAEoAuACIQogASgC3AIhCyABKALYAiEMIAEoAtQCIQ0gAS0A/wIhDiABLQD+AiEPIAEtAP0CIRAgAS0A/AIhESABLQD7AiESIAEtAPoCIRMgAS0A+QIhFCABLQD4AiEVIAEtAPcCIRYgAS0A9gIhFyABLQD1AiEYIAEtAPQCIRkgASgC0AIhGiABKALMAiEbIAEoAsgCIRwgASgCxAIhHSABKALAAiEeIAEoArwCIR8gASgCuAIhICABKAK0AiEhIAEoArACISIgASgCrAIhIyABKAKoAiEkIAEoAqQCISUgASgCoAIhJiABKAKcAiEnIAEoApgCISggASgClAIhKSABKAKQAiEqIAEoAowCISsgASgCiAIhLCABKAKEAiEtIAEoAoACIS4gASgC/AEhLyABKAL4ASEwIAEoAvQBITEgASoCBCEyIAEoAgAhMyABKALwASE0IAEoAuwBITUgASgC6AEhNiABKALkASE3IAEoAuABITggASgC3AEhOSABKALYASE6IAEoAtQBITsgASgC0AEhPCABKALMASE9IAEoAsgBIT4gASgCxAEhPyABKALAASFAIAEoArwBIUEgASgCuAEhQiABKAK0ASFDIAEoArABIUQgASgCrAEhRSABKAKoASFGIAEoAqQBIUcgAS0AhgMhSCABLQCJAyFJIAEtAIcDIUogAS0AjgMhSyABKgKgASFMIAEtAIEDIU0gAS0AgAMhTiABLQCFAyFPIAEtAIQDIVAgAS0AgwMhUSABLQCCAyFSIAEtAI0DIVMgAkEIaiABKAIMIAEoAhAQxoOAgAAgAkEUaiABKAIYIAEoAhwQxoOAgAAgAkEgaiABKAIkIAEoAigQxIOAgAAgAkEsaiABKAIwIAEoAjQQxIOAgABBgICAgHghVCABLQCMAyFVAkACQCABKAJQQYCAgIB4Rw0ADAELIAEoAlQhViACIAEoAlgiV0EEQRQQmICAgAAgAigCACJUIFdB/////wNxIlggVCBYSRshWUEAIVggAigCBCFaAkADQCBZRQ0BIAJB8ABqIFYgWGoQ84KAgAAgWiBYaiJbQRBqIAJB8ABqQRBqKAIANgIAIFtBCGogAkHwAGpBCGopAgA3AgAgWyACKQJwNwIAIFlBf2ohWSBYQRRqIVgMAAsLIAEvAV4hWSABLwFcIVgLIAJBOGogASgCPCABKAJAEMWDgIAAIAJBxABqIAEoAkggASgCTBDFg4CAACACQdAAaiABQeAAahD4goCAACACQfAAaiABQYABahD4goCAACAAIE86AIUDIAAgUDoAhAMgACBROgCDAyAAIFI6AIIDIAAgUzoAjQMgACBNOgCBAyAAIE46AIADIAAgSzoAjgMgACBMOAKgASAAIEk6AIkDIAAgSjoAhwMgACBIOgCGAyAAIDQ2AvABIAAgNTYC7AEgACA2NgLoASAAIDc2AuQBIAAgODYC4AEgACA5NgLcASAAIDo2AtgBIAAgOzYC1AEgACA8NgLQASAAID02AswBIAAgPjYCyAEgACA/NgLEASAAIEA2AsABIAAgQTYCvAEgACBCNgK4ASAAIEM2ArQBIAAgRDYCsAEgACBFNgKsASAAIEY2AqgBIAAgRzYCpAEgACAOOgD/AiAAIA86AP4CIAAgEDoA/QIgACAROgD8AiAAIBI6APsCIAAgEzoA+gIgACAUOgD5AiAAIBU6APgCIAAgFjoA9wIgACAXOgD2AiAAIBg6APUCIAAgGToA9AIgACAaNgLQAiAAIBs2AswCIAAgHDYCyAIgACAdNgLEAiAAIB42AsACIAAgHzYCvAIgACAgNgK4AiAAICE2ArQCIAAgIjYCsAIgACAjNgKsAiAAICQ2AqgCIAAgJTYCpAIgACAmNgKgAiAAICc2ApwCIAAgKDYCmAIgACApNgKUAiAAICo2ApACIAAgKzYCjAIgACAsNgKIAiAAIC02AoQCIAAgLjYCgAIgACAvNgL8ASAAIDA2AvgBIAAgMTYC9AEgACAyOAIEIAAgMzYCACAAIAg6AIsDIAAgCToAigMgACAKNgLgAiAAIAs2AtwCIAAgDDYC2AIgACANNgLUAiAAIAc6AIgDIAAgBjYC5AIgACAFNgLoAiAAIAQ4AuwCIAAgAzgC8AIgACACKQIINwIIIABBEGogAkEIakEIaigCADYCACAAQRxqIAJBFGpBCGooAgA2AgAgACACKQIUNwIUIABBKGogAkEgakEIaigCADYCACAAIAIpAiA3AiAgAEE0aiACQSxqQQhqKAIANgIAIAAgAikCLDcCLCAAIFU6AIwDIAAgWTsBXiAAIFg7AVwgACBXNgJYIAAgWjYCVCAAIFQ2AlAgAEHAAGogAkE4akEIaigCADYCACAAIAIpAjg3AjggAEHMAGogAkHEAGpBCGooAgA2AgAgACACKQJENwJEIABB+ABqIAJB0ABqQRhqKQIANwIAIABB8ABqIAJB0ABqQRBqKQIANwIAIABB6ABqIAJB0ABqQQhqKQIANwIAIAAgAikCUDcCYCAAQZgBaiACQfAAakEYaikCADcCACAAQZABaiACQfAAakEQaikCADcCACAAQYgBaiACQfAAakEIaikCADcCACAAIAIpAnA3AoABIAJBkAFqJICAgIAAC2YBBX4gACAAKQMYIgFCEIkgASAAKQMIfCIBhSICIAApAxAiAyAAKQMAfCIEQiCJfCIFNwMAIAAgAkIViSAFhTcDGCAAIAEgA0INiSAEhSICfCIBIAJCEYmFNwMQIAAgAUIgiTcDCAtCAQF/AkACQAJAIAEvAQAiAg4FAgEAAQACCyAAQQRqIAEoAgggASgCDBDxgoCAAAsgACABLwECOwECCyAAIAI7AQALTgEBfyOAgICAAEEQayICJICAgIAAIAIgADYCDCABQcSKyYAAQQ9B04rJgABBBCACQQxqQZqAgIAAEMODgIAAIQAgAkEQaiSAgICAACAACzcAIAEoAgAgACgCAC0AAEECdCIAKALkuMmAACAAKALMuMmAACABKAIEKAIMEYKAgIAAgICAgAALxgMBA38jgICAgABBEGsiAiSAgICAAAJAAkACQAJAAkAgACgCAA4EAAECAwALIAIgAEEIajYCBCABKAIAQcDDwIAAQRUgASgCBCgCDBGCgICAAICAgIAAIQMgAkEAOgANIAIgAzoADCACIAE2AgggAkEIakHVw8CAAEEGIABBEGpBm4CAgAAQzYOAgABB28PAgABBCyAAQQRqQZiAgIAAEM2DgIAAQebDwIAAQQsgAkEEakGcgICAABDNg4CAACEEIAItAA0iASACLQAMIgNyIQAgAUEBRw0DIANBAXENAwJAIAQoAgAiAC0ACkGAAXENACAAKAIAQdHxyIAAQQIgACgCBCgCDBGCgICAAICAgIAAIQAMBAsgACgCAEHQ8ciAAEEBIAAoAgQoAgwRgoCAgACAgICAACEADAMLIAIgAEEIajYCCCABQfHDwIAAQREgAkEIakGdgICAABC/g4CAACEADAILIAIgAEEIajYCCCABQYLEwIAAQRAgAkEIakGdgICAABC/g4CAACEADAELIAIgAEEIajYCCCABQZLEwIAAQRAgAkEIakGdgICAABC/g4CAACEACyACQRBqJICAgIAAIABBAXELqQMBBH8jgICAgABBIGsiBSSAgICAAEEBIQYCQCAALQAEDQAgAC0ABSEHAkAgACgCACIILQAKQYABcQ0AQQEhBiAIKAIAQanxyIAAQcjxyIAAIAdBAXEiBxtBAkEDIAcbIAgoAgQoAgwRgoCAgACAgICAAA0BIAgoAgAgASACIAgoAgQoAgwRgoCAgACAgICAAA0BIAgoAgBBy/HIgABBAiAIKAIEKAIMEYKAgIAAgICAgAANASADIAggBBGBgICAAICAgIAAIQYMAQtBASEGAkAgB0EBcQ0AIAgoAgBBzfHIgABBAyAIKAIEKAIMEYKAgIAAgICAgAANAQtBASEGIAVBAToADyAFQbDxyIAANgIUIAUgCCkCADcCACAFIAgpAgg3AhggBSAFQQ9qNgIIIAUgBTYCECAFIAEgAhDihICAAA0AIAVBy/HIgABBAhDihICAAA0AIAMgBUEQaiAEEYGAgIAAgICAgAANACAFKAIQQavxyIAAQQIgBSgCFCgCDBGCgICAAICAgIAAIQYLIABBAToABSAAIAY6AAQgBUEgaiSAgICAACAAC1ABAX8gACgCACEAAkAgASgCCCICQYCAgBBxDQACQCACQYCAgCBxDQAgACABEKOBgIAADwsgACgCACABEKSBgIAADwsgACgCACABEKWBgIAAC0kBAX8jgICAgABBEGsiAiSAgICAACACIAAoAgA2AgwgAUGIosmAAEEGIAJBDGpBloCAgAAQv4OAgAAhACACQRBqJICAgIAAIAAL0QEBA38CQAJAIAEoAgwiAyABKAIIIgRPDQAgASABKAIEIANBqAdsaiIEKAIANgIMIAQoAqAHIQUCQEGgB0UNACAEIAJBoAf8CgAACyAEIAVBAXIiAjYCoAcMAQsCQCAEIAEoAgBHDQAgARDRg4CAAAsgASgCBCAEQagHbGohAwJAQaAHRQ0AIAMgAkGgB/wKAAALQQEhAiABIARBAWoiBTYCDCABIAU2AgggA0EBNgKgByAEIQMLIAEgASgCEEEBajYCECAAIAM2AgQgACACNgIAC1oBAX8jgICAgABBEGsiASSAgICAACABQQhqIAAgACgCAEEBQQhBqAcQq4KAgAACQCABKAIIIgBBgYCAgHhGDQAgACABKAIMEKyCgIAAAAsgAUEQaiSAgICAAAuUAQECfwJAAkAgACgCDCIBIAAoAggiAk8NACAAIAAoAgQgAUEYbGoiAigCADYCDCACQgA3AwAgAiACKAIQQQFyNgIQDAELAkAgAiAAKAIARw0AIAAQ04OAgAALIAAgAkEBaiIBNgIMIAAgATYCCCAAKAIEIAJBGGxqIgJBATYCECACQgA3AwALIAAgACgCEEEBajYCEAtZAQF/I4CAgIAAQRBrIgEkgICAgAAgAUEIaiAAIAAoAgBBAUEIQRgQq4KAgAACQCABKAIIIgBBgYCAgHhGDQAgACABKAIMEKyCgIAAAAsgAUEQaiSAgICAAAu6AQECfwJAAkAgACgCDCICIAAoAggiA08NACAAIAAoAgQgAkEEdGoiAygCADYCDCADIAEpAgA3AgAgA0EIaiABQQhqKAIANgIAIAMgAygCDEEBcjYCDAwBCwJAIAMgACgCAEcNACAAEKmCgIAACyAAIANBAWoiAjYCDCAAIAI2AgggACgCBCADQQR0aiIDIAEpAgA3AgAgA0EBNgIMIANBCGogAUEIaigCADYCAAsgACAAKAIQQQFqNgIQCw0AIAAgARCVhYCAAAALiAEBBX8gAUECdCECAkACQAJAIAFB/////wNNDQBBASEBQQghA0EAIQRBBCEFDAELQQAhAUEEIQNBBEEAIAJB/f///wdJGyEGAkAgAkH8////B00NACAGIQJBASEBDAILQQghBSACIQQgBiECCyAAIAVqIAQ2AgALIAAgA2ogAjYCACAAIAE2AgALrgQBCH8jgICAgABBIGsiASSAgICAACAAKAIUIgIhAwJAAkACQAJAAkACQCACQQVJDQAgACgCBCIDQX9GDQELQX8gA2d2QQAgAxtBAWoiA0UNAEEEIQQCQAJAIAJBBEsNACAAQQRqIQUgAiEGDAELIAAoAgQhBiAAKAIIIQUgAiEECyADIAZJDQECQAJAAkACQCADQQVJDQBBgYCAgHghByADIARGDQEgAUEMaiADENaDgIAAIAEoAhAhByABKAIUIQggASgCDA0IIAJBBUkNAyABQQxqIAQQ1oOAgAAgASgCECECIAEoAhQhBCABKAIMRQ0CIAQhCCACIQcMCAtBgYCAgHghByACQQRNDQAgAEEANgIAAkAgBkECdCICRQ0AIABBBGogBSAC/AoAAAsgACAGNgIUIAFBDGogBBDWg4CAACABKAIMQQFGDQUgBSABKAIUIAEoAhAQwIOAgAALDAYLIAUgBCACIAgQ2IOAgAAiAkUNBQwECyAIIAcQ2YOAgAAiAkUNBCAGQQJ0IgdFDQMgAiAFIAf8CgAADAMLQeCZyYAAQRFBzKLJgAAQ5oCAgAAAC0HcosmAAEEgQfyiyYAAEIWAgIAAAAsgASABKQIQNwIYQZCyyYAAQSsgAUEYakG8ssCAAEGsosmAABCDgYCAAAALIAAgAzYCFCAAIAI2AgggACAGNgIEIABBATYCAEGBgICAeCEHCyAHIAgQ2oOAgAAgAUEgaiSAgICAAAu8BwEGfwJAAkACQAJAAkACQAJAAkACQAJAIABBfGoiBCgCACIFQXhxIgZBBEEIIAVBA3EiBxsgAWpJDQAgAUEnaiEIAkAgB0UNACAGIAhLDQILAkACQCACQQlJDQAgAiADEI6FgIAAIgINAUEADwtBACECIANBzP97Sw0KQRAgA0ELakF4cSADQQtJGyEBIABBeGohCAJAIAcNACABQYACSQ0JIAhFDQkgBiABTQ0JIAYgAWtBgIAITQ0IDAkLIAggBmohBwJAAkAgBiABTw0AIAdBACgCxL3JgABGDQECQCAHQQAoAsC9yYAARg0AIAcoAgQiBUECcQ0LIAVBeHEiCSAGaiIFIAFJDQsgByAJEJCFgIAAAkAgBSABayIHQRBJDQAgBCABIAQoAgBBAXFyQQJyNgIAIAggAWoiASAHQQNyNgIEIAggBWoiBSAFKAIEQQFyNgIEIAEgBxCRhYCAAAwKCyAEIAUgBCgCAEEBcXJBAnI2AgAgCCAFaiIBIAEoAgRBAXI2AgQMCQtBACgCuL3JgAAgBmoiByABSQ0KAkACQCAHIAFrIgZBD0sNACAEIAVBAXEgB3JBAnI2AgAgCCAHaiIBIAEoAgRBAXI2AgRBACEGQQAhAQwBCyAEIAEgBUEBcXJBAnI2AgAgCCABaiIBIAZBAXI2AgQgCCAHaiIHIAY2AgAgByAHKAIEQX5xNgIEC0EAIAE2AsC9yYAAQQAgBjYCuL3JgAAMCAsgBiABayIGQQ9NDQcgBCABIAVBAXFyQQJyNgIAIAggAWoiASAGQQNyNgIEIAcgBygCBEEBcjYCBCABIAYQkYWAgAAMBwtBACgCvL3JgAAgBmoiByABSw0FDAgLAkAgAyABIAMgAUkbIgNFDQAgAiAAIAP8CgAACyAEKAIAIgNBeHEiB0EEQQggA0EDcSIDGyABakkNAiADRQ0IIAcgCEsNAwwIC0G3mMmAAEEuQeiYyYAAEIWAgIAAAAtB+JjJgABBLkGomcmAABCFgICAAAALQbeYyYAAQS5B6JjJgAAQhYCAgAAAC0H4mMmAAEEuQaiZyYAAEIWAgIAAAAsgBCABIAVBAXFyQQJyNgIAIAggAWoiBSAHIAFrIgFBAXI2AgRBACABNgK8vcmAAEEAIAU2AsS9yYAACyAIRQ0BCyAADwsgAxCdgYCAACIBRQ0BAkAgA0F8QXggBCgCACICQQNxGyACQXhxaiICIAMgAkkbIgNFDQAgASAAIAP8CgAACyABIQILIAAQj4WAgAALIAILHwACQCABQQlJDQAgASAAEI6FgIAADwsgABCdgYCAAAsuAAJAAkAgAEGBgICAeEYNACAADQFB4JnJgABBEUG8osmAABCFgICAAAALDwsACzIAAkAgAyABTw0AIAAgA0EYbGoiAygCECACRw0AIAMPC0GMo8mAAEEYIAQQ1YOAgAAAC6ABAQN/I4CAgIAAQRBrIgEkgICAgAACQANAIAAoAhQiAiAAKAIQTw0BAkACQAJAAkAgABDJgICAAEH/AXEiA0F3ag4FAQIFAgIACyADQS9GDQIgA0EgRw0ECyAAIAJBAWo2AhQMAgsgABDKgICAAAwBCyAAQfePyYAAQQIQy4CAgABFDQEgAUEIaiAAEMyAgIAADAALCyABQRBqJICAgIAAC4IFAwp/AX4FfyAAKAIEQQFqIgRBA3YgBEEHcUEAR2ohBSAAKAIAIgYhBwNAAkAgBQ0AAkACQCAEQQhJDQAgBiAEaiAGKQAANwAADAELIARFDQAgBkEIaiAGIAT8CgAACyADQQFxIQggA0E8cSEJIANBAnYhCiADQQNxIQtBACEGA0ACQAJAIAYiByAETw0AIAcgByAESWohBiAAKAIAIgUgB2otAABBgAFHDQIgBSADIAdBf3NsaiIMIAlqIQ0DQCABIAAgByACEYeAgIAAgICAgAAhDiAAKAIEIQUgBSAHIAUgDqciD3EiEGsgACgCACIRIAUgDhDeg4CAACISIBBrc3FBCEkNAiARIBJqIhAtAAAhEyAQIA9BGXYiDzoAACAAKAIAIBJBeGogBXFqQQhqIA86AAAgESADIBJBf3NsaiEFAkAgE0H/AUcNACAAKAIEIREgACgCACAHakH/AToAACAAKAIAIBEgB0F4anFqQQhqQf8BOgAAIANFDQQgBSAMIAP8CgAADAQLIAwgBSAKEKCBgIAAIAtFDQAgBSAJaiERQQAhBQJAIAtBAUYNACANLwAAIQUgDSARLwAAOwAAIBEgBTsAAEECIQUgCEUNAQsgDSAFaiIPLQAAIRAgDyARIAVqIgUtAAA6AAAgBSAQOgAADAALCyAAIAAoAgQiByAHQQFqQQN2QQdsIAdBCEkbIAAoAgxrNgIIDwsgESAHaiAPQRl2IhE6AAAgACgCACAFIAdBeGpxakEIaiAROgAADAALCyAHIAcpAwAiDkJ/hUIHiEKBgoSIkKDAgAGDIA5C//79+/fv37//AIR8NwMAIAdBCGohByAFQX9qIQUMAAsLewECfyABIAKncSEDQQghBAJAA0AgACADaikAAEKAgYKEiJCgwIB/gyICQgBSDQEgAyAEaiABcSEDIARBCGohBAwACwsCQCAAIAMgAnqnQQN2aiABcSIDaiwAAEEASA0AIAApAwBCgIGChIiQoMCAf4N6p0EDdiEDCyADC8ECAwF/AX4CfyOAgICAAEEQayIDJICAgIAAAkACQCACDQAgAEEIakEAKQPYsMCAADcCACAAQQApA9CwwIAANwIADAELAkACQAJAAkAgAkEPSQ0AIAJB/////wFLDQJBfyACQQN0QQduQX9qZ3ZBAWohAgwBC0EEIAJBCHFBCGogAkEESRshAgsgAa0gAq1+IgRCIIinDQAgBKciAUF4Sw0AIAJBCGoiBSABQQdqQXhxIgZqIgEgBUkNACABQfj///8HSw0AIANBCGpBCCABEOCDgIAAIAMoAggiAUUNASABIAZqIQECQCACQQhqIgVFDQAgAUH/ASAF/AsACyAAQQA2AgwgACACQX9qIgU2AgQgACABNgIAIAAgBSACQQN2QQdsIAJBCUkbNgIIDAILEOGDgIAACwALIANBEGokgICAgAALJAACQCACRQ0AIAIgARDZg4CAACEBCyAAIAI2AgQgACABNgIAC0cBAX8jgICAgABBIGsiACSAgICAACAAQQA2AhggAEEBNgIMIABB8JDJgAA2AgggAEIENwIQIABBCGpB+JDJgAAQ54CAgAAACzgAIAAoAgAoAgAiACkDACAAQQhqKQMAIAEoAgAgAkEFdGsiAkFkaigCACACQWhqKAIAENuBgIAACzsAIAAoAgAoAgAiACkDACAAQQhqKQMAIAEoAgBBACACa0EkbGoiAEFgaigCACAAQWRqKAIAENuBgIAAC4YEAwZ/AX4DfyOAgICAAEHAAGsiAiSAgICAACACIAE2AgwgACgCDCEDIAIgAkEMajYCEAJAIANBAWoiAUUNAAJAAkACQCABIAAoAgQiBCAEQQFqQQN2QQdsIARBCEkbIgRBAXZNDQAgAkEwakEMIARBAWoiBCABIAQgAUsbEN+DgIAAIAIoAjQhBSACKAIwIgZFDQIgAigCOCEHIAIgAigCPDYCLCACIAc2AiggAiAFNgIkIAIgBjYCICACQoyAgICAATcCGCACIABBEGo2AhQgACgCACIEKQMAQn+FQoCBgoSIkKDAgH+DIQggAkEUakEMaiEJQQAhAQJAA0AgA0UNAQJAA0AgCEIAUg0BIAFBCGohASAEQQhqIgQpAwBCf4VCgIGChIiQoMCAf4MhCAwACwsgAiAGIAUgAkEQaiAAIAh6p0EDdiABaiIKEOWDgIAAEI2DgIAAIAYgAigCAEF/c0EMbGoiCyAAKAIAIApBf3NBDGxqIgopAAA3AAAgC0EIaiAKQQhqKAAANgAAIANBf2ohAyAIQn98IAiDIQgMAAsLIAIgACgCDCIBNgIsIAIgByABazYCKCAAIAkQn4GAgAAgAkEUahDLgYCAAAwBCyAAIAJBEGpBnoCAgABBDBDdg4CAAAtBgYCAgHghBQsgAkHAAGokgICAgAAgBQ8LEOGDgIAAAAsxACAAKAIAKAIAIgApAwAgAEEIaikDACABKAIAQQAgAmtBDGxqQXRqKAIAEJuBgIAACyUAIAAoAgAoAgAoAgAgACgCBCgCAEEAIAFrQQxsakF0aigCAEYLOgEBfyOAgICAAEEQayIBJICAgIAAIAFBCGogAEEEQQQQmICAgAAgASgCDCEAIAFBEGokgICAgAAgAAs2AQF/I4CAgIAAQRBrIgEkgICAgAAgAUEEaiAAEKGCgIAAIAEoAgghACABQRBqJICAgIAAIAAL0UEIBH8Cfi1/AX0UfwJ9EX8GfiOAgICAAEGwFWsiBSSAgICAACAFQQA2AtQBIAUgATYC0AEgBSAANgLMASAFQQA2AsgBIAVCgICAgMAANwLAASAFQbgBaiAFQcABahDsgICAACIGQQFqIgBBCEGoBxClg4CAACAFQQA2ApgOIAUgBSgCvAEiATYClA4gBSAFKAK4ASIHNgKQDiAFQfgBaiEIAkAgBw0AIAVBkA5qENGDgIAAIAUoApQOIQELIAFBADYCACABQQA2AqAHIAggBSkCkA43AgAgCEEIakEBNgIAIAVCATcChAIgBUGwAWogAEEEQRAQpYOAgAAgBUEANgKYDiAFIAUoArQBIgE2ApQOIAUgBSgCsAEiBzYCkA4CQCAHDQAgBUGQDmoQqYKAgAAgBSgClA4hAQsgAUEANgIMIAFBADYCACAFQfAMakEIaiIHQQE2AgAgBSAFKQKQDjcD8AwgBUGoAWogAEEIQRgQpYOAgAAgBUEANgKYDiAFIAUoAqwBIgE2ApQOIAUgBSgCqAEiADYCkA4CQCAADQAgBUGQDmoQ04OAgAAgBSgClA4hAQsgAUEANgIQIAFBADYCACAFQeANakEIaiIBQQE2AgAgBSAFKQKQDjcD4A0gBUGQDmoQloGAgAAgBSkDkA4hCSAFKQOYDiEKIAVBkA5qQQwgBhDfg4CAACAFQdgBakEIaiAFQZAOakEIaikDADcDACAFQZQCaiAHKAIANgIAIAVB2AFqQdAAaiABKAIANgIAIAUgCjcD8AEgBSAJNwPoASAFQgE3A5gCIAVBAToAtAIgBUIBNwKsAiAFIAUpA5AONwPYASAFIAUpA/AMNwKMAiAFIAUpA+ANNwOgAgJAIAQNACAFQQA6ALQCCyAFQaACaiELIAVBjAJqIQwgBUHYAWpBEGohDSAFQbgCaiAGEKKCgIAAIAVBoAFqIAZBBEEMEJiAgIAAIAVBADYCzAIgBSAFKQOgATcCxAIgBUHQAmpBgAFqIQ4gBUHQAmpB4ABqIQ8gBUHQAmpBxABqIRAgBUHQAmpBOGohESAFQdACakHQAGohEiAFQdACakEsaiETIAVB0AJqQSBqIRQgBUHQAmpBFGohFSAFQdACakEIaiEWIAVBhAVqIRcgBUHkBGohGCAFQcQEaiEZIAVB9ANqIRogBUGQDmpBgAFqIRsgBUHgDWpBEGohBCAFQZAOakHgAGohHCAFQZAOakHQAGohHSAFQZAOakEgaiEeIAVBkA5qQSxqIR8gBUGQDmpBxABqISAgBUGQDmpBCGohISAFQeANakEMaiEiIAVBkA5qQThqISMgBUGQDmpBFGohJCAFQZAOakEMaiElIAVB4A1qQQhqISZBACEnA38CQAJAAkACQAJAAkACQAJAAkACQAJAAkAgJyAGRg0AIAVBwAFqEOyAgIAAIQEgBUHAAWoQ7ICAgAAhKCAFQcABahDsgICAACEpIAVBwAFqEP6AgIAAISogBUHAAWoQ/oCAgAAhKyAFQZgBaiAFQcABahD8gICAACAFKAKcASEsIAUoApgBIS0gBUGQAWogBUHAAWoQ/ICAgAAgBSgClAEhLiAFKAKQASEvIAVB4A1qIAVBwAFqEPuAgIAAIAUoAuQNITAgBSgC4A0hMSAhICZBCGoiACgCADYCACAFICYpAgA3A5AOIAVB4A1qIAVBwAFqEPuAgIAAIAUoAuQNITIgBSgC4A0hMyAFQeANaiAFQcABahD7gICAACAlICYpAgA3AgAgJUEIaiAAKAIANgIAIAGtQgOGIQkgBSgC5A0hNCAFKALgDSE1IAVB4A1qIAVBwAFqEPuAgIAAIAUoAuQNITYgBSgC4A0hNwJAIAUoAsgBIgAgBSgCwAFHDQAgBUHAAWoQrYKAgAALQoSEgJgQIAmIIQkgBSgCxAEgAEEYbGoiByAFKQOQDjcCACAHQQhqICEpAwA3AgAgB0EQaiAFQZAOakEQaikDADcCACAFIABBAWo2AsgBIAVBwAFqEPKAgIAAITggBUGQDGogBUHAAWoQ+ICAgAAgBUGwDGogBUHAAWoQ+YCAgAAgBUHQDGogBUHAAWoQ+YCAgAAgBUHwDGogBUHAAWoQ+ICAgAAgBUGIAWogBUHAAWoQ+oCAgAAgBSgCjAEhOSAFKAKIASE6IAVBgAFqIAVBwAFqEPqAgIAAIAUoAoQBITsgBSgCgAEhPCAFQfgAaiAFQcABahD0gICAACAFLQB5IT0gBS0AeCE+IAVB8ABqIAVBwAFqEPSAgIAAIAUtAHEhPyAFLQBwIUAgBUHoAGogBUHAAWoQ9oCAgAAgBS0AaSFBIAUtAGghQiAFQeAAaiAFQcABahD0gICAACAFLQBhIUMgBS0AYCFEIAVB2ABqIAVBwAFqEPSAgIAAIAUtAFkhRSAFLQBYIUYgBUHQAGogBUHAAWoQ9oCAgAAgBS0AUSFHIAUtAFAhSCAFQcABahDsgICAACFJIAVBwAFqEOyAgIAAIUogBUHIAGogBUHAAWoQ/ICAgAAgBSgCTCFLIAUoAkghTCAFQcABahDygICAACFNIAVBwAFqEPKAgIAAIU4gBUHAAWoQ7ICAgAAhTyAFQcABahDsgICAACFQIAVBwAFqEOyAgIAAIVEgBUHAAWoQ7ICAgAAhACAFQcABahDsgICAACFSAkBBkANFDQAgBUGQDmpBsMDAgABBkAP8CgAACyABQQVJIVMgCachVCAAQQRJIVVBg4CEECAAQQN0diFWIElBBEkhVyBPQQRJIVhBACFZIAVBwAFqEOyAgIAARQ0LIAVB4A1qIAVBwAFqEO+AgIAAIAVBkA1qQQhqIgEgJigCADYCACAFQaANakEIaiIAICJBCGoiBygCADYCACAFIAUpAuANNwOQDSAFICIpAgA3A6ANICQQwoGAgAAgJEEIaiABKAIANgIAICQgBSkDkA03AgAgIxDDgYCAACAjQQhqIAAoAgA2AgAgIyAFKQOgDTcCACAFQeANaiAFQcABahDvgICAACAFQbANakEIaiIBICYoAgA2AgAgBUHADWpBCGoiACAHKAIANgIAIAUgBSkC4A03A7ANIAUgIikCADcDwA0gIRDCgYCAACAhQQhqIAEoAgA2AgAgISAFKQOwDTcCACAgEMOBgIAAICBBCGogACgCADYCACAgIAUpA8ANNwIAIB8gBUHAAWoQ8ICAgABBACEBQQBBBBDxgICAACAeIAVBwAFqEPCAgIAAQQBBBBDxgICAACAFIAVBwAFqEOyAgIAAIgBBACAAQQRJGyJZOgCcESAFQcABahDsgICAACFaIAVBwAFqEOyAgIAAIVsgBUHAAGogBUHAAWoQ7ICAgAAiAEEEQRQQmICAgAAgBUEANgKMDiAFIAUoAkQiBzYCiA4gBSAFKAJAIlw2AoQOAkAgACBcTQ0AIAVBhA5qQQAgAEEEQRQQ7YCAgAAgBSgCiA4hByAFKAKMDiEBCyAAIAFqIV0gByABQRRsaiEBAkADQCAARQ0BIAVB4A1qIAVBwAFqEO6AgIAAIAVBwAFqEOyAgIAAIQcgBUHAAWoQ7ICAgAAhXCAFQcABahDsgICAACFeIAVBwAFqEOyAgIAAIV8gBCBeOwEAIAEgBSkC4A03AgAgBSBcOwHuDSAFIAc7AewNIAFBCGogJikCADcCACAFIF87AfINIAFBEGogBCgCADYCACAAQX9qIQAgAUEUaiEBDAALCyAFQdANakEIaiIBIF02AgAgBSAFKQKEDjcD0A0CQCBaQf//A3FFDQAgW0H//wNxDQILIAVB0A1qEMCBgIAADAsLIAUoAsgCIg8gBSgCzAJBDGxqISNBACEXA0AgFyFeAkACQCAPIgEgI0YNACBeQQFqIRcgAUEMaiEPIAEoAggiDkUNAiABKAIEIQEgBUEYaiAOQQhBCBCYgICAAEEAIQAgBUEANgKYDiAFIAUoAhwiGzYClA4gBSAFKAIYIgQ2ApAOAkAgDiAETQ0AIAVBkA5qQQAgDkEIQQgQ7YCAgAAgBSgClA4hGyAFKAKYDiEACyAAIA5qIV8gGyAAQQN0IhhqIQAgBSgCwAIhByAFKAK8AiFcIA4hBANAIAAgXCAHIAEoAgBB2KrAgAAQw4KAgAApAwA3AwAgAUEEaiEBIABBCGohACAEQX9qIgQNAAsgBSgCkA4hICBcIAcgXkHoyMCAABDDgoCAACEBIAUoApACIAUoApQCIAEpAwAiYEIgiKdBAXIiGSBgpyIaQZC0wIAAELmCgIAAIgAoAghBA3QhASAAKAIEIQADQCABRQ0CIAUoAqQCIAUoAqgCIAApAwAiCUIgiKdBAXIgCadB4LTAgAAQ24OAgABCADcDACABQXhqIQEgAEEIaiEADAALCyAFKALAAiIcQQN0QXhqIQEgBUGUEWohGyAFKALEASFeIAUoAsgBIV8gBSgCvAIhBAJAA0AgAUF4Rg0BIAUgBCABaikDACIJNwPgBSABQQN2IgAgX08NBQJAIF4gAEEYbGoiACgCACIHIAAoAgwiXHJFDQAgACkCECEKIAApAgQhYCAFQZAOaiAFKAL8ASAFKAKAAiAJQiCIp0EBciAJp0GwtcCAABCIgICAABDHg4CAACAFQewFaiAFQZAOahDHg4CAACAFQgM3AtAHIAVCAzcCwAcgBUIDNwKwByAFQfAMaiAFQdgBaiAFKQPgBSAFQewFahC4goCAACAFKALwDEEERw0KIAUgGzYC3AwgBSAFQYQOajYC2AwgBSAFQeAFajYC1AwgBSAFQdgBajYC0AwgBSAFQdAMakEBEICBgIAAIjg4AvwIIAUgBUHQDGpBAhCAgYCAACA4EMiFgIAAOAKwDAJAQZADRQ0AIAVBgAlqIAVBkA5qQZAD/AoAAAsgBSAFKALYCiIANgLwDSAFIAUoAtQKIiY2AuwNIAUgYDcC5A0gBSAHNgLgDSAFQRBqIAVB/AhqIAVBsAxqIAVB4A1qICYgABCEgYCAACAFIAUpAxA3AtQKIAUgBSgC6AoiADYC8A0gBSAFKALkCiIHNgLsDSAFIAo3AuQNIAUgXDYC4A0gBUEIaiAFQfwIaiAFQbAMaiAFQeANaiAHIAAQhIGAgAAgBSAFKQMINwLkCiAFQfAMaiAFQdgBaiAFKQPgBSAFQYAJahC4goCAACAFKALwDEEERw0LCyABQXhqIQEMAAsLIAQgHEEAQZjIwIAAEMOCgIAAKQMAIQkgBSADOAKcDiAFQQFBAEECIAO8Qf////8HcUGAgID8B0gbIANDAAAAAF0bNgKYDiAFIAI4ApQOIAVBAUEAQQIgArxB/////wdxQYCAgPwHSBsgAkMAAAAAXRs2ApAOIAVB4A1qIAVB2AFqIAkgBUGQDmogBUGEDmoQgYGAgAAgBSgC4A1BBEcNBEEAKAL4ucmAAA0FQQBBfzYC+LnJgABBAEEANgKEusmAAEH8ucmAACAGQQR0EKuBgIAAIBxBA3QhB0EAIQACQANAIAcgAEYNASAFQeANaiAFQdgBaiAEIABqKQMAEIKBgIAAIAUoAuANQQRHDQggBSgC5A0iASkCMCEJIAEpAjghCiABKQIQIWAgASkCGCFhIAEpAgAhYiABKQIIIWMgASkCICFkIAEpAighZUH8ucmAAEEQEKuBgIAAQQAoAoC6yYAAQQAoAoS6yYAAQQJ0aiIBIGU3AjggASBkNwIwIAEgYzcCKCABIGI3AiAgASBhNwIYIAEgYDcCECABIAo3AgggASAJNwIAQQBBACgChLrJgABBEGo2AoS6yYAAIABBCGohAAwACwtBAEEAKAL4ucmAAEEBajYC+LnJgABBACgCgLrJgAAhByAFKALMAiEAIAUoAsgCIlwhAQJAA0AgAEUNASABKAIAIAFBBGooAgBBBEEEELeBgIAAIABBf2ohACABQQxqIQEMAAsLIAUoAsQCIFxBBEEMELeBgIAAIAUoArgCIAQQ0oGAgAAgBSgCgAIhACAFKAL8ASEBAkADQCAARQ0BAkAgAUGgB2otAABBAXFFDQAgARDNgYCAAAsgAEF/aiEAIAFBqAdqIQEMAAsLIAUoAvgBIAUoAvwBQQhBqAcQt4GAgAACQCAFKALcASIBRQ0AIAVBkA5qQQxBCCABQQFqEL6BgIAAIAUoAtgBIAUoApgOayAFKAKQDiAFKAKUDhC7gYCAAAsgBSgClAIhACAFKAKQAiEBAkADQCAARQ0BAkAgAUEMai0AAEEBcUUNACABKAIAIAFBBGooAgAQ0oGAgAALIABBf2ohACABQRBqIQEMAAsLIAUoAowCIAUoApACQQRBEBC3gYCAACAFKAKgAiAFKAKkAkEIQRgQt4GAgAAgBSgCwAEgXkEEQRgQt4GAgAAgBUGwFWokgICAgAAgBw8LIBsgX0EDdGohHCAbIQcCQANAAkACQAJAAkAgByAcRg0AIAUoAqgCIgAgBykDACIJpyJcTQ0OIAUoAqQCIgQgXEEYbGoiASgCECAJQiCIp0EBciJeRw0OIAEoAgBFDQMgBSgCkAIgBSgClAIgASkDCCIKQiCIp0EBciJfIAqnIiZB8LPAgAAQuYKAgAAiACgCCEEDdCEBIAAoAgQhAEEAIQQDQCABRQ0CIAApAwAgCVENAyABQXhqIQEgBEEBaiEEIABBCGohAAwACwtBACEBIAUoApACIAUoApQCIBkgGkGgtMCAABC5goCAACIEQQA2AgggGCAOQQN0aiEAA0AgACABRg0FIAQgGyABaikDABCjgoCAACABQQhqIQEMAAsLQYC0wIAAEM+AgIAAAAsCQAJAAkAgBCAFKAKQAiAFKAKUAiBfICZB8LTAgAAQuYKAgAAoAggiAUkNAEEAIQAMAQsgBCAFKAKQAiAFKAKUAiBfICZBgLXAgAAQuYKAgAAiACgCCCIBTw0OIAAoAgQgBEEDdGoiXykDACEJAkAgASAEQX9zakEDdCIERQ0AIF8gX0EIaiAE/AoAAAsgACABQX9qNgIIIAUoAqQCIAUoAqgCIAlCIIinIiFBAXIgCadBoLXAgAAQ24OAgABCADcDACAFQZAOaiAFQdgBaiAKELSCgIAAIAUoApAOIgBBBEYNASAFKQOYDiIJQiCIpyEhIAUpA6AOIQogBSgClA4hBCAJpyEBCyAFIAo3A6AOIAUgBDYClA4gBSAANgKQDiAFICGtQiCGIAGthDcDmA5BkLLJgABBKyAFQZAOakGsssCAAEHAtMCAABCDgYCAAAALIAUoAqgCIQAgBSgCpAIhBAsgB0EIaiEHIAQgACBeIFxB0LTAgAAQ24OAgAAiASBgNwMIIAFCATcDAAwACwsgBUGQDmogBUHYAWogYBC0goCAACAFKAKQDiIBQQRHDQogICAbENKBgIAADAALCyAdEMSBgIAAIB1BCGogASgCADYCACAdIAUpA9ANNwIAIAUgWzsB7g4gBSBaOwHsDgwJCyAAIF9BuMjAgAAQ0ICAgAAACyAFQZAOakEQaiAFQeANakEQaikDADcDACAFQZAOakEIaiAFQeANakEIaikDADcDACAFIAUpA+ANNwOQDkGQssmAAEErIAVBkA5qQayywIAAQajIwIAAEIOBgIAAAAtB6KrAgAAQ14GAgAAACyAFQZAOakEQaiAFQeANakEQaikDADcDACAFQZAOakEIaiAFQeANakEIaikDADcDACAFIAUpA+ANNwOQDkGQssmAAEErIAVBkA5qQayywIAAQfiqwIAAEIOBgIAAAAsgBUHgDWpBEGogBUHwDGpBEGopAwA3AwAgBUHgDWpBCGogBUHwDGpBCGopAwA3AwAgBSAFKQPwDDcD4A1BkLLJgABBKyAFQeANakGsssCAAEHIyMCAABCDgYCAAAALIAVB4A1qQRBqIAVB8AxqQRBqKQMANwMAIAVB4A1qQQhqIAVB8AxqQQhqKQMANwMAIAUgBSkD8Aw3A+ANQZCyyYAAQSsgBUHgDWpBrLLAgABB2MjAgAAQg4GAgAAAC0GMo8mAAEEYQbC0wIAAENWDgIAAAAsgBCABQZC1wIAAEPOAgIAAAAsgBUHgDWpBFGogBUGQDmpBFGooAgA2AgAgBUHgDWpBDGogBUGQDmpBDGopAgA3AgAgBSAFKQKUDjcC5A0gBSABNgLgDUGQssmAAEErIAVB4A1qQayywIAAQfjIwIAAEIOBgIAAAAsgVEECIFMbIQEgKkH/AXEhACArQf8BcSEHIFZBAyBVGyFcIElBACBXGyFeIE9BACBYGyFfAkAgBUHAAWoQ7ICAgABFDQAgBUHgDWogBUHAAWoQ/4CAgAAgBCAFQcABahD/gICAACAcEM6BgIAAIBxBGGogBUHgDWpBGGoiSSkCADcCACAcQRBqIAQpAgA3AgAgHEEIaiAmKQIANwIAIBwgBSkC4A03AgAgBUHgDWogBUHAAWoQ/4CAgAAgBCAFQcABahD/gICAACAbEM6BgIAAIBtBGGogSSkCADcCACAbQRBqIAQpAgA3AgAgG0EIaiAmKQIANwIAIBsgBSkC4A03AgALIBogBSkC8Aw3AgAgGkEIaiAFQfAMakEIaikCADcCACAaQRBqIAVB8AxqQRBqKQIANwIAIBpBGGogBUHwDGpBGGopAgA3AgAgBUEAOgDSBSAFIAE6AN0FIAUgBzoA0QUgBSAAOgDQBSAFQQA6AN4FIAVBADYC8AMgBSBcOgDZBSAFIFJBAUY6ANUFIAUgKUEBRjoA1AUgBSBQQQBHOgDTBSAFIChBAUY6ANYFIAVBAEEBQQIgUUECRhsgUUEBRhs6ANcFIBkgBSkCkAw3AgAgGUEIaiAFQZAMakEIaikCADcCACAZQRBqIAVBkAxqQRBqKQIANwIAIBlBGGogBUGQDGpBGGopAgA3AgAgBSA2NgLABCAFIDc2ArwEIAUgNDYCuAQgBSA1NgK0BCAFIDI2ArAEIAUgMzYCrAQgBSAwNgKoBCAFIDE2AqQEIAUgLjYCoAQgBSAvNgKcBCAFICw2ApgEIAUgLTYClAQgBSA4OALUAiAFIDi8IgFBf2pB////A0kgAUH/////B3FBgICAfGpBgICA+AdJIAFBf0pxcjYC0AIgGEEYaiAFQbAMakEYaikCADcCACAYQRBqIAVBsAxqQRBqKQIANwIAIBhBCGogBUGwDGpBCGopAgA3AgAgGCAFKQKwDDcCACAXQRhqIAVB0AxqQRhqKQIANwIAIBdBEGogBUHQDGpBEGopAgA3AgAgF0EIaiAFQdAMakEIaikCADcCACAXIAUpAtAMNwIAIAUgRzoAzwUgBSBIOgDOBSAFIEU6AMsFIAUgRjoAygUgBSBDOgDJBSAFIEQ6AMgFIAUgQToAzQUgBSBCOgDMBSAFID86AMcFIAUgQDoAxgUgBSA9OgDFBSAFID46AMQFIAUgXjoA2wUgBSBfOgDaBSAFIDs2ArAFIAUgPDYCrAUgBSA5NgKoBSAFIDo2AqQFIAVBAUECQQAgSkECRhsgSkEBRhs6ANgFIAUgTjgCwAUgBSBNOAK8BSAFIEs2ArgFIAUgTDYCtAUgFkEIaiAhQQhqKAIANgIAIBYgISkCADcCACAVQQhqICRBCGooAgA2AgAgFSAkKQIANwIAIBRBCGogHkEIaigCADYCACAUIB4pAgA3AgAgE0EIaiAfQQhqKAIANgIAIBMgHykCADcCACAFIFk6ANwFIBJBCGogHUEIaikCADcCACASIB0pAgA3AgAgEUEIaiAjQQhqKAIANgIAIBEgIykCADcCACAQQQhqICBBCGooAgA2AgAgECAgKQIANwIAIA9BGGogHEEYaikCADcCACAPQRBqIBxBEGopAgA3AgAgD0EIaiAcQQhqKQIANwIAIA8gHCkCADcCACAOQRhqIBtBGGopAgA3AgAgDkEQaiAbQRBqKQIANwIAIA5BCGogG0EIaikCADcCACAOIBspAgA3AgACQAJAIAVBwAFqEOyAgIAADQAgBUGQDmogBUHQAmoQ6oOAgAAgBUEoaiAIIAVBkA5qENCDgIAAIAU1AiwhCSAFNQIoIQogBUGQDmpBABCigoCAACAMIAVBkA5qENSDgIAAIAsQ0oOAgAAgCSAKQiCGhCEJDAELIAVBkA5qIAVB0AJqEOqDgIAAIAVBAToAqBUgBUE4aiAIIAVBkA5qENCDgIAAIAUoAjghAAJAIAUoAjwiAUF/Rg0AAkACQCAFQdgBaiABEJqBgIAAIgdFDQAgACAHKAIAIlxGDQEgACBca0EASA0CIAcgJzYCBCAHIAA2AgAMAgsgBSABNgLQDCAFKQPoASAFKQPwASABEJuBgIAAIQkgBSAFQdAMajYC8AwCQCAFKALgAQ0AIAVB2AFqIA0Q5IOAgAAaCyAFIAVB2AFqNgLkDSAFIAVB8AxqNgLgDSAFQTBqIAUoAtgBIAUoAtwBIAkgBUHgDWpBn4CAgAAQ9oKAgAAgBSgCNCEHIAUoAtgBIVwCQCAFKAIwQQFxRQ0AIFwgB2oiXi0AACFfIF4gCadBGXYiSToAACBcIAUoAtwBIAdBeGpxakEIaiBJOgAAIFxBACAHa0EMbGoiB0F8aiAnNgIAIAdBeGogADYCACAHQXRqIAE2AgAgBSAFKALkAUEBajYC5AEgBSAFKALgASBfQQFxazYC4AEMAgsgXEEAIAdrQQxsaiIHQXxqICc2AgAgB0F4aiAANgIADAELIAcgJzYCBAsgBUHgDWpBABCigoCAACAMIAVB4A1qENSDgIAAIAsQ0oOAgAAgAK1CIIYgAa2EIQkLIAVBuAJqIAkQo4KAgAAgBUEgaiAFQcABahDsgICAACIBQQRBBBCYgICAAEEAIQAgBUEANgKYDiAFIAUoAiQiBzYClA4gBSAFKAIgIlw2ApAOAkAgASBcTQ0AIAVBkA5qQQAgAUEEQQQQ7YCAgAAgBSgClA4hByAFKAKYDiEACyAnQQFqIScgASAAaiFcIAcgAEECdGohAAJAA0AgAUUNASAAIAVBwAFqEOyAgIAANgIAIAFBf2ohASAAQQRqIQAMAAsLICYgXDYCACAFIAUpApAONwPgDQJAIAUoAswCIgEgBSgCxAJHDQAgBUHEAmoQpYKAgAALIAUoAsgCIAFBDGxqIgAgBSkD4A03AgAgAEEIaiAmKAIANgIAIAUgAUEBajYCzAIMAAsLpAEBAn8jgICAgABBoAJrIgIkgICAgABBGCEDAkADQCADQbgCRg0BIAIgA2pBAjoAACADQSBqIQMMAAsLIABBAjYCqAMCQEGgAkUNACAAQdgDaiACQaAC/AoAAAsgAEGAgAQ2AvgFAkBBmAFFDQAgAEGABmpBAEGYAfwLAAsCQEGQA0UNACAAIAFBkAP8CgAACyAAQQA6AJgHIAJBoAJqJICAgIAACywAQZSjwIAAENiBgIAAQQBBACgC2LnJgABBf2o2Ati5yYAAQQAoAuC5yYAACwwAIAEgABCtgYCAAAsMACABIAAQuYCAgAALiKABBR1/An4HfwF+Dn8jgICAgABB4OYAayICJICAgIAAIAIgADYC+AIgAiABNgL8AgJAAkACQCABQS9LDQAgAkG01wBqQQAQ74OAgAAMAQsgAkH4AmoQl4KAgAAhASACQfgCahCXgoCAACEDIAJB+AJqELOCgIAAGiACQfgCahCwgoCAACEEIAJB+AJqELCCgIAAGiACQfgCahCzgoCAACEFIAJB+AJqELOCgIAAGiACQfgCahCwgoCAABogAkH4AmoQsIKAgAAaIAJB+AJqELOCgIAAGiACQfgCahCzgoCAABogAkH4AmoQs4KAgAAaIAJB+AJqELOCgIAAGiACQfgCahCzgoCAABoCQCABQfeemZIDRg0AIAJBtNcAakEBEO+DgIAADAELIANBGHYhACADQRB2IQYgA0EIdiEHAkACQAJAAkACQAJAAkACQAJAIANB/wFxIgFFDQACQCABQc8ARg0AIAFB9ABHDQIgB0H/AXFB9ABHDQIgBkH/AXFB4wBHDQJB5gAhCEH0ACEHQeMAIQYgAEHmAEcNAgwDCyAHQf8BcUHUAEcNASAGQf8BcUHUAEcNAUHPACEIQdQAIQdB1AAhBiAAQc8ARw0BDAILIAdB/wFxQQFHDQAgBkH/AXENAEEAIQZBASEHQQAhCCADQYCAgAhJDQELIAJBoCNqQZyvwIAAQRMQv4CAgAAgACEIIAIoAqAjIgFBgYCAgHhHDQELIAJBytEAaiEJIAJB+tEAaiEKIAJB4tEAaiELIAJByNEAaiEMIAJB+NEAaiENIAJB4NEAaiEOIAJBzNEAaiEPIAJB/NEAaiEQIAJB5NEAaiERIAJB8AJqIARB//8DcSIBQQRBFBCYgICAAEEAIQAgAkEANgKoAyACIAIoAvQCIhI2AqQDIAIgAigC8AI2AqADIAFBFGwhE0EAIRRBACEVA0ACQAJAAkACQAJAAkAgEyAARg0AIAJBoCNqIAJB+AJqEJmCgIAAIAItAKAjQQFGDQggAi0AoSMiAUE/cSIWQT9HDQEgAkGgI2ogAkH4AmoQloCAgAAgAi0AoCNBAUYNCCACKAChIyEWDAULIAIoAqADIhdBgICAgHhGDQMCQCADQfTojbMGRg0AIAJB//8DNgKAAwwCCyACIAQ7AZBlAkACQAJAIAIoAvwCQQRPDQBBASEWDAELIAIoAvgCKAAAIRggAkH4AmpBBBCagoCAAAJAIBhBGHQgGEGA/gNxQQh0ciAYQQh2QYD+A3EgGEEYdnJyIhNBgIAIRg0AIBNBgIAERg0AQQAhFgwBCyACQaAjaiACQfgCahCVgICAAEEBIRYgAi8BoCNBAUYNACACLwGiIyEBIAJBBDoAmFcgAiABOwG6VyACQQA7AbhXIAIgAkGY1wBqNgK8VyACIAJBkOUAajYCtFcgAiACQfgCajYCsFcgAkGowwBqIAJBsNcAahCUgICAAAJAAkAgAigCqENBgICAgHhGDQAgAkHoAmpBBEEEQRAQmICAgAAgAigC6AIhASACKALsAiIZIAIpAqhDNwIAIBlBCGogAkGowwBqQQhqKQIANwIAIAJBATYC4GUgAiAZNgLcZSACIAE2AthlIAJBoANqQQhqIAJBsNcAakEIaikCADcDACACIAIpArBXNwOgA0EQIRZBASEBAkADQCACQaAjaiACQaADahCUgICAACACKAKgI0GAgICAeEYNAQJAIAEgAigC2GVHDQAgAkHY5QBqIAFBAUEEQRAQ7YCAgAAgAigC3GUhGQsgGSAWaiIaIAIpAqAjNwIAIBpBCGogAkGgI2pBCGopAgA3AgAgAiABQQFqIgE2AuBlIBZBEGohFgwACwsgAkHA1gBqQQhqIAJB2OUAakEIaigCADYCACACIAIpAthlNwPAVgwBCyACQQA2AshWIAJCgICAgMAANwPAVgsCQCACLQCYVyIWQQRGDQAgAkHA1gBqEL+BgIAADAELIAIgAigAxVY2AsBlIAIgAkHI1gBqKAAANgDDZSACLQDEViEBAkAgAigCwFYiFkGAgICAeEcNACABIRYMAQsgAiACKADDZTYAq2UgAiACKALAZTYCqGUgGEGAgHxHDQELIAJBADYCqCMgAkKAgICAEDcCoCMgAkG01wBqIQECQAJAAkACQAJAIBZB/wFxDgQAAQIDAAsgAkGgI2pBpKPJgABBxaPJgAAQ44CAgAAMAwsgAkGgI2pBxaPJgABB4KPJgAAQ44CAgAAMAgsgAkGgI2pB4KPJgABB8aPJgAAQ44CAgAAMAQsgAkGgI2pB8aPJgABBhKTJgAAQ44CAgAALIAEgAikCoCM3AgAgAUEIaiACQaAjakEIaigCADYCAAwDCyACQYwDaiACKACrZTYAACACIBY6AIQDIAJBhwNqIBZBGHY6AAAgAiACKAKoZTYAiQMgAiABOgCIAyACIBM2AoADIAIgFkEIdjsAhQMMAQsgFkECdCgAtKzAgAAhFgwDCyACQZADaiAVEKGCgIAAQQAhAQJAQYAgRSIWDQAgAkGgA2pBAEGAIPwLAAsCQCAWDQAgAkGgI2pBAEGAIPwLAAsgAEFsaiEbIAJBoMMAahCcgYCAACACQeACahDIgYCAACACKALkAiEWIAIoAuACIRUgAkHYAmoQyIGAgAAgAigC3AIhGiACKALYAiEZIAJBkOUAahDwg4CAACACQajlAGoQ8IOAgAAgAkHA5QBqEPCDgIAAIAJB0AJqEMqBgIAAIAIoAtQCIRggAigC0AIhEyACQcgCahDKgYCAACACKALMAiEEIAIoAsgCIRwgAkHAAmoQyIGAgAAgAigCxAIhHSACKALAAiEeAkADQCABQYABRg0BIAJB2OUAaiABaiIAQQA7AQAgAEECakEAOgAAIAFBBGohAQwACwsgAkG4AmoQyoGAgAAgAigCvAIhASACKAK4AiEAIAJBsAJqEMiBgIAAIAIpA7ACIR8gAkGoAmoQyIGAgAAgAkH45ABqQgA3AwAgAkGA5QBqQgA3AwAgAkGI5QBqQgA3AwAgAkIANwPwZCACKQOoAiEgQQAhIQJAQSRFDQAgAkHD1gBqQQBBJPwLAAsgAkGY1wBqQRBqIiIgAkGQ5QBqQRBqKQIANwMAIAJBmNcAakEIaiIjIAJBkOUAakEIaikCADcDACACQYDXAGpBCGoiJCACQajlAGpBCGopAgA3AwAgAkGA1wBqQRBqIiUgAkGo5QBqQRBqKQIANwMAIAJB6NYAakEIaiImIAJBwOUAakEIaikCADcDACACQejWAGpBEGoiJyACQcDlAGpBEGopAgA3AwAgAiACKQKQZTcDmFcgAiACKQKoZTcDgFcgAiACKQLAZTcD6FYCQEGAAUUNACACQbDXAGogAkHY5QBqQYAB/AoAAAsCQEHADEUNACACQbDXAGpBgAFqQQBBwAz8CwALIAJBoAJqQbgIEPGDgIAAIAIpA6ACISggACABELqBgIAAAkBB4A1FDQAgAkGowwBqIAJBsNcAakHgDfwKAAALIAJBwNEAaiAjKQMANwMAIAJByNEAaiAiKQMANwMAIAJB2NEAaiAkKQMANwMAIAJB4NEAaiAlKQMANwMAIAJCADcDsFEgAkIANwKkUSACQcAANgKgUSACQgA3A5hRIAJCi4CAgMAANwOQUSACQpCAgIDwATcDiFEgAiACKQOYVzcDuFEgAiACKQOAVzcD0FEgAkH40QBqICcpAwA3AwAgAkHw0QBqICYpAwA3AwAgAiAENgK8UiACIBw2ArhSIAIgGDYCtFIgAiATNgKwUiACICA3A6hSIAIgHzcDoFIgAiAWNgKcUiACIBU2AphSIAIgHTYCjFIgAiAeNgKIUiACIBo2AoRSIAIgGTYCgFIgAiAoNwOQUiACIAIpA+hWNwPoUSACQcDSAGohIwJAQTVFDQAgI0EAQTX8CwALAkBBJ0UNACACQfXSAGogAkHA1gBqQSf8CgAACwJAQcwARQ0AIAJBnNMAakEAQcwA/AsACyACQfTTAGpCADcCACACQfzTAGpCgICAgPAfNwIAIAJCADcC7FMgAkEQNgLoUyACQQE2ApRUIAJB4MjIgAA2ApBUIAJCADcDiFQgAiAWNgKEVAJAQaACRQ0AIAJBmNQAakEAQaAC/AsACyACQQE2ArhWIAJBgCA2ApBlIAJBADYCqGUgAkHo0ABqIR0gAkHQ0gBqISkgAkG21ABqISogAkGI1ABqISsgAkGw0gBqISwgAkHo0QBqISUgAkHQ0QBqISYgAkG40QBqIScgAkGw0QBqIS0gAkGY0QBqISJBACEkQQIhLgJAA0ACQAJAAkACQAJAAkACQAJAAkACQCAuDgQCAAEEAgsgAkGowwBqEMaBgIAAIAItAKBDQQNHDQIgAigCpEMiASgCACEWAkAgASgCBCIAKAIAIhVFDQAgFiAVEYiAgIAAgICAgAALAkAgACgCBCIVRQ0AIBYgACgCCCAVELuBgIAACyABQQxBBBDAg4CAAAwCC0EAISEgAkGYAmpBACACKAL8AiIBQYAgIAFBgCBJGyIkIAJBoANqQYAgQaDAwIAAEJ+AgIAAIAJB+AJqIAIoApgCIAIoApwCEJiCgIAAIAENBwsgAjEAoEMhHyACKAKkQyEBIAIoAqBDIQAgAkGowwBqEMaBgIAAIB9CBFINAwsgAkHo1gBqIAUQoYKAgAACQAJAIANB9OiNswZHDQAgAigCiAMgAigCjAMQ8oOAgAAhDAwBCyAUQQR0QQxyIQwLIAJB6NYAaiAMEPODgIAAIAIoApQDIS8gAigCmAMhLiACIAIoAvBWQQNxIgE2AthmIAENASACIBQ2AtxmIAJBOGogFEEEQRAQ9IOAgAAgAkEANgKgVyACIAIpAzg3AphXIBIgFEEUbGohISACQaADakEEaiEsIAJBoCNqQRFqIRwgAkGgA2pBAnIhKSACQYgkaiEwIAJB+CNqIQ4gAkGgI2pBwABqIQkgAkHQI2ohLSACQaAjakEgaiErIAJBoCNqQRBqIREgEiEBA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgASAhRiIjDQAgAUERaiEVIAEoAgAiAEEYdiEWIABBEHYhHSAAQQh2IRMgAS0AECEYIAEoAgwhGSABKAIIIRogASgCBCEEAkAgAEH/AXEiJEGZf2oOBgAFCwsLCgsLIBZB5gBHDQogE0H/AXFB7ABHDQogHUH/AXFB+QBHDQpBACEdQQAhAANAAkAgGyAARw0AQQAhAQwHCyABIABqIRYgAEEUaiEAIBZBFGooAABB7N6NiwZHDQALAkAgASAAaiIxLQAQIBhB/wFxRg0AQQEhAQwGCwJAIBhBAXENACAcIBUvAAA7AAAgHEECaiAVQQJqLQAAOgAAIAJBADoAsCMgAiAZNgKsIyACIBo2AqgjIAIgBDYCpCMgAiAkQYDY5bMGcjYCoCMgAkGgI2ogLyAuIAJB6NYAaiACQZjXAGoQ9YOAgAAgESAxQRBqKAIANgIAIAJBoCNqQQhqIDFBCGopAgA3AwAgAiAxKQIANwOgIyACQaAjaiAvIC4gAkHo1gBqIAJBmNcAahD1g4CAAAwMCwJAIBkgGmoiACAZSQ0AIAAgLksNACACQgA3A7BDIAIgLyAZaiIANgKoQyACIBo2AqxDAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBpBJEkNACACQajDAGoQ9oOAgAAaIAJBqMMAahD2g4CAACEYIAJBqMMAahD2g4CAACEWIAJBqMMAahD2g4CAACEQIAJBqMMAahD3g4CAACEVIAJBqMMAahD3g4CAACEmIAJBqMMAahD3g4CAACEnIAJBqMMAahD3g4CAACEqIAJBqMMAahD3g4CAACEKIAJBqMMAahD3g4CAACENIAJBqMMAahD3g4CAACEPIAIgAikDsEMiH6ciGTYCsFcgGUEkRw0LQQAhJQJAIBhBAXEiMkUNACAWQfj/A3FBA3YgFkEHcUEAR2ohJQsgH0KAgICAEFoNCiAaICUgFUEkaiIeICZqIhggJ2oiEyAqaiIEIApqIhkgDWoiHSAPaiIiaiIzSQ0AIBVBW0sNCSAeIBpLDQkgGCAeSQ0IIBggGksNCCATIBhJDQcgEyAaSw0HIAQgE0kNBiAEIBpLDQYgGSAESQ0FIBkgGksNBSAZIBZB4P8DcUEFdiAWQR9xQQBHakECdCI0aiIFIBlJDQQgBSAaSw0EIB0gBUkNAyAdIBpLDQMgIiAdSQ0CICIgGksNAkEAIQtBACE1AkAgMkUNACAzICJJDQIgJUEGdCE2IAAgImohNQsgAiA2NgKcJCACIDU2ApgkIAJCADcDkCQgAiAPNgKMJCACIAAgHWo2AogkIAJCADcDgCQgAiANIDRrNgL8IyACIAAgBWo2AvgjIAIgNEEGdDYC9CMgAiAAIBlqNgLwIyACQgA3A+gjIAIgCjYC5CMgAiAAIARqNgLgIyACQgA3A9gjIAIgKjYC1CMgAiAAIBNqNgLQIyACQgA3A8gjIAIgJzYCxCMgAiAAIBhqNgLAIyACQgA3A7gjIAIgJjYCtCMgAiAAIB5qNgKwIyACQgA3A6gjIAIgAEEkajYCoCMgAiAVOgCkIyACIBVBGHY6AKcjIAIgFUEIdjsApSMgAiAWOwGgJCACIBA7AaIkIAJBADYCmGUgAkKAgICAEDcCkGUgAkEoaiAWQQFqQf//A3FBAkEBIBBB//8DcSI2G3RBAUEBEPSDgIAAIAJBADYCsGUgAiACKQMoNwKoZSAWQf//A3EhNQNAAkACQAJAAkACQAJAAkACQCALIDVGDQAgNg0BIAIgAigCmGUiAEEXdEGAgIB4cSAAQQd0QYCA/AdxciAAQQl2QYD+A3EgAEEZdnJyNgKgAyACQajlAGogKSAsEOOAgIAADAILIAIoAphlIQAgNg0CAkAgAEEBcUUNACACQZDlAGpBABD4g4CAACACKAKYZSEACyACIABBF3RBgICAeHEgAEEHdEGAgPwHcXIgAEEJdkGA/gNxIABBGXZycjYCoAMgAkGo5QBqICkgLBDjgICAAAwDCyACQajlAGogAigCmGUQ+YOAgAALIAJBoANqIAJBoCNqEPqDgIAAIAIvAaADQQFGDRQgAi8BogMiDUUNBCANwUEASg0CIAJBkOUAakH//wMQ+4OAgABBASETIAIoAvAjIAIoAvQjIAsQ/IOAgAAtAABBAUcNFSACQaADaiAOEPqDgIAAIAIvAaADDRQgAkGQ5QBqIAIvAaIDEPuDgIAAIAJBoANqIA4Q+oOAgAAgAi8BoANBAUYNFCACQZDlAGogAi8BogMQ+4OAgAAgAkGgA2ogDhD6g4CAACACLwGgA0EBRg0UIAJBkOUAaiACLwGiAxD7g4CAACACQaADaiAOEPqDgIAAIAIvAaADQQFGDRQgAkGQ5QBqIAIvAaIDEPuDgIAAQQAhFQNAIAJBoANqIAkQ+oOAgAAgAi8BoANBAUYNFUEGQQQgAi8BogMiAEEBcRshFgJAAkAgAEEIcUUNACAWQQJqIRYMAQsCQCAAQcAAcUUNACAWQQRqIRYMAQsgFiAAQQR2QQhxciEWCyACQZDlAGogABD7g4CAACACQaADaiAJIAJBkOUAaiAWEP2DgIAAQQAhEyACKAKgAw0WIABBIHEhFgJAAkAgAEGAAnENACAWRQ0BDAILQQEhFSAWDQEMBQsLIBVBAXENAwwECyACQajlAGogABD5g4CAAAsgAi0AlGUhEyACKAKQZSIZQYCAgIB4Rg0UIAIvAJVlIAJBkOUAakEHai0AAEEQdHIhGiACKAKwZSEVIAIoAqxlIRYgAigCqGUhGAJAAkACQCACKQOoIyIfQv////8PVg0AIAIoAqQjIB+nSw0BCwJAIAIpA7gjIh9C/////w9WDQAgAigCtCMgH6dLDQELAkAgAikDyCMiH0L/////D1YNACACKALEIyAfp0sNAQsCQCACKQPYIyIfQv////8PVg0AIAIoAtQjIB+nSw0BCwJAIAIpA+gjIh9C/////w9WDQAgAigC5CMgH6dLDQELAkAgAikDgCQiH0L/////D1YNACACKAL8IyAfp0sNAQsgAikDkCQiH0L/////D1YNASACKAKMJCAfp00NAQsgGSAaQQh0IBNyELmAgIAAIBggFhC5gICAAEECIRMMFQsgGkEIdCATciIaIAAQ/oOAgAAhEyACIAA2AqwjIAIgEzYCpCMgAiAkQYDY5bMGcjYCoCMgAiACKALwVjYCqCMgAkGY1wBqIAJBoCNqEP+DgIAAIAJB6NYAaiAaIAAQgISAgAAgAkHo1gBqEIGEgIAAIDEoAgAhACAWIBUQ/oOAgAAhEyACIBU2AqwjIAIgEzYCpCMgAiAANgKgIyACIAIoAvBWNgKoIyACQZjXAGogAkGgI2oQ/4OAgAAgAkHo1gBqIBYgFRCAhICAACACQejWAGoQgYSAgAAgGCAWELmAgIAAIBkgGhC5gICAAAwcC0EAIRAgAkEANgLIZSACQoCAgIAQNwLAZSACQQA2AshWIAJCgICAgBA3AsBWIAJBADYC4GUgAkKAgICAEDcC2GUgAkEANgK4VyACQoCAgIAQNwKwVyACQQA2ArBDIAJCgICAgBA3AqhDQQAhCgJAIAIoApgkIgBFDQAgACACKAKcJCALEPyDgIAALQAAQQZ0IQoLQQAhJ0EAISZBACElQQAhBUEAIRZBACEVQQAhHkEAITQCQAJAAkACQANAIBBB//8DcSANTw0BIAJBoANqIBEQgoSAgAAgAi8BoAMNAiAQQQFqIRAgAkHA5QBqIAIvAaIDIiogNGoiNEF/ahD7g4CAAEEAIRoDQCAaQf//A3EgKkH//wNxTw0BIAJBoANqICsQg4SAgAAgAi0AoANBAUYNAwJAAkACQAJAAkACQCACLQChAyIiQf8AcUEKbCIALQC0pMmAACIYQX9qDgQCAwQBAAtBsK7JgABBDkHArsmAABCFgICAAAALQQAhDyACKQPYIyIfQv////8PVg0IQQAhE0EAIAIoAtQjIhkgH6ciBGsiHSAdIBlLG0EESQ0JAkAgGSAZIAQgGSAESRsiE2tBBEkNACACKALQIyATaigAACEZIC1BBBCEhICAACAZQRh0IBlBgP4DcUEIdHIgGUEIdkGA/gNxIBlBGHZyciEZDAQLIAJBADYCoAMgLSACQaADakEEEIWEgIAAIAIoAqADIhlBGHQgGUGA/gNxQQh0ciAZQQh2QYD+A3EgGUEYdnJyIRkMAwsgAkGgA2ogLRCDhICAACACLQCgAw0GIAItAKEDIRkMAgsgAkGgA2ogLRD6g4CAACACLwGgAw0FIAIvAaIDIRkMAQsgAkGgA2ogLRCDhICAACACLQCgAw0EIAItAKEDIRkgAkGgA2ogLRD6g4CAACACLwGgA0EBRg0EIBlBEHQgAi8BogNyIRkLQQAgAEGwpMmAAGoiAC8BAiAZIBhBA3QiHSAALQAFIhggAC0ABiITamt2QX8gE3RBf3NxaiITayATIAAtAAgbIhMgFmoiFiEEQQAgAC8BACAZIB0gGGt2QX8gGHRBf3NxaiIZayAZIAAtAAcbIgAgFWoiFSEZIBYhGCAVIR0CQCAeQQFxRQ0AIBbBIhggJ8EiGSAYIBlKGyEEIBXBIh0gJsEiGSAdIBlKGyEZIBggJcEiHiAYIB5IGyEYIB0gBcEiHiAdIB5IGyEdCyAdIQUgGCElIBkhJiAEIScgIsAhBEEQIRhBACEZAkACQCAAQf//A3EiHQ0AQQAhHQwBCwJAIB1BgAJJDQACQCAdQYD+A0sNACACQbDXAGogABD7g4CAAEEAIR1BACEYDAILQQAhGCACQbDXAGpBACAAaxD4g4CAAEECIR0MAQsgAkGw1wBqIAAQ+IOAgABBAiEdCyAEQX9KIQRBICEAAkAgE0H//wNxIh5FDQACQAJAAkAgHkGAAkkNACAeQYD+A0sNASACQajDAGogExD7g4CAAEEAIRlBACEADAMLIAJBqMMAaiATEPiDgIAADAELQQAhACACQajDAGpBACATaxD4g4CAAAtBBCEZCyAaQQFqIRogAkHY5QBqIAogBHIgHXIgGHIgGXIgAHIQ+IOAgABBASEeDAALCwsgAkGgA2ogLRCChICAACACLwGgA0EBRg0AIAJBoANqIDAgAkHA1gBqIAIvAaIDIgAQ/YOAgABBACEPQQAhEyACKAKgAw0CAkAgAigC8CMgAigC9CMgCxD8g4CAAC0AAEEBRw0AIAJBoANqIA4Q+oOAgAAgAi8BoANBAUYNASACLwGiAyEFIAJBoANqIA4Q+oOAgAAgAi8BoANBAUYNASACLwGiAyElIAJBoANqIA4Q+oOAgAAgAi8BoANBAUYNASACLwGiAyEmIAJBoANqIA4Q+oOAgAAgAi8BoANBAUYNASACLwGiAyEnCyACQZDlAGogDRD7g4CAACACQZDlAGogBRD7g4CAACACQZDlAGogJRD7g4CAACACQZDlAGogJhD7g4CAACACQZDlAGogJxD7g4CAACACQZDlAGogAigCxGUgAigCyGUQgISAgAAgAkGQ5QBqIAAQ+4OAgAAgAkGQ5QBqIAIoAsRWIAIoAshWEICEgIAAIAJBkOUAaiACKALcZSACKALgZRCAhICAACACQZDlAGogAigCtFcgAigCuFcQgISAgAAgAkGQ5QBqIAIoAqxDIAIoArBDEICEgIAAQQMhE0EBIQ8MAgtBACEPC0EAIRMLIAIoAqhDIAIoAqxDELmAgIAAIAIoArBXIAIoArRXELmAgIAAIAIoAthlIAIoAtxlELmAgIAAIAIoAsBWIAIoAsRWELmAgIAAIAIoAsBlIAIoAsRlELmAgIAAIA9FDRIMAQsgAkGgA2ogLRCChICAACACLwGgAw0RIAJBkOUAaiACLwGiAyIAEPuDgIAAIAJBoANqIDAgAkGQ5QBqIAAQ/YOAgAAgAigCoAMNEQsgC0EBaiELIAJBkOUAahCBhICAAAwACwtBACETDA8LICIgMyAaQeSvyYAAEJyAgIAAAAsgHSAiIBpB1K/JgAAQnICAgAAACyAFIB0gGkHEr8mAABCcgICAAAALIBkgBSAaQbSvyYAAEJyAgIAAAAsgBCAZIBpBpK/JgAAQnICAgAAACyATIAQgGkGUr8mAABCcgICAAAALIBggEyAaQYSvyYAAEJyAgIAAAAsgHiAYIBpB9K7JgAAQnICAgAAAC0EkIB4gGkHkrsmAABCcgICAAAALQZCyyYAAQSsgAkGo5QBqQYCyyYAAQdSuyYAAEIOBgIAAAAsgAkEANgKgAyACQbDXAGpB0K7JgAAgAkGgA2pB9K/JgAAQhoSAgAAACyAZIAAgLkGIsMmAABCcgICAAAALIAIgAigCoFciATYCoEMCQCABIBRHDQAgAiACLwGaVzsBnAMgAi0AmVchEyACLQCYVyEBIAIoApxXIR0MBgsgAkEANgKgIyACQaDDAGogAkHc5gBqIAJBoCNqQdCwyYAAEIaEgIAAAAtBACETCyACKAKoZSACKAKsZRC5gICAACACKAKQZSACKAKUZRC5gICAAAtBBCEBDAELAkACQAJAIBNB/wFxIhNB5QBGDQAgE0HtAEYNAQwICyAWQeQARw0HIB1B/wFxQeEARw0HAkAgGSAaaiIWIBlJDQAgFiAuTQ0CCyAZIBYgLkGYsMmAABCcgICAAAALIBZB+ABHDQYgHUH/AXFB9ABHDQYgGEEBcUUNBkEDIQFBuLDJgAAhHQwBCyACKALwViEWIAJB6NYAaiAvIBlqIBoQgISAgAAgAkEwaiAWIAIoAuxWIAIoAvBWQaiwyYAAEIeEgIAAAkAgAigCMCIaIAIoAjQiFUEAEIiEgIAARQ0AQQIhAQwBCyAaIBUQ/oOAgAAhGiACIBU2AqwjIAIgFjYCqCMgAiAaNgKkIyACIABB//8DcUGAgISjBnI2AqAjIAJBmNcAaiACQaAjahD/g4CAACACQejWAGoQgYSAgAAMBgsgAigCmFcgAigCnFcQiYSAgAAgAiACLwGeAzsBnAMgI0UNAUEWIRQLIAIgEzoAgVcgAiABOgCAVyACIBQ2AohXIAIgHTYChFcgAiACLwGcAzsBglcgAkEgaiAMIAIoAuxWIhkgAigC8FYiGEGwr8CAABCegICAACACIAIoAiQiHDYCrEMgAiACKAIgNgKoQwJAAkACQAJAIANB9OiNswZHDQAgAigCiAMiEyACKAKMAyIaQQR0IgBqIQQgEyEBAkADQCAARQ0BIAEoAgghFiABKAIEIRUgAiACQYDXAGo2AqADIAIgAkGgA2o2AqAjAkAgFkECSQ0AAkAgFkEVSQ0AIBUgFiACQaAjahCNgoCAAAwBCyAVIBZBASACQaADahD5gYCAAAsgAUEQaiEBIABBcGohAAwACwsgAigCiFchGSACKAKEVyEYAkAgHCATIBoQ8oOAgABJDQAgAkGowwBqQYivwIAAQQQQhoGAgAAgAkGowwBqQYCABBCIgYCAACACQajDAGogGhCIgYCAACAaQQR0IQEgGkECdEEMaiEAIBMhFgJAA0ACQCABDQACQANAIBMgBEYNASATKAIEIQAgAkEQaiATKAIIIhZBBEEQEJiAgIAAIAJBADYCqCMgAiACKAIUIho2AqQjIAIgAigCECIBNgKgIwJAAkACQCAWIAFNDQAgAkGgI2pBACAWQQRBEBDtgICAACACKAKkIyEaIAIoAqgjIRUMAQtBACEVIBZFDQELIBogFUEEdGohAQNAIBkgAC8BACIaTQ0GIAEgGCAaQQR0aiIaKQIANwIAIAFBCGogGkEIaikCADcCACAAQQJqIQAgAUEQaiEBIBVBAWohFSAWQX9qIhYNAAsLIAJBoANqQQhqIBU2AgAgAiACKQKgIzcDoAMgAkGgI2ogEygCDCACQaADahCKhICAACACQaAjaiACQajDAGoQhYGAgAAgAigCoCMgAigCpCMQiYSAgAAgE0EQaiETDAALCyACQbzXAGogAkHw1gBqKAIANgIAIAIgAikC6FY3ArRXIAIoAoBXIAIoAoRXEImEgIAADAULIAFBcGohASACQajDAGogABCIgYCAACAAIBZBCGooAgBBBHRqQQxqIQAgFkEQaiEWDAALCyAaIBlBjK/AgAAQ0ICAgAAAC0GwrsCAAEHIAEH4rsCAABCFgICAAAALIAJBoCNqIAhBGHQgBkEQdEGAgPwHcXIgB0EIdEGA/gNxciADQf8BcXIgAkGA1wBqEIqEgIAAIAJBoCNqIAJBqMMAahCFgYCAACACKAKkIyEaIAIoAqgjIQEgAkHoyoWjBjYCsFcgAUUNAUEAIQACQANAAkAgAUEBSw0AIAJBsNcAaiAaIABBBHRqIgEoAgAQi4SAgABB/wFxRQ0CDAQLIAFBAXYiFSAAaiEWIAAgFiACQbDXAGogGiAWQQR0aigCABCLhICAAEH/AXFBAUYbIQAgASAVayEBDAALCyACQaADakEMaiABQQhqKQIAIh83AgAgAigCsAMhASAZIBgQ/oOAgAAhACACQRhqIB+nIhYgASAWaiAZIBhBwK/AgAAQn4CAgAACQCACKAIYIAIoAhxBut/CjXsgAGsQiISAgABFDQAgAkGgA2pBCGoiAUEANgIAIAJCgICAgBA3AqADIAJBoANqQeizyYAAQf6zyYAAEOOAgIAAIAJBsNcAakEMaiABKAIANgIAIAIgAikCoAM3ArRXDAMLIAIoAqAjIBoQiYSAgAAgAkGw1wBqQQxqIAJB6NYAakEIaigCADYCACACIAIpAuhWNwK0VwsgAigCkAMgAigClAMQuYCAgAAgAkGAA2oQwYGAgAAgFyASELaBgIAAIAIoArhXIRUgAigCvFchACACKAK0VyEaDBsLIAJBpANqQeCvwIAAQRQQv4CAgAAgAiACKQKkAzcCtFcLIAIoAqAjIBoQiYSAgAAMAQsCQAJAIAFBA0cNACACQYCAgIB4NgK0VyACIB02ArhXDAELIAJBADYCqCMgAkKAgICAEDcCoCMCQAJAAkACQAJAIAEOBQABAhIDAAsgAkGgI2pB97TJgABBlbXJgAAQ44CAgAAMAwsgAkGgI2pBlbXJgABBzbXJgAAQ44CAgAAMAgsgAkGgI2pB6LPJgABB/rPJgAAQ44CAgAAMAQsCQAJAAkAgE0H/AXEOAwABAgALIAJBoCNqQf6zyYAAQY60yYAAEOOAgIAADAILIAJBoCNqQY60yYAAQaq0yYAAEOOAgIAADAELIAJBoCNqQaq0yYAAQbS0yYAAEOOAgIAACyACQbTXAGoiASACKQKgIzcCACABQQhqIAJBoCNqQQhqKAIANgIACyACKALsViEZCyACKALoViAZELmAgIAADAcLIBZB4QBHDQAgE0H/AXFB7wBHDQAgHUH/AXFB4wBGDQELIBwgFS8AADsAACAcQQJqIBVBAmotAAA6AAAgAiAYOgCwIyACIBk2AqwjIAIgGjYCqCMgAiAENgKkIyACIAA2AqAjIAJBoCNqIC8gLiACQejWAGogAkGY1wBqEPWDgIAACyABQRRqIQEgG0FsaiEbDAALCyACQQA2AqhlDAQLIAJBADYCoCMgAkHY5gBqQYSwyYAAIAJBoCNqQeCwyYAAEIaEgIAAAAsgAkEANgLIViACQoCAgIAQNwLAViACQZCxyYAANgKsQyACQqCAgIAONwKwQyACIAJBwNYAajYCqEMgAkG01wBqIRYCQAJAAkACQAJAAkAgAEH/AXEOBAADAQIACyACIAE2AsBlQRQQnYGAgAAiAUUNCSABQRBqQQAoAKGXyYAANgAAIAFBCGpBACkAmZfJgAA3AAAgAUEAKQCRl8mAADcAACACQRQ2AuBlIAIgATYC3GUgAkEUNgLYZSACQQM2AqQjIAJBlJjJgAA2AqAjIAJCAjcCrCMgAkGBgICAAK1CIIYgAkHA5QBqrYQ3A6gDIAJBoICAgACtQiCGIAJB2OUAaq2ENwOgAyACIAJBoANqNgKoIyACQcDWAGpBkLHJgAAgAkGgI2oQoIKAgAAhAQJAIAIoAthlIgBFDQAgAigC3GUgAEEBEMCDgIAACyABDQYMAwsgAkGowwBqIAEoAgAgASgCBBCegYCAAA0FDAILIAEoAgAgAkGowwBqIAEoAgQoAhARgYCAgACAgICAAEUNAgwECyACIABBBnZB/AdxIgEoAvy1yYAANgLcZSACIAEoAqS3yYAANgLYZSACQQE2AqQjIAJBnJHJgAA2AqAjIAJCATcCrCMgAkGHgICAAK1CIIYgAkHY5QBqrYQ3A6ADIAIgAkGgA2o2AqgjIAJBwNYAakGQscmAACACQaAjahCggoCAAA0DCyAWIAIpAsBWNwIAIBZBCGogAkHA1gBqQQhqKAIANgIADAELIBYgAikCwFY3AgAgFkEIaiACQcDWAGpBCGooAgA2AgAgASgCACEWAkAgASgCBCIAKAIAIhVFDQAgFiAVEYiAgIAAgICAgAALAkAgACgCBCIVRQ0AIBYgFSAAKAIIEMCDgIAACyABQQxBBBDAg4CAAAsgAigCkAMgAigClAMQuYCAgAAgAkGAA2oQwYGAgAAMBAtBuLHJgABBNyACQajlAGpBqLHJgABB8LHJgAAQg4GAgAAAC0EAIS4gAkEANgLAZSACIAIpA7BRNwPAVgJAIAIoApRUQQBIDQACQAJAAkAgISAkakGAIEsNACACKAKQZUGAIEsNAAJAIAIoAvxSIhYNACACICQ2AqhRIAJBoANqIR5BgCAhHEEBIQAgISEVDAMLQQghHCACQcDWAGohHkECIQBBACEVICRBCCAWayIBICQgAUkbIgFFDQIgAkGQAmogAkHA1gBqIBYgASAWakG8vsiAABCOhICAACABICFqIhYgAUkNASAWQYEgTw0BIAIoApACIAIoApQCIAJBoANqICFqIhYgAUHcvsiAABCPhICAACACQYgCaiAtIAIoAvxSIhogGiABakHsvsiAABCOhICAACACKAKIAiACKAKMAiAWIAFB/L7IgAAQj4SAgAAMAgsgAkFsNgKUVAwCCyAhIBZBgCBBzL7IgAAQnICAgAAACyACIBU2AqRRA0ACQAJAAkACQAJAAkACQAJAIABBf2oOAgACAQtBASEAIAItALJUIQEDQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQf8BcQ4ZAAECAwQXFQwMDAwUEwoLCgoJCBIHEQYQBQALICIgHiAcEJCEgIAADQ4MHgsgIkEGICsgHiAcEJGEgIAARQ0dIAIoAohUQWFqQWtPDQxBcyEADB4LIAJBASACKAKIVHRBcGoiATYChFMgAiABIAIoAoRUazYCiFMgAkHIAGpBqBkQ8YOAgAAgAigCSCEWIAIoAkwhASACKAKwUiACKAK0UhC6gYCAACACIAE2ArRSIAIgFjYCsFIgAQ0KQWIhAAwdCyACQYCAgAg2AthSIAJCgICAiICAgIABNwPQUiACQQA2ArBTIAJCATcC7FIgAkIBNwLkUiACQgE3AtxSIAJBATYCyFIgAkKBgICAEDcDwFIgAkHgAGoQyIGAgAAgAigCpFIhASACKAKgUiEWIAIgAikDYDcDoFIgFiABEMmBgIAAIAJB2ABqEMiBgIAAIAIoAqxSIQEgAigCqFIhFiACIAIpA1g3A6hSIBYgARDJgYCAACACQdAAahDIgYCAACACKAKMUiEBIAIoAohSIRYgAiACKQNQNwOIUiAWIAEQyYGAgAAgAkIANwKcUyACQQA7AaxUIAJB4MjIgAA2ApBUICcQkoSAgAAgJhCShICAACAlEJKEgIAAQQQhASACQQQ6ALJUDBQLIAJBADYCsFcgAi0As1QhAQNAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUH/AXEOCAABAwQFAgcIAAsgIkEBIAJBsNcAaiAeIBwQkYSAgABFDScgAiACLQCwVyIBOgCuVCACQQA7AK9UIAJBADYCsFNBAUECIAEbIQEMCwsgIkEBIAJBsNcAaiAeIBwQkYSAgABFDSYgAigCsFcNCEECIQEMCgsgIkEBIAJBsNcAaiAeIBwQkYSAgABFDSUgAigCsFdFDQNBfiEADCYLQQIhACAiQQIgAkGw1wBqIB4gHBCRhICAAEUNJSACQQA2AvhSIAIgAigCsFciAEEEajoAsVRBAyEBIABBA0cNCCACQQE6ALBUQQUhAQwICyACKAL4UiIBQQJ0IQAgAi0AsVQhFgNAIAEgFkH/AXFODQcgIkEEIAJBsNcAaiAeIBwQkYSAgABFDQUgAUEBaiEBIAIoArBXIRUCQCACLQCxVCIWQQVJDQAgASAWRw0AIBUNAEF/IQAMJgsgAiACKAKwUyAVIABBHHF0cjYCsFMgAEEEaiEADAALCwJAIAItAK5UIAItALBUQf8BcXINACAiQQEgAkGw1wBqIB4gHBCRhICAAEUNIyACIAIoArBXOgCvVAsgAiACKAKwU0EBajYCsFMMBAtBBiEBDAULQQIhACAiQQIgAkGw1wBqIB4gHBCRhICAAEUNISACKAKwVyIBRQ0CIAIgAToAsVRBByEBDAQLIAIoAvhSIgFBA3QhACACLQCxVCEWA0AgASAWQf8BcU4NAyAiQQggAkGw1wBqIB4gHBCRhICAAEUNASABQQFqIQEgAigCsFchFQJAIAItALFUIhZBAkkNACABIBZHDQAgFQ0AQX0hAAwiCyACIAIoArBTIBUgAEEYcXRyNgKwUyAAQQhqIQAMAAsLIAIgATYC+FIMHgsgAkEAOgCzVAJAAkACQAJAAkACQAJAIAItALBUIAItAK9UQf8BcXJFDQBBcSEAICIQk4SAgABFDSUgAi0AsFQNAQsgAigCsFMiAUUNIgJAIAIoAoRSDQAgAkEBIAIoAohUdCIWNgKQUyACLQCuVCEAAkAgAi0Ar1RFDQBBwAAgAigCoFEiGmsiFUEHcQ0DAkACQCABIBVBA3YiGUkNAEF/IRUgASAZayIaIAIoAqhRTw0BAkAgAigCpFEgGmoiFSAcTw0AIB4gFWotAAAhFQwCCyAVIBxB5IrIgAAQ0ICAgAAACyACKQOYUSAaQT9xrYggAUEDdEE4ca2Ip0H/AXEhFQtBASAAIBVBA3FBA0YbIAAgFUF/RxshAAsgAigCnFIhGQJAAkAgAigChFQiFSAWQXBqIhpLDQAgFSAZSw0FIAIoAphSIhMhBAwBCyAVIBprIRggFSAZSw0FIAIgGjYChFQgAigCmFIiEyAYaiEEIBohFQsCQCAAQf8BcUUNACABIBVqQQF0IQAgFiEBAkADQCABQSFIDQEgASAASA0BIAFBAXYhAQwACwsgAiABIBYgASAWSBsiFjYCkFMLIAIgFkF/aiIYNgKUUyACQfgAaiAWQcIAahCUhICAACACKAJ4IRogAigCfCEBIAIoAoBSQQAQyYGAgAAgAiABNgKEUiACIBo2AoBSQWUhACABRQ0lIBggAU8NBSAaIBhqQQA6AAAgFkF+aiIAIAFPDQYgGiAAakEAOgAAAkAgFUUNACACQfAAaiAYQQAgFWtxIgAgACAVaiAaIAFBzMTIgAAQn4CAgAAgAigCcCACKAJ0IAQgFUHcxMiAABCPhICAAAsgGUUNACACQegAahDIgYCAACACIAIpA2g3A5hSIBMgGRDJgYCAAAsCQCACLQCvVA0AIAJBEToAslQgAkEANgL4UkEBIQAMJQsgAkELOgCyVEEBIQAMJAsgAkEMOgCyVEEBIQAMIwtB9IrIgABBK0Ggi8iAABCFgICAAAALQQAgFSAZQYzEyIAAEJyAgIAAAAsgGCAVIBlBnMTIgAAQnICAgAAACyAYIAFBrMTIgAAQ0ICAgAAACyAAIAFBvMTIgAAQ0ICAgAAAC0EEIQELIAIgAToAs1QMAAsLAkAgAigChFJFDQAgAkGw1wBqIAJBkOUAaiACQaAjaiACQajlAGogAkHA5QBqQQEgAkGowwBqEJWEgIAAIAIoArBXIgBBAUcNG0EBIS4gAkEBNgKUVAwcCyACIAA2ApRUIABBAUYhLgwbC0E+QRggAi0AuFYiABsgAigCtFMiAUEBanQgAigCuFMiGmoiFSEWAkACQCAARQ0AIAJCjICAgMADNwLgZSACQoCAgIDAADcC2GUgAkLkgYCAgDU3ArhXIAJCyYCAgOAPNwKwVyABQQNLDQFBASABdCEWAkAgGkFwaiIAIAJB2OUAaiABQQJ0IgFqKAIAIhpJDQAgAkGw1wBqIAFqKAIAIQECQCAAIBogFmoiFksNACAWIAFqIRYMAgsgASAAaiEWDAELIBYgAGogAkGw1wBqIAFqKAIAaiEWCyACKALIUkECdEEBIAJBqMMAaiAeIBwQloSAgAAiAEEBRw0aICdBgAJBgAIgAigCjFQQl4SAgAAgJkHABUHABSACKALEUhCXhICAACAlIBUgFiACKALAUxCXhICAAAJAAkAgAigCxFFFDQAgAigC3FFFDQAgAigC9FENAQsgAkFhNgKUVAwcC0EXIQEgAkEXOgCyVCACQQA2AvhSQQEhAAwSCyABQQRBjMHIgAAQ0ICAgAAACyACKAL4UiEBIAJBADYCsFcgAigCzFIhFiACQbABaiABQbgIbCACKAK4UiACKAK8UkHMv8iAABCYhICAACACQagBaiACLQD0UiAWIAIoArABIAIoArQBICIgHiAcEJmEgIAAQQIhAQJAICwgIiACQbDXAGogAi0AqAEgAigCrAEgHiAcEJqEgIAARQ0AAkAgAigC+FIiAUEDSQ0AIAFBA0Hcv8iAABDQgICAAAALICkgAUECdGogAigCsFc2AgAgAkEROgCyVCACIAIoAvhSQQFqNgL4UiAAIQELIAEhAAwYCyACKAL4UiEVIAJBmAFqEMqBgIAAIAIoArRSIRYgAigCsFIhASACIAIpA5gBNwOwUgJAIAIoAvhSIgBBA0kNACAAQQNBvL/IgAAQ0ICAgAAACyAjIABBAnRqKAIAQQJqIgAgACABIBYgFUG4CGxBACACQajDAGogHiAcEJuEgIAAIQAgAigCtFIhFSACIBY2ArRSIAIoArBSIRYgAiABNgKwUiAWIBUQuoGAgAAgAEEBRw0XQRMhAQwNCwJAAkACQAJAIAIoAvhSIgFBAkoNACABQQNPDQFBAiEAICogIiAjIAFBAnRqIB4gHBCchICAAEEBRw0aIAIoAvhSIgFBAksNAiAjIAFBAnRqIgEgASgCAEEBajYCACACKAL4UiIBQQNPDQMCQCAjIAFBAnRqKAIAQQJJDQBBEiEBDBELQQEhACACIAFBAWo2AvhSDBoLIAJBBToAslQMGQsgAUEDQYy/yIAAENCAgIAAAAsgAUEDQZy/yIAAENCAgIAAAAsgAUEDQay/yIAAENCAgIAAAAsgAkGw1wBqIAJBkOUAaiACQaAjaiACQajlAGogAkHA5QBqQQAgAkGowwBqEJWEgIAAIAIoArBXIgBBAUcNFQJAAkACQCACLQC5VkEBRw0AIAJBsNcAaiACKAKAUiACKAKEUiACKAKQU0G0jciAABCdhICAACACKAK4VyEWIAIoArxXIQAgAkHY5QBqIAIoArBXIAIoArRXIAIoAoBTIgFBxI3IgAAQnYSAgAAgASAASw0BIAIoAthlIAIoAtxlIBYgAUHkjciAABCPhICAACACQQA6ALlWCwJAIAIoApBTQQEgAigCiFR0Rw0AIAIgAigChFM2AoxTCwJAAkACQCACLQCyVEFxag4CAAECC0EBIQAgAkEOQQcgAigCsFNBAUgbOgCyVAwZCyACQQo6ALJUQQEhAAwYCyACKAL4UkUNASACQQg6ALJUQQEhAAwXCyACQQA2AsBXIAJBATYCtFcgAkHs5ciAADYCsFcgAkIENwK4VyACQbDXAGpB1I3IgAAQ54CAgAAAC0EBIQAgAkEOQQkgAigCsFNBAUgbOgCyVAwVCyACQajDAGoQx4GAgAACQCACLQCuVEUNACAiEJOEgIAAIQECQCACKAL8Ug0AICIQnoSAgAAgAigCpFEhISACKAKoUSEkCyAAQXEgARshAEEYIQEgAkEYOgCyVAwNCyACQQM6ALJUDBQLQQAgAkGowwBqIB4gHBCfhICAACIAQQJHDRNBASACQajDAGogHiAcEJ+EgIAAIQAMEwsgAkHAAGpBqBkQ8YOAgAAgAikDQCEfIAIoArhSIAIoArxSELqBgIAAQQMhASACQQM6ALJUIAIgHzcDuFIMCgtBAiEBIAJBAjoAslQMCQsgAi0AuFYhFiACQQA6ALhWIAIgAigCoFEiAUEBaiIANgKgUQJAAkAgAikDmFEiHyABQT9xrYinQQFxDQAgAkEQNgKIVAwBCyACIAFBBGoiFTYCoFECQAJAAkACQCAfIABBP3GtiKdBB3EiAA0AIAIgAUEHaiIaNgKgUSAfIBVBP3GtiKdBB3EiAA4CAgEDCyACIABBEWo2AohUDAMLQXMhACAWQQFxRQ0TIAIgAUEIajYCoFEgHyAaQT9xrYinQQFxDRNBASEBIAJBAToAuFYMCQsgAkERNgKIVAwBCyACIABBCHI2AohUC0ECIQEMBgsCQAJAAkACQAJAIAIoAvhSIi8OAwABAgMLIAJB4AFqEMqBgIAAIAIoAsRRIRYgAigCwFEhFSACIAIpA+ABNwPAUSACQdgBahCghICAACACKAK8USEEIAIoArhRIRogAiACKQPYATcDuFEgDyEBIAwhACAJIRkMAwsgAkHwAWoQyoGAgAAgAigC3FEhFiACKALYUSEVIAIgAikD8AE3A9hRIAJB6AFqEKCEgIAAIAIoAtRRIQQgAigC0FEhGiACIAIpA+gBNwPQUSARIQEgDiEAIAshGQwCCyACQYACahDKgYCAACACKAL0USEWIAIoAvBRIRUgAiACKQOAAjcD8FEgAkH4AWoQoISAgAAgAigC7FEhBCACKALoUSEaIAIgAikD+AE3A+hRIBAhASANIQAgCiEZDAELQWEhACACQWE2ApRUDBALIBkvAQAhGCAALwEAIRMgAS8BACEBAkACQCACLQC6VkEBRw0AIAIoAuxTIQAMAQsgAkEBOgC6ViACQgA3AuxTQQAhAAsCQAJAIAAgAUsNACAEIAFPDQELIAAgASAEQczAyIAAEJyAgIAAAAsgAUECdCEZIABBAnQhAQJAA0ACQCAZIAFHDQBBASEADAILIAJBADYCsFcgEyAYIBUgFiACKALwUyACQbDXAGogAkGowwBqIB4gHBCbhICAACIAQQFHDQEgGiABaiACKALwUyIANgIAIAIgACACKAKwV2o2AvBTIAIgAigC7FNBAWo2AuxTIAFBBGohAQwACwsgAkHQAWoQyoGAgAAgAigC1AEhGSACKALQASEBAkACQAJAAkAgLw4CAAECCyACKALEUSEYIAIgFjYCxFEgAigCwFEhFiACIBU2AsBRIBYgGBC6gYCAACACQcABahCghICAACACKAK4USEYIAIgGjYCuFEgAigCvFEhGiACIAQ2ArxRIAIoAsQBIRUgAigCwAEhFiAYIBoQoYSAgAAMAgsgAigC3FEhGCACIBY2AtxRIAIoAthRIRYgAiAVNgLYUSAWIBgQuoGAgAAgAkHIAWoQoISAgAAgAigC0FEhGCACIBo2AtBRIAIoAtRRIRogAiAENgLUUSACKALMASEVIAIoAsgBIRYgGCAaEKGEgIAADAELIAIoAvRRIRggAiAWNgL0USACKALwUSEWIAIgFTYC8FEgFiAYELqBgIAAIAJBuAFqEKCEgIAAIAIoAuhRIRggAiAaNgLoUSACKALsUSEaIAIgBDYC7FEgAigCvAEhFSACKAK4ASEWIBggGhChhICAAAsCQCAAQQFGDQAgFiAVEKGEgIAAIAEgGRC6gYCAAAwQCyACQQA6ALpWIBYgFRChhICAACABIBkQuoGAgABBASEAIAIgAigC+FJBAWoiATYC+FIgAUECTA0PIAJBqMMAahCihICAACACQQc6ALJUIAJBADsBmFQgAkEANgKgUwwPCyACKALAUkEGdEEAIAJBqMMAaiAeIBwQloSAgAAiAEEBRw0OQQAhAQJAA0AgAUEgRg0BIB0gAWpBADYCACABQQRqIQEMAAsLQQAhGUEAIQQCQANAIAQgAigCwFJPDQECQCAEQQZ0IgEgAigCpFIiAE8NACACKAKgUiIWIBlqIRggFiABai0AACEWQQAhGkEAIQEDQAJAAkACQAJAAkAgAUHAAEkNAAJAIBoNACAEQQV2IQEgBEH/AUsNAiAdIAFBAnRqIgEgASgCAEEBIAR0cjYCAAsgGUHAAGohGSAEQQFqIQQMBwsgGSABaiIVIABPDQEgFUEBaiITIABPDQICQCAVQQJqIhMgAEkNACATIABBgMjIgAAQ0ICAgAAACyAVQQNqIhUgAEkNAyAVIABBkMjIgAAQ0ICAgAAACyABQQhB0MfIgAAQ0ICAgAAACyAVIABB4MfIgAAQ0ICAgAAACyATIABB8MfIgAAQ0ICAgAAACyAaIBggAWoiFUEBai0AACAWcyAVLQAAIBZzciAVQQJqLQAAIBZzciAVQQNqLQAAIBZzckH/AXFyIRogAUEEaiEBDAALCwsgASAAQcDHyIAAENCAgIAAAAtBFiEBDAQLIAIoAvhSIQAgAkGgAWoQyoGAgAAgAigCvFIhASACKAK4UiEWIAIgAikDoAE3A7hSQRpBGiAWIAEgAEG4CGxBACACQajDAGogHiAcEJuEgIAAIQAgAigCvFIhFSACIAE2ArxSIAIoArhSIQEgAiAWNgK4UiABIBUQuoGAgAAgAEEBRw0NQRQhAQwDCyACKAKwUyEBAkADQCABQQBMDQEgAkEANgKwVyAiQQggAkGw1wBqIB4gHBCRhICAAEUNDSACIAIoArBTQX9qIgE2ArBTDAALCyAAQQFHDQwMCgsgAi0Au1YhAQJAAkADQAJAAkAgAUEBcUUNACACQbDXAGogAkGQ5QBqIAJBoCNqIAJBqOUAaiACQcDlAGpBACACQajDAGoQlYSAgAAgAigCsFciAEEBRw0QQQAhASACKAKQU0EBIAIoAohUdEcNASACIAIoAoRTNgKMUwwBCyACKAKQUyEWIAIoArBTIRggAigCqFEhBCACKAKgUSEBIAJBkAFqIAIoAoBTIhMgAigCgFIgAigChFJBsMfIgAAQh4SAgABBACEAIAIoAqBRIRogAikDmFEhHyACKAKUASEVIAIoApABIRkgFiATayAEQcAAIAFrQQN2aiIEIBggBCAYSBsiGCAYIBNqIBZKGyIEIRYCQANAAkACQCABQb9/akF3Sw0AIBZBAEcNAQsgAiAaNgKgUUEAIQFBACAcIAIoAqRRIi9rIhogGiAcSxshGiAeIC9qIRggGSAAaiEZA0AgASAWTw0DIBogAUYNBwJAIAAgAWoiEyAVTw0AIBkgAWogGCABai0AADoAACABQQFqIQEMAQsLIBMgFUHQi8iAABDQgICAAAALAkAgFSAARg0AIBZBf2ohFiAZIABqIB8gAUE/ca2IPAAAIABBAWohACABQQhqIhohAQwBCwsgAiAaNgKgUSAVIBVB4IvIgAAQ0ICAgAAACyACIC8gFmo2AqRRIAIgAigCqFEgFms2AqhRIAIgAigCsFMiFSAEazYCsFMgAigCiFQhAEEBIQEgAiACKAKAUyAEaiIWNgKAUyAWQQEgAHRIDQILIAIgAToAu1YMAAsLQQIhACAVIARHDQwMCgsgLyABaiAcQcCLyIAAENCAgIAAAAsgAkGIAWogAigC+FIiFiACKALAUiACKAKoUiACKAKsUkH8j8iAABCfgICAACACKAKMASEBIAIoAogBIQACQANAIAFFDQEgAkEANgKwVwJAICJBAiACQbDXAGogHiAcEJGEgIAARQ0AIAAgAigCsFc6AAAgAUF/aiEBIBZBAWohFiAAQQFqIQAMAQsLIAIgFjYC+FIMCgtBFSEBCyACIAE6ALJUQQEhAAwBCyACQQA2ArBXICJBBiACQbDXAGogHiAcEJGEgIAARQ0HIAIgAigCsFciFkEDcSIBNgK0UyACIBZBAnYgAXRBEGo2ArhTIAIgARCjhICAADYCvFMgAkGAAWogAigCwFIQlISAgAAgAigCgAEhFiACKAKEASEBIAIoAqhSIAIoAqxSEMmBgIAAIAIgATYCrFIgAiAWNgKoUgJAIAENAEFrIQAMCQtBBiEBIAJBBjoAslQgAkEANgL4UgwACwsCQCACKAL8UkUNACACQQA2AvxSDAILICIQnoSAgAAgAigCpFEhISACKAKoUSEkDAELAkAgAigChFJFDQAgAkGw1wBqIAJBkOUAaiACQaAjaiACQajlAGogAkHA5QBqQQEgAkGowwBqEJWEgIAAIAIoArBXIgBBAEgNAQsCQAJAAkACQAJAAkAgAigC/FIiAQ0AIAIoAqRRIiFBgCAgIUGAIEsbIRZBACEkIAIoAqhRIQFBACEAA0AgAUUNAiAWICFGDQgCQCAAQQhPDQAgLSAAaiACQaADaiAhai0AADoAACACIAIoAvxSQQFqIgA2AvxSIAFBf2ohASAhQQFqISEMAQsLIABBCEH8v8iAABDQgICAAAALIAIoAqhRRQ0HICRFDQAgIUGAIE8NASACIAJBoANqICFqLQAAIgA6AJhXIAFBCE8NAiAtIAFqIAA6AAAgAigC/FIiAUEITw0DIAJBwNYAaiABaiIWLQAAIABB/wFxRg0EIAJBADYCsFcgFiACQZjXAGogAkGw1wBqEKSEgIAAAAtBAiEuIAJBAjYClFQMCgsgIUGAIEGMwMiAABDQgICAAAALIAFBCEGcwMiAABDQgICAAAALIAFBCEGswMiAABDQgICAAAALQQEhACACIAFBAWoiATYCqFEgAiABNgL8UiAkQX9qISQgIUEBaiEhDAULIAIgADYClFRBA0EAIABBA0YbIS4MBQsgFkGAIEHsv8iAABDQgICAAAALIAIgJDYCqFEgAkEANgL8UiACICE2AqRRIAJBoANqIR5BgCAhHEEBIQAMAgsgAkEOOgCyVEEBIQAMAQtBAiEADAALCyACKAKoZSIARQ0AIAJBoCNqIABqIRVBACEBIABBgSBJIRYDQAJAIAEgAEkNACACQYAgNgKQZSACQQA2AqhlDAILAkAgFkUNACACQZADaiACQaAjaiABaiAVEOOAgIAAIAAhAQwBCwsLIAEgAEGAIEG0sMCAABCcgICAAAsACyAXIBIQtoGAgAAMCQsgAkEANgKoIyACQoCAgIAQNwKgIyACQbTXAGohASASQQFxRQ0FDAYLIAJBoCNqIAJB+AJqEJuCgIAAAkAgAi0AoCNFDQAgAi0AoSNBAkchAAwECyACKAKkIyEZAkACQAJAAkAgFkHs3o2LBkYNACAWQefY5bMGRg0AIAFBwABPDQEMAgsgAUG/AUsNAQsgAkGgI2ogAkH4AmoQm4KAgAACQCACLQCgI0EBRw0AIAItAKEjQQJHIQAMBgsgAigCpCMhGkEBIRgMAQtBACEYIBkhGgsCQCAUIAIoAqADRw0AIAJBoANqEKWEgIAAIAIoAqQDIRILIBIgAGoiASAWNgIAIAFBEGogGDoAACABQQxqIBU2AgAgAUEIaiAaNgIAIAFBBGogGTYCACACIBRBAWoiFDYCqAMgAEEUaiEAIBogFWohFQwACwsgAiACKQKkIzcCuFcgAiABNgK0VwwFC0EAIQALIAIoAqADIAIoAqQDELaBgIAAIAJBADYCqCMgAkKAgICAEDcCoCMgAkG01wBqIQEgAA0BCyACQaAjakHNtcmAAEHmtcmAABDjgICAAAwBCyACQaAjakHmtcmAAEH7tcmAABDjgICAAAsgASACKQKgIzcCACABQQhqIAJBoCNqQQhqKAIANgIAC0EBIRVBACEAAkAgAigCtFciAUGAgICAeEYNACABIAIoArhXELmAgIAAC0EAIRoLIAJBCGpB6LnJgABBtKPAgAAQqoGAgAAgAigCDCEWIAIoAggiASgCACABQQRqIhkoAgAQuYCAgAAgASAANgIIIBkgFTYCACABIBo2AgAgFiAWKAIAQQFqNgIAIAJB4OYAaiSAgICAACAAC80BAQF/I4CAgIAAQRBrIgIkgICAgAAgAkEANgIMIAJCgICAgBA3AgQCQAJAAkACQAJAIAFB/wFxDgQAAQIDAAsgAkEEakG0tMmAAEHEtMmAABDjgICAAAwDCyACQQRqQcS0yYAAQda0yYAAEOOAgIAADAILIAJBBGpB1rTJgABB5LTJgAAQ44CAgAAMAQsgAkEEakHktMmAAEH3tMmAABDjgICAAAsgACACKQIENwIAIABBCGogAkEEakEIaigCADYCACACQRBqJICAgIAAC18CAX8CfiOAgICAAEEQayIBJICAgIAAIAFBCGoQoISAgAAgASkDCCECIAEQyoGAgAAgASkDACEDIABBADsBFCAAQQA2AhAgACADNwIIIAAgAjcCACABQRBqJICAgIAAC/sBAQR/I4CAgIAAQTBrIgIkgICAgAAgAkEgaiABQQBBAkEEELWEgIAAIAIoAiQhAwJAIAIoAiBBAUYNACACQQA2AhwgAiACKAIoIgQ2AhggAiADNgIUIAFBASABQQFLGyIFQX9qIQMCQAJAA0ACQCADDQAgAQ0CIAVBf2ohBQwDCyAEQQA7AQAgBEECakEAOgAAIANBf2ohAyAEQQRqIQQMAAsLIARBADoAAiAEQQA7AQALIAJBKGogBTYCACACIAIpAhQ3AyAgAkEIaiACQSBqELyEgIAAIAAgAikDCDcDACACQTBqJICAgIAADwsgAyACKAIoEKyCgIAAAAtBAQF/AkAgAQ0AQQwPCyAAQQhqIQBBACECA0AgAiAAKAIAQQR0akEQaiECIABBEGohACABQX9qIgENAAsgAkEMagtoAQN/AkAgASAAKAIIIgJNDQAgACABIAJrIgMQ/YCAgAAgA0F/aiEBIAAoAgQgACgCCCIEaiECAkADQCACQQA6AAAgAUUNASABQX9qIQEgAkEBaiECDAALCyAEIANqIQELIAAgATYCCAtmAQF/I4CAgIAAQRBrIgQkgICAgAAgBEEEaiABQQAgAiADELWEgIAAIAQoAgghAwJAIAQoAgRBAUcNACADIAQoAgwQrIKAgAAACyAAIAQoAgw2AgQgACADNgIAIARBEGokgICAgAALqwEBBH8jgICAgABBEGsiBSSAgICAAAJAAkAgACgCCCIGIAAoAgwiB2oiCCAGSQ0AIAggAk0NAQsgByAIIAJB8LDJgAAQnICAgAAACyAAKAIAIQAgASAHaiICIAYQ/oOAgAAhCCAFIAY2AgwgBSAINgIEIAUgADYCACAFIAMoAgg2AgggBCAFEP+DgIAAIAMgAiAGEICEgIAAIAMQgYSAgAAgBUEQaiSAgICAAAvEAQMCfwF+AX8jgICAgABBEGsiASSAgICAAAJAAkACQEEAQQAgACgCBCICIAApAwgiA6drIgQgBCACSxsgA0L/////D1YbIgJBAkkNACABIAAQvYWAgAAgASgCBEECSQ0BIAEoAgAvAAAhAiAAQQIQhISAgAAgAkEIdCACQQh2ciEADAILIAIQvoWAgAAACyABQQA7AQ4gACABQQ5qQQIQhYSAgAAgAS8BDiIAQQh0IABBCHZyIQALIAFBEGokgICAgAAgAAvwAQMCfwF+AX8jgICAgABBEGsiASSAgICAAAJAAkACQEEAQQAgACgCBCICIAApAwgiA6drIgQgBCACSxsgA0L/////D1YbIgJBBEkNACABIAAQvYWAgAAgASgCBEEESQ0BIAEoAgAoAAAhAiAAQQQQhISAgAAgAkEYdCACQYD+A3FBCHRyIAJBCHZBgP4DcSACQRh2cnIhAAwCCyACEL+FgIAAAAsgAUEANgIMIAAgAUEMakEEEIWEgIAAIAEoAgwiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnIhAAsgAUEQaiSAgICAACAACzkBAX8jgICAgABBEGsiAiSAgICAACACIAE6AA8gACACQQ9qIAJBEGoQ44CAgAAgAkEQaiSAgICAAAtYAQF/I4CAgIAAQRBrIgIkgICAgAAgAiABQRh0IAFBgP4DcUEIdHIgAUEIdkGA/gNxIAFBGHZycjYCDCAAIAJBDGogAkEQahDjgICAACACQRBqJICAgIAAC+QBAwJ/AX4BfyOAgICAAEEQayICJICAgIAAAkACQEEAQQAgASgCBCIDIAEpAwgiBKdrIgUgBSADSxsgBEL/////D1YbIgNBAkkNACACIAEQvYWAgAACQCACKAIEQQJJDQAgAigCAC8AACEDIAFBAhCEhICAACAAQQA7AQAgACADQQh0IANBCHZyOwECDAILIAJBADsBDiABIAJBDmpBAhCFhICAACAAQQA7AQAgACACLwEOIgFBCHQgAUEIdnI7AQIMAQsgACADNgIIIABBAjYCBCAAQQE7AQALIAJBEGokgICAgAALRwEBfyOAgICAAEEQayICJICAgIAAIAIgAUEIdCABQYD+A3FBCHZyOwEOIAAgAkEOaiACQRBqEOOAgIAAIAJBEGokgICAgAALxwEBAn8jgICAgABBMGsiAySAgICAACADIAI2AgACQCACIAFBA3YiBEkNACADIAQ2AhwgA0ECNgIIIANByLPJgAA2AgQgA0ICNwIQIANBhYCAgAA2AiwgA0GFgICAADYCJCADIANBIGo2AgwgAyADQRxqNgIoIAMgAzYCICADQQRqQdizyYAAEOeAgIAAAAsgACABQQdxIAJqIgJBA3ZqLQAAIQEgA0EwaiSAgICAAEGAs8mAAEGKocCAACABIAJBB3F0QYABcRsL0QEDAn8BfgF/I4CAgIAAQRBrIgQkgICAgAACQAJAQQBBACABKAIEIgUgASkDCCIGp2siByAHIAVLGyAGQv////8PVhsiBSADTw0AIAAgBTYCCCAAIAM2AgRBASEFDAELAkADQCAEQQhqIAEQvYWAgAAgBCgCCCEHIAMgBCgCDCIFTQ0BIAIgByAFEICEgIAAIAEgBRCEhICAACADIAVrIQMMAAsLIAIgByADEICEgIAAIAEgAxCEhICAAEEAIQULIAAgBTYCACAEQRBqJICAgIAAC/IBAQZ/IAAgAUF8cSICaiEDQQAhBEEAIQVBACEGAkACQAJAAkACQCABQQNxIgcOBAQAAQIECyADLQAAIQVBACEGDAILIAMtAAEhBiADLQAAIQUMAQsgAy0AAkEQdCEHIAMtAAEhBiADLQAAIQUMAQtBACEHC0EAIAJrIQMCQANAIANFDQEgACgAACIBQRh0IAFBgP4DcUEIdHIgAUEIdkGA/gNxIAFBGHZyciAEaiEEIANBBGohAyAAQQRqIQAMAAsLIAQgB0EIdkGA/gNxIAZB/wFxQQh0IAdyIAVB/wFxciIBQRh0IAFBgP4DcUEIdHJyagtNAQF/AkAgACgCCCICIAAoAgBHDQAgABDAhYCAAAsgACACQQFqNgIIIAAoAgQgAkEEdGoiACABKQIANwIAIABBCGogAUEIaikCADcCAAsRACAAIAEgASACahDjgICAAAskAQF/AkAgACgCCCIBQQNxRQ0AIAAgAUEDakF8cRDzg4CAAAsLoQIDAX8BfgF/I4CAgIAAQRBrIgIkgICAgAAgAkEEaiABEIOEgIAAAkACQCACLQAEQQFHDQAgAikCCCEDIABBATsBACAAIAM3AgQMAQsCQAJAAkACQAJAIAItAAUiBEGDfmoOAwEDAgALIABBADsBACAAIAQ7AQIMBAsgACABEPqDgIAADAMLIAJBBGogARCDhICAACACLQAEDQEgAi0ABSEBIABBADsBACAAIAFB/QFqOwECDAILIAJBBGogARCDhICAAAJAIAItAAQNACACLQAFIQEgAEEAOwEAIAAgAUH6A2o7AQIMAgsgAikCCCEDIABBATsBACAAIAM3AgQMAQsgAikCCCEDIABBATsBACAAIAM3AgQLIAJBEGokgICAgAALoQEDAX8BfgF/I4CAgIAAQRBrIgIkgICAgAACQAJAIAEpAwgiA0L/////D1YNACABKAIEIAOnTQ0AIAJBCGogARC9hYCAAAJAIAIoAgxFDQAgAigCCC0AACEEIAFBARCEhICAACAAIAQ6AAFBACEBDAILQQBBAEHAssmAABDQgICAAAALIABCATcCBEEBIQELIAAgAToAACACQRBqJICAgIAAC3oDAn8BfgF/I4CAgIAAQRBrIgIkgICAgAACQCABQQBBACAAKAIEIgMgACkDCCIEp2siBSAFIANLGyAEQv////8PVhsiA0sNACAAIAQgAa18NwMIIAJBEGokgICAgAAPCyACIAM2AgwgAiABNgIIIAJBCGoQsoKAgAAAC/sBAwJ/AX4BfyOAgICAAEEgayIDJICAgIAAAkACQEEAQQAgACgCBCIEIAApAwgiBadrIgYgBiAESxsgBUL/////D1YbIgQgAkkNAANAIAJFDQIgA0EQaiAAEL2FgIAAIAMoAhAhBiADQQhqIAIgAygCFCIEIAIgBEkbIgQgASACQdCyyYAAEMKFgIAAIAMoAgggAygCDCAGIARB4LLJgAAQvIOAgAAgAyAEIAEgAkHwssmAABCHhICAACADKAIEIQIgAygCACEBIAAgBBCEhICAAAwACwsgAyAENgIcIAMgAjYCGCADQRhqELKCgIAAAAsgA0EgaiSAgICAAAtGAQF/I4CAgIAAQRBrIgQkgICAgAAgBCABNgIMIAQgADYCCEEAIARBCGpB2IXJgAAgBEEMakHYhcmAACACIAMQyYSAgAAACzAAAkAgAyABSQ0AIAAgAyABazYCBCAAIAIgAWo2AgAPCyABIAMgAyAEEJyAgIAAAAvRAQECfyOAgICAAEEgayIDJICAgIAAAkACQCABQQxJIgQNACADQQhqQQhBDCAAIAFBgLHJgAAQwYWAgAAgAygCCCEAIAMoAgwhASADIAJBGHQgAkGA/gNxQQh0ciACQQh2QYD+A3EgAkEYdnJyNgIUIAFBA00NASADQQQgACABQZCzyYAAEMKFgIAAIAMoAgAgAygCBCADQRRqQQRBoLPJgAAQvIOAgAALIANBIGokgICAgAAgBA8LIAMgATYCHCADQQQ2AhggA0EYahCygoCAAAALEAAgACABQQRBEBDThICAAAuIAgEFfyOAgICAAEEQayIDJICAgIAAIAIoAgghBCACKAIEIQUgAyADQQ9qNgIIAkAgBEECSQ0AAkAgBEEUSw0AIARBBHQhBkEQIQcDQCAGIAdGDQIgBSAFIAdqELGFgIAAIAdBEGohBwwACwsgBSAEIANBCGoQsoWAgAAgBEGAgARJDQBBhKTJgABBGiADQQ9qQYCyyYAAQaCkyYAAEIOBgIAAAAsgACAEOwEQIAAgATYCDCAAIAIpAgA3AgAgAEEIaiACQQhqKAIANgIAIABBHyAEQf//A3FnIgJrOwEUIABBAUETIAJrQQ9xdCICOwESIAAgBEEEdCACazsBFiADQRBqJICAgIAAC0MBAX8jgICAgABBEGsiAiSAgICAACACIAE2AgwgAkEMaiAAQQQQw4WAgAAhASACQRBqJICAgIAAIAFBAEogAUEASGsLFAAgASAAKAIEIAAoAggQnoGAgAALFAAgASAAKAIAIAAoAgQQnoGAgAALTQEBfyOAgICAAEEQayIFJICAgIAAIAVBCGogAiADIAFBCCAEEJ+AgIAAIAUoAgwhBCAAIAUoAgg2AgAgACAENgIEIAVBEGokgICAgAALLAACQCABIANHDQACQCABRQ0AIAAgAiAB/AoAAAsPCyABIAMgBBC/hICAAAALLgEBfwJAAkAgACgCCEHAAEcNAEEAIQMgACABIAIQvYSAgABFDQELQQEhAwsgAwtjAgJ/AX4CQANAAkBBwAAgACgCCCIFayIGIAFJDQAgACkDACEHIAEQo4SAgAAhBCAAIAUgAWo2AgggAiAEIAcgBUE/ca2Ip3E2AgAMAgsgACADIAQQvYSAgAANAAsLIAYgAU8LkwEBBH8jgICAgABBEGsiASSAgICAACABQQhqEKCEgIAAIAAoAgQhAiABKAIIIQMgACABKAIMNgIEIAAoAgAhBCAAIAM2AgAgBCACEKGEgIAAIAEQyoGAgAAgACgCDCECIAEoAgAhAyAAIAEoAgQ2AgwgACgCCCEEIAAgAzYCCCAEIAIQuoGAgAAgAUEQaiSAgICAAAtIAwJ/AX4BfwJAQQAgACgCCCIBa0EHcSICDQBBAQ8LIAApAwAhAyACEKOEgIAAIQQgACACIAFqNgIIIAQgAyABQT9xrYincUULhAEBAn8jgICAgABBIGsiAiSAgICAACACQRRqIAFBAUEBQQEQtYSAgAAgAigCGCEDAkAgAigCFEEBRw0AIAMgAigCHBCsgoCAAAALIAIgATYCECACIAIoAhw2AgwgAiADNgIIIAIgAkEIahC2hICAACAAIAIpAwA3AwAgAkEgaiSAgICAAAvDAwEMfyOAgICAAEEQayIHJICAgIAAAkACQAJAAkACQCAGKAKIEEEASA0AIAYoAtwOIQggBigC7A8gBigCsBAiCXEiCiABKAIAIgsgBigCrBAiDCAGKALoDyINbCAGKALYDyIOIA0gDiANSCIPG2ogCWsiECALIBBJIhEbIhBqIhIgCkkNAiASIAhLDQIgBigC2A4hCCAHQQhqIAMoAgAiEiASIBBqIhIgAkGAIEGsj8iAABCfgICAACAHKAIIIAcoAgwgCCAKaiIKIBBBvI/IgAAQj4SAgAAgASALIBBrNgIAIAMgEjYCACAGIBAgCWoiATYCsBAgBCABNgIAQQEgBigC4BB0IQECQAJAIBENACAPDQUgDSABRg0BDAULIAUNAiANIAFGDQIgACAQNgIIIAAgCjYCBCAAQQE2AgAMBQsgBiAOIA1HOgCREyAGIAxBAWo2AqwQIAYgDiANazYC2A8MAwsgAEEANgIIIABC9////x83AgAMAwsgAEEANgIIIABCg4CAgBA3AgAMAgsgCiASIAhBnI/IgAAQnICAgAAACyAAIBA2AgggACAKNgIEIABBATYCAAsgB0EQaiSAgICAAAujDQEMfyOAgICAAEHgAGsiBSSAgICAACAFIAE6AD8CQAJAAkACQAJAAkAgAi0AihFBa2oOAgECAAtBuJnJgABBKEHsj8iAABCFgICAAAALIAENAUH8DiEGQfgOIQdB5BAhCAwDCyABRQ0BQeQOIQZB4A4hB0GYECEIDAILIAVBADYCQCAFQT9qQYqhwIAAIAVBwABqQcyPyIAAEMiEgIAAAAsgBUEANgJAIAVBP2pBgLPJgAAgBUHAAGpB3I/IgAAQyISAgAAACyACIAhqKAIAIQkgBUEwahDIgYCAACACIAdqIgcoAgAhCiACIAZqIgYoAgAhCyAHIAUoAjA2AgAgBiAFKAI0NgIAIAUgCTYCWCACQY4RaiEMIAJB8A1qIQ0CQAJAAkACQAJAA0ACQAJAAkACQAJAAkAgAi0AjREOBQADBAUBAAsgDCANIAVB2ABqIAMgBBCchICAAEEBRg0BDAkLQQAhByAFQQA2AkBBASEGIA1BASAFQcAAaiADIAQQkYSAgAANBUECIQZBBCEHDAYLIAJBADYCzBAgBSAFKAJYQQFqIgk2AlggBUEIaiAAEJSEgIAAIAUoAgghDiAFKAIMIQcgCiALEMmBgIAAAkAgByAATw0AQWchBgwHCwJAIAlBAkkNACACQQE6AI0RIAchCyAOIQoMBAtBASEGIAchCCAOIQoDQCAIRQ0HIApBADoAACAIQX9qIQggCkEBaiEKDAALCyAFQQA2AkAgDUEFIAVBwABqIAMgBBC+hICAAEUNBiACQQI6AI0RIAJBACAFKAJAIgZBAXEiB2sgBkEBdkEBanE2AtAQIAIgAigC+A1BBUEBIAcbajYC+A0MAgsgBUEYahDKgYCAACACKALoDiEHIAIgBSgCGDYC6A4gAigC7A4hCCACIAUoAhw2AuwOIAIoAtAQIAlqIgYgBiAHIAhBAEEAIAIgAyAEEJuEgIAAIQYgBUEQahDKgYCAACACKALoDiEPIAUoAhAhDiACIAc2AugOIAIoAuwOIRAgBSgCFCEHIAIgCDYC7A4gDyAQELqBgIAAAkAgBkEBRw0AIAJBAzoAjREgAkH//wM2AtQQIA4gBxC6gYCAAAwCCyAOIAcQuoGAgAAMBgsgAigC0BAhDiACKALMECEGIAUgAigC1BAiBzYCXCAHQf//A0chBwJAA0ACQAJAAkACQAJAIAdBAXEiBw0AIAYgAE8NAQsgB0UNASAFKAJcIQcMAgsgAkEEOgCNEQwFCwJAIAIoAugOIAIoAuwOIA0gBUHcAGogAyAEEMeEgIAADQAgAiAGNgLMECACQf//AzYC1BAMCQsCQAJAAkAgBSgCXCIHDQACQCAGIAtPDQAgCiAGakEAOgAADAILIAYgC0GMvsiAABDQgICAAAALIAcgDk0NAiAGIAtPDQEgCiAGaiAHIA5rOgAACyAGQQFqIQYMAgsgBiALQZy+yIAAENCAgIAAAAsgBUEANgJAAkAgDSAHIAVBwABqIAMgBBCRhICAAA0AIAIgBjYCzBAgAiAHNgLUEAwICwJAIAUoAkBBASAHdGoiByAGaiAATQ0AQXghBgwJCyAGIAsgBiALSxshCANAIAggBkYNAyAKIAZqQQA6AAAgBkEBaiEGIAdBf2oiBw0ACwtBACEHDAALCwsgCCALQay+yIAAENCAgIAAAAsgBSgCQEUNAEFhIQYgAi0AjxENA0EAIQYgBUEoakEAIAIoAtgQQQFqIAJBkBFqIgRBgAJBgMfIgAAQn4CAgAAgBSgCLCEHIAUoAighCAJAA0AgByAGRg0BIAggBmogBjoAACAGQQFqIQYMAAsLQQAhAyAFQSBqQQAgACAKIAtBkMfIgAAQn4CAgAAgAkGREWohACAFKAIkIQggBSgCICEGAkADQCAIRQ0BIAYgBCAGLQAAIgdqLQAAIg06AAACQCAHRQ0AIAdFDQAgACAEIAf8CgAACyAGQQFqIQYgAyAHciEDIAQgDToAACAIQX9qIQgMAAsLIAIgAzYC2BBBASEGQQAhBwsgAiAHOgCNEQwCCyAHIQsgDiEKDAELQQIhBgsgBSgCWCEHAkACQCABDQAgAiAHNgLkEEH8DiEHQfgOIQgMAQsgAiAHNgKYEEHkDiEHQeAOIQgLIAUQyIGAgAAgAiAIaiIIKAIAIQQgAiAHaiIHKAIAIQIgBSgCACEDIAggCjYCACAFKAIEIQggByALNgIAIAQgAhDJgYCAACADIAgQyYGAgAAgBUHgAGokgICAgAAgBguEAgEBfyOAgICAAEEwayIEJICAgIAAIAAQkoSAgAAgACADOwEUIAAgAjsBEiAAIAE7ARAgBEEkaiADQf//A3EiA0EBQQRBBBC1hICAACAEKAIoIQICQCAEKAIkQQFHDQAgAiAEKAIsEKyCgIAAAAsgBCAEKAIsNgIcIAQgAjYCGCAEIAM2AiAgBEEQaiAEQRhqELqEgIAAIAAoAgQhAiAAKAIAIQEgACAEKQMQNwIAIAEgAhChhICAACAEQQhqIANBuAhsEPGDgIAAIAAoAgwhAyAEKAIIIQIgACAEKAIMNgIMIAAoAgghASAAIAI2AgggASADELqBgIAAIARBMGokgICAgAALMwACQCADIAFJDQAgACADIAFrNgIEIAAgAiABQQJ0ajYCAA8LIAEgAyADIAQQnICAgAAAC2YBAn8jgICAgABBEGsiCCSAgICAAEEBIQkCQCABQQFxDQAgCEEANgIMIAMgBCAFIAhBDGogBiAHEMeEgIAAIQkgCCgCDEEAIAkbIQILIAAgAjYCBCAAIAk6AAAgCEEQaiSAgICAAAuoAQECfyOAgICAAEEQayIHJICAgIAAQQAhCAJAIANFDQAgB0EANgIMAkACQAJAIARBGk8NACABIARBAnQiAy0Aho7IgAAgB0EMaiAFIAYQkYSAgAAiCA0BIAAgBDYCHEEBIQQMAgsgBEEaQaDHyIAAENCAgIAAAAsgAiAHKAIMIANBhI7IgABqLwEAajYCAEEAIQQLIAAgBDoARAsgB0EQaiSAgICAACAIC8QoAhl/AX4jgICAgABBkAFrIgkkgICAgAAgBkGAAWohCiAGQaINaiELIAZB/A9qIQwgBkHwDWohDSAGQbwQaiEOIAZBnBBqIQ8gBkG4EGohECAGQaAQaiERIAZBtBBqIRIgBkGAAmohEyAGQaANaiEUIAZB8hBqIRUgAEH/D3FBf2ohFiAGLQCMESEAIAlB+ABqQQRqIhdBEGohGCAXQQhqIRkDfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEH/AXEOBgUEAAMBBgULQQAhGiAWIQACQANAIABFDQEgGkEBaiEaIABBAXYhAAwACwsgEigCACIbQQFqIhwgDCgCACIdSQ0BIBxB0QVPDQEgG0EBdCAdQQF0Ih5rQQJqIQAgEyAeaiEeA0ACQAJAIABFDQAgCUEANgIwIA0gGiAJQTBqIAcgCBCRhICAAA0BQQIhACAGQQI6AIwRIAYgHTYC/A8MDAtBACEfIAlBCGogE0EAIBtBvMXIgAAQwYSAgAAgCSgCCCIdIAkoAgxBAXRqIRsDQAJAIB0gG0cNAEEDIQAMEAsgCSATIB9BAWoiHyAcQczFyIAAEMGEgIAAIB1BAmohICAJKAIEQQF0IQAgCSgCACEaA0ACQCAADQAgICEdDAILIABBfmohACAaLwEAIR4gGkECaiEaIB4gHS8BAEcNAAsLQXshAAwLCwJAIAkoAjAiHyABSQ0AQXwhAAwLCyAeIB87AQAgAEF+aiEAIB1BAWohHSAeQQJqIR4MAAsLAkAgDCgCACIAQRNPDQAgECgCACEcIA4oAgAhGwNAIABBEkYNCSAJQQA2AjAgAEGMxsiAAGotAAAhHgJAAkACQAJAAkACQCANQQQgCUEwaiAHIAgQvoSAgAANAEHAACAGKAL4DSIdayEgQQAhGgJAIB1BwABGDQAgDSkDACAdQT9xrYinQQ9xIRoLICAgGi0AsMbIgAAiH08NASAGQQQ6AIwRIAYgGzYCvBAgBiAcNgK4ECAGIAA2AvwPDA4LIAkoAjAiGkEPSw0BIBotALDGyIAAIR8gBigC+A0hHQsgBiAdIB9qNgL4DSAeQRFLDQEgFSAeaiAaLQDAxsiAACIaOgAAIBpFDQMgGkEPSw0CIBQgGkEBdGoiHiAeLwEAQQFqOwEAIBxBAWohHCAbQSAgGnZrIhtBX2pBYEkNDQwDCyAaQRBB0MbIgAAQ0ICAgAAACyAeQRJB4MbIgAAQ0ICAgAAACyAaQRBB8MbIgAAQ0ICAgAAACyAAQQFqIQAMAAsLIABBEkESQaDGyIAAEJyAgIAAAAsgHSAcQdAFQazFyIAAEJyAgIAAAAsCQCASKAIAQQNHDQAgCUEANgIwAkAgDUEBIAlBMGogByAIEJGEgIAADQAgBkEDOgCMEQwGCyASIBIoAgAgCSgCMGo2AgALIAlBEGogBCACIANB7I7IgAAQwoSAgAACQAJAAkACQAJAAkACQAJAIBIoAgAiAEEFTw0AIAkoAhQhHyAJKAIQISACQAJAAkACQAJAAkACQAJAIAAOBQABAgMJAAsCQCAfRQ0AICBBADoAAiAgIBMvAQA7AQBBASEdDAoLQQBBAEG03MiAABDQgICAAAALIB9FDQUgIEEBOgACAkAgH0EBRg0AICBBAToABiAgIAYvAYICIgAgBi8BgAIiGiAAIBpLGzsBBCAgIAAgGiAAIBpJGzsBAEECIR0MCQtBAUEBQdTcyIAAENCAgIAAAAsgH0UNAyAgQQE6AAIgICATLwEAIgA7AQAgH0ECTQ0CICAgADsBCCAgQQE6AAoCQAJAIAYvAYQCIhogBi8BggIiAEsNACAgIBo7AQQgH0EDRw0BQQNBA0GE3ciAABDQgICAAAALICAgADsBBCAaIQAgH0EDRg0CCyAgQQI6AA4gIEECOgAGICAgADsBDEEEIR0MBwsgCSAGLwGGAjsBNiAJIAYvAYQCOwE0IAkgBigCgAI2ATBBACEbQQIhIQNAAkACQAJAAkAgG0EDRw0AICBBAmohGkEAIQACQAJAA0AgAEEERg0BIB8gAEYNAiAaQQI6AAAgGkEEaiEaIABBAWohAAwACwsgH0UNAiAgIAkvATA7AQAgH0ECTQ0DICAgCS8BMjsBCCAgIAkvATQ7AQQCQCAfQQNGDQAgICAJLwE2OwEMQQQhHQwNC0EDQQNBxN3IgAAQ0ICAgAAACyAfIB9B1N3IgAAQ0ICAgAAACyAJQTBqIBtBAXRqIRogISEAA0AgAEEIRg0DAkAgCUEwaiAAaiIeLwEAIh0gGi8BACIcTw0AIB4gHDsBACAaIB07AQALIABBAmohAAwACwtBAEEAQaTdyIAAENCAgIAAAAtBAiAfQbTdyIAAENCAgIAAAAsgIUECaiEhIBtBAWohGwwACwtBA0EDQZTdyIAAENCAgIAAAAtBAiAfQfTcyIAAENCAgIAAAAtBAEEAQeTcyIAAENCAgIAAAAtBAEEAQcTcyIAAENCAgIAAAAtBgNzIgABBIkGk3MiAABCFgICAAAALIAYvAYYCIgAgBi8BhAIiGiAAIBpLGyEbIAAgGiAAIBpJGyEcIAYvAYICIR0gBi8BgAIhHkEAIQAgICEaAkADQCAAQQdGDQEgHyAARg0HIBogHjsBACAaQQJqIABBAXFBAWo6AAAgGkEEaiEaIABBAWohAAwACwsgH0ECSQ0EICAgHTsBBCAfQQNNDQMgICAcOwEMIB9BBU0NAiAgIB07ARQgH0EHTQ0BICBBAzoAHiAgQQM6AA4gICAbOwEcQQghHQsCQANAAkACQCAdQYACRg0AQQAhAEEAIB8gHWsiGiAaIB9LGyEcIB1BAnQhGyAgIRoDQCAdIABGDQIgHyAARg0EAkAgHCAARg0AIBogG2oiHiAaLwEAOwEAIB5BAmogGkECai0AADoAACAAQQFqIQAgGkEEaiEaDAELCyAdIABqIB9BtN7IgAAQ0ICAgAAACwJAIAVFDQAgBUGAAjYCAAsgBkEAOgCMEQwLCyAdQQF0IR0MAAsLIB8gH0Gk3siAABDQgICAAAALQQcgH0GU3siAABDQgICAAAALQQUgH0GE3siAABDQgICAAAALQQMgH0H03ciAABDQgICAAAALQQEgH0Hk3ciAABDQgICAAAALIB8gH0HE3siAABDQgICAAAALAkAgDUECIBIgByAIEJGEgIAADQAgBkEBOgCMEQwECyAMQQA2AgBBAiEADAgLQQIhACANQQIgDCAHIAgQkYSAgABFDQRBASEAIAwoAgBBAUYNB0EAIQAgEEEANgIAIA5BIDYCAANAAkAgAEEMRw0AQQAhAANAAkAgAEESRw0AQQQhAAwLCyAVIABqQQA6AAAgAEEBaiEADAALCyAUIABqQQA7AQAgAEECaiEADAALCyAJIBIoAgAiGjYCJCAJIBAoAgA2AiggCSAOKAIAIgA2AiwgCSARKAIANgJ4IAkgDygCADYCMAJAAkAgDSAHIAgQkISAgABFDQAgBkGAAWohHwJAAkADQCAaIAFPDQEgAEUNAQJAIAYoAoAOIh5BA0sNACASIBo2AgAgECAJKAIoNgIAIBEgCSgCeDYCACAPIAkoAjA2AgAgDiAANgIADAQLIAYpA/ANISICQCAGKAL4DSIAQSBJDQAgBiAAQSBzIgA2AvgNIAYoAvwNIhpBBGohHSAaQXtLDQMgHSAISw0DIAYgHTYC/A0gBiAeQXxqNgKADiAGIAcgGmo1AABCIIYgIkIgiIQiIjcD8A0LIAYgACAGICIgAEE/ca2Ip0EfcUECdGoiGi0AAmoiHjYC+A0CQAJAIBovAQAiAEEQSQ0AQQJBAyAAQRBGGyIaEKOEgIAAIR0gBiAeIBpqNgL4DSAAIB0gIiAeQT9xrYincSABIAlBJGogCUEoaiAJQSxqIAkoAnggCUEwaiATIAYoAsAQIBQgHxDDhICAAAwBCyAAIAlBJGogCUEoaiAJQSxqIAlB+ABqIBMgBigCwBAgFCAfEMSEgIAACyAJKAIsIQAgCSgCJCEaDAALCyAOIAA2AgAMAgsgGiAdIAhBxIrIgAAQnICAgAAACyAGQYABaiEbA0AgDigCACEAIBIoAgAgAU8NASAARQ0BAkACQAJAQcAAIAYoAvgNIgBrIh0gBkEAIAYpA/ANIABBP3GtiKcgAEHAAEYbIh9BH3FBAnRqIh4tAAIiGkkNACAeLwEAIh5BEEkNASAeQXJqIhwQo4SAgAAhICAdIBwgGmoiHEkNAiAGIAAgHGo2AvgNIB4gICAfIBp2cSABIBIgECAOIAYoAqAQIA8gEyAGKALAECAUIBsQw4SAgAAMAwsgDSAHIAgQvYSAgAANAgwFCyAGIAAgGmo2AvgNIB4gEiAQIA4gESATIAYoAsAQIBQgGxDEhICAAAwBCyANIAcgCBC9hICAAA0ADAMLCwJAIABFDQBBeSEADAQLIAlBGGogBCACIANBjI/IgAAQwoSAgAAgBigCwBAiB0EBdCAGakH+AWohGiAJKAIcIRwgCSgCGCEhQX8hAAJAA0AgByAAaiIeQc8FSw0BAkAgGi8BAEH//wNHDQAgGkF+aiEaIABBf2ohAAwBCwtBASAAQRBqIg90QYACIA9BCEgbIR0gAEEQaiIAQQEgAEEBShsiAEEIIABBCEgbIQhBACEfQYABIRtBAiEgQQEhHgNAIB5BcGohGiAUIB5BAXRqLwEAIQADQAJAIAANAAJAIB4gCEcNAANAAkAgHUGAAkcNACAGQbINaiEOQQAhCEGAASENQQghHkEJIRFBAiEVQYACIQxBgAIhGkGAAiEAAkACQAJAA0AgHiAPTg0DIB5BD0YNAiARQQ8gEUEPShshHSAeQQFqIhJBDyASQQ9KGyEXQQEgHkF5aiIKdCEQIB5BcWohICAUIBJBAXRqIgEvAQAhGwNAAkAgG0H//wNxDQAgEUEBaiERIA5BAmohDiANQQF2IQ0gFUEBdCEVIBIhHgwCCwJAIABBgAJHDQAgCCAaaiEIIA4hGiAQIR4gEiEAAkADQAJAIB0gAEcNACAXIQAMAgsCQCAAQRBGDQAgHiAaLwEAayIeQQFIDQIgGkECaiEaIB5BAXQhHiAAQQFqIQAMAQsLQRBBEEHw2MiAABDQgICAAAALIB8QxYSAgAAiGiAcTw0DICEgGkECdGoiHiAIIBprOwEAIB4gADoAAiAfQQFqIR9BASAAQRhqdCIaIAxqIQxBACEACwJAICAgB2oiHkHPBUsNACATIB5BAXRqLwEAISAgISAcIAAQxYSAgAAgCGogFSAaICAgChDGhICAACABIBtBf2oiGzsBACAAIA1qIQAMAQsLCyAeQdAFQcDbyIAAENCAgIAAAAsgGiAcQbDbyIAAENCAgIAAAAtBEEEQQaDbyIAAENCAgIAAAAsCQCAFRQ0AIAUgDDYCAAsgBkEAOgCMEQwHC0EAIQBBACAcIB1rIhogGiAcSxshICAdQQAgHUEAShshGyAdQQJ0IQggISEaAkACQANAIBsgAEYNASAcIABGDQICQCAgIABGDQAgGiAIaiIeIBovAQA7AQAgHkECaiAaQQJqLQAAOgAAIABBAWohACAaQQRqIRoMAQsLIB0gAGogHEHg28iAABDQgICAAAALIB1BAXQhHQwBCwsgHCAcQdDbyIAAENCAgIAAAAsgIEEBdCEgIBtBAXYhGyAeQQFqIR4MAgsCQCAaIAdqIhpB0AVJDQAgGkHQBUHw28iAABDQgICAAAALIBMgGkEBdGovAQAhGiAhIBwgHxDFhICAACAgIB0gGiAeEMaEgIAAIABBf2ohACAfIBtqIR8MAAsLCyAeQdAFQZDbyIAAENCAgIAAAAtBASEADAILQQIhAAwBCwJAIBxBAUYNACAbRQ0AQXohAAwBCwJAQcgARQ0AIAlBMGpBAEHIAPwLAAsgGEEANgIAIBlCADcCACAXQgA3AgBBfyEeQQQhACALIRoDQAJAIABBGEcNACAJQRE2AnhBEiEaQQAhAAJAAkACQANAAkAgAEEGRg0AIBpBf2oiGkESTw0CIBUgGmotAAAiHkEGTw0DIAlB+ABqIB5BAnRqIh4gHigCACIeQX9qNgIAIB5BEk8NBCAAQQFqIQAgCUEwaiAeQQJ0aiAaNgIADAELQQAhACAaDQALIAkoAnhFDQZBASEcQQAhHUGAASEbQQIhIEEAIQADQCAAQRIgAEESSxshISAJQTBqIABBAnRqIR4gFCAcQQF0ai8BACEaA0ACQCAaDQAgHEEFRg0KICBBAXQhICAbQQF2IRsgHEEBaiEcDAILAkAgISAARg0AIB4oAgAhHyAGQSAgHRDFhICAACAgQSAgHyAcEMaEgIAAIB5BBGohHiAaQX9qIRogHSAbaiEdIABBAWohAAwBCwsLICFBEkHU3siAABDQgICAAAALIBpBEkHk3siAABDQgICAAAALIB5BBkH03siAABDQgICAAAALIB5BEkGE38iAABDQgICAAAALIAlB+ABqIABqIB4gGi8BAGoiHjYCACAaQQJqIRogAEEEaiEADAALCyAJQZABaiSAgICAACAADwtBACEAIAkoAjAhHgNAIABBgAFGDQEgBiAAaiIaIB47AQAgGkECakEAOgAAIABBBGohAAwACwtBACEAAkADQAJAIABBIEcNAEEAIQBBcCEaA0AgAEHAAEYNAyAKIABqIBo2AgACQCAaIAYoAsAQaiIeQdAFTw0AIBMgHkEBdGpB//8DOwEAIBpBAWohGiAAQQRqIQAMAQsLIB5B0AVB/I7IgAAQ0ICAgAAACyAUIABqQQA7AQAgAEECaiEADAALCyARQQg2AgAgEkEANgIAIBBBADYCACAPQQA2AgAgDkGAgAI2AgBBBSEACyAGIAA6AIwRDAALC6cCAQN/I4CAgIAAQRBrIgUkgICAgAAgBUEANgIMIAAtAAAhBgJAAkACQANAAkACQAJAAkAgBkH/AXEOAwABAgALIAFBASAFQQxqIAMgBBCRhICAAEUNBUEBIQYgBSgCDEUNBAwCCwJAIAFBAyAFQQxqIAMgBBCRhICAAA0AIABBAToAAAwFCwJAIAUoAgwiBg0AIABBADoAAEEBIQYgAkEBNgIADAYLIAIgBjYCAEECIQYMAQsCQCABIAIoAgAiByAFQQxqIAMgBBCRhICAAA0AQQIhBiAAQQI6AAAMBQsgAEEAOgAAQQEhBiACIAUoAgxBASAHdGo2AgAMBAsgACAGOgAADAALCyACQQA2AgBBASEGDAELQQIhBgsgBUEQaiSAgICAACAGC3oBAX8jgICAgABBIGsiBSSAgICAAAJAIAIgA08NACAFQQA2AhggBUEBNgIMIAVB7OXIgAA2AgggBUIENwIQIAVBCGogBBDngICAAAALIAAgAzYCBCAAIAE2AgAgACACIANrNgIMIAAgASADajYCCCAFQSBqJICAgIAAC1cBA38gAEHAACAAKAIIIgFrIgJBA3YiAyAAKAIQajYCECAAIAAoAgwgA2s2AgwgACABIAJBeHEiA2o2AgggAEIAIAApAwAgAkE4ca2GIANBwABGGzcDAAuYRwMHfwF+D38jgICAgABBwDFrIgQkgICAgABBAiEFAkACQCAADQAgASgCgA5BHEkNAQsgAUHwDWohBgJAIAANACAGIAIgAxCQhICAAEUNAQsgASgC0A8hByABKALYDyEIIARBqCFqEPCDgIAAIARB4ABqQRBqIAFBoA5qIgkpAgA3AwAgBEHgAGpBCGogAUGYDmoiCikCADcDACABKQKQDiELIAEgBCkCqCE3ApAOIAogBEGoIWpBCGoiDCkCADcCACAJIARBqCFqQRBqIgopAgA3AgAgBCALNwNgIARBqCFqEPCDgIAAIARB+ABqQRBqIAFB0A5qIgkpAgA3AwAgBEH4AGpBCGogAUHIDmoiDSkCADcDACABKQLADiELIAEgBCkCqCE3AsAOIA0gDCkCADcCACAJIAopAgA3AgAgBCALNwN4IARBqCFqEPCDgIAAIARBkAFqQRBqIAFBuA5qIgkpAgA3AwAgBEGQAWpBCGogAUGwDmoiDSkCADcDACABKQKoDiELIAEgBCkCqCE3AqgOIA0gDCkCADcCACAJIAopAgA3AgAgBCALNwOQASABQYgPaiEOIAFB4A1qIQ8gAEEBcyEQIAFBqA5qIREgAUHADmohEiABQZAOaiETIARBqAFqIARB4ABqEMqEgIAAIARBqBFqIARB+ABqEMqEgIAAIARBqCFqIARBkAFqEMqEgIAAIAEtAIoRIRQCQAJAAkACQAJAAkACQANAIAchFSAHIQ0gByEJIAchCiAHIRYCQANAQWEhBQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgFEH/AXFBeWoOBAAB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KQMANwMAIAwgBEH4AGpBCGoiCCkDADcDACAIIAcpAgA3AwAgCSAKKQIANwMAIAQgBCkDeDcDqBEgBCAEKQKoITcDeCAHIBJBCGoiCSkCADcDACAKIBJBEGoiCCkCADcDACAEIBIpAgA3A6ghIBIgBCkDqBE3AgAgCSAMKQMANwIAIAggASkDADcCACAEQaghahDAhICAACAEQaghahDwg4CAACABIARBkAFqQRBqIgkpAwA3AwAgDCAEQZABakEIaiIIKQMANwMAIAggBykCADcDACAJIAopAgA3AwAgBCAEKQOQATcDqBEgBCAEKQKoITcDkAEgByARQQhqIgkpAgA3AwAgCiARQRBqIgcpAgA3AwAgBCARKQIANwOoISARIAQpA6gRNwIAIAkgDCkDADcCACAHIAEpAwA3AgAgBEGoIWoQwISAgAAMAQtBcCEFCyAEQZABahDAhICAACAEQfgAahDAhICAACAEQeAAahDAhICAAAsgBEHAMWokgICAgAAgBQtbAQJ/I4CAgIAAQSBrIgEkgICAgAAgAUEANgIcIAFCgICAgMAANwIUIAFBCGogAUEUahC6hICAACABKAIMIQIgACABKAIINgIAIAAgAjYCBCABQSBqJICAgIAACxkAAkAgAUUNACAAQQQgAUECdBC7gYCAAAsLxgEBA38gACAAKAK4DyIBQQZ0IgI2AvQPIAFBBXYhAwJAAkACQCABQf8BSw0AIAAgACADQQJ0aigCwA0gAXZBAXE2AoAQIAIgACgC/A4iA08NASAAIAAoAvgOIAJqLQAAOgCEESABIAAoAoQPIgJPDQIgACAAKAKADyABai0AAEEDcUEJdEHgyMiAAGo2AugQDwsgA0EIQdzAyIAAENCAgIAAAAsgAiADQezAyIAAENCAgIAAAAsgASACQfzAyIAAENCAgIAAAAsqAAJAIABBIEsNACAAQQJ0KALwi8iAAA8LIABBIUH0jMiAABDQgICAAAALSgEBfyOAgICAAEEQayIDJICAgIAAIAMgATYCDCADIAA2AghBACADQQhqQfTlyIAAIANBDGpB9OXIgAAgAkG8wMiAABDJhICAAAALWQEBfyOAgICAAEEQayIBJICAgIAAIAFBCGogACAAKAIAQQFBBEEUEKuCgIAAAkAgASgCCCIAQYGAgIB4Rg0AIAAgASgCDBCsgoCAAAALIAFBEGokgICAgAALLQACQEEAKALoucmAAEH/////B0kNAEGko8CAABDZgYCAAAALQQAoAvC5yYAAC4cKAQl/I4CAgIAAQbABayICJICAgIAAAkACQCABRQ0AQQAgAUF5aiIDIAMgAUsbIQQgAEEDakF8cSAAayEFQQAhAwNAAkACQAJAAkAgACADai0AACIGwCIHQQBIDQAgBSADa0EDcQ0BIAMgBE8NAgNAIAAgA2oiBkEEaigCACAGKAIAckGAgYKEeHENAyADQQhqIgMgBEkNAAwDCwtBASEIQQAhCQJAAkACQAJAAkACQAJAAkACQCAGLQDT8ciAAEF+ag4DAAIBDgtBASEIIANBAWoiAyABTw0NIAAgA2osAABBv39MDQcMDQtBASEIIANBAWoiCiABTw0MIAAgCmosAAAhCiAGQZB+ag4FAgEBAQMBC0EBIQggA0EBaiIKIAFPDQsgACAKaiwAACEKAkACQAJAIAZB4AFGDQAgBkHtAUYNASAHQR9qQf8BcUEMSQ0CIAdBfnFBbkcNDiAKQUBIDQcMDgsgCkFgcUGgf0YNBgwNCyAKQZ9/Sg0MDAULIApBQEgNBAwLCyAHQQ9qQf8BcUECSw0KIApBQEgNAgwKCyAKQfAAakH/AXFBMEkNAQwJCyAKQY9/Sg0ICyADQQJqIgYgAU8NByAAIAZqLAAAQb9/Sg0HIANBA2oiAyABTw0HIAAgA2osAABBQEgNAQwHCyADQQJqIgMgAU8NBiAAIANqLAAAQb9/Sg0GCyADQQFqIQMMAgsgA0EBaiEDDAELIAMgAU8NAANAIAAgA2osAABBAEgNASABIANBAWoiA0YNAwwACwsgAyABSQ0ACwsgASEJIAAhCAsgAkEsakIANwIAIAJCADcCJCACQQM6AGRBACEDIAJBADYCYCACQgA3AlggAkEPNgJAIAJBADYCOCACIAk2AiAgAiAINgIcIAJBADYCECACQv////+/gMAlNwJoIAJBADoAcyACQQA6AHwgAiACQfMAajYCeCACIAJBEGo2AnQgAkGMAWogAkH0AGoQyICAgAAgAkHAAGohBAJAAkAgAigCjAFBgICAgHhGDQAgAkEIakEEQQRBDBCYgICAACACKAIIIQMgAigCDCIGIAIpAowBNwIAIAZBCGogAkGMAWpBCGooAgA2AgAgAkEBNgKIASACIAY2AoQBIAIgAzYCgAEgAkGYAWpBCGogAkH0AGpBCGooAgA2AgAgAiACKQJ0NwOYAUEMIQNBASEAAkADQCACQaQBaiACQZgBahDIgICAACACKAKkAUGAgICAeEYNAQJAIAAgAigCgAFHDQAgAkGAAWpBARDqgICAACACKAKEASEGCyAGIANqIgEgAikCpAE3AgAgAUEIaiACQaQBakEIaigCADYCACACIABBAWoiADYCiAEgA0EMaiEDDAALCyACKAKIASEDIAIoAoQBIQAMAQsgAkEANgKIASACQoCAgIDAADcCgAFBBCEACyACQaQBaiAAIAMQxICAgAAgAkGAAWoQxYCAgAAgBBDDgICAAAJAQQAoAti5yYAADQBBAEF/NgLYucmAAEEAKALcucmAAEEAKALgucmAABC5gICAAEEAIAJBrAFqKAIANgLkucmAAEEAIAIpAqQBNwLcucmAAEEAQQAoAti5yYAAQQFqNgLYucmAAEG4q8CAABDYgYCAAEEAQQAoAti5yYAAQX9qNgLYucmAAEEAKALkucmAACEDIAJBsAFqJICAgIAAIAMPC0Goq8CAABDXgYCAAAALdQEDfyOAgICAAEEQayIAJICAgIAAIABBCGpB6LnJgABBxKPAgAAQqoGAgAAgACgCDCEBIAAoAggiAigCACACQQRqKAIAELmAgIAAIAJBADYCCCACQoCAgIAQNwIAIAEgASgCAEEBajYCACAAQRBqJICAgIAAC9IHAQ1/I4CAgIAAQRBrIgIkgICAgAAgACgCCCEDIAAoAgQhBEEBIQUCQCABKAIAIgZBIiABKAIEIgcoAhAiCBGBgICAAICAgIAADQACQAJAAkAgAw0AQQAhA0EAIQAMAQtBACEJQQAhCiADIQsgBCEMA0AgDCALaiENQQAhAAJAAkADQCAMIABqIg4tAAAiAUGBf2pB/wFxQaEBSQ0BIAFBIkYNASABQdwARg0BIAsgAEEBaiIARw0ACyAKIAtqIQoMAQsgACAKaiEKAkACQAJAIA4sAAAiAEF/TA0AIA5BAWohDCAAQf8BcSEADAELIA4tAAFBP3EhASAAQR9xIQsCQCAAQV9LDQAgC0EGdCABciEAIA5BAmohDAwBCyABQQZ0IA4tAAJBP3FyIQECQCAAQXBPDQAgASALQQx0ciEAIA5BA2ohDAwBCyAOQQRqIQwgAUEGdCAOLQADQT9xciALQRJ0QYCA8ABxciIAQYCAxABGDQELIAIgAEGBgAQQqoSAgAACQCACLQANIgEgAi0ADCIOayILQf8BcUEBRg0AAkACQAJAIAogCUkNAAJAIAlFDQACQCAJIANJDQAgCSADRw0CDAELIAQgCWosAABBv39MDQELAkAgCkUNAAJAIAogA0kNACAKIANGDQEMAgsgBCAKaiwAAEG/f0wNAQsgBiAEIAlqIAogCWsgBygCDCIJEYKAgIAAgICAgABFDQEMAgsgBCADIAkgCkGY78iAABCrhICAAAALAkACQCABQYEBSQ0AIAYgAigCACAIEYGAgIAAgICAgAANAgwBCyAGIAIgDmogCyAJEYKAgIAAgICAgAANAQsCQCAAQYABTw0AQQEgCmohCQwCCwJAIABBgBBPDQBBAiAKaiEJDAILQQNBBCAAQYCABEkbIApqIQkMAQtBASEFDAYLAkACQCAAQYABTw0AQQEhAAwBCwJAIABBgBBPDQBBAiEADAELQQNBBCAAQYCABEkbIQALIAAgCmohCgsgDSAMayILDQELCyAJIApLDQFBACEAAkAgCUUNAAJAIAkgA0kNACADIQAgCSADRw0DDAELIAkhACAEIAlqLAAAQb9/TA0CCwJAIAoNAEEAIQMMAQsCQCAKIANJDQAgCiADRg0BIAAhCQwCCwJAIAQgCmosAABBv39KDQAgACEJDAILIAohAwsgBiAEIABqIAMgAGsgBygCDBGCgICAAICAgIAADQEgBkEiIAgRgYCAgACAgICAACEFDAELIAQgAyAJIApBqO/IgAAQq4SAgAAACyACQRBqJICAgIAAIAULiA0BB38jgICAgABBIGsiAySAgICAAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEOKAIBAQEBAQEBAQMFAQEEAQEBAQEBAQEBAQEBAQEBAQEBAQEJAQEBAQcACyABQdwARg0FCwJAIAJBAXFFDQAgAUH/BUsNBwsgAUEgSQ0KIAFB/wBJDQwMCQsgAEIANwECIABB3OAAOwEADAcLIABCADcBAiAAQdzoATsBAAwGCyAAQgA3AQIgAEHc5AE7AQAMBQsgAEIANwECIABB3NwBOwEADAQLIABCADcBAiAAQdy4ATsBAAwDCyACQYACcUUNBiAA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A0EPcS0AmfHIgAA6AAAgBEF/aiEEIANBD0shBSADQQR2IQMgBQ0ACyABQQFBk+/IgABBAiACQQhqIARqQX9qQQkgBGsQ1YSAgAAhAwsgAkEQaiSAgICAACADCxwAIAAoAgAgASAAKAIEKAIMEYGAgIAAgICAgAALFAAgASgCACABKAIEIAAQoIKAgAALoAICAn8BfiOAgICAAEEQayICJICAgIAAIAAoAgAhAAJAAkACQCABKAIIIgNBgICAEHENACADQYCAgCBxDQEgACkDACABEOGEgIAAIQAMAgsgACkDACEEQREhAANAIAIgAGpBfmogBKdBD3EtAInxyIAAOgAAIABBf2ohACAEQg9WIQMgBEIEiCEEIAMNAAsgAUEBQZPvyIAAQQIgAiAAakF/akERIABrENWEgIAAIQAMAQsgACkDACEEQREhAANAIAIgAGpBfmogBKdBD3EtAJnxyIAAOgAAIABBf2ohACAEQg9WIQMgBEIEiCEEIAMNAAsgAUEBQZPvyIAAQQIgAiAAakF/akERIABrENWEgIAAIQALIAJBEGokgICAgAAgAAvFAgMCfwJ+A38jgICAgABBIGsiAiSAgICAAEEUIQMgACEEAkAgAELoB1QNAEEUIQMgACEFA0AgAkEMaiADaiIGQXxqIAUgBUKQzgCAIgRCkM4Afn2nIgdB//8DcUHkAG4iCEEBdC8Awe/IgAA7AAAgBkF+aiAHIAhB5ABsa0H//wNxQQF0LwDB78iAADsAACADQXxqIQMgBUL/rOIEViEGIAQhBSAGDQALCwJAIARCCVgNACACQQxqIANBfmoiA2ogBKciBiAGQf//A3FB5ABuIgZB5ABsa0H//wNxQQF0LwDB78iAADsAACAGrSEECwJAAkAgAFANACAEUA0BCyACQQxqIANBf2oiA2ogBKdBAXQtAMLvyIAAOgAACyABQQFBAUEAIAJBDGogA2pBFCADaxDVhICAACEDIAJBIGokgICAgAAgAwvjBAEMfyABQX9qIQMgACgCBCEEIAAoAgAhBSAAKAIIIQZBACEHQQAhCEEAIQlBACEKAkADQCAKQQFxDQECQAJAIAIgCUkNAANAIAEgCWohCgJAAkACQAJAAkACQCACIAlrIgtBB0sNACACIAlHDQEgAiEJDAcLIApBA2pBfHEiACAKRg0BIAAgCmshDEEAIQADQCAKIABqLQAAQQpGDQUgDCAAQQFqIgBHDQALIAwgC0F4aiINSw0DDAILQQAhAANAIAogAGotAABBCkYNBCALIABBAWoiAEcNAAsgAiEJDAULIAtBeGohDUEAIQwLA0BBgIKECCAKIAxqIgAoAgAiDkGKlKjQAHNrIA5yQYCChAggAEEEaigCACIAQYqUqNAAc2sgAHJxQYCBgoR4cUGAgYKEeEcNASAMQQhqIgwgDU0NAAsLAkAgCyAMRw0AIAIhCQwDCyAKIAxqIQ4gAiAMayAJayELQQAhAAJAA0AgDiAAai0AAEEKRg0BIAsgAEEBaiIARw0ACyACIQkMAwsgACAMaiEACyAJIABqIgxBAWohCQJAIAwgAk8NACAKIABqLQAAQQpHDQBBACEKIAkhDiAJIQAMAwsgAiAJTw0ACwsgAiAIRg0CQQEhCiAIIQ4gAiEACwJAAkAgBi0AAEUNACAFQf6HyYAAQQQgBCgCDBGCgICAAICAgIAADQELIAAgCGshC0EAIQwCQCAAIAhGDQAgAyAAai0AAEEKRiEMCyABIAhqIQAgBiAMOgAAIA4hCCAFIAAgCyAEKAIMEYKAgIAAgICAgABFDQELC0EBIQcLIAcLYAECfyAAKAIEIQIgACgCACEDAkAgACgCCCIALQAARQ0AIANB/ofJgABBBCACKAIMEYKAgIAAgICAgABFDQBBAQ8LIAAgAUEKRjoAACADIAEgAigCEBGBgICAAICAgIAACx8AAkAgASgCBA4CAAAACyAAQbDxyIAAIAEQoIKAgAALpQIBA38jgICAgABBEGsiAiSAgICAACAAKAIAIQACQAJAAkAgASgCCCIDQYCAgBBxDQAgA0GAgIAgcQ0BIAAgARCjgYCAACEADAILIAAoAgAhAEEJIQMDQCACQQhqIANqQX5qIABBD3EtAInxyIAAOgAAIANBf2ohAyAAQQ9LIQQgAEEEdiEAIAQNAAsgAUEBQZPvyIAAQQIgAkEIaiADakF/akEJIANrENWEgIAAIQAMAQsgACgCACEAQQkhAwNAIAJBCGogA2pBfmogAEEPcS0AmfHIgAA6AAAgA0F/aiEDIABBD0shBCAAQQR2IQAgBA0ACyABQQFBk+/IgABBAiACQQhqIANqQX9qQQkgA2sQ1YSAgAAhAAsgAkEQaiSAgICAACAAC1wBAX8jgICAgABBMGsiASSAgICAACABQQE2AgwgAUGckcmAADYCCCABQgE3AhQgAUGkgICAAK1CIIYgAUEvaq2ENwMgIAEgAUEgajYCECABQQhqIAAQ54CAgAAACxIAIAFB5ofJgABBGBCegYCAAAtcAQF/I4CAgIAAQTBrIgEkgICAgAAgAUEBNgIMIAFBnJHJgAA2AgggAUIBNwIUIAFBpYCAgACtQiCGIAFBL2qthDcDICABIAFBIGo2AhAgAUEIaiAAEOeAgIAAAAsSACABQcSHyYAAQSAQnoGAgAALeQIBfwF+I4CAgIAAQTBrIgMkgICAgAAgAyABNgIEIAMgADYCACADQQM2AgwgA0GI9siAADYCCCADQgI3AhQgA0GFgICAAK1CIIYiBCADQQRqrYQ3AyggAyAEIAOthDcDICADIANBIGo2AhAgA0EIaiACEOeAgIAAAAueAgEDfyOAgICAAEEQayICJICAgIAAAkACQAJAIAEoAggiA0GAgIAQcQ0AIANBgICAIHENASAAIAEQo4GAgAAhAAwCCyAAKAIAIQBBCSEDA0AgAkEIaiADakF+aiAAQQ9xLQCJ8ciAADoAACADQX9qIQMgAEEPSyEEIABBBHYhACAEDQALIAFBAUGT78iAAEECIAJBCGogA2pBf2pBCSADaxDVhICAACEADAELIAAoAgAhAEEJIQMDQCACQQhqIANqQX5qIABBD3EtAJnxyIAAOgAAIANBf2ohAyAAQQ9LIQQgAEEEdiEAIAQNAAsgAUEBQZPvyIAAQQIgAkEIaiADakF/akEJIANrENWEgIAAIQALIAJBEGokgICAgAAgAAufAgEDfyOAgICAAEEQayICJICAgIAAIAIgACgCACIANgIEAkACQAJAIAEoAggiA0GAgIAQcQ0AIANBgICAIHENASACQQRqIAEQo4GAgAAhAAwCC0EJIQMDQCACQQhqIANqQX5qIABBD3EtAInxyIAAOgAAIANBf2ohAyAAQQ9LIQQgAEEEdiEAIAQNAAsgAUEBQZPvyIAAQQIgAkEIaiADakF/akEJIANrENWEgIAAIQAMAQtBCSEDA0AgAkEIaiADakF+aiAAQQ9xLQCZ8ciAADoAACADQX9qIQMgAEEPSyEEIABBBHYhACAEDQALIAFBAUGT78iAAEECIAJBCGogA2pBf2pBCSADaxDVhICAACEACyACQRBqJICAgIAAIAAL+wIBB38jgICAgABBIGsiAySAgICAACACIAFrIgIgACgCCCIEaiEFAkACQCACIAAoAgAiBiAEa0sNACAAKAIEIQYMAQsCQAJAAkAgBSAETw0AQQAhAAwBC0EAIQcgA0EUaiEIAkAgBSAGQQF0IgkgBSAJSxsiCUEIIAlBCEsbIglBAEgNAAJAAkAgBg0AQQAhBiADQRxqIQcMAQsgACgCBCEIIANBATYCHCADQRhqIQcLIAcgBjYCAAJAAkAgAygCHEUNAAJAIAMoAhgiBg0AIANBCGpBASAJEO6EgIAAIAMoAgghBgwCCyAIIAZBASAJENiDgIAAIQYMAQsgAyAJEO+EgIAAIAMoAgAhBgsgBg0CIANBATYCFCADQRBqIQggCSEHCyAIIAc2AgAgAygCECECIAMoAhQhAAsgACACEKyCgIAAAAsgACAJNgIAIAAgBjYCBAsCQCACRQ0AIAYgBGogASAC/AoAAAsgACAFNgIIIANBIGokgICAgAALHAAgAiABENmDgIAAIQEgACACNgIEIAAgATYCAAtHAQF/I4CAgIAAQRBrIgIkgICAgAAgAkEIakEBIAEQ7oSAgAAgAigCDCEBIAAgAigCCDYCACAAIAE2AgQgAkEQaiSAgICAAAvMAQEDfwJAAkAgAUGAAUkNACABQT9xQYB/ciEDIAFBBnYhBAJAIAFBgBBPDQAgAiADOgABIAIgBEHAAXI6AABBAiEBDAILIAFBDHYhBSAEQT9xQYB/ciEEAkAgAUH//wNLDQAgAiADOgACIAIgBDoAASACIAVB4AFyOgAAQQMhAQwCCyACIAM6AAMgAiAEOgACIAIgBUE/cUGAf3I6AAEgAiABQRJ2QXByOgAAQQQhAQwBCyACIAE6AABBASEBCyAAIAE2AgQgACACNgIAC0ABAX8gACgCCCAAQQxqKAIAEPKEgIAAAkAgAEF/Rg0AIAAgACgCBEF/aiIBNgIEIAENACAAQRRBBBDAg4CAAAsLbwECfyOAgICAAEEQayICJICAgIAAAkACQCAADQBBACEAIAJBDGohAwwBCyACQQE2AgwgAkEIaiEDCyADIAA2AgACQCACKAIMIgBFDQAgAigCCCIDRQ0AIAEgAyAAEMCDgIAACyACQRBqJICAgIAAC5IBAQN/I4CAgIAAQRBrIgMkgICAgABBACEEAkACQCACQQBIDQACQCACDQBBACEFQQEhBAwCCyADQQhqIAIQ74SAgAAgAiEFIAMoAggiBA0BQQEhBAsgBCACEKyCgIAAAAsgACAENgIEIAAgBTYCAAJAIAJFDQAgBCABIAL8CgAACyAAIAI2AgggA0EQaiSAgICAAAvJAwEHfyOAgICAAEEQayIBJICAgIAAIAAoAhQiAiEDAkACQAJAAkACQAJAAkAgAkERSQ0AIAAoAgQiA0F/Rg0BC0F/IANndkEAIAMbIgRBf0YNACAEQQFqIQNBECEFAkACQCACQRBLDQAgAEEBaiEGIAIhBwwBCyAAKAIEIQcgACgCCCEGIAIhBQsgAyAHSQ0BAkAgBEEQSQ0AIAMgBUYNBgJAIANBAEgNAAJAAkAgAkERSQ0AIAVBf0wNAiAGIAVBASADENiDgIAAIgJFDQEMCAsgA0EBENmDgIAAIgINBgsAC0HgmcmAAEERQbyiyYAAEIWAgIAAAAsgAkEQSw0CDAULQeCZyYAAQRFBzKLJgAAQ5oCAgAAAC0HcosmAAEEgQfyiyYAAEIWAgIAAAAsgAEEAOgAAAkAgB0UNACAAQQFqIAYgB/wKAAALIAAgBzYCFAJAIAVBf0wNACAGIAVBARDAg4CAAAwDCyABQQA2AghBkLLJgABBKyABQQhqQaSKyYAAQayiyYAAEIOBgIAAAAsgB0UNACACIAYgB/wKAAALIAAgAzYCFCAAIAI2AgggACAHNgIEIABBAToAAAsgAUEQaiSAgICAAAsRACAAIAEgASACahDthICAAAteAQR/AkAgACgCAEEBRw0AIAAoAghBA3QhAyAAKAIEIQQDQCADRQ0BIANBeGohAyAEKAIEIQUgBCgCACEGIARBCGohBCABIAIgBiAFEIKFgIAARQ0ACyAAQQI2AgALCyIAQYCAhBAgAEFoakFzIABBAUsbIgBBA3R2QQMgAEEESRsLnQEBAn8CQCAAKAIUIgJBEEsNAAJAAkAgAkEQRg0AIABBFGohAyAAQQFqIQAMAQsgABD0hICAACAAQQRqIQMgACgCBCECIAAoAgghAAsgACACaiABOgAAIAMgAygCAEEBajYCAA8LAkAgACgCBCIDIAJHDQAgABD0hICAACAAKAIEIQMLIAAoAgggA2ogAToAACAAIAAoAgRBAWo2AgQLFwACQCAAKAIAQSFGDQAgABDDgICAAAsLmwEBAn8gASgCFCEDAkACQCACDQAgASADQQFqNgIUDAELIAEQyoCAgAALAkADQCABKAIUIgIgASgCEE8NAQJAAkACQCABEMmAgIAAQf8BcSIEQXdqDgUBAgQCAgALIARBIEcNAwsgASACQQFqNgIUDAELIAEQyoCAgAAMAAsLIABBDDYCACAAIAIgA2s2AgggACABKAIMIANqNgIEC/gFAQd/I4CAgIAAQSBrIgMkgICAgAAgASABKAIUQQFqIgQ2AhQgASgCGCEFIAEoAhAhBiAEIQcDQAJAAkACQAJAAkACQCAHIAZPDQACQAJAAkAgARDJgICAACIIQf8BcSIJQSJGDQAgCUEnRg0BAkAgCUF0akECSQ0AIAlFDQMgCUEKRg0AIAlB3ABGDQMgCMBBQE4NB0EBIQkMCAsgByAEayEHIAEoAgwgBGohAUEdIQkMBQsgAg0HIAEgB0EBajYCFCAHIARrIQcgASgCDCAEaiEBDAMLIAJFDQYgASAHQQFqNgIUIAcgBGshByABKAIMIARqIQEMAgsgA0EUaiABKAIMIARqIAcgBGsQ84SAgAADQAJAAkACQAJAAkACQAJAIAcgBk8NAAJAAkAgARDJgICAACIIQf8BcSIJRQ0AIAlBIkYNAQJAIAlBJ0YNACAJQdwARg0EAkAgCUF0akECSQ0AIAlBCkYNACAIwEFATg0GQQEhCQwHCyADIANBFGoQg4WAgABBHSEJQX8hByADKAIAIQEMDQsgASAHQQFqNgIUIAINAgwHCyABIAdBAWo2AhQgA0EUakH8jsmAAEH/jsmAABDthICAAAwHCyABIAdBAWo2AhQgAg0FCyADQQhqIANBFGoQg4WAgABBBiEJQX8hByADKAIIIQEMCQsgASAHQQFqIgc2AhQgByAGTw0EAkACQCABEMmAgIAAQf8BcSIHQQ1LDQBBASAHdEGA6ABxDQELIAEgA0EUahCEhYCAAAwFCyABEMqAgIAADAQLIAlB7wFNDQFBfyEJCyABIAEoAhggCWo2AhgLIAEgB0EBajYCFAsgA0EUaiAIEIWFgIAACyABKAIQIQYgASgCFCEHDAALCyAHIARrIQcgASgCDCAEaiEBC0EGIQkLIAAgBzYCCCAAIAE2AgQgACAJNgIAIANBIGokgICAgAAPCyAJQe8BTQ0BQX8hCQsgASAJIAVqIgU2AhgLIAEgB0EBaiIHNgIUDAALC/gBAQV/QQAhAQJAAkAgACgCFCICIAAoAhAiA08NAEEBIQEgABDJgICAACIEQd8BcUG/f2pB/wFxQRpJDQACQAJAAkACQCAEwCIFQf8BcSIEQaR/ag4EAgEBBAALIARFDQMgBEEtRg0CCyAFQQBIDwsgAEEBEP+EgIAAQQFzDwtBACEBIAJBAWogA08NACAAQQEQ/oSAgAAiAkHfAXFBv39qQf8BcUEaSQ0BQQEhAQJAAkACQCACwCIDQf8BcSICQaR/ag4EAgEBAwALIAJFDQNBASEBIAJBLUYNAgsgA0EASA8LIABBARD/hICAAEEBcyEBCyABDwtBAQv3BQEKfyOAgICAAEHAAGsiAiSAgICAACABKAIYIQMgASgCECEEIAEoAgwhBSABKAIUIgYhBwJAA0AgAkEoaiAHIAUgBEGkkMmAABCGhYCAACACKAIsIgggB2ohCUEAIQogAigCKCELAkADQCAIIApGDQECQCALIApqLQAALQCkiMmAAEEBRw0AIApBAWohCgwBCwsgByAKaiEJCyABIAk2AhQgAkEgaiABIAcQioWAgAACQCAJIARPDQACQAJAAkAgARDJgICAACIIQf8BcSIKRQ0AIApB3ABGDQAgCMBBQE4NAUEBIQoMAgsgAkE0aiAFIAZqIAkgBmsQ84SAgAADQCABKAIYIQMDQCACQRhqIAkgBSAEQaSQyYAAEIaFgIAAIAIoAhwiCCAJaiEHQQAhCiACKAIYIQsCQANAIAggCkYNAQJAIAsgCmotAAAtAKSIyYAAQQFHDQAgCkEBaiEKDAELCyAJIApqIQcLIAEgBzYCFCACQRBqIAEgCRCKhYCAACACQTRqIAIoAhAgAigCFBD1hICAAAJAAkACQCAHIARPDQACQAJAIAEQyYCAgAAiCkH/AXEiCEUNACAIQdwARg0BIArAQUBIDQMgCEHvAU0NAiABIAdBAWoiCTYCFCABIANBf2oiAzYCGCACQTRqIAoQhYWAgAAMBQsgASAHQQFqIgk2AhQgAkE0akH8jsmAAEH/jsmAABDthICAAAwECyABQQEQ/4SAgABFDQILIAJBCGogAkE0ahCDhYCAAEF/IQogAigCCCEIDAgLIAEgB0EBaiIJNgIUIAEgA0EBaiIDNgIYIAJBNGogChCFhYCAAAwBCwsgASAHQQFqNgIUIAEgAkE0ahCEhYCAACABKAIQIQQgASgCDCEFIAEoAhQhCQwACwsgCkHvAU0NAUF/IQoLIAEgCUEBaiIHNgIUIAEgAyAKaiIDNgIYDAELCyAJIAZrIQogBSAGaiEICyAAIAo2AgQgACAINgIAIAJBwABqJICAgIAACzgBAX8CQCAAKAIUIAFqIgEgACgCECICTw0AIAAoAgwgAWotAAAPCyABIAJBtJDJgAAQ0ICAgAAACz4BAX9BACECAkAgACgCFCABaiAAKAIQTw0AIAAgARD+hICAAEH/AXEiAEENSw0AQYDoACAAdiECCyACQQFxC6sICQF/AXwDfwF8An8CfAF/AX0BfiOAgICAAEEQayICJICAgIAARAAAAAAAAPC/IQMCQAJAAkACQCABEMmAgIAAQf8BcUFVag4DAQACAAsgASgCFCEERAAAAAAAAPA/IQNBACEFDAILRAAAAAAAAPA/IQMLQQEhBSABIAEoAhRBAWoiBDYCFAsgASgCECEGRAAAAAAAAAAAIQcCQANAIAEQyYCAgABBUGpB/wFxIghBCUsNASABIARBAWoiBDYCFCAHRAAAAAAAACRAoiAIuKAhByAEIAZJDQALC0EBIQlEAAAAAAAAAAAhCgJAIARBAWoiCCAGTw0AIAEQyYCAgABB/wFxQS5HDQBBASEJIAFBARD+hICAAEFQakH/AXFBCUsNACABIAg2AhQgBEECaiEERAAAAAAAAAAAIQpEmpmZmZmZuT8hCwJAAkADQCABEMmAgIAAQVBqQf8BcSIIQQlLDQEgASAENgIUIAogCyAIuKKgIQoCQCAGIARGDQAgBEEBaiEEIAtEmpmZmZmZuT+iIQsMAQsLIAYhBAwBCyAEQX9qIQQLIARBAWohCEEAIQkLIAMgByAKoKIhCgJAAkACQAJAAkACQAJAIAggBk8NACABEMmAgIAAQSByQf8BcUHlAEcNAAJAIAFBARD+hICAAEFQakH/AXFBCkkNACAEQQJqIAZPDQECQCABQQEQ/oSAgABB/wFxQVVqDgMAAgACCyABQQIQ/oSAgABBUGpB/wFxQQpJDQAgCUUNAgwDCyABIAg2AhREAAAAAAAA8L8hB0QAAAAAAADwPyELAkACQAJAIAEQyYCAgABB/wFxQVVqDgMAAgECC0QAAAAAAADwPyEHCyABIARBAmoiCDYCFCAHIQsLRAAAAAAAAAAAIQcCQANAIAEQyYCAgABBUGpB/wFxIgRBCUsNASABIAhBAWoiCDYCFCAHRAAAAAAAACRAoiAEuKAhByAIIAZJDQALCyAKRAAAAAAAACRAIAsgB6IQxoWAgACiIQpBACEJDAMLIAkNAQtBACEJIAQhCAwBC0EBIQkgCkQAAMD////fQWZFDQFB/////wchDAwCCwwCCwJAIApEAAAAAAAA4MFlRQ0AQYCAgIB4IQwMAQsgCvwCIQwLIAQhCAsCQAJAIAggBk8NACABEMmAgIAAQf8BcUElRw0AIAAgBToAECAAIAw2AgggACAJNgIEIABBCjYCACABIAhBAWo2AhQgACAKRAAAAAAAAFlAo7Y4AgwMAQsgCrYhDQJAIAEQ/ISAgAANACAAIA04AgwgACAFOgAQIAAgDDYCCCAAIAk2AgQgAEEJNgIADAELIAJBCGogARD9hICAACACKQMIIQ4gACANOAIQIAAgBToAFCAAIA43AgggACAMNgIEIAAgCTYCAAsgAkEQaiSAgICAAAuJDQERfyOAgICAAEHgAGsiAiSAgICAACACQRhqIAEQ/YSAgAAgAigCHCEDIAIoAhghBAJAAkACQAJAAkACQCABKAIUIgUgASgCECIGTw0AIAEQyYCAgABB/wFxQShHDQAgASAFQQFqIgc2AhQgBCEIIAMhCQJAIANBf0cNACAEKAIIIQkgBCgCBCEICwJAIAggCUH/jsmAAEEDEIKFgIAADQAgBCEIIAMhCQJAIANBf0cNACAEKAIIIQkgBCgCBCEICyABIAggCRD2hICAACAAIAM2AgggACAENgIEIABBGDYCAAwGCyACQRBqIAEoAgwiCiAGIAdB4I/JgAAQh4WAgAAgAigCECILQQFqIQwgCyACKAIUIg1qIQ5BACEJQQAhD0EAIRACQAJAAkADQCAJIREgCyIIIA5GDQEgEUEBaiEJIAhBAWohCwJAAkACQAJAAkAgCC0AACISQXdqDgUFAwEDAgALIBJBYGoOCgQABwAAAAAHAAMACyABIBEgB2oiCzYCFCAQDQUgASgCGCESDAgLAkAgCSANTw0AIAwgEWotAABBCkYNAwsgCEEBaiELIBFBAWohCQsgEEEBaiEQIBEhDwwBCwsgBSARakECaiEGCyABIAY2AhQCQCAQRQ0AIAEgBSAPakECajYCGCABIAEoAhwgEGo2AhwLIAJBADYCRCACQoeAgIAQNwI8IAIgAzYCLCACIAQ2AiggAkEYNgIkDAYLIAEgBSAPakECaiISNgIYIAEgASgCHCAQajYCHAwCCyACQSE2AjwgAiADNgIsIAIgBDYCKCACQRg2AiQMAgsgACADNgIIIAAgBDYCBCAAQQI2AgAMBAsgCyEJA0ACQAJAAkACQAJAIAkgBk8NAAJAAkACQCABEMmAgIAAIhFB/wFxIghBDUsNAEEBIAh0QYDsAHENBSAIRQ0EIAhBC0YNAQsCQAJAIAhBYGoOCgYBAgEBAQECAgMACyAIQdwARg0EIAhB/wBGDQELIBFBf2pB/wFxQQhJDQAgEUFyakH/AXFBEk8NBgsgASAJQQFqNgIUIAJBPGogASALEIiFgIAADAQLIAEgCUEBajYCFAsgCiALaiEIIAkgC2shAQwGCyACQdQAaiAKIAtqIAkgC2sQ84SAgAADQCABKAIYIRICQANAAkACQAJAAkACQAJAIAkgBk8NAAJAAkACQAJAIAEQyYCAgAAiEUH/AXEiCEENSw0AAkAgCEUNAEEBIAh0QYDsAHENAyAIQQtHDQEMAgsgASAJQQFqNgIUIAJB1ABqQfyOyYAAQf+OyYAAEO2EgIAADAkLAkACQCAIQWBqDgoDAQIBAQEBAgIEAAsgCEHcAEYNBiAIQf8ARg0BCyARQX9qQf8BcUEISQ0AIBFBcmpB/wFxQRJPDQQLIAEgCUEBajYCFAwFCyACIAJB1ABqEIOFgIAAIAJBPGogASALIAIoAgBBfxCJhYCAAAwLCyABIAlBAWo2AhQLIAJBCGogAkHUAGoQg4WAgABBfyEBIAIoAgghCAwNCyARwEFASA0CAkAgCEHvAUsNACABIAlBAWo2AhQgAkHUAGogERCFhYCAAAwECyABIAlBAWo2AhQgASASQX9qIhI2AhggAkHUAGogERCFhYCAAAwDCyABIAlBAWo2AhQgAUEAEP+EgIAARQ0ECyACQTxqIAEgCxCIhYCAACACKAJUIAIoAlgQ8oSAgAAMBgsgASAJQQFqNgIUIAEgEkEBaiISNgIYIAJB1ABqIBEQhYWAgAALIAlBAWohCQwACwsgASACQdQAahCEhYCAACABKAIQIQYgASgCFCEJDAALCyACQTxqIAEgCyAKIAtqIAkgC2sQiYWAgAALIAIoAjwhCCACIAM2AiwgAiAENgIoIAJBGDYCJCAIQSFGDQIMBAsCQAJAAkAgEcBBQE4NAEEBIQgMAQsgCEHwAUkNAUF/IQgLIAEgCCASaiISNgIYCyABIAlBAWoiCTYCFAwACwsgACACKQIkNwIAIABBEGogAkEkakEQaikCADcCACAAQQhqIAJBJGpBCGopAgA3AgAgAkE8ahD5hICAAAwCCyACIAE2AkQgAiAINgJAIAJBBzYCPCACIAM2AiwgAiAENgIoIAJBGDYCJAsgACACKQI8NwIAIABBEGogAkE8akEQaikCADcCACAAQQhqIAJBPGpBCGopAgA3AgAgAkEkahDDgICAAAsgAkHgAGokgICAgAALfQECf0EAIQQCQCABIANHDQADQAJAIAENAEEBDwsgAi0AACEDQQAhBCAALQAAIQUgAkEBaiECIAFBf2ohASAAQQFqIQAgBUEgQQAgBUG/f2pB/wFxQRpJG3JB/wFxIANBIEEAIANBv39qQf8BcUEaSRtyQf8BcUYNAAsLIAQLcgECfyOAgICAAEEQayICJICAgIAAIAJBCGpBBEEUEO6EgIAAAkAgAigCCCIDDQAACyADQoGAgIAQNwIAIAMgASkCADcCCCADQRBqIAFBCGooAgA2AgAgAEF/NgIEIAAgA0EIajYCACACQRBqJICAgIAAC+kEAQl/I4CAgIAAQSBrIgIkgICAgABB/f8DIQMCQAJAIAAoAhQiBCAAKAIQIgVPDQACQAJAIAAQyYCAgAAiBkFQakH/AXFBCkkNACAGQf8BcSIGQb9/akEGSQ0AIAZBn39qQQZJDQAgBg0BIAAgBEEBajYCFAwCC0EAIQZBACEHA0AgBCAGaiEIAkACQAJAAkACQCAGQQVLDQAgCCAFTw0AIAAQyYCAgAAiCUFQaiIKQf8BcUEKSQ0EIAlBn39qQf8BcUEGSQ0DIAlBv39qQf8BcUEGTw0BIAlBSWohCgwECyAIIAVPDQELAkACQAJAIAAQyYCAgABB/wFxIgZBd2oOBQECAwICAAsgBkEgRw0CCyAAIAhBAWo2AhQMAQsgABDKgICAAAsgB0UNBEH9/wNBgIDEACAHIAdBgLADc0GAgLx/akGAkLx/SRsiBiAGQYCAxABGGyEDDAQLIAlBqX9qIQoLIAAgBCAGakEBajYCFCAHQQR0IApB/wFxaiEHIAZBAWohBgwACwsgAiAAKAIMIgYgBWo2AhwgAiAGIARqNgIYIAJBEGogAkEYahDigICAACACKAIQQQFxRQ0BIAIoAhQiA0GAgMQARg0BAkACQCADQYABTw0AQQEhBgwBCwJAIANBgBBPDQBBAiEGDAELQQNBBCADQYCABEkbIQYLIAAgBiAEajYCFCAAIAZBf0F+IANBgIAESRtqIAAoAhhqNgIYCyACQQA2AhggAkEIaiADIAJBGGoQ8ISAgAAgASACKAIIIAIoAgwQ9YSAgAAgAkEgaiSAgICAAA8LQcSQyYAAEM+AgIAAAAs1AQF/AkAgACgCCCICIAAoAgBHDQAgABC0hICAAAsgACACQQFqNgIIIAAoAgQgAmogAToAAAswAAJAIAMgAUkNACAAIAMgAWs2AgQgACACIAFqNgIADwsgASADIAMgBBCcgICAAAALTgACQAJAAkAgAiADSw0AIAIgA0cNAQwCCyABIANqLAAAQb9/Sg0BCyABIAIgAyACIAQQq4SAgAAACyAAIAIgA2s2AgQgACABIANqNgIAC/UBAQR/I4CAgIAAQRBrIgMkgICAgAADQAJAAkACQCABKAIUIgQgASgCEE8NACABEMmAgIAAIgVB/wFxIgZBdGpBAkkNAiAGQQpGDQIgBkHcAEYNAQJAIAZBKUYNACABIAUQjIWAgAAMBAsgASAEQQFqNgIUCyABKAIMIQEgAEEcNgIAIAAgBCACazYCCCAAIAEgAmo2AgQgA0EQaiSAgICAAA8LIAEgBEEBajYCFCADQQhqIAEQxoCAgAAgAy0ACEUNAQJAIAMtAAlB/wFxIgZB3ABGDQAgBkEpRw0CCyABIARBAmo2AhQMAQsgARDKgICAAAwACwunAQEDfwJAA0AgASgCFCIFIAEoAhBPDQECQAJAAkACQAJAIAEQyYCAgAAiBkH/AXEiB0F3ag4FAgMBAwMACyAHQSBGDQEgB0EpRg0DCyABIAYQjIWAgAAgACABIAIQiIWAgAAgAyAEEKuAgIAADwsgASAFQQFqNgIUDAILIAEQyoCAgAAMAQsLIAEgBUEBajYCFAsgACAENgIIIAAgAzYCBCAAQQc2AgALTgECfyABKAIQIQMCQAJAIAEoAhQiBCACSQ0AIAQgA00NAQsgAiAEIANBhJDJgAAQnICAgAAACyAAIAQgAms2AgQgACABKAIMIAJqNgIAC8MCAQt/I4CAgIAAQRBrIgIkgICAgABBACEDAkACQCABLQAxDQAgAUEcaiEEIAEoAhwhBSABKAIgIQYgASgCFCEHAkADQCACQQhqIAQQ4oCAgAAgAigCCEEBcUUNASACKAIMIQggASABKAIkIgkgBmogBSABKAIgIgpqayABKAIcIgVqIgs2AiRBACEGA0ACQCAGQRRHDQAgCiEGDAILIAEgBmohDCAGQQRqIQYgDCgCACAIRw0ACwsgASgCKCEGIAEgCzYCKCAHIAZqIQMgCSAGayEGDAILIAEtADENACABQQE6ADECQAJAIAEtADBBAUcNACABKAIsIQggASgCKCEMDAELIAEoAiwiCCABKAIoIgxGDQILIAggDGshBiABKAIUIAxqIQMMAQsLIAAgBjYCBCAAIAM2AgAgAkEQaiSAgICAAAtBAQF/IAAgACgCFEEBajYCFEF/IQICQAJAIAFB/wFxQe8BSw0AQQEhAiABwEG/f0oNAQsgACAAKAIYIAJqNgIYCwsSACABQYiRyYAAQQIQnoGAgAAL+wIBBX9BACECAkAgAUHN/3sgAEEQIABBEEsbIgBrTw0AIABBECABQQtqQXhxIAFBC0kbIgNqQQxqEJ2BgIAAIgFFDQAgAUF4aiECAkACQCAAQX9qIgQgAXENACACIQAMAQsgAUF8aiIFKAIAIgZBeHEgBCABakEAIABrcUF4aiIBQQAgACABIAJrQRBLG2oiACACayIBayEEAkAgBkEDcUUNACAAIAQgACgCBEEBcXJBAnI2AgQgACAEaiIEIAQoAgRBAXI2AgQgBSABIAUoAgBBAXFyQQJyNgIAIAIgAWoiBCAEKAIEQQFyNgIEIAIgARCRhYCAAAwBCyACKAIAIQIgACAENgIEIAAgAiABajYCAAsCQCAAKAIEIgFBA3FFDQAgAUF4cSICIANBEGpNDQAgACADIAFBAXFyQQJyNgIEIAAgA2oiASACIANrIgNBA3I2AgQgACACaiICIAIoAgRBAXI2AgQgASADEJGFgIAACyAAQQhqIQILIAIL1AYBBX8gAEF4aiIBIABBfGooAgAiAkF4cSIAaiEDAkACQCACQQFxDQAgAkECcUUNASABKAIAIgIgAGohAAJAIAEgAmsiAUEAKALAvcmAAEcNACADKAIEQQNxQQNHDQFBACAANgK4vcmAACADIAMoAgRBfnE2AgQgASAAQQFyNgIEIAMgADYCAA8LIAEgAhCQhYCAAAsCQAJAAkACQAJAAkAgAygCBCICQQJxDQAgA0EAKALEvcmAAEYNAiADQQAoAsC9yYAARg0DIAMgAkF4cSICEJCFgIAAIAEgAiAAaiIAQQFyNgIEIAEgAGogADYCACABQQAoAsC9yYAARw0BQQAgADYCuL3JgAAPCyADIAJBfnE2AgQgASAAQQFyNgIEIAEgAGogADYCAAsgAEGAAkkNAiABIAAQmoWAgABBACEBQQBBACgC2L3JgABBf2oiADYC2L3JgAAgAA0EAkBBACgCoLvJgAAiAEUNAEEAIQEDQCABQQFqIQEgACgCCCIADQALC0EAIAFB/x8gAUH/H0sbNgLYvcmAAA8LQQAgATYCxL3JgABBAEEAKAK8vcmAACAAaiIANgK8vcmAACABIABBAXI2AgQCQCABQQAoAsC9yYAARw0AQQBBADYCuL3JgABBAEEANgLAvcmAAAsgAEEAKALQvcmAACIETQ0DQQAoAsS9yYAAIgBFDQNBACECQQAoAry9yYAAIgVBKUkNAkGYu8mAACEBA0ACQCABKAIAIgMgAEsNACAAIAMgASgCBGpJDQQLIAEoAgghAQwACwtBACABNgLAvcmAAEEAQQAoAri9yYAAIABqIgA2Ari9yYAAIAEgAEEBcjYCBCABIABqIAA2AgAPCwJAAkBBACgCsL3JgAAiA0EBIABBA3Z0IgJxDQBBACADIAJyNgKwvcmAACAAQfgBcUGou8mAAGoiACEDDAELIABB+AFxIgBBqLvJgABqIQMgAEGwu8mAAGooAgAhAAsgAyABNgIIIAAgATYCDCABIAM2AgwgASAANgIIDwsCQEEAKAKgu8mAACIBRQ0AQQAhAgNAIAJBAWohAiABKAIIIgENAAsLQQAgAkH/HyACQf8fSxs2Ati9yYAAIAUgBE0NAEEAQX82AtC9yYAACwuSAwEEfyAAKAIMIQICQAJAAkACQCABQYACSQ0AIAAoAhghAwJAAkACQCACIABHDQAgAEEUQRAgACgCFCICG2ooAgAiAQ0BQQAhAgwCCyAAKAIIIgEgAjYCDCACIAE2AggMAQsgAEEUaiAAQRBqIAIbIQQDQCAEIQUgASICQRRqIAJBEGogAigCFCIBGyEEIAJBFEEQIAEbaigCACIBDQALIAVBADYCAAsgA0UNAgJAAkAgACAAKAIcQQJ0QZi6yYAAaiIBKAIARg0AIAMoAhAgAEYNASADIAI2AhQgAg0DDAQLIAEgAjYCACACRQ0EDAILIAMgAjYCECACDQEMAgsCQCACIAAoAggiBEYNACAEIAI2AgwgAiAENgIIDwtBAEEAKAKwvcmAAEF+IAFBA3Z3cTYCsL3JgAAPCyACIAM2AhgCQCAAKAIQIgFFDQAgAiABNgIQIAEgAjYCGAsgACgCFCIBRQ0AIAIgATYCFCABIAI2AhgPCw8LQQBBACgCtL3JgABBfiAAKAIcd3E2ArS9yYAAC7YEAQJ/IAAgAWohAgJAAkAgACgCBCIDQQFxDQAgA0ECcUUNASAAKAIAIgMgAWohAQJAIAAgA2siAEEAKALAvcmAAEcNACACKAIEQQNxQQNHDQFBACABNgK4vcmAACACIAIoAgRBfnE2AgQgACABQQFyNgIEIAIgATYCAAwCCyAAIAMQkIWAgAALAkACQAJAAkAgAigCBCIDQQJxDQAgAkEAKALEvcmAAEYNAiACQQAoAsC9yYAARg0DIAIgA0F4cSIDEJCFgIAAIAAgAyABaiIBQQFyNgIEIAAgAWogATYCACAAQQAoAsC9yYAARw0BQQAgATYCuL3JgAAPCyACIANBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAsCQCABQYACSQ0AIAAgARCahYCAAA8LAkACQEEAKAKwvcmAACICQQEgAUEDdnQiA3ENAEEAIAIgA3I2ArC9yYAAIAFB+AFxQai7yYAAaiIBIQIMAQsgAUH4AXEiAUGou8mAAGohAiABQbC7yYAAaigCACEBCyACIAA2AgggASAANgIMIAAgAjYCDCAAIAE2AggPC0EAIAA2AsS9yYAAQQBBACgCvL3JgAAgAWoiATYCvL3JgAAgACABQQFyNgIEIABBACgCwL3JgABHDQFBAEEANgK4vcmAAEEAQQA2AsC9yYAADwtBACAANgLAvcmAAEEAQQAoAri9yYAAIAFqIgE2Ari9yYAAIAAgAUEBcjYCBCAAIAFqIAE2AgAPCwupAwEDfyOAgICAAEEQayICJICAgIAAIAAoAgAhAAJAAkACQCABKAIIIgNBgICAEHENACADQYCAgCBxDQFBAyEDIAAtAAAiACEEAkAgAEEKSQ0AQQEhAyACIAAgAEHkAG4iBEHkAGxrQf8BcUEBdC8Awe/IgAA7AAwLAkACQCAARQ0AIARFDQELIAJBC2ogA0F/aiIDaiAEQQF0LQDC78iAADoAAAsgAUEBQQFBACACQQtqIANqQQMgA2sQ1YSAgAAhAAwCCyAALQAAIQNBAyEAA0AgAkEJaiAAakF+aiADQQ9xQYnxyIAAai0AADoAACADQf8BcSIEQQR2IQMgAEF/aiEAIARBD0sNAAsgAUEBQZPvyIAAQQIgAkEJaiAAakF/akEDIABrENWEgIAAIQAMAQsgAC0AACEDQQMhAANAIAJBDmogAGpBfmogA0EPcUGZ8ciAAGotAAA6AAAgA0H/AXEiBEEEdiEDIABBf2ohACAEQQ9LDQALIAFBAUGT78iAAEECIAJBDmogAGpBf2pBAyAAaxDVhICAACEACyACQRBqJICAgIAAIAALEgAgAUGIkcmAAEECEJ6BgIAAC6QBAQJ/I4CAgIAAQTBrIgIkgICAgAAgASgCBCEDIAEoAgAhASACIAAoAgAoAgAiADYCGCACIABoNgIcIAJBAzYCBCACQYyIyYAANgIAIAJCAjcCDCACQaaAgIAArUIghiACQRxqrYQ3AyggAkGngICAAK1CIIYgAkEYaq2ENwMgIAIgAkEgajYCCCABIAMgAhCggoCAACEBIAJBMGokgICAgAAgAQsNACAAIAEQloWAgAAACzkBAX8jgICAgABBEGsiAiSAgICAACACIAE2AgwgAiAANgIIIAJBCGpBqICAgABBAUEAEJiFgIAAAAsJACAAQQA2AgALkwEBAn8jgICAgABBEGsiBCSAgICAAEEAQQAoAuS9yYAAIgVBAWo2AuS9yYAAAkAgBUEASA0AAkBBAC0A4L3JgAANAEEAQQAoAty9yYAAQQFqNgLcvcmAAEEAKALovcmAAEF/TA0BQQBBADoA4L3JgAAgAkUNARCZhYCAAAALIARBCGogACABEYCAgIAAgICAgAALAAsDAAALwwIBBH9BHyECAkAgAUH///8HSw0AIAFBJiABQQh2ZyICa3ZBAXEgAkEBdGtBPmohAgsgAEIANwIQIAAgAjYCHCACQQJ0QZi6yYAAaiEDAkBBACgCtL3JgABBASACdCIEcQ0AIAMgADYCACAAIAM2AhggACAANgIMIAAgADYCCEEAQQAoArS9yYAAIARyNgK0vcmAAA8LAkACQAJAIAMoAgAiBCgCBEF4cSABRw0AIAQhAgwBCyABQQBBGSACQQF2ayACQR9GG3QhAwNAIAQgA0EddkEEcWoiBSgCECICRQ0CIANBAXQhAyACIQQgAigCBEF4cSABRw0ACwsgAigCCCIDIAA2AgwgAiAANgIIIABBADYCGCAAIAI2AgwgACADNgIIDwsgBUEQaiAANgIAIAAgBDYCGCAAIAA2AgwgACAANgIICwsAIAAQnIWAgAAAC7oBAQN/I4CAgIAAQRBrIgEkgICAgAAgACgCACICKAIMIQMCQAJAAkACQCACKAIEDgIAAQILIAMNAUEBIQJBACEDDAILIAMNACACKAIAIgIoAgQhAyACKAIAIQIMAQsgAUGAgICAeDYCACABIAA2AgwgAUGogICAACAAKAIIIgAtAAggAC0ACRCYhYCAAAALIAEgAzYCBCABIAI2AgAgAUGpgICAACAAKAIIIgAtAAggAC0ACRCYhYCAAAALDAAgACABKQIANwMACzAAAkAgACgCAC0AAA0AIAFBuO/IgABBBRCegYCAAA8LIAFBve/IgABBBBCegYCAAAsiACABKAIAQayYyYAAQQsgASgCBCgCDBGCgICAAICAgIAAC8IBAQR/AkAgACgCACAAKAIIIgJrIAEtABAiA0ECRyIETw0AIAAgAiAEQQRBFBDtgICAACAAKAIIIQILIAFBEWohBSAAKAIEIAJBFGxqIQQCQANAIANB/wFxQQJGDQEgBCABKQIANwIAIARBEGogAzoAACAEQRFqIAUvAAA7AAAgBEEIaiABQQhqKQIANwIAQQIhAyAEQRNqIAVBAmotAAA6AAAgBEEUaiEEIAJBAWohAgwACwsgACACNgIIIAFBAjoAEAtwAQN/IAAgASgCACICEKKFgIAAIAAoAgghAwJAAkAgAg0AIAMhBAwBCyADIAJqIQQgACgCBCADQRRsaiEDA0AgA0EAOwEAIANBEGpBADYCACADQRRqIQMgAkF/aiICDQALIAFBADYCAAsgACAENgIICykBAX8CQCABIAAoAgAgACgCCCICa00NACAAIAIgAUEEQRQQ7YCAgAALC80BAQJ/AkAgACgCECICQQJLDQACQAJAIAJBAkYNACAAQRBqIQMgAEECaiEADAELIAAQpIWAgAAgAEEEaiEDIAAoAgQhAiAAKAIIIQALIAAgAkEGbGoiACABKAEANgEAIABBBGogAUEEai8BADsBACADIAMoAgBBAWo2AgAPCwJAIAAoAgQiAyACRw0AIAAQpIWAgAAgACgCBCEDCyAAKAIIIANBBmxqIgIgASgBADYBACACQQRqIAFBBGovAQA7AQAgACAAKAIEQQFqNgIEC4wBAQJ/I4CAgIAAQRBrIgEkgICAgAACQCAAKAIQIgJBA0kNACAAKAIEIQILIAFBCGogAkF/RyACQQFqEKWFgIAAAkAgASgCCEEBcQ0AQeCZyYAAQRFBzKLJgAAQ5oCAgAAACyABIAAgASgCDBCmhYCAACABKAIAIAEoAgQQ2oOAgAAgAUEQaiSAgICAAAtCAAJAAkAgAUEBcQ0AQQAhAQwBC0EAQX8gAkF/amd2IAJBAkkbIgJBf0chASACQQFqIQILIAAgAjYCBCAAIAE2AgAL7QMBB38jgICAgABBIGsiAySAgICAAEECIQQCQAJAIAEoAhAiBUECSw0AIAFBAmohBiAFIQcMAQsgASgCBCEHIAEoAgghBiAFIQQLAkACQAJAAkAgAiAHSQ0AAkACQAJAAkAgAkEDSQ0AQYGAgIB4IQggAiAERg0BIANBDGogAhCnhYCAACADKAIQIQggAygCFCEJIAMoAgwNByAFQQNJDQMgA0EMaiAEEKeFgIAAIAMoAhAhBSADKAIUIQQgAygCDEUNAiAEIQkgBSEIDAcLQYGAgIB4IQggBUECTQ0AIAFBADsBAAJAIAdBBmwiAkUNACABQQJqIAYgAvwKAAALIAEgBzYCECADQQxqIAQQp4WAgAAgAygCDEEBRg0EIAYgAygCFCADKAIQEMCDgIAACwwFCyAGIAQgBSAJENiDgIAAIgVFDQQMAwsgCSAIENmDgIAAIgVFDQMgB0EGbCIIRQ0CIAUgBiAI/AoAAAwCC0HcosmAAEEgQfyiyYAAEIWAgIAAAAsgAyADKQIQNwIYQZCyyYAAQSsgA0EYakGEmsmAAEGsosmAABCDgYCAAAALIAEgAjYCECABIAU2AgggASAHNgIEIAFBATsBAEGBgICAeCEICyAAIAk2AgQgACAINgIAIANBIGokgICAgAALjAECAX4FfyABrUIGfiICpyEBAkACQAJAIAJCIIinRQ0AQQEhA0EIIQRBACEFQQQhBgwBC0EAIQNBAkEAIAFB/////wdJGyEHQQQhBAJAIAFB/v///wdNDQAgByEBQQEhAwwCC0EIIQYgASEFIAchAQsgACAGaiAFNgIACyAAIARqIAE2AgAgACADNgIAC0sAAkACQCACIANLDQAgASACSw0BIAAgAjYCBCAAIAE2AgAPC0EAIAIgA0GUmsmAABCcgICAAAALIAEgAiADQZSayYAAEJyAgIAAAAuqAQEDfyABQRRsIAAoAghBFGwiAWshAyACQRFqIQQgACgCBCABaiEBIAItABAhBQJAA0AgA0UNASACQQI6ABAgBUH/AXFBAkYNASABIAU6ABAgASACKQIANwIAIAEgBC8AADsAESABQQhqIAJBCGopAgA3AgBBAiEFIAFBE2ogBEECai0AADoAACAAIAAoAghBAWo2AgggA0FsaiEDIAFBFGohAQwACwsgA0ULeAECfyABQRRsIAAoAghBFGwiA2shBCACKAIAQX9qIQEgACgCBCADaiEDAkADQCAERQ0BIAFBf0YNASADQQA2AhAgA0EAOwEAIAIgATYCACAAIAAoAghBAWo2AgggBEFsaiEEIAFBf2ohASADQRRqIQMMAAsLIARFC24BBH8CQCABIAAoAggiAigCACAAKAIQIgMgACgCDCIEaiIFa00NACACIAUgAUEEQRQQ7YCAgAALIAQgAWohAQJAIANBFGwiA0UNACACKAIEIgIgAUEUbGogAiAEQRRsaiAD/AoAAAsgACABNgIMC24BBH8CQCABIAAoAggiAigCACAAKAIQIgMgACgCDCIEaiIFa00NACACIAUgAUEEQRQQ7YCAgAALIAQgAWohAQJAIANBFGwiA0UNACACKAIEIgIgAUEUbGogAiAEQRRsaiAD/AoAAAsgACABNgIMC0EBAX8CQAJAIAEoAhAiAkECSw0AIAFBAmohAQwBCyABKAIEIQIgASgCCCEBCyAAIAE2AgAgACABIAJBBmxqNgIEC58BAQF9AkACQCABQQFxRQ0AIAItAC1BAXENACAAKAIYIgEgACgCBCoCACAAKAIIKAIAIAAoAgwqAgAgACgCEC0AACAAKAIULQAAIAAoAgAiAC0AAEF/c0EBcRChgICAACABKgIA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gYCAACAFIQQMAAsLCyACQRBqJICAgIAAC6UCAQl/IAAoAhAgACgCABCzhYCAACECIABBMEEgIAAoAjAgACgCIBCzhYCAACIDG2ohBCAAQSBBMCADG2ohAyADIAAgAkEBc0EEdGoiBSAEIAQoAgAgACACQQR0aiIAKAIAELOFgIAAIgIbIAMoAgAgBSgCABCzhYCAACIGGyIHKAIAIQggACAEIAUgBhsgAhsiCSgCACEKIAFBCGogBCAAIAIbIgBBCGopAgA3AgAgASAAKQIANwIAIAFBGGogByAJIAggChCzhYCAACIAGyIEQQhqKQIANwIAIAEgBCkCADcCECABQShqIAkgByAAGyIAQQhqKQIANwIAIAEgACkCADcCICABIAUgAyAGGyIAKQIANwIwIAFBOGogAEEIaikCADcCAAuhAQEDfwJAIANBCEkNACAAIAAgA0EDdiIDQQZ0IgRqIAAgA0HwAGwiBWogAxC4hYCAACEAIAEgASAEaiABIAVqIAMQuIWAgAAhASACIAIgBGogAiAFaiADELiFgIAAIQILAkAgACgCACIDIAEoAgAiBBCzhYCAACIFIAMgAigCACIGELOFgIAARw0AIAIgASAFIAQgBhCzhYCAAHMbIQALIAALjQEDBH8BfgF/IAAoAgAhAyACKAIIIgAoAgAhBCABKAIAIAIoAgwiBUEEdGoiAUEIaiIGKQIAIQcgAigCACIIIAEpAgA3AgAgCEEIaiAHNwIAIAIgAEEQajYCCCACIAA2AgAgAiAFIAMgBBCzhYCAAEEBc2o2AgwgBiAAQQhqKQIANwIAIAEgACkCADcCAAuKAQMEfwF+AX8gACgCACEDIAIoAggiACgCACEEIAEoAgAgAigCDCIFQQR0aiIBQQhqIgYpAgAhByACKAIAIgggASkCADcCACAIQQhqIAc3AgAgAiAAQRBqNgIIIAIgADYCACACIAUgBCADELOFgIAAajYCDCAGIABBCGopAgA3AgAgASAAKQIANwIACyoAIAAgAhC3hYCAACAAQcAAaiACQcAAahC3hYCAACACQQggARC8hYCAAAvLAgEIfyACIAFBBHRBcGoiA2ohBCAAIANqIQUgACABQQF2IgZBBHRqIgNBcGohBwJAA0ACQCAGDQAgB0EQaiEHAkAgAUEBcUUNACACIAAgAyAAIAdJIgQbIgYp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YXJlZC9zbWFsbHNvcnQucnMAL3J1c3RjL2RlZDVjMDZjZjIxZDJiOTNiZmZkNWQ4ODRhYTZlOTY5MzRlZTQyMzQvbGlicmFyeS9jb3JlL3NyYy9zbGljZS9zb3J0L3N0YWJsZS9xdWlja3NvcnQucnMAdGFyZ2V0L3RhZmZ5L3NyYy9jb21wdXRlL2dyaWQvYWxpZ25tZW50LnJzAGxpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwB0YXJnZXQvdGFmZnkvc3JjL2NvbXB1dGUvZmxvYXQucnMAL1VzZXJzL3NodS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2Nzc3BhcnNlci0wLjM4LjAvc3JjL21hY3Jvcy5ycwAvVXNlcnMvc2h1Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvY3NzcGFyc2VyLTAuMzguMC9zcmMvcnVsZXNfYW5kX2RlY2xhcmF0aW9ucy5ycwB0YXJnZXQvdGFmZnkvc3JjL2NvbXB1dGUvZ3JpZC90eXBlcy9jb29yZGluYXRlcy5ycwAvcnVzdGMvZGVkNWMwNmNmMjFkMmI5M2JmZmQ1ZDg4NGFhNmU5NjkzNGVlNDIzNC9saWJyYXJ5L2FsbG9jL3NyYy9zdHIucnMAL1VzZXJzL3NodS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2Nzc3BhcnNlci0wLjM4LjAvc3JjL3Rva2VuaXplci5ycwAvVXNlcnMvc2h1Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvY3NzcGFyc2VyLTAuMzguMC9zcmMvcGFyc2VyLnJzAC9Vc2Vycy9zaHUvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ieXRlcy0xLjEyLjEvc3JjL2J1Zi9yZWFkZXIucnMAL1VzZXJzL3NodS9Eb2N1bWVudHMvZ2l0L3NhdG9yaS9jcmF0ZXMvbGF5b3V0L3RhcmdldC93b2ZmMi1wYXRjaGVkL3NyYy90dGZfaGVhZGVyLnJzAC9ydXN0Yy9kZWQ1YzA2Y2YyMWQyYjkzYmZmZDVkODg0YWE2ZTk2OTM0ZWU0MjM0L2xpYnJhcnkvY29yZS9zcmMvY21wLnJzAC9Vc2Vycy9zaHUvRG9jdW1lbnRzL2dpdC9zYXRvcmkvY3JhdGVzL2xheW91dC90YXJnZXQvdGFmZnkvc3JjL3N0eWxlL2RpbWVuc2lvbi5ycwB0YXJnZXQvd29mZjItcGF0Y2hlZC9zcmMvY2hlY2tzdW0ucnMAL1VzZXJzL3NodS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2Jyb3RsaS1kZWNvbXByZXNzb3ItNC4wLjMvc3JjL3RyYW5zZm9ybS5ycwAvVXNlcnMvc2h1L0RvY3VtZW50cy9naXQvc2F0b3JpL2NyYXRlcy9sYXlvdXQvdGFyZ2V0L3RhZmZ5L3NyYy9jb21wdXRlL2dyaWQvdHlwZXMvZ3JpZF9pdGVtLnJzAC9Vc2Vycy9zaHUvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ieXRlcy0xLjEyLjEvc3JjL2J1Zi9idWZfaW1wbC5ycwAvcnVzdGMvZGVkNWMwNmNmMjFkMmI5M2JmZmQ1ZDg4NGFhNmU5NjkzNGVlNDIzNC9saWJyYXJ5L2NvcmUvc3JjL2NlbGwucnMAL3J1c3RjL2RlZDVjMDZjZjIxZDJiOTNiZmZkNWQ4ODRhYTZlOTY5MzRlZTQyMzQvbGlicmFyeS9zdGQvc3JjL3RocmVhZC9sb2NhbC5ycwAvVXNlcnMvc2h1Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYml0dmVjLTEuMS4xL3NyYy9zbGljZS9hcGkucnMAL1VzZXJzL3NodS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2Nzc3BhcnNlci0wLjM4LjAvc3JjL250aC5ycwAvVXNlcnMvc2h1L0RvY3VtZW50cy9naXQvc2F0b3JpL2NyYXRlcy9sYXlvdXQvdGFyZ2V0L3RhZmZ5L3NyYy9zdHlsZS9jb21wYWN0X2xlbmd0aC5ycwAvVXNlcnMvc2h1L0RvY3VtZW50cy9naXQvc2F0b3JpL2NyYXRlcy9sYXlvdXQvdGFyZ2V0L3RhZmZ5L3NyYy9jb21wdXRlL2dyaWQvdHJhY2tfc2l6aW5nLnJzAC9ydXN0Yy9kZWQ1YzA2Y2YyMWQyYjkzYmZmZDVkODg0YWE2ZTk2OTM0ZWU0MjM0L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAvVXNlcnMvc2h1L0RvY3VtZW50cy9naXQvc2F0b3JpL2NyYXRlcy9sYXlvdXQvdGFyZ2V0L3RhZmZ5L3NyYy9jb21wdXRlL2xlYWYucnMAL1VzZXJzL3NodS9Eb2N1bWVudHMvZ2l0L3NhdG9yaS9jcmF0ZXMvbGF5b3V0L3RhcmdldC90YWZmeS9zcmMvdXRpbC9yZXNvbHZlLnJzAGxpYnJhcnkvY29yZS9zcmMvdW5pY29kZS9wcmludGFibGUucnMAdGFyZ2V0L3RhZmZ5L3NyYy90cmVlL2NhY2hlLnJzAC9Vc2Vycy9zaHUvRG9jdW1lbnRzL2dpdC9zYXRvcmkvY3JhdGVzL2xheW91dC90YXJnZXQvdGFmZnkvc3JjL3RyZWUvdGFmZnlfdHJlZS5ycwAvVXNlcnMvc2h1L0RvY3VtZW50cy9naXQvc2F0b3JpL2NyYXRlcy9sYXlvdXQvdGFyZ2V0L3dvZmYyLXBhdGNoZWQvc3JjL2RlY29kZS5ycwAvVXNlcnMvc2h1Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYnJvdGxpLWRlY29tcHJlc3Nvci00LjAuMy9zcmMvZGVjb2RlLnJzAC9ydXN0L2RlcHMvaGFzaGJyb3duLTAuMTUuNS9zcmMvcmF3L21vZC5ycwBsaWJyYXJ5L2NvcmUvc3JjL2ZtdC9tb2QucnMAdGFyZ2V0L3dvZmYyLXBhdGNoZWQvc3JjL2dseWZfZGVjb2Rlci9tb2QucnMAL1VzZXJzL3NodS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2Jyb3RsaS1kZWNvbXByZXNzb3ItNC4wLjMvc3JjL2JpdF9yZWFkZXIvbW9kLnJzAC9Vc2Vycy9zaHUvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9icm90bGktZGVjb21wcmVzc29yLTQuMC4zL3NyYy9odWZmbWFuL21vZC5ycwAvcnVzdGMvZGVkNWMwNmNmMjFkMmI5M2JmZmQ1ZDg4NGFhNmU5NjkzNGVlNDIzNC9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL21vZC5ycwAvVXNlcnMvc2h1L0RvY3VtZW50cy9naXQvc2F0b3JpL2NyYXRlcy9sYXlvdXQvdGFyZ2V0L3RhZmZ5L3NyYy9jb21wdXRlL2dyaWQvbW9kLnJzAC9ydXN0Yy9kZWQ1YzA2Y2YyMWQyYjkzYmZmZDVkODg0YWE2ZTk2OTM0ZWU0MjM0L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJzAC9ydXN0Yy9kZWQ1YzA2Y2YyMWQyYjkzYmZmZDVkODg0YWE2ZTk2OTM0ZWU0MjM0L2xpYnJhcnkvYWxsb2Mvc3JjL3ZlYy9tb2QucnMAL1VzZXJzL3NodS9Eb2N1bWVudHMvZ2l0L3NhdG9yaS9jcmF0ZXMvbGF5b3V0L3RhcmdldC90YWZmeS9zcmMvY29tcHV0ZS9ncmlkL2V4cGxpY2l0X2dyaWQucnMAdGFyZ2V0L3RhZmZ5L3NyYy9zdHlsZS9ncmlkLnJzAC9ydXN0Yy9kZWQ1YzA2Y2YyMWQyYjkzYmZmZDVkODg0YWE2ZTk2OTM0ZWU0MjM0L2xpYnJhcnkvYWxsb2Mvc3JjL3ZlYy9zcGVjX2Zyb21faXRlcl9uZXN0ZWQucnMAL1VzZXJzL3NodS9Eb2N1bWVudHMvZ2l0L3NhdG9yaS9jcmF0ZXMvbGF5b3V0L3RhcmdldC90YWZmeS9zcmMvY29tcHV0ZS9ncmlkL3R5cGVzL25hbWVkLnJzAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjEwL3NyYy9kbG1hbGxvYy5ycwAvVXNlcnMvc2h1Ly5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYnJvdGxpLWRlY29tcHJlc3Nvci00LjAuMy9zcmMv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dGlvbiByZXR1cm5lZCBhbiBlcnJvciB3aGVuIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBkaWQgbm90AABeAhAAGAAAAIoCAAAOAAAAKSBzaG91bGQgYmUgPCBsZW4gKGlzIHJlbW92YWwgaW5kZXggKGlzIEolEAASAAAANCUQABYAAAATTBIAAQAAAOBMEgARAAAApA0QACAAAAAcAAAABQAAADsAAAAMAAAABAAAADwAAAA9AAAAPgAAAHRpbWVkb3dubGlmZWxlZnRiYWNrY29kZWRhdGFzaG93b25seXNpdGVjaXR5b3Blbmp1c3RsaWtlZnJlZXdvcmt0ZXh0eWVhcm92ZXJib2R5bG92ZWZvcm1ib29rcGxheWxpdmVsaW5laGVscGhvbWVzaWRlbW9yZXdvcmRsb25ndGhlbXZpZXdmaW5kcGFnZWRheXNmdWxsaGVhZHRlcm1lYWNoYXJlYWZyb210cnVlbWFya2FibGV1cG9uaGlnaGRhdGVsYW5kbmV3c2V2ZW5uZXh0Y2FzZWJvdGhwb3N0dXNlZG1hZGVoYW5kaGVyZXdoYXRuYW1lTGlua2Jsb2dzaXplYmFzZWhlbGRtYWtlbWFpbnVzZXInKSAraG9sZGVuZHN3aXRoTmV3c3JlYWR3ZXJlc2lnbnRha2VoYXZlZ2FtZXNlZW5jYWxscGF0aHdlbGxwbHVzbWVudWZpbG1wYXJ0am9pbnRoaXNsaXN0Z29vZG5lZWR3YXlzd2VzdGpvYnNtaW5kYWxzb2xvZ29yaWNodXNlc2xhc3R0ZWFtYXJteWZvb2RraW5nd2lsbGVhc3R3YXJkYmVzdGZpcmVQYWdla25vd2F3YXkucG5nbW92ZXRoYW5sb2FkZ2l2ZXNlbGZub3RlbXVjaGZlZWRtYW55cm9ja2ljb25vbmNlbG9va2hpZGVkaWVkSG9tZXJ1bGVob3N0YWpheGluZm9jbHVibGF3c2xlc3NoYWxmc29tZXN1Y2h6b25lMTAwJW9uZXNjYXJlVGltZXJhY2VibHVlZm91cndlZWtmYWNlaG9wZWdhdmVoYXJkbG9zdHdoZW5wYXJra2VwdHBhc3NzaGlwcm9vbUhUTUxwbGFuVHlwZWRvbmVzYXZla2VlcGZsYWdsaW5rc29sZGZpdmV0b29rcmF0ZXRvd25qdW1wdGh1c2RhcmtjYXJkZmlsZWZlYXJzdGF5a2lsbHRoYXRmYWxsYXV0b2V2ZXIuY29tdGFsa3Nob3B2b3RlZGVlcG1vZGVyZXN0dHVybmJvcm5iYW5kZmVsbHJvc2V1cmwoc2tpbnJvbGVjb21lYWN0c2FnZXNtZWV0Z29sZC5qcGdpdGVtdmFyeWZlbHR0aGVuc2VuZGRyb3BWaWV3Y29weTEuMCI8L2E+c3RvcGVsc2VsaWVzdG91cnBhY2suZ2lmcGFzdGNzcz9ncmF5bWVhbiZndDtyaWRlc2hvdGxhdGVzYWlkcm9hZHZhciBmZWVsam9obnJpY2twb3J0ZmFzdCdVQS1kZWFkPC9iPnBvb3JiaWxsdHlwZVUuUy53b29kbXVzdDJweDtJbmZvcmFua3dpZGV3YW50d2FsbGxlYWRbMF07cGF1bHdhdmVzdXJlJCgnI3dhaXRtYXNzYXJtc2dvZXNnYWlubGFuZ3BhaWQhLS0gbG9ja3VuaXRyb290d2Fsa2Zpcm13aWZleG1sInNvbmd0ZXN0MjBweGtpbmRyb3dzdG9vbGZvbnRtYWlsc2FmZXN0YXJtYXBzY29yZXJhaW5mbG93YmFieXNwYW5zYXlzNHB4OzZweDthcnRzZm9vdHJlYWx3aWtpaGVhdHN0ZXB0cmlwb3JnL2xha2V3ZWFrdG9sZEZvcm1jYXN0ZmFuc2Jhbmt2ZXJ5cnVuc2p1bHl0YXNrMXB4O2dvYWxncmV3c2xvd2VkZ2VpZD0ic2V0czVweDsuanM/NDBweGlmIChzb29uc2VhdG5vbmV0dWJlemVyb3NlbnRyZWVkZmFjdGludG9naWZ0aGFybTE4cHhjYW1laGlsbGJvbGR6b29tdm9pZGVhc3lyaW5nZmlsbHBlYWtpbml0Y29zdDNweDtqYWNrdGFnc2JpdHNyb2xsZWRpdGtuZXduZWFyPCEtLWdyb3dKU09OZHV0eU5hbWVzYWxleW91IGxvdHNwYWluamF6emNvbGRleWVzZmlzaHd3dy5yaXNrdGFic3ByZXYxMHB4cmlzZTI1cHhCbHVlZGluZzMwMCxiYWxsZm9yZGVhcm53aWxkYm94LmZhaXJsYWNrdmVyc3BhaXJqdW5ldGVjaGlmKCFwaWNrZXZpbCQoIiN3YXJtbG9yZGRvZXNwdWxsLDAwMGlkZWFkcmF3aHVnZXNwb3RmdW5kYnVybmhyZWZjZWxsa2V5c3RpY2tob3VybG9zc2Z1ZWwxMnB4c3VpdGRlYWxSU1MiYWdlZGdyZXlHRVQiZWFzZWFpbXNnaXJsYWlkczhweDtuYXZ5Z3JpZHRpcHMjOTk5d2Fyc2xhZHljYXJzKTsgfXBocD9oZWxsdGFsbHdob216aDrlKi8NCiAxMDBoYWxsLgoKQTdweDtwdXNoY2hhdDBweDtjcmV3Ki88L2hhc2g3NXB4ZmxhdHJhcmUgJiYgdGVsbGNhbXBvbnRvbGFpZG1pc3Nza2lwdGVudGZpbmVtYWxlZ2V0c3Bsb3Q0MDAsDQoNCmNvb2xmZWV0LnBocDxicj5lcmljbW9zdGd1aWRiZWxsZGVzY2hhaXJtYXRoYXRvbS9pbWcmIzgybHVja2NlbnQwMDA7dGlueWdvbmVodG1sc2VsbGRydWdGUkVFbm9kZW5pY2s/aWQ9bG9zZW51bGx2YXN0d2luZFJTUyB3ZWFycmVseWJlZW5zYW1lZHVrZW5hc2FjYXBld2lzaGd1bGZUMjM6aGl0c3Nsb3RnYXRla2lja2JsdXJ0aGV5MTVweCcnKTspOyI+bXNpZXdpbnNiaXJkc29ydGJldGFzZWVrVDE4Om9yZHN0cmVlbWFsbDYwcHhmYXJt4oCZc2JveXNbMF0uJyk7IlBPU1RiZWFya2lkcyk7fX1tYXJ5dGVuZChVSylxdWFkemg65i1zaXotLS0tcHJvcCcpOw1saWZ0VDE5OnZpY2VhbmR5ZGVidD5SU1Nwb29sbmVja2Jsb3dUMTY6ZG9vcmV2YWxUMTc6bGV0c2ZhaWxvcmFscG9sbG5vdmFjb2xzZ2VuZSDigJRzb2Z0cm9tZXRpbGxyb3NzPGgzPnBvdXJmYWRlcGluazx0cj5taW5pKXwhKG1pbmV6aDroYmFyc2hlYXIwMCk7bWlsayAtLT5pcm9uZnJlZGRpc2t3ZW50c29pbHB1dHMvanMvaG9seVQyMjpJU0JOVDIwOmFkYW1zZWVzPGgyPmpzb24nLCAnY29udFQyMTogUlNTbG9vcGFzaWFtb29uPC9wPnNvdWxMSU5FZm9ydGNhcnRUMTQ6PGgxPjgwcHghLS08OXB4O1QwNDptaWtlOjQ2Wm5pY2VpbmNoWW9ya3JpY2V6aDrkJykpO3B1cmVtYWdlcGFyYXRvbmVib25kOjM3Wl9vZl8nXSk7MDAwLHpoOud0YW5reWFyZGJvd2xidXNoOjU2WkphdmEzMHB4Cnx9CiVDMyU6MzRaamVmZkVYUEljYXNodmlzYWdvbGZzbm93emg66XF1ZXIuY3Nzc2lja21lYXRtaW4uYmluZGRlbGxoaXJlcGljc3JlbnQ6MzZaSFRUUC0yMDFmb3Rvd29sZkVORCB4Ym94OjU0WkJPRFlkaWNrOwp9CmV4aXQ6MzVadmFyc2JlYXQnfSk7ZGlldDk5OTthbm5lfX08L1tpXS5MYW5na23CsndpcmV0b3lzYWRkc3NlYWxhbGV4OwoJfWVjaG9uaW5lLm9yZzAwNSl0b255amV3c3NhbmRsZWdzcm9vZjAwMCkgMjAwd2luZWdlYXJkb2dzYm9vdGdhcnljdXRzdHlsZXRlbXB0aW9uLnhtbGNvY2tnYW5nJCgnLjUwcHhQaC5EbWlzY2FsYW5sb2FuZGVza21pbGVyeWFudW5peGRpc2MpO30KZHVzdGNsaXApLgoKNzBweC0yMDBEVkRzN10+PHRhcGVkZW1vaSsrKXdhZ2VldXJvcGhpbG9wdHNob2xlRkFRc2FzaW4tMjZUbGFic3BldHNVUkwgYnVsa2Nvb2s7fQ0KSEVBRFswXSlhYmJyanVhbigxOThsZXNodHdpbjwvaT5zb255Z3V5c2Z1Y2twaXBlfC0KITAwMiluZG93WzFdO1tdOwpMb2cgc2FsdA0KCQliYW5ndHJpbWJhdGgpew0KMDBweAp9KTtrbzrsZmVlc2FkPg1zOi8vIFtdO3RvbGxwbHVnKCl7CnsNCiAuanMnMjAwcGR1YWxib2F0LkpQRyk7Cn1xdW90KTsKCicpOwoNCn0NMjAxNDIwMTUyMDE2MjAxNzIwMTgyMDE5MjAyMDIwMjEyMDIyMjAyMzIwMjQyMDI1MjAyNjIwMjcyMDI4MjAyOTIwMzAyMDMxMjAzMjIwMzMyMDM0MjAzNTIwMzYyMDM3MjAxMzIwMTIyMDExMjAxMDIwMDkyMDA4MjAwNzIwMDYyMDA1MjAwNDIwMDMyMDAyMjAwMTIwMDAxOTk5MTk5ODE5OTcxOTk2MTk5NTE5OTQxOTkzMTk5MjE5OTExOTkwMTk4OTE5ODgxOTg3MTk4NjE5ODUxOTg0MTk4MzE5ODIxOTgxMTk4MDE5NzkxOTc4MTk3NzE5NzYxOTc1MTk3NDE5NzMxOTcyMTk3MTE5NzAxOTY5MTk2ODE5NjcxOTY2MTk2NTE5NjQxOTYzMTk2MjE5NjExOTYwMTk1OTE5NTgxOTU3MTk1NjE5NTUxOTU0MTk1MzE5NTIxOTUxMTk1MDEwMDAxMDI0MTM5NDAwMDA5OTk5Y29tb23DoXNlc3RlZXN0YXBlcm90b2RvaGFjZWNhZGFhw7FvYmllbmTDrWFhc8OtdmlkYWNhc29vdHJvZm9yb3NvbG9vdHJhY3VhbGRpam9zaWRvZ3JhbnRpcG90ZW1hZGViZWFsZ29xdcOpZXN0b25hZGF0cmVzcG9jb2Nhc2FiYWpvdG9kYXNpbm9hZ3VhcHVlc3Vub3NhbnRlZGljZWx1aXNlbGxhbWF5b3pvbmFhbW9ycGlzb29icmFjbGljZWxsb2Rpb3Nob3JhY2FzadC30LDQvdCw0L7QvNGA0LDRgNGD0YLQsNC90LXQv9C+0L7RgtC40LfQvdC+0LTQvtGC0L7QttC10L7QvdC40YXQndCw0LXQtdCx0YvQvNGL0JLRi9GB0L7QstGL0LLQvtCd0L7QvtCx0J/QvtC70LjQvdC40KDQpNCd0LXQnNGL0YLRi9Ce0L3QuNC80LTQsNCX0LDQlNCw0J3Rg9Ce0LHRgtC10JjQt9C10LnQvdGD0LzQvNCi0YvRg9C22YHZitij2YbZhdin2YXYudmD2YTYo9mI2LHYr9mK2KfZgdmJ2YfZiNmE2YXZhNmD2KfZiNmE2YfYqNiz2KfZhNil2YbZh9mK2KPZitmC2K/Zh9mE2KvZhdio2YfZhNmI2YTZitio2YTYp9mK2KjZg9i02YrYp9mF2KPZhdmG2KrYqNmK2YTZhtit2KjZh9mF2YXYtNmI2LRmaXJzdHZpZGVvbGlnaHR3b3JsZG1lZGlhd2hpdGVjbG9zZWJsYWNrcmlnaHRzbWFsbGJvb2tzcGxhY2VtdXNpY2ZpZWxkb3JkZXJwb2ludHZhbHVlbGV2ZWx0YWJsZWJvYXJkaG91c2Vncm91cHdvcmtzeWVhcnNzdGF0ZXRvZGF5d2F0ZXJzdGFydHN0eWxlZGVhdGhwb3dlcnBob25lbmlnaHRlcnJvcmlucHV0YWJvdXR0ZXJtc3RpdGxldG9vbHNldmVudGxvY2FsdGltZXNsYXJnZXdvcmRzZ2FtZXNzaG9ydHNwYWNlZm9jdXNjbGVhcm1vZGVsYmxvY2tndWlkZXJhZGlvc2hhcmV3b21lbmFnYWlubW9uZXlpbWFnZW5hbWVzeW91bmdsaW5lc2xhdGVyY29sb3JncmVlbmZyb250JmFtcDt3YXRjaGZvcmNlcHJpY2VydWxlc2JlZ2luYWZ0ZXJ2aXNpdGlzc3VlYXJlYXNiZWxvd2luZGV4dG90YWxob3Vyc2xhYmVscHJpbnRwcmVzc2J1aWx0bGlua3NzcGVlZHN0dWR5dHJhZGVmb3VuZHNlbnNldW5kZXJzaG93bmZvcm1zcmFuZ2VhZGRlZHN0aWxsbW92ZWR0YWtlbmFib3ZlZmxhc2hmaXhlZG9mdGVub3RoZXJ2aWV3c2NoZWNrbGVnYWxyaXZlcml0ZW1zcXVpY2tzaGFwZWh1bWFuZXhpc3Rnb2luZ21vdmlldGhpcmRiYXNpY3BlYWNlc3RhZ2V3aWR0aGxvZ2luaWRlYXN3cm90ZXBhZ2VzdXNlcnNkcml2ZXN0b3JlYnJlYWtzb3V0aHZvaWNlc2l0ZXNtb250aHdoZXJlYnVpbGR3aGljaGVhcnRoZm9ydW10aHJlZXNwb3J0cGFydHlDbGlja2xvd2VybGl2ZXNjbGFzc2xheWVyZW50cnlzdG9yeXVzYWdlc291bmRjb3VydHlvdXIgYmlydGhwb3B1cHR5cGVzYXBwbHlJbWFnZWJlaW5ndXBwZXJub3Rlc2V2ZXJ5c2hvd3NtZWFuc2V4dHJhbWF0Y2h0cmFja2tub3duZWFybHliZWdhbnN1cGVycGFwZXJub3J0aGxlYXJuZ2l2ZW5uYW1lZGVuZGVkVGVybXNwYXJ0c0dyb3VwYnJhbmR1c2luZ3dvbWFuZmFsc2VyZWFkeWF1ZGlvdGFrZXN3aGlsZS5jb20vbGl2ZWRjYXNlc2RhaWx5Y2hpbGRncmVhdGp1ZGdldGhvc2V1bml0c25ldmVyYnJvYWRjb2FzdGNvdmVyYXBwbGVmaWxlc2N5Y2xlc2NlbmVwbGFuc2NsaWNrd3JpdGVxdWVlbnBpZWNlZW1haWxmcmFtZW9sZGVycGhvdG9saW1pdGNhY2hlY2l2aWxzY2FsZWVudGVydGhlbWV0aGVyZXRvdWNoYm91bmRyb3lhbGFza2Vkd2hvbGVzaW5jZXN0b2NrIG5hbWVmYWl0aGhlYXJ0ZW1wdHlvZmZlcnNjb3Blb3duZWRtaWdodGFsYnVtdGhpbmtibG9vZGFycmF5bWFqb3J0cnVzdGNhbm9udW5pb25jb3VudHZhbGlkc3RvbmVTdHlsZUxvZ2luaGFwcHlvY2N1cmxlZnQ6ZnJlc2hxdWl0ZWZpbG1zZ3JhZGVuZWVkc3VyYmFuZmlnaHRiYXNpc2hvdmVyYXV0bztyb3V0ZS5odG1sbWl4ZWRmaW5hbFlvdXIgc2xpZGV0b3BpY2Jyb3duYWxvbmVkcmF3bnNwbGl0cmVhY2hSaWdodGRhdGVzbWFyY2hxdW90ZWdvb2RzTGlua3Nkb3VidGFzeW5jdGh1bWJhbGxvd2NoaWVmeW91dGhub3ZlbDEwcHg7c2VydmV1bnRpbGhhbmRzQ2hlY2tTcGFjZXF1ZXJ5amFtZXNlcXVhbHR3aWNlMCwwMDBTdGFydHBhbmVsc29uZ3Nyb3VuZGVpZ2h0c2hpZnR3b3J0aHBvc3RzbGVhZHN3ZWVrc2F2b2lkdGhlc2VtaWxlc3BsYW5lc21hcnRhbHBoYXBsYW50bWFya3NyYXRlc3BsYXlzY2xhaW1zYWxlc3RleHRzc3RhcnN3cm9uZzwvaDM+dGhpbmcub3JnL211bHRpaGVhcmRQb3dlcnN0YW5kdG9rZW5zb2xpZCh0aGlzYnJpbmdzaGlwc3N0YWZmdHJpZWRjYWxsc2Z1bGx5ZmFjdHNhZ2VudFRoaXMgLy8tLT5hZG1pbmVneXB0RXZlbnQxNXB4O0VtYWlsdHJ1ZSJjcm9zc3NwZW50YmxvZ3Nib3giPm5vdGVkbGVhdmVjaGluYXNpemVzZ3Vlc3Q8L2g0PnJvYm90aGVhdnl0cnVlLHNldmVuZ3JhbmRjcmltZXNpZ25zYXdhcmVkYW5jZXBoYXNlPjwhLS1lbl9VUyYjMzk7MjAwcHhfbmFtZWxhdGluZW5qb3lhamF4LmF0aW9uc21pdGhVLlMuIGhvbGRzcGV0ZXJpbmRpYW5hdiI+Y2hhaW5zY29yZWNvbWVzZG9pbmdwcmlvclNoYXJlMTk5MHNyb21hbmxpc3RzamFwYW5mYWxsc3RyaWFsb3duZXJhZ3JlZTwvaDI+YWJ1c2VhbGVydG9wZXJhIi0vL1djYXJkc2hpbGxzdGVhbXNQaG90b3RydXRoY2xlYW4ucGhwP3NhaW50bWV0YWxsb3Vpc21lYW50cHJvb2ZicmllZnJvdyI+Z2VucmV0cnVja2xvb2tzVmFsdWVGcmFtZS5uZXQvLS0+Cjx0cnkgewp2YXIgbWFrZXNjb3N0c3BsYWluYWR1bHRxdWVzdHRyYWlubGFib3JoZWxwc2NhdXNlbWFnaWNtb3RvcnRoZWlyMjUwcHhsZWFzdHN0ZXBzQ291bnRjb3VsZGdsYXNzc2lkZXNmdW5kc2hvdGVsYXdhcmRtb3V0aG1vdmVzcGFyaXNnaXZlc2R1dGNodGV4YXNmcnVpdG51bGwsfHxbXTt0b3AiPgo8IS0tUE9TVCJvY2Vhbjxici8+Zmxvb3JzcGVha2RlcHRoIHNpemViYW5rc2NhdGNoY2hhcnQyMHB4O2FsaWduZGVhbHN3b3VsZDUwcHg7dXJsPSJwYXJrc21vdXNlTW9zdCAuLi48L2Ftb25nYnJhaW5ib2R5IG5vbmU7YmFzZWRjYXJyeWRyYWZ0cmVmZXJwYWdlX2hvbWUubWV0ZXJkZWxheWRyZWFtcHJvdmVqb2ludDwvdHI+ZHJ1Z3M8IS0tIGFwcmlsaWRlYWxhbGxlbmV4YWN0Zm9ydGhjb2Rlc2xvZ2ljVmlldyBzZWVtc2JsYW5rcG9ydHMgKDIwMHNhdmVkX2xpbmtnb2Fsc2dyYW50Z3JlZWtob21lc3JpbmdzcmF0ZWQzMHB4O3dob3NlcGFyc2UoKTsiIEJsb2NrbGludXhqb25lc3BpeGVsJyk7Ij4pO2lmKC1sZWZ0ZGF2aWRob3JzZUZvY3VzcmFpc2Vib3hlc1RyYWNrZW1lbnQ8L2VtPmJhciI+LnNyYz10b3dlcmFsdD0iY2FibGVoZW5yeTI0cHg7c2V0dXBpdGFseXNoYXJwbWlub3J0YXN0ZXdhbnRzdGhpcy5yZXNldHdoZWVsZ2lybHMvY3NzLzEwMCU7Y2x1YnNzdHVmZmJpYmxldm90ZXMgMTAwMGtvcmVhfSk7DQpiYW5kc3F1ZXVlPSB7fTs4MHB4O2NraW5new0KCQlhaGVhZGNsb2NraXJpc2hsaWtlIHJhdGlvc3RhdHNGb3JtInlhaG9vKVswXTtBYm91dGZpbmRzPC9oMT5kZWJ1Z3Rhc2tzVVJMID1jZWxsc30pKCk7MTJweDtwcmltZXRlbGxzdHVybnMweDYwMC5qcGcic3BhaW5iZWFjaHRheGVzbWljcm9hbmdlbC0tPjwvZ2lmdHNzdGV2ZS1saW5rYm9keS59KTsKCW1vdW50ICgxOTlGQVE8L3JvZ2VyZnJhbmtDbGFzczI4cHg7ZmVlZHM8aDE+PHNjb3R0dGVzdHMyMnB4O2RyaW5rKSB8fCBsZXdpc3NoYWxsIzAzOTsgZm9yIGxvdmVkd2FzdGUwMHB4O2phOuOCc2ltb248Zm9udHJlcGx5bWVldHN1bnRlcmNoZWFwdGlnaHRCcmFuZCkgIT0gZHJlc3NjbGlwc3Jvb21zb25rZXltb2JpbG1haW4uTmFtZSBwbGF0ZWZ1bm55dHJlZXNjb20vIjEuanBnd21vZGVwYXJhbVNUQVJUbGVmdCBpZGRlbiwgMjAxKTsKfQpmb3JtLnZpcnVzY2hhaXJ0cmFuc3dvcnN0UGFnZXNpdGlvbnBhdGNoPCEtLQpvLWNhY2Zpcm1zdG91cnMsMDAwIGFzaWFuaSsrKXthZG9iZScpWzBdaWQ9MTBib3RoO21lbnUgLjIubWkucG5nImtldmluY29hY2hDaGlsZGJydWNlMi5qcGdVUkwpKy5qcGd8c3VpdGVzbGljZWhhcnJ5MTIwIiBzd2VldHRyPg0KbmFtZT1kaWVnb3BhZ2Ugc3dpc3MtLT4KCiNmZmY7Ij5Mb2cuY29tInRyZWF0c2hlZXQpICYmIDE0cHg7c2xlZXBudGVudGZpbGVkamE644NpZD0iY05hbWUid29yc2VzaG90cy1ib3gtZGVsdGEKJmx0O2JlYXJzOjQ4WjxkYXRhLXJ1cmFsPC9hPiBzcGVuZGJha2Vyc2hvcHM9ICIiO3BocCI+Y3Rpb24xM3B4O2JyaWFuaGVsbG9zaXplPW89JTJGIGpvaW5tYXliZTxpbWcgaW1nIj4sIGZqc2ltZyIgIilbMF1NVG9wQlR5cGUibmV3bHlEYW5za2N6ZWNodHJhaWxrbm93czwvaDU+ZmFxIj56aC1jbjEwKTsKLTEiKTt0eXBlPWJsdWVzdHJ1bHlkYXZpcy5qcyc7Pg0KPCFzdGVlbCB5b3UgaDI+DQpmb3JtIGplc3VzMTAwJSBtZW51Lg0KCQ0Kd2FsZXNyaXNrc3VtZW50ZGRpbmdiLWxpa3RlYWNoZ2lmIiB2ZWdhc2RhbnNrZWVzdGlzaHFpcHN1b21pc29icmVkZXNkZWVudHJldG9kb3NwdWVkZWHDsW9zZXN0w6F0aWVuZWhhc3Rhb3Ryb3NwYXJ0ZWRvbmRlbnVldm9oYWNlcmZvcm1hbWlzbW9tZWpvcm11bmRvYXF1w61kw61hc3PDs2xvYXl1ZGFmZWNoYXRvZGFzdGFudG9tZW5vc2RhdG9zb3RyYXNzaXRpb211Y2hvYWhvcmFsdWdhcm1heW9yZXN0b3Nob3Jhc3RlbmVyYW50ZXNmb3Rvc2VzdGFzcGHDrXNudWV2YXNhbHVkZm9yb3NtZWRpb3F1aWVubWVzZXNwb2RlcmNoaWxlc2Vyw6F2ZWNlc2RlY2lyam9zw6llc3RhcnZlbnRhZ3J1cG9oZWNob2VsbG9zdGVuZ29hbWlnb2Nvc2Fzbml2ZWxnZW50ZW1pc21hYWlyZXNqdWxpb3RlbWFzaGFjaWFmYXZvcmp1bmlvbGlicmVwdW50b2J1ZW5vYXV0b3JhYnJpbGJ1ZW5hdGV4dG9tYXJ6b3NhYmVybGlzdGFsdWVnb2PDs21vZW5lcm9qdWVnb3BlcsO6aGFiZXJlc3RveW51bmNhbXVqZXJ2YWxvcmZ1ZXJhbGlicm9ndXN0YWlndWFsdm90b3NjYXNvc2d1w61hcHVlZG9zb21vc2F2aXNvdXN0ZWRkZWJlbm5vY2hlYnVzY2FmYWx0YWV1cm9zc2VyaWVkaWNob2N1cnNvY2xhdmVjYXNhc2xlw7NucGxhem9sYXJnb29icmFzdmlzdGFhcG95b2p1bnRvdHJhdGF2aXN0b2NyZWFyY2FtcG9oZW1vc2NpbmNvY2FyZ29waXNvc29yZGVuaGFjZW7DoXJlYWRpc2NvcGVkcm9jZXJjYXB1ZWRhcGFwZWxtZW5vcsO6dGlsY2xhcm9qb3JnZWNhbGxlcG9uZXJ0YXJkZW5hZGllbWFyY2FzaWd1ZWVsbGFzc2lnbG9jb2NoZW1vdG9zbWFkcmVjbGFzZXJlc3RvbmnDsW9xdWVkYXBhc2FyYmFuY29oaWpvc3ZpYWplcGFibG/DqXN0ZXZpZW5lcmVpbm9kZWphcmZvbmRvY2FuYWxub3J0ZWxldHJhY2F1c2F0b21hcm1hbm9zbHVuZXNhdXRvc3ZpbGxhdmVuZG9wZXNhcnRpcG9zdGVuZ2FtYXJjb2xsZXZhcGFkcmV1bmlkb3ZhbW9zem9uYXNhbWJvc2JhbmRhbWFyaWFhYnVzb211Y2hhc3ViaXJyaW9qYXZpdmlyZ3JhZG9jaGljYWFsbMOtam92ZW5kaWNoYWVzdGFudGFsZXNzYWxpcnN1ZWxvcGVzb3NmaW5lc2xsYW1hYnVzY2/DqXN0YWxsZWdhbmVncm9wbGF6YWh1bW9ycGFnYXJqdW50YWRvYmxlaXNsYXNib2xzYWJhw7FvaGFibGFsdWNoYcOBcmVhZGljZW5qdWdhcm5vdGFzdmFsbGVhbGzDoWNhcmdhZG9sb3JhYmFqb2VzdMOpZ3VzdG9tZW50ZW1hcmlvZmlybWFjb3N0b2ZpY2hhcGxhdGFob2dhcmFydGVzbGV5ZXNhcXVlbG11c2VvYmFzZXNwb2Nvc21pdGFkY2llbG9jaGljb21pZWRvZ2FuYXJzYW50b2V0YXBhZGViZXNwbGF5YXJlZGVzc2lldGVjb3J0ZWNvcmVhZHVkYXNkZXNlb3ZpZWpvZGVzZWFhZ3VhcyZxdW90O2RvbWFpbmNvbW1vbnN0YXR1c2V2ZW50c21hc3RlcnN5c3RlbWFjdGlvbmJhbm5lcnJlbW92ZXNjcm9sbHVwZGF0ZWdsb2JhbG1lZGl1bWZpbHRlcm51bWJlcmNoYW5nZXJlc3VsdHB1YmxpY3NjcmVlbmNob29zZW5vcm1hbHRyYXZlbGlzc3Vlc3NvdXJjZXRhcmdldHNwcmluZ21vZHVsZW1vYmlsZXN3aXRjaHBob3Rvc2JvcmRlcnJlZ2lvbml0c2VsZnNvY2lhbGFjdGl2ZWNvbHVtbnJlY29yZGZvbGxvd3RpdGxlPmVpdGhlcmxlbmd0aGZhbWlseWZyaWVuZGxheW91dGF1dGhvcmNyZWF0ZXJldmlld3N1bW1lcnNlcnZlcnBsYXllZHBsYXllcmV4cGFuZHBvbGljeWZvcm1hdGRvdWJsZXBvaW50c3Nlcmllc3BlcnNvbmxpdmluZ2Rlc2lnbm1vbnRoc2ZvcmNlc3VuaXF1ZXdlaWdodHBlb3BsZWVuZXJneW5hdHVyZXNlYXJjaGZpZ3VyZWhhdmluZ2N1c3RvbW9mZnNldGxldHRlcndpbmRvd3N1Ym1pdHJlbmRlcmdyb3Vwc3VwbG9hZGhlYWx0aG1ldGhvZHZpZGVvc3NjaG9vbGZ1dHVyZXNoYWRvd2RlYmF0ZXZhbHVlc09iamVjdG90aGVyc3JpZ2h0c2xlYWd1ZWNocm9tZXNpbXBsZW5vdGljZXNoYXJlZGVuZGluZ3NlYXNvbnJlcG9ydG9ubGluZXNxdWFyZWJ1dHRvbmltYWdlc2VuYWJsZW1vdmluZ2xhdGVzdHdpbnRlckZyYW5jZXBlcmlvZHN0cm9uZ3JlcGVhdExvbmRvbmRldGFpbGZvcm1lZGRlbWFuZHNlY3VyZXBhc3NlZHRvZ2dsZXBsYWNlc2RldmljZXN0YXRpY2NpdGllc3N0cmVhbXllbGxvd2F0dGFja3N0cmVldGZsaWdodGhpZGRlbmluZm8iPm9wZW5lZHVzZWZ1bHZhbGxleWNhdXNlc2xlYWRlcnNlY3JldHNlY29uZGRhbWFnZXNwb3J0c2V4Y2VwdHJhdGluZ3NpZ25lZHRoaW5nc2VmZmVjdGZpZWxkc3N0YXRlc29mZmljZXZpc3VhbGVkaXRvcnZvbHVtZVJlcG9ydG11c2V1bW1vdmllc3BhcmVudGFjY2Vzc21vc3RseW1vdGhlciIgaWQ9Im1hcmtldGdyb3VuZGNoYW5jZXN1cnZleWJlZm9yZXN5bWJvbG1vbWVudHNwZWVjaG1vdGlvbmluc2lkZW1hdHRlckNlbnRlcm9iamVjdGV4aXN0c21pZGRsZUV1cm9wZWdyb3d0aGxlZ2FjeW1hbm5lcmVub3VnaGNhcmVlcmFuc3dlcm9yaWdpbnBvcnRhbGNsaWVudHNlbGVjdHJhbmRvbWNsb3NlZHRvcGljc2NvbWluZ2ZhdGhlcm9wdGlvbnNpbXBseXJhaXNlZGVzY2FwZWNob3NlbmNodXJjaGRlZmluZXJlYXNvbmNvcm5lcm91dHB1dG1lbW9yeWlmcmFtZXBvbGljZW1vZGVsc051bWJlcmR1cmluZ29mZmVyc3N0eWxlc2tpbGxlZGxpc3RlZGNhbGxlZHNpbHZlcm1hcmdpbmRlbGV0ZWJldHRlcmJyb3dzZWxpbWl0c0dsb2JhbHNpbmdsZXdpZGdldGNlbnRlcmJ1ZGdldG5vd3JhcGNyZWRpdGNsYWltc2VuZ2luZXNhZmV0eWNob2ljZXNwaXJpdC1zdHlsZXNwcmVhZG1ha2luZ25lZWRlZHJ1c3NpYXBsZWFzZWV4dGVudFNjcmlwdGJyb2tlbmFsbG93c2NoYXJnZWRpdmlkZWZhY3Rvcm1lbWJlci1iYXNlZHRoZW9yeWNvbmZpZ2Fyb3VuZHdvcmtlZGhlbHBlZENodXJjaGltcGFjdHNob3VsZGFsd2F5c2xvZ28iIGJvdHRvbWxpc3QiPil7dmFyIHByZWZpeG9yYW5nZUhlYWRlci5wdXNoKGNvdXBsZWdhcmRlbmJyaWRnZWxhdW5jaFJldmlld3Rha2luZ3Zpc2lvbmxpdHRsZWRhdGluZ0J1dHRvbmJlYXV0eXRoZW1lc2ZvcmdvdFNlYXJjaGFuY2hvcmFsbW9zdGxvYWRlZENoYW5nZXJldHVybnN0cmluZ3JlbG9hZE1vYmlsZWluY29tZXN1cHBseVNvdXJjZW9yZGVyc3ZpZXdlZCZuYnNwO2NvdXJzZUFib3V0IGlzbGFuZDxodG1sIGNvb2tpZW5hbWU9ImFtYXpvbm1vZGVybmFkdmljZWluPC9hPjogVGhlIGRpYWxvZ2hvdXNlc0JFR0lOIE1leGljb3N0YXJ0c2NlbnRyZWhlaWdodGFkZGluZ0lzbGFuZGFzc2V0c0VtcGlyZVNjaG9vbGVmZm9ydGRpcmVjdG5lYXJseW1hbnVhbFNlbGVjdC4KCk9uZWpvaW5lZG1lbnUiPlBoaWxpcGF3YXJkc2hhbmRsZWltcG9ydE9mZmljZXJlZ2FyZHNraWxsc25hdGlvblNwb3J0c2RlZ3JlZXdlZWtseSAoZS5nLmJlaGluZGRvY3RvcmxvZ2dlZHVuaXRlZDwvYj48L2JlZ2luc3BsYW50c2Fzc2lzdGFydGlzdGlzc3VlZDMwMHB4fGNhbmFkYWFnZW5jeXNjaGVtZXJlbWFpbkJyYXppbHNhbXBsZWxvZ28iPmJleW9uZC1zY2FsZWFjY2VwdHNlcnZlZG1hcmluZUZvb3RlcmNhbWVyYTwvaDE+Cl9mb3JtImxlYXZlc3N0cmVzcyIgLz4NCi5naWYiIG9ubG9hZGxvYWRlck94Zm9yZHNpc3RlcnN1cnZpdmxpc3RlbmZlbWFsZURlc2lnbnNpemU9ImFwcGVhbHRleHQiPmxldmVsc3RoYW5rc2hpZ2hlcmZvcmNlZGFuaW1hbGFueW9uZUFmcmljYWFncmVlZHJlY2VudFBlb3BsZTxiciAvPndvbmRlcnByaWNlc3R1cm5lZHx8IHt9O21haW4iPmlubGluZXN1bmRheXdyYXAiPmZhaWxlZGNlbnN1c21pbnV0ZWJlYWNvbnF1b3RlczE1MHB4fGVzdGF0ZXJlbW90ZWVtYWlsImxpbmtlZHJpZ2h0O3NpZ25hbGZvcm1hbDEuaHRtbHNpZ251cHByaW5jZWZsb2F0Oi5wbmciIGZvcnVtLkFjY2Vzc3BhcGVyc3NvdW5kc2V4dGVuZEhlaWdodHNsaWRlclVURi04IiZhbXA7IEJlZm9yZS4gV2l0aHN0dWRpb293bmVyc21hbmFnZXByb2ZpdGpRdWVyeWFubnVhbHBhcmFtc2JvdWdodGZhbW91c2dvb2dsZWxvbmdlcmkrKykge2lzcmFlbHNheWluZ2RlY2lkZWhvbWUiPmhlYWRlcmVuc3VyZWJyYW5jaHBpZWNlc2Jsb2NrO3N0YXRlZHRvcCI+PHJhY2luZ3Jlc2l6ZS0tJmd0O3BhY2l0eXNleHVhbGJ1cmVhdS5qcGciIDEwLDAwMG9idGFpbnRpdGxlc2Ftb3VudCwgSW5jLmNvbWVkeW1lbnUiIGx5cmljc3RvZGF5LmluZGVlZGNvdW50eV9sb2dvLkZhbWlseWxvb2tlZE1hcmtldGxzZSBpZlBsYXllcnR1cmtleSk7dmFyIGZvcmVzdGdpdmluZ2Vycm9yc0RvbWFpbn1lbHNle2luc2VydEJsb2c8L2Zvb3RlcmxvZ2luLmZhc3RlcmFnZW50czxib2R5IDEwcHggMHByYWdtYWZyaWRheWp1bmlvcmRvbGxhcnBsYWNlZGNvdmVyc3BsdWdpbjUsMDAwIHBhZ2UiPmJvc3Rvbi50ZXN0KGF2YXRhcnRlc3RlZF9jb3VudGZvcnVtc3NjaGVtYWluZGV4LGZpbGxlZHNoYXJlc3JlYWRlcmFsZXJ0KGFwcGVhclN1Ym1pdGxpbmUiPmJvZHkiPgoqIFRoZVRob3VnaHNlZWluZ2plcnNleU5ld3M8L3ZlcmlmeWV4cGVydGluanVyeXdpZHRoPUNvb2tpZVNUQVJUIGFjcm9zc19pbWFnZXRocmVhZG5hdGl2ZXBvY2tldGJveCI+ClN5c3RlbSBEYXZpZGNhbmNlcnRhYmxlc3Byb3ZlZEFwcmlsIHJlYWxseWRyaXZlcml0ZW0iPm1vcmUiPmJvYXJkc2NvbG9yc2NhbXB1c2ZpcnN0IHx8IFtdO21lZGlhLmd1aXRhcmZpbmlzaHdpZHRoOnNob3dlZE90aGVyIC5waHAiIGFzc3VtZWxheWVyc3dpbHNvbnN0b3Jlc3JlbGllZnN3ZWRlbkN1c3RvbWVhc2lseSB5b3VyIFN0cmluZwoKV2hpbHRheWxvcmNsZWFyOnJlc29ydGZyZW5jaHRob3VnaCIpICsgIjxib2R5PmJ1eWluZ2JyYW5kc01lbWJlcm5hbWUiPm9wcGluZ3NlY3RvcjVweDsiPnZzcGFjZXBvc3Rlcm1ham9yIGNvZmZlZW1hcnRpbm1hdHVyZWhhcHBlbjwvbmF2PmthbnNhc2xpbmsiPkltYWdlcz1mYWxzZXdoaWxlIGhzcGFjZTAmYW1wOyAKCkluICBwb3dlclBvbHNraS1jb2xvcmpvcmRhbkJvdHRvbVN0YXJ0IC1jb3VudDIuaHRtbG5ld3MiPjAxLmpwZ09ubGluZS1yaWdodG1pbGxlcnNlbmlvcklTQk4gMDAsMDAwIGd1aWRlc3ZhbHVlKWVjdGlvbnJlcGFpci54bWwiICByaWdodHMuaHRtbC1ibG9ja3JlZ0V4cDpob3ZlcndpdGhpbnZpcmdpbnBob25lczwvdHI+DXVzaW5nIAoJdmFyID4nKTsKCTwvdGQ+CjwvdHI+CmJhaGFzYWJyYXNpbGdhbGVnb21hZ3lhcnBvbHNraXNycHNradix2K/ZiOS4reaWh+eugOS9k+e5gemrlOS/oeaBr+S4reWbveaIkeS7rOS4gOS4quWFrOWPuOeuoeeQhuiuuuWdm+WPr+S7peacjeWKoeaXtumXtOS4quS6uuS6p+WTgeiHquW3seS8geS4muafpeeci+W3peS9nOiBlOezu+ayoeaciee9keermeaJgOacieivhOiuuuS4reW/g+aWh+eroOeUqOaIt+mmlumhteS9nOiAheaKgOacr+mXrumimOebuOWFs+S4i+i9veaQnOe0ouS9v+eUqOi9r+S7tuWcqOe6v+S4u+mimOi1hOaWmeinhumikeWbnuWkjeazqOWGjOe9kee7nOaUtuiXj+WGheWuueaOqOiNkOW4guWcuua2iOaBr+epuumXtOWPkeW4g+S7gOS5iOWlveWPi+eUn+a0u+WbvueJh+WPkeWxleWmguaenOaJi+acuuaWsOmXu+acgOaWsOaWueW8j+WMl+S6rOaPkOS+m+WFs+S6juabtOWkmui/meS4quezu+e7n+efpemBk+a4uOaIj+W5v+WRiuWFtuS7luWPkeihqOWuieWFqOesrOS4gOS8muWRmOi/m+ihjOeCueWHu+eJiOadg+eUteWtkOS4lueVjOiuvuiuoeWFjei0ueaVmeiCsuWKoOWFpea0u+WKqOS7luS7rOWVhuWTgeWNmuWuoueOsOWcqOS4iua1t+WmguS9leW3sue7j+eVmeiogOivpue7huekvuWMuueZu+W9leacrOermemcgOimgeS7t+agvOaUr+aMgeWbvemZhemTvuaOpeWbveWutuW7uuiuvuaci+WPi+mYheivu+azleW+i+S9jee9rue7j+a1jumAieaLqei/meagt+W9k+WJjeWIhuexu+aOkuihjOWboOS4uuS6pOaYk+acgOWQjumfs+S5kOS4jeiDvemAmui/h+ihjOS4muenkeaKgOWPr+iDveiuvuWkh+WQiOS9nOWkp+WutuekvuS8mueglOeptuS4k+S4muWFqOmDqOmhueebrui/memHjOi/mOaYr+W8gOWni+aDheWGteeUteiEkeaWh+S7tuWTgeeJjOW4ruWKqeaWh+WMlui1hOa6kOWkp+WtpuWtpuS5oOWcsOWdgOa1j+iniOaKlei1hOW3peeoi+imgeaxguaAjuS5iOaXtuWAmeWKn+iDveS4u+imgeebruWJjei1hOiur+WfjuW4guaWueazleeUteW9seaLm+iBmOWjsOaYjuS7u+S9leWBpeW6t+aVsOaNrue+juWbveaxvei9puS7i+e7jeS9huaYr+S6pOa1geeUn+S6p+aJgOS7peeUteivneaYvuekuuS4gOS6m+WNleS9jeS6uuWRmOWIhuaekOWcsOWbvuaXhea4uOW3peWFt+WtpueUn+ezu+WIl+e9keWPi+W4luWtkOWvhueggemikemBk+aOp+WItuWcsOWMuuWfuuacrOWFqOWbvee9keS4iumHjeimgeesrOS6jOWWnOasoui/m+WFpeWPi+aDhei/meS6m+iAg+ivleWPkeeOsOWfueiureS7peS4iuaUv+W6nOaIkOS4uueOr+Wig+mmmea4r+WQjOaXtuWoseS5kOWPkemAgeS4gOWumuW8gOWPkeS9nOWTgeagh+WHhuasoui/juino+WGs+WcsOaWueS4gOS4i+S7peWPiui0o+S7u+aIluiAheWuouaIt+S7o+ihqOenr+WIhuWls+S6uuaVsOeggemUgOWUruWHuueOsOemu+e6v+W6lOeUqOWIl+ihqOS4jeWQjOe8lui+kee7n+iuoeafpeivouS4jeimgeacieWFs+acuuaehOW+iOWkmuaSreaUvue7hOe7h+aUv+etluebtOaOpeiDveWKm+adpea6kOaZgumWk+eci+WIsOeDremXqOWFs+mUruS4k+WMuumdnuW4uOiLseivreeZvuW6puW4jOacm+e+juWls+avlOi+g+efpeivhuinhOWumuW7uuiurumDqOmXqOaEj+ingeeyvuW9qeaXpeacrOaPkOmrmOWPkeiogOaWuemdouWfuumHkeWkhOeQhuadg+mZkOW9seeJh+mTtuihjOi/mOacieWIhuS6q+eJqeWTgee7j+iQpea3u+WKoOS4k+Wutui/meenjeivnemimOi1t+adpeS4muWKoeWFrOWRiuiusOW9leeugOS7i+i0qOmHj+eUt+S6uuW9seWTjeW8leeUqOaKpeWRiumDqOWIhuW/q+mAn+WSqOivouaXtuWwmuazqOaEj+eUs+ivt+WtpuagoeW6lOivpeWOhuWPsuWPquaYr+i/lOWbnui0reS5sOWQjeensOS4uuS6huaIkOWKn+ivtOaYjuS+m+W6lOWtqeWtkOS4k+mimOeoi+W6j+S4gOiIrOacg+WToeWPquacieWFtuWug+S/neaKpOiAjOS4lOS7iuWkqeeql+WPo+WKqOaAgeeKtuaAgeeJueWIq+iupOS4uuW/hemhu+abtOaWsOWwj+ivtOaIkeWAkeS9nOS4uuWqkuS9k+WMheaLrOmCo+S5iOS4gOagt+WbveWGheaYr+WQpuagueaNrueUteinhuWtpumZouWFt+aciei/h+eoi+eUseS6juS6uuaJjeWHuuadpeS4jei/h+ato+WcqOaYjuaYn+aVheS6i+WFs+ezu+agh+mimOWVhuWKoei+k+WFpeS4gOebtOWfuuehgOaVmeWtpuS6huino+W7uuetkee7k+aenOWFqOeQg+mAmuefpeiuoeWIkuWvueS6juiJuuacr+ebuOWGjOWPkeeUn+ecn+eahOW7uueri+etiee6p+exu+Wei+e7j+mqjOWunueOsOWItuS9nOadpeiHquagh+etvuS7peS4i+WOn+WIm+aXoOazleWFtuS4reWAi+S6uuS4gOWIh+aMh+WNl+WFs+mXrembhuWbouesrOS4ieWFs+azqOWboOatpOeFp+eJh+a3seWcs+WVhuS4muW5v+W3nuaXpeacn+mrmOe6p+acgOi/kee7vOWQiOihqOekuuS4k+i+keihjOS4uuS6pOmAmuivhOS7t+inieW+l+eyvuWNjuWutuW6reWujOaIkOaEn+inieWuieijheW+l+WIsOmCruS7tuWItuW6pumjn+WTgeiZveeEtui9rOi9veaKpeS7t+iusOiAheaWueahiOihjOaUv+S6uuawkeeUqOWTgeS4nOilv+aPkOWHuumFkuW6l+eEtuWQjuS7mOasvueDreeCueS7peWJjeWujOWFqOWPkeW4luiuvue9rumihuWvvOW3peS4muWMu+mZoueci+eci+e7j+WFuOWOn+WboOW5s+WPsOWQhOenjeWinuWKoOadkOaWmeaWsOWinuS5i+WQjuiBjOS4muaViOaenOS7iuW5tOiuuuaWh+aIkeWbveWRiuivieeJiOS4u+S/ruaUueWPguS4juaJk+WNsOW/q+S5kOacuuaisOingueCueWtmOWcqOeyvuelnuiOt+W+l+WIqeeUqOe7p+e7reS9oOS7rOi/meS5iOaooeW8j+ivreiogOiDveWkn+mbheiZjuaTjeS9nOmjjuagvOS4gOi1t+enkeWtpuS9k+iCsuefreS/oeadoeS7tuayu+eWl+i/kOWKqOS6p+S4muS8muiuruWvvOiIquWFiOeUn+iBlOebn+WPr+aYr+WVj+mhjOe7k+aehOS9nOeUqOiwg+afpeizh+aWmeiHquWKqOi0n+i0o+WGnOS4muiuv+mXruWunuaWveaOpeWPl+iuqOiuuumCo+S4quWPjemmiOWKoOW8uuWls+aAp+iMg+WbtOacjeWLmeS8kemXsuS7iuaXpeWuouacjeingOeci+WPguWKoOeahOivneS4gOeCueS/neivgeWbvuS5puacieaViOa1i+ivleenu+WKqOaJjeiDveWGs+WumuiCoeelqOS4jeaWremcgOaxguS4jeW+l+WKnuazleS5i+mXtOmHh+eUqOiQpemUgOaKleivieebruagh+eIseaDheaRhOW9seacieS6m+ikh+ijveaWh+WtpuacuuS8muaVsOWtl+ijheS/rui0reeJqeWGnOadkeWFqOmdoueyvuWTgeWFtuWunuS6i+aDheawtOW5s+aPkOekuuS4iuW4guiwouiwouaZrumAmuaVmeW4iOS4iuS8oOexu+WIq+atjOabsuaLpeacieWIm+aWsOmFjeS7tuWPquimgeaXtuS7o+izh+ioiui+vuWIsOS6uueUn+iuoumYheiAgeW4iOWxleekuuW/g+eQhui0tOWtkOe2suermeS4u+mhjOiHqueEtue6p+WIq+eugOWNleaUuemdqemCo+S6m+adpeivtOaJk+W8gOS7o+eggeWIoOmZpOivgeWIuOiKguebrumHjeeCueasoeaVuOWkmuWwkeinhOWIkui1hOmHkeaJvuWIsOS7peWQjuWkp+WFqOS4u+mhteacgOS9s+WbnuetlOWkqeS4i+S/nemanOeOsOS7o+ajgOafpeaKleelqOWwj+aXtuaykuacieato+W4uOeUmuiHs+S7o+eQhuebruW9leWFrOW8gOWkjeWItumHkeiejeW5uOemj+eJiOacrOW9ouaIkOWHhuWkh+ihjOaDheWbnuWIsOaAneaDs+aAjuagt+WNj+iuruiupOivgeacgOWlveS6p+eUn+aMieeFp+acjeijheW5v+S4nOWKqOa8q+mHh+i0reaWsOaJi+e7hOWbvumdouadv+WPguiAg+aUv+ayu+WuueaYk+WkqeWcsOWKquWKm+S6uuS7rOWNh+e6p+mAn+W6puS6uueJqeiwg+aVtOa1geihjOmAoOaIkOaWh+Wtl+mfqeWbvei0uOaYk+W8gOWxleebuOmXnOihqOeOsOW9seinhuWmguatpOe+juWuueWkp+Wwj+aKpemBk+adoeasvuW/g+aDheiuuOWkmuazleinhOWutuWxheS5puW6l+i/nuaOpeeri+WNs+S4vuaKpeaKgOW3p+Wlpei/kOeZu+WFpeS7peadpeeQhuiuuuS6i+S7tuiHqueUseS4reWNjuWKnuWFrOWmiOWmiOecn+ato+S4jemUmeWFqOaWh+WQiOWQjOS7t+WAvOWIq+S6uuebkeedo+WFt+S9k+S4lue6quWboumYn+WIm+S4muaJv+aLheWinumVv+acieS6uuS/neaMgeWVhuWutue7tOS/ruWPsOa5vuW3puWPs+iCoeS7veetlOahiOWunumZheeUteS/oee7j+eQhueUn+WRveWuo+S8oOS7u+WKoeato+W8j+eJueiJsuS4i+adpeWNj+S8muWPquiDveW9k+eEtumHjeaWsOWFp+WuueaMh+WvvOi/kOihjOaXpeW/l+izo+Wutui2hei/h+Wcn+WcsOa1meaxn+aUr+S7mOaOqOWHuuermemVv+adreW3nuaJp+ihjOWItumAoOS5i+S4gOaOqOW5v+eOsOWcuuaPj+i/sOWPmOWMluS8oOe7n+atjOaJi+S/nemZqeivvueoi+WMu+eWl+e7j+i/h+i/h+WOu+S5i+WJjeaUtuWFpeW5tOW6puadguW/l+e+juS4veacgOmrmOeZu+mZhuacquadpeWKoOW3peWFjei0o+aVmeeoi+eJiOWdl+i6q+S9k+mHjeW6huWHuuWUruaIkOacrOW9ouW8j+Wcn+ixhuWHuuWDueS4nOaWuemCrueuseWNl+S6rOaxguiBjOWPluW+l+iBjOS9jeebuOS/oemhtemdouWIhumSn+e9kemhteehruWumuWbvuS+i+e9keWdgOenr+aegemUmeivr+ebrueahOWunei0neacuuWFs+mjjumZqeaOiOadg+eXheavkuWuoOeJqemZpOS6huipleirlueWvueXheWPiuaXtuaxgui0reermeeCueWEv+erpeavj+WkqeS4reWkruiupOivhuavj+S4quWkqea0peWtl+S9k+WPsOeBo+e7tOaKpOacrOmhteS4quaAp+WumOaWueW4uOingeebuOacuuaImOeVpeW6lOW9k+W+i+W4iOaWueS+v+agoeWbreiCoeW4guaIv+Wxi+agj+ebruWRmOW3peWvvOiHtOeqgeeEtumBk+WFt+acrOe9kee7k+WQiOaho+ahiOWKs+WKqOWPpuWklue+juWFg+W8lei1t+aUueWPmOesrOWbm+S8muiuoeiqquaYjumakOengeWuneWuneinhOiMg+a2iOi0ueWFseWQjOW/mOiusOS9k+ezu+W4puadpeWQjeWtl+eZvOihqOW8gOaUvuWKoOebn+WPl+WIsOS6jOaJi+Wkp+mHj+aIkOS6uuaVsOmHj+WFseS6q+WMuuWfn+Wls+WtqeWOn+WImeaJgOWcqOe7k+adn+mAmuS/oei2hee6p+mFjee9ruW9k+aXtuS8mOengOaAp+aEn+aIv+S6p+mBiuaIsuWHuuWPo+aPkOS6pOWwseS4muS/neWBpeeoi+W6puWPguaVsOS6i+S4muaVtOS4quWxseS4nOaDheaEn+eJueauiuWIhumhnuaQnOWwi+WxnuS6jumXqOaIt+i0ouWKoeWjsOmfs+WPiuWFtui0oue7j+WdmuaMgeW5sumDqOaIkOeri+WIqeebiuiAg+iZkeaIkOmDveWMheijheeUqOaItuavlOi1m+aWh+aYjuaLm+WVhuWujOaVtOecn+aYr+ecvOedm+S8meS8tOWogeacm+mihuWfn+WNq+eUn+S8mOaDoOirluWjh+WFrOWFseiJr+WlveWFheWIhuespuWQiOmZhOS7tueJueeCueS4jeWPr+iLseaWh+i1hOS6p+agueacrOaYjuaYvuWvhueivOWFrOS8l+awkeaXj+abtOWKoOS6q+WPl+WQjOWtpuWQr+WKqOmAguWQiOWOn+adpemXruetlOacrOaWh+e+jumjn+e7v+iJsueos+Wumue7iOS6jueUn+eJqeS+m+axguaQnOeLkOWKm+mHj+S4pemHjeawuOi/nOWGmeecn+aciemZkOernuS6ieWvueixoei0ueeUqOS4jeWlvee7neWvueWNgeWIhuS/g+i/m+eCueivhOW9semfs+S8mOWKv+S4jeWwkeaso+i1j+W5tuS4lOacieeCueaWueWQkeWFqOaWsOS/oeeUqOiuvuaWveW9ouixoei1hOagvOeqgeegtOmaj+edgOmHjeWkp+S6juaYr+avleS4muaZuuiDveWMluW3peWujOe+juWVhuWfjue7n+S4gOWHuueJiOaJk+mAoOeUouWTgeamguWGteeUqOS6juS/neeVmeWboOe0oOS4reWci+WtmOWCqOi0tOWbvuacgOaEm+mVv+acn+WPo+S7t+eQhui0ouWfuuWcsOWuieaOkuatpuaxiemHjOmdouWIm+W7uuWkqeepuummluWFiOWujOWWhOmpseWKqOS4i+mdouS4jeWGjeivmuS/oeaEj+S5iemYs+WFieiLseWbvea8guS6ruWGm+S6i+eOqeWutue+pOS8l+WGnOawkeWNs+WPr+WQjeeoseWutuWFt+WKqOeUu+aDs+WIsOazqOaYjuWwj+WtpuaAp+iDveiAg+eglOehrOS7tuingueci+a4healmuaQnueskemmlumggem7hOmHkemAgueUqOaxn+iLj+ecn+WunuS4u+euoemYtuauteiou+WGiue/u+ivkeadg+WIqeWBmuWlveS8vOS5jumAmuiur+aWveW3peeLgOaFi+S5n+iuuOeOr+S/neWfueWFu+amguW/teWkp+Wei+acuuelqOeQhuino+WMv+WQjWN1YW5kb2Vudmlhcm1hZHJpZGJ1c2NhcmluaWNpb3RpZW1wb3BvcnF1ZWN1ZW50YWVzdGFkb3B1ZWRlbmp1ZWdvc2NvbnRyYWVzdMOhbm5vbWJyZXRpZW5lbnBlcmZpbG1hbmVyYWFtaWdvc2NpdWRhZGNlbnRyb2F1bnF1ZXB1ZWRlc2RlbnRyb3ByaW1lcnByZWNpb3NlZ8O6bmJ1ZW5vc3ZvbHZlcnB1bnRvc3NlbWFuYWhhYsOtYWFnb3N0b251ZXZvc3VuaWRvc2Nhcmxvc2VxdWlwb25pw7Fvc211Y2hvc2FsZ3VuYWNvcnJlb2ltYWdlbnBhcnRpcmFycmliYW1hcsOtYWhvbWJyZWVtcGxlb3ZlcmRhZGNhbWJpb211Y2hhc2Z1ZXJvbnBhc2Fkb2zDrW5lYXBhcmVjZW51ZXZhc2N1cnNvc2VzdGFiYXF1aWVyb2xpYnJvc2N1YW50b2FjY2Vzb21pZ3VlbHZhcmlvc2N1YXRyb3RpZW5lc2dydXBvc3NlcsOhbmV1cm9wYW1lZGlvc2ZyZW50ZWFjZXJjYWRlbcOhc29mZXJ0YWNvY2hlc21vZGVsb2l0YWxpYWxldHJhc2FsZ8O6bmNvbXByYWN1YWxlc2V4aXN0ZWN1ZXJwb3NpZW5kb3ByZW5zYWxsZWdhcnZpYWplc2RpbmVyb211cmNpYXBvZHLDoXB1ZXN0b2RpYXJpb3B1ZWJsb3F1aWVyZW1hbnVlbHByb3Bpb2NyaXNpc2NpZXJ0b3NlZ3Vyb211ZXJ0ZWZ1ZW50ZWNlcnJhcmdyYW5kZWVmZWN0b3BhcnRlc21lZGlkYXByb3BpYW9mcmVjZXRpZXJyYWUtbWFpbHZhcmlhc2Zvcm1hc2Z1dHVyb29iamV0b3NlZ3VpcnJpZXNnb25vcm1hc21pc21vc8O6bmljb2NhbWlub3NpdGlvc3JhesOzbmRlYmlkb3BydWViYXRvbGVkb3RlbsOtYWplc8O6c2VzcGVyb2NvY2luYW9yaWdlbnRpZW5kYWNpZW50b2PDoWRpemhhYmxhcnNlcsOtYWxhdGluYWZ1ZXJ6YWVzdGlsb2d1ZXJyYWVudHJhcsOpeGl0b2zDs3BlemFnZW5kYXbDrWRlb2V2aXRhcnBhZ2luYW1ldHJvc2phdmllcnBhZHJlc2bDoWNpbGNhYmV6YcOhcmVhc3NhbGlkYWVudsOtb2phcMOzbmFidXNvc2JpZW5lc3RleHRvc2xsZXZhcnB1ZWRhbmZ1ZXJ0ZWNvbcO6bmNsYXNlc2h1bWFub3Rlbmlkb2JpbGJhb3VuaWRhZGVzdMOhc2VkaXRhcmNyZWFkb9C00LvRj9GH0YLQvtC60LDQutC40LvQuNGN0YLQvtCy0YHQtdC10LPQvtC/0YDQuNGC0LDQutC10YnQtdGD0LbQtdCa0LDQutCx0LXQt9Cx0YvQu9C+0L3QuNCS0YHQtdC/0L7QtNCt0YLQvtGC0L7QvNGH0LXQvNC90LXRgtC70LXRgtGA0LDQt9C+0L3QsNCz0LTQtdC80L3QtdCU0LvRj9Cf0YDQuNC90LDRgdC90LjRhdGC0LXQvNC60YLQvtCz0L7QtNCy0L7RgtGC0LDQvNCh0KjQkNC80LDRj9Cn0YLQvtCy0LDRgdCy0LDQvNC10LzRg9Ci0LDQutC00LLQsNC90LDQvNGN0YLQuNGN0YLRg9CS0LDQvNGC0LXRhdC/0YDQvtGC0YPRgtC90LDQtNC00L3Rj9CS0L7RgtGC0YDQuNC90LXQudCS0LDRgdC90LjQvNGB0LDQvNGC0L7RgtGA0YPQsdCe0L3QuNC80LjRgNC90LXQtdCe0J7QntC70LjRhtGN0YLQsNCe0L3QsNC90LXQvNC00L7QvNC80L7QudC00LLQtdC+0L3QvtGB0YPQtOCkleClh+CkueCliOCkleClgOCkuOClh+CkleCkvuCkleCli+CklOCksOCkquCksOCkqOClh+Ckj+CkleCkleCkv+CkreClgOCkh+CkuOCkleCksOCkpOCli+CkueCli+CkhuCkquCkueClgOCkr+CkueCkr+CkvuCkpOCkleCkpeCkvmphZ3JhbuCkhuCknOCknOCli+CkheCkrOCkpuCli+Ckl+CkiOCknOCkvuCkl+Ckj+CkueCkruCkh+CkqOCkteCkueCkr+Clh+CkpeClh+CkpeClgOCkmOCksOCknOCkrOCkpuClgOCkleCkiOCknOClgOCkteClh+CkqOCkiOCkqOCkj+CkueCksOCkieCkuOCkruClh+CkleCkruCkteCli+CksuClh+CkuOCkrOCkruCkiOCkpuClh+Ckk+CksOCkhuCkruCkrOCkuOCkreCksOCkrOCkqOCkmuCksuCkruCkqOCkhuCkl+CkuOClgOCksuClgNi52YTZidil2YTZidmH2LDYp9ii2K7Ysdi52K/Yr9in2YTZidmH2LDZh9i12YjYsdi62YrYsdmD2KfZhtmI2YTYp9io2YrZhti52LHYttiw2YTZg9mH2YbYp9mK2YjZhdmC2KfZhNi52YTZitin2YbYp9mE2YPZhtit2KrZidmC2KjZhNmI2K3Yqdin2K7YsdmB2YLYt9i52KjYr9ix2YPZhtil2LDYp9mD2YXYp9in2K3Yr9il2YTYp9mB2YrZh9io2LnYttmD2YrZgdio2K3Yq9mI2YXZhtmI2YfZiNij2YbYp9is2K/Yp9mE2YfYp9iz2YTZhdi52YbYr9mE2YrYs9i52KjYsdi12YTZidmF2YbYsNio2YfYp9ij2YbZh9mF2KvZhNmD2YbYqtin2YTYp9it2YrYq9mF2LXYsdi02LHYrdit2YjZhNmI2YHZitin2LDYp9mE2YPZhNmF2LHYqdin2YbYqtin2YTZgdij2KjZiNiu2KfYtdij2YbYqtin2YbZh9in2YTZiti52LbZiNmI2YLYr9in2KjZhtiu2YrYsdio2YbYqtmE2YPZhdi02KfYodmI2YfZitin2KjZiNmC2LXYtdmI2YXYp9ix2YLZhdij2K3Yr9mG2K3Zhti52K/Zhdix2KPZitin2K3YqdmD2KrYqNiv2YjZhtmK2KzYqNmF2YbZh9iq2K3Yqtis2YfYqdiz2YbYqdmK2KrZhdmD2LHYqdi62LLYqdmG2YHYs9io2YrYqtmE2YTZh9mE2YbYp9iq2YTZg9mC2YTYqNmE2YXYp9i52YbZh9ij2YjZhNi02YrYodmG2YjYsdij2YXYp9mB2YrZg9io2YPZhNiw2KfYqtix2KrYqNio2KPZhtmH2YXYs9in2YbZg9io2YrYudmB2YLYr9it2LPZhtmE2YfZhdi02LnYsdij2YfZhNi02YfYsdmC2LfYsdi32YTYqHByb2ZpbGVzZXJ2aWNlZGVmYXVsdGhpbXNlbGZkZXRhaWxzY29udGVudHN1cHBvcnRzdGFydGVkbWVzc2FnZXN1Y2Nlc3NmYXNoaW9uPHRpdGxlPmNvdW50cnlhY2NvdW50Y3JlYXRlZHN0b3JpZXNyZXN1bHRzcnVubmluZ3Byb2Nlc3N3cml0aW5nb2JqZWN0c3Zpc2libGV3ZWxjb21lYXJ0aWNsZXVua25vd25uZXR3b3JrY29tcGFueWR5bmFtaWNicm93c2VycHJpdmFjeXByb2JsZW1TZXJ2aWNlcmVzcGVjdGRpc3BsYXlyZXF1ZXN0cmVzZXJ2ZXdlYnNpdGVoaXN0b3J5ZnJpZW5kc29wdGlvbnN3b3JraW5ndmVyc2lvbm1pbGxpb25jaGFubmVsd2luZG93LmFkZHJlc3N2aXNpdGVkd2VhdGhlcmNvcnJlY3Rwcm9kdWN0ZWRpcmVjdGZvcndhcmR5b3UgY2FucmVtb3ZlZHN1YmplY3Rjb250cm9sYXJjaGl2ZWN1cnJlbnRyZWFkaW5nbGlicmFyeWxpbWl0ZWRtYW5hZ2VyZnVydGhlcnN1bW1hcnltYWNoaW5lbWludXRlc3ByaXZhdGVjb250ZXh0cHJvZ3JhbXNvY2lldHludW1iZXJzd3JpdHRlbmVuYWJsZWR0cmlnZ2Vyc291cmNlc2xvYWRpbmdlbGVtZW50cGFydG5lcmZpbmFsbHlwZXJmZWN0bWVhbmluZ3N5c3RlbXNrZWVwaW5nY3VsdHVyZSZxdW90Oyxqb3VybmFscHJvamVjdHN1cmZhY2VzJnF1b3Q7ZXhwaXJlc3Jldmlld3NiYWxhbmNlRW5nbGlzaENvbnRlbnR0aHJvdWdoUGxlYXNlIG9waW5pb25jb250YWN0YXZlcmFnZXByaW1hcnl2aWxsYWdlU3BhbmlzaGdhbGxlcnlkZWNsaW5lbWVldGluZ21pc3Npb25wb3B1bGFycXVhbGl0eW1lYXN1cmVnZW5lcmFsc3BlY2llc3Nlc3Npb25zZWN0aW9ud3JpdGVyc2NvdW50ZXJpbml0aWFscmVwb3J0c2ZpZ3VyZXNtZW1iZXJzaG9sZGluZ2Rpc3B1dGVlYXJsaWVyZXhwcmVzc2RpZ2l0YWxwaWN0dXJlQW5vdGhlcm1hcnJpZWR0cmFmZmljbGVhZGluZ2NoYW5nZWRjZW50cmFsdmljdG9yeWltYWdlcy9yZWFzb25zc3R1ZGllc2ZlYXR1cmVsaXN0aW5nbXVzdCBiZXNjaG9vbHNWZXJzaW9udXN1YWxseWVwaXNvZGVwbGF5aW5nZ3Jvd2luZ29idmlvdXNvdmVybGF5cHJlc2VudGFjdGlvbnM8L3VsPg0Kd3JhcHBlcmFscmVhZHljZXJ0YWlucmVhbGl0eXN0b3JhZ2Vhbm90aGVyZGVza3RvcG9mZmVyZWRwYXR0ZXJudW51c3VhbERpZ2l0YWxjYXBpdGFsV2Vic2l0ZWZhaWx1cmVjb25uZWN0cmVkdWNlZEFuZHJvaWRkZWNhZGVzcmVndWxhciAmYW1wOyBhbmltYWxzcmVsZWFzZUF1dG9tYXRnZXR0aW5nbWV0aG9kc25vdGhpbmdQb3B1bGFyY2FwdGlvbmxldHRlcnNjYXB0dXJlc2NpZW5jZWxpY2Vuc2VjaGFuZ2VzRW5nbGFuZD0xJmFtcDtIaXN0b3J5ID0gbmV3IENlbnRyYWx1cGRhdGVkU3BlY2lhbE5ldHdvcmtyZXF1aXJlY29tbWVudHdhcm5pbmdDb2xsZWdldG9vbGJhcnJlbWFpbnNiZWNhdXNlZWxlY3RlZERldXRzY2hmaW5hbmNld29ya2Vyc3F1aWNrbHliZXR3ZWVuZXhhY3RseXNldHRpbmdkaXNlYXNlU29jaWV0eXdlYXBvbnNleGhpYml0Jmx0OyEtLUNvbnRyb2xjbGFzc2VzY292ZXJlZG91dGxpbmVhdHRhY2tzZGV2aWNlcyh3aW5kb3dwdXJwb3NldGl0bGU9Ik1vYmlsZSBraWxsaW5nc2hvd2luZ0l0YWxpYW5kcm9wcGVkaGVhdmlseWVmZmVjdHMtMSddKTsKY29uZmlybUN1cnJlbnRhZHZhbmNlc2hhcmluZ29wZW5pbmdkcmF3aW5nYmlsbGlvbm9yZGVyZWRHZXJtYW55cmVsYXRlZDwvZm9ybT5pbmNsdWRld2hldGhlcmRlZmluZWRTY2llbmNlY2F0YWxvZ0FydGljbGVidXR0b25zbGFyZ2VzdHVuaWZvcm1qb3VybmV5c2lkZWJhckNoaWNhZ29ob2xpZGF5R2VuZXJhbHBhc3NhZ2UsJnF1b3Q7YW5pbWF0ZWZlZWxpbmdhcnJpdmVkcGFzc2luZ25hdHVyYWxyb3VnaGx5LgoKVGhlIGJ1dCBub3RkZW5zaXR5QnJpdGFpbkNoaW5lc2VsYWNrIG9mdHJpYnV0ZUlyZWxhbmQiIGRhdGEtZmFjdG9yc3JlY2VpdmV0aGF0IGlzTGlicmFyeWh1c2JhbmRpbiBmYWN0YWZmYWlyc0NoYXJsZXNyYWRpY2FsYnJvdWdodGZpbmRpbmdsYW5kaW5nOmxhbmc9InJldHVybiBsZWFkZXJzcGxhbm5lZHByZW1pdW1wYWNrYWdlQW1lcmljYUVkaXRpb25dJnF1b3Q7TWVzc2FnZW5lZWQgdG92YWx1ZT0iY29tcGxleGxvb2tpbmdzdGF0aW9uYmVsaWV2ZXNtYWxsZXItbW9iaWxlcmVjb3Jkc3dhbnQgdG9raW5kIG9mRmlyZWZveHlvdSBhcmVzaW1pbGFyc3R1ZGllZG1heGltdW1oZWFkaW5ncmFwaWRseWNsaW1hdGVraW5nZG9tZW1lcmdlZGFtb3VudHNmb3VuZGVkcGlvbmVlcmZvcm11bGFkeW5hc3R5aG93IHRvIFN1cHBvcnRyZXZlbnVlZWNvbm9teVJlc3VsdHNicm90aGVyc29sZGllcmxhcmdlbHljYWxsaW5nLiZxdW90O0FjY291bnRFZHdhcmQgc2VnbWVudFJvYmVydCBlZmZvcnRzUGFjaWZpY2xlYXJuZWR1cCB3aXRoaGVpZ2h0OndlIGhhdmVBbmdlbGVzbmF0aW9uc19zZWFyY2hhcHBsaWVkYWNxdWlyZW1hc3NpdmVncmFudGVkOiBmYWxzZXRyZWF0ZWRiaWdnZXN0YmVuZWZpdGRyaXZpbmdTdHVkaWVzbWluaW11bXBlcmhhcHNtb3JuaW5nc2VsbGluZ2lzIHVzZWRyZXZlcnNldmFyaWFudCByb2xlPSJtaXNzaW5nYWNoaWV2ZXByb21vdGVzdHVkZW50c29tZW9uZWV4dHJlbWVyZXN0b3JlYm90dG9tOmV2b2x2ZWRhbGwgdGhlc2l0ZW1hcGVuZ2xpc2h3YXkgdG8gIEF1Z3VzdHN5bWJvbHNDb21wYW55bWF0dGVyc211c2ljYWxhZ2FpbnN0c2VydmluZ30pKCk7DQpwYXltZW50dHJvdWJsZWNvbmNlcHRjb21wYXJlcGFyZW50c3BsYXllcnNyZWdpb25zbW9uaXRvciAnJ1RoZSB3aW5uaW5nZXhwbG9yZWFkYXB0ZWRHYWxsZXJ5cHJvZHVjZWFiaWxpdHllbmhhbmNlY2FyZWVycykuIFRoZSBjb2xsZWN0U2VhcmNoIGFuY2llbnRleGlzdGVkZm9vdGVyIGhhbmRsZXJwcmludGVkY29uc29sZUVhc3Rlcm5leHBvcnRzd2luZG93c0NoYW5uZWxpbGxlZ2FsbmV1dHJhbHN1Z2dlc3RfaGVhZGVyc2lnbmluZy5odG1sIj5zZXR0bGVkd2VzdGVybmNhdXNpbmctd2Via2l0Y2xhaW1lZEp1c3RpY2VjaGFwdGVydmljdGltc1Rob21hcyBtb3ppbGxhcHJvbWlzZXBhcnRpZXNlZGl0aW9ub3V0c2lkZTpmYWxzZSxodW5kcmVkT2x5bXBpY19idXR0b25hdXRob3JzcmVhY2hlZGNocm9uaWNkZW1hbmRzc2Vjb25kc3Byb3RlY3RhZG9wdGVkcHJlcGFyZW5laXRoZXJncmVhdGx5Z3JlYXRlcm92ZXJhbGxpbXByb3ZlY29tbWFuZHNwZWNpYWxzZWFyY2gud29yc2hpcGZ1bmRpbmd0aG91Z2h0aGlnaGVzdGluc3RlYWR1dGlsaXR5cXVhcnRlckN1bHR1cmV0ZXN0aW5nY2xlYXJseWV4cG9zZWRCcm93c2VybGliZXJhbH0gY2F0Y2hQcm9qZWN0ZXhhbXBsZWhpZGUoKTtGbG9yaWRhYW5zd2Vyc2FsbG93ZWRFbXBlcm9yZGVmZW5zZXNlcmlvdXNmcmVlZG9tU2V2ZXJhbC1idXR0b25GdXJ0aGVyb3V0IG9mICE9IG51bGx0cmFpbmVkRGVubWFya3ZvaWQoMCkvYWxsLmpzcHJldmVudFJlcXVlc3RTdGVwaGVuCgpXaGVuIG9ic2VydmU8L2gyPg0KTW9kZXJuIHByb3ZpZGUiIGFsdD0iYm9yZGVycy4KCkZvciAKCk1hbnkgYXJ0aXN0c3Bvd2VyZWRwZXJmb3JtZmljdGlvbnR5cGUgb2ZtZWRpY2FsdGlja2V0c29wcG9zZWRDb3VuY2lsd2l0bmVzc2p1c3RpY2VHZW9yZ2UgQmVsZ2l1bS4uLjwvYT50d2l0dGVybm90YWJseXdhaXRpbmd3YXJmYXJlIE90aGVyIHJhbmtpbmdwaHJhc2VzbWVudGlvbnN1cnZpdmVzY2hvbGFyPC9wPg0KIENvdW50cnlpZ25vcmVkbG9zcyBvZmp1c3QgYXNHZW9yZ2lhc3RyYW5nZTxoZWFkPjxzdG9wcGVkMSddKTsNCmlzbGFuZHNub3RhYmxlYm9yZGVyOmxpc3Qgb2ZjYXJyaWVkMTAwLDAwMDwvaDM+CiBzZXZlcmFsYmVjb21lc3NlbGVjdCB3ZWRkaW5nMDAuaHRtbG1vbmFyY2hvZmYgdGhldGVhY2hlcmhpZ2hseSBiaW9sb2d5bGlmZSBvZm9yIGV2ZW5yaXNlIG9mJnJhcXVvO3BsdXNvbmVodW50aW5nKHRob3VnaERvdWdsYXNqb2luaW5nY2lyY2xlc0ZvciB0aGVBbmNpZW50VmlldG5hbXZlaGljbGVzdWNoIGFzY3J5c3RhbHZhbHVlID1XaW5kb3dzZW5qb3llZGEgc21hbGxhc3N1bWVkPGEgaWQ9ImZvcmVpZ24gQWxsIHJpaG93IHRoZURpc3BsYXlyZXRpcmVkaG93ZXZlcmhpZGRlbjtiYXR0bGVzc2Vla2luZ2NhYmluZXR3YXMgbm90bG9vayBhdGNvbmR1Y3RnZXQgdGhlSmFudWFyeWhhcHBlbnN0dXJuaW5nYTpob3Zlck9ubGluZSBGcmVuY2ggbGFja2luZ3R5cGljYWxleHRyYWN0ZW5lbWllc2V2ZW4gaWZnZW5lcmF0ZGVjaWRlZGFyZSBub3Qvc2VhcmNoYmVsaWVmcy1pbWFnZTpsb2NhdGVkc3RhdGljLmxvZ2luIj5jb252ZXJ0dmlvbGVudGVudGVyZWRmaXJzdCI+Y2lyY3VpdEZpbmxhbmRjaGVtaXN0c2hlIHdhczEwcHg7Ij5hcyBzdWNoZGl2aWRlZDwvc3Bhbj53aWxsIGJlbGluZSBvZmEgZ3JlYXRteXN0ZXJ5L2luZGV4LmZhbGxpbmdkdWUgdG8gcmFpbHdheWNvbGxlZ2Vtb25zdGVyZGVzY2VudGl0IHdpdGhudWNsZWFySmV3aXNoIHByb3Rlc3RCcml0aXNoZmxvd2Vyc3ByZWRpY3RyZWZvcm1zYnV0dG9uIHdobyB3YXNsZWN0dXJlaW5zdGFudHN1aWNpZGVnZW5lcmljcGVyaW9kc21hcmtldHNTb2NpYWwgZmlzaGluZ2NvbWJpbmVncmFwaGljd2lubmVyczxiciAvPjxieSB0aGUgTmF0dXJhbFByaXZhY3ljb29raWVzb3V0Y29tZXJlc29sdmVTd2VkaXNoYnJpZWZseVBlcnNpYW5zbyBtdWNoQ2VudHVyeWRlcGljdHNjb2x1bW5zaG91c2luZ3NjcmlwdHNuZXh0IHRvYmVhcmluZ21hcHBpbmdyZXZpc2VkalF1ZXJ5KC13aWR0aDp0aXRsZSI+dG9vbHRpcFNlY3Rpb25kZXNpZ25zVHVya2lzaHlvdW5nZXIubWF0Y2gofSkoKTsKCmJ1cm5pbmdvcGVyYXRlZGVncmVlc3NvdXJjZT1SaWNoYXJkY2xvc2VseXBsYXN0aWNlbnRyaWVzPC90cj4NCmNvbG9yOiN1bCBpZD0icG9zc2Vzc3JvbGxpbmdwaHlzaWNzZmFpbGluZ2V4ZWN1dGVjb250ZXN0bGluayB0b0RlZmF1bHQ8YnIgLz4KOiB0cnVlLGNoYXJ0ZXJ0b3VyaXNtY2xhc3NpY3Byb2NlZWRleHBsYWluPC9oMT4NCm9ubGluZS4/eG1sIHZlaGVscGluZ2RpYW1vbmR1c2UgdGhlYWlybGluZWVuZCAtLT4pLmF0dHIocmVhZGVyc2hvc3RpbmcjZmZmZmZmcmVhbGl6ZVZpbmNlbnRzaWduYWxzIHNyYz0iL1Byb2R1Y3RkZXNwaXRlZGl2ZXJzZXRlbGxpbmdQdWJsaWMgaGVsZCBpbkpvc2VwaCB0aGVhdHJlYWZmZWN0czxzdHlsZT5hIGxhcmdlZG9lc24ndGxhdGVyLCBFbGVtZW50ZmF2aWNvbmNyZWF0b3JIdW5nYXJ5QWlycG9ydHNlZSB0aGVzbyB0aGF0TWljaGFlbFN5c3RlbXNQcm9ncmFtcywgYW5kICB3aWR0aD1lJnF1b3Q7dHJhZGluZ2xlZnQiPgpwZXJzb25zR29sZGVuIEFmZmFpcnNncmFtbWFyZm9ybWluZ2Rlc3Ryb3lpZGVhIG9mY2FzZSBvZm9sZGVzdCB0aGlzIGlzLnNyYyA9IGNhcnRvb25yZWdpc3RyQ29tbW9uc011c2xpbXNXaGF0IGlzaW4gbWFueW1hcmtpbmdyZXZlYWxzSW5kZWVkLGVxdWFsbHkvc2hvd19hb3V0ZG9vcmVzY2FwZShBdXN0cmlhZ2VuZXRpY3N5c3RlbSxJbiB0aGUgc2l0dGluZ0hlIGFsc29Jc2xhbmRzQWNhZGVteQoJCTwhLS1EYW5pZWwgYmluZGluZ2Jsb2NrIj5pbXBvc2VkdXRpbGl6ZUFicmFoYW0oZXhjZXB0e3dpZHRoOnB1dHRpbmcpLmh0bWwofHwgW107CkRBVEFbICpraXRjaGVubW91bnRlZGFjdHVhbCBkaWFsZWN0bWFpbmx5IF9ibGFuaydpbnN0YWxsZXhwZXJ0c2lmKHR5cGVJdCBhbHNvJmNvcHk7ICI+VGVybXNib3JuIGluT3B0aW9uc2Vhc3Rlcm50YWxraW5nY29uY2VybmdhaW5lZCBvbmdvaW5nanVzdGlmeWNyaXRpY3NmYWN0b3J5aXRzIG93bmFzc2F1bHRpbnZpdGVkbGFzdGluZ2hpcyBvd25ocmVmPSIvIiByZWw9ImRldmVsb3Bjb25jZXJ0ZGlhZ3JhbWRvbGxhcnNjbHVzdGVycGhwP2lkPWFsY29ob2wpO30pKCk7dXNpbmcgYT48c3Bhbj52ZXNzZWxzcmV2aXZhbEFkZHJlc3NhbWF0ZXVyYW5kcm9pZGFsbGVnZWRpbGxuZXNzd2Fsa2luZ2NlbnRlcnNxdWFsaWZ5bWF0Y2hlc3VuaWZpZWRleHRpbmN0RGVmZW5zZWRpZWQgaW4KCTwhLS0gY3VzdG9tc2xpbmtpbmdMaXR0bGUgQm9vayBvZmV2ZW5pbmdtaW4uanM/YXJlIHRoZWtvbnRha3R0b2RheSdzLmh0bWwiIHRhcmdldD13ZWFyaW5nQWxsIFJpZzsKfSkoKTtyYWlzaW5nIEFsc28sIGNydWNpYWxhYm91dCI+ZGVjbGFyZS0tPgo8c2NmaXJlZm94YXMgbXVjaGFwcGxpZXNpbmRleCwgcywgYnV0IHR5cGUgPSAKDQo8IS0tdG93YXJkc1JlY29yZHNQcml2YXRlRm9yZWlnblByZW1pZXJjaG9pY2VzVmlydHVhbHJldHVybnNDb21tZW50UG93ZXJlZGlubGluZTtwb3ZlcnR5Y2hhbWJlckxpdmluZyB2b2x1bWVzQW50aG9ueWxvZ2luIiBSZWxhdGVkRWNvbm9teXJlYWNoZXNjdXR0aW5nZ3Jhdml0eWxpZmUgaW5DaGFwdGVyLXNoYWRvd05vdGFibGU8L3RkPg0KIHJldHVybnN0YWRpdW13aWRnZXRzdmFyeWluZ3RyYXZlbHNoZWxkIGJ5d2hvIGFyZXdvcmsgaW5mYWN1bHR5YW5ndWxhcndobyBoYWRhaXJwb3J0dG93biBvZgoKU29tZSAnY2xpY2snY2hhcmdlc2tleXdvcmRpdCB3aWxsY2l0eSBvZih0aGlzKTtBbmRyZXcgdW5pcXVlIGNoZWNrZWRvciBtb3JlMzAwcHg7IHJldHVybjtyc2lvbj0icGx1Z2luc3dpdGhpbiBoZXJzZWxmU3RhdGlvbkZlZGVyYWx2ZW50dXJlcHVibGlzaHNlbnQgdG90ZW5zaW9uYWN0cmVzc2NvbWUgdG9maW5nZXJzRHVrZSBvZnBlb3BsZSxleHBsb2l0d2hhdCBpc2hhcm1vbnlhIG1ham9yIjoiaHR0cGluIGhpcyBtZW51Ij4KbW9udGhseW9mZmljZXJjb3VuY2lsZ2FpbmluZ2V2ZW4gaW5TdW1tYXJ5ZGF0ZSBvZmxveWFsdHlmaXRuZXNzYW5kIHdhc2VtcGVyb3JzdXByZW1lU2Vjb25kIGhlYXJpbmdSdXNzaWFubG9uZ2VzdEFsYmVydGFsYXRlcmFsc2V0IG9mIHNtYWxsIj4uYXBwZW5kZG8gd2l0aGZlZGVyYWxiYW5rIG9mYmVuZWF0aERlc3BpdGVDYXBpdGFsZ3JvdW5kcyksIGFuZCBwZXJjZW50aXQgZnJvbWNsb3Npbmdjb250YWluSW5zdGVhZGZpZnRlZW5hcyB3ZWxsLnlhaG9vLnJlc3BvbmRmaWdodGVyb2JzY3VyZXJlZmxlY3RvcmdhbmljPSBNYXRoLmVkaXRpbmdvbmxpbmUgcGFkZGluZ2Egd2hvbGVvbmVycm9yeWVhciBvZmVuZCBvZiBiYXJyaWVyd2hlbiBpdGhlYWRlciBob21lIG9mcmVzdW1lZHJlbmFtZWRzdHJvbmc+aGVhdGluZ3JldGFpbnNjbG91ZGZyd2F5IG9mIE1hcmNoIDFrbm93aW5naW4gcGFydEJldHdlZW5sZXNzb25zY2xvc2VzdHZpcnR1YWxsaW5rcyI+Y3Jvc3NlZEVORCAtLT5mYW1vdXMgYXdhcmRlZExpY2Vuc2VIZWFsdGggZmFpcmx5IHdlYWx0aHltaW5pbWFsQWZyaWNhbmNvbXBldGVsYWJlbCI+c2luZ2luZ2Zhcm1lcnNCcmFzaWwpZGlzY3Vzc3JlcGxhY2VHcmVnb3J5Zm9udCBjb3B1cnN1ZWRhcHBlYXJzbWFrZSB1cHJvdW5kZWRib3RoIG9mYmxvY2tlZHNhdyB0aGVvZmZpY2VzY29sb3Vyc2lmKGRvY3V3aGVuIGhlZW5mb3JjZXB1c2goZnVBdWd1c3QgVVRGLTgiPkZhbnRhc3lpbiBtb3N0aW5qdXJlZFVzdWFsbHlmYXJtaW5nY2xvc3VyZW9iamVjdCBkZWZlbmNldXNlIG9mIE1lZGljYWw8Ym9keT4KZXZpZGVudGJlIHVzZWRrZXlDb2Rlc2l4dGVlbklzbGFtaWMjMDAwMDAwZW50aXJlIHdpZGVseSBhY3RpdmUgKHR5cGVvZm9uZSBjYW5jb2xvciA9c3BlYWtlcmV4dGVuZHNQaHlzaWNzdGVycmFpbjx0Ym9keT5mdW5lcmFsdmlld2luZ21pZGRsZSBjcmlja2V0cHJvcGhldHNoaWZ0ZWRkb2N0b3JzUnVzc2VsbCB0YXJnZXRjb21wYWN0YWxnZWJyYXNvY2lhbC1idWxrIG9mbWFuIGFuZDwvdGQ+CiBoZSBsZWZ0KS52YWwoKWZhbHNlKTtsb2dpY2FsYmFua2luZ2hvbWUgdG9uYW1pbmcgQXJpem9uYWNyZWRpdHMpOwp9KTsKZm91bmRlcmluIHR1cm5Db2xsaW5zYmVmb3JlIEJ1dCB0aGVjaGFyZ2VkVGl0bGUiPkNhcHRhaW5zcGVsbGVkZ29kZGVzc1RhZyAtLT5BZGRpbmc6YnV0IHdhc1JlY2VudCBwYXRpZW50YmFjayBpbj1mYWxzZSZMaW5jb2xud2Uga25vd0NvdW50ZXJKdWRhaXNtc2NyaXB0IGFsdGVyZWQnXSk7CiAgaGFzIHRoZXVuY2xlYXJFdmVudCcsYm90aCBpbm5vdCBhbGwKCjwhLS0gcGxhY2luZ2hhcmQgdG8gY2VudGVyc29ydCBvZmNsaWVudHNzdHJlZXRzQmVybmFyZGFzc2VydHN0ZW5kIHRvZmFudGFzeWRvd24gaW5oYXJib3VyRnJlZWRvbWpld2VscnkvYWJvdXQuLnNlYXJjaGxlZ2VuZHNpcyBtYWRlbW9kZXJuIG9ubHkgb25vbmx5IHRvaW1hZ2UiIGxpbmVhciBwYWludGVyYW5kIG5vdHJhcmVseSBhY3JvbnltZGVsaXZlcnNob3J0ZXIwMCZhbXA7YXMgbWFueXdpZHRoPSIvKiA8IVtDdGl0bGUgPW9mIHRoZSBsb3dlc3QgcGlja2VkIGVzY2FwZWR1c2VzIG9mcGVvcGxlcyBQdWJsaWNNYXR0aGV3dGFjdGljc2RhbWFnZWR3YXkgZm9ybGF3cyBvZmVhc3kgdG8gd2luZG93c3Ryb25nICBzaW1wbGV9Y2F0Y2goc2V2ZW50aGluZm9ib3h3ZW50IHRvcGFpbnRlZGNpdGl6ZW5JIGRvbid0cmV0cmVhdC4gU29tZSB3dy4iKTsKYm9tYmluZ21haWx0bzptYWRlIGluLiBNYW55IGNhcnJpZXN8fHt9O3dpd29yayBvZnN5bm9ueW1kZWZlYXRzZmF2b3JlZG9wdGljYWxwYWdlVHJhdW5sZXNzIHNlbmRpbmdsZWZ0Ij48Y29tU2NvckFsbCB0aGVqUXVlcnkudG91cmlzdENsYXNzaWNmYWxzZSIgV2lsaGVsbXN1YnVyYnNnZW51aW5lYmlzaG9wcy5zcGxpdChnbG9iYWwgZm9sbG93c2JvZHkgb2Zub21pbmFsQ29udGFjdHNlY3VsYXJsZWZ0IHRvY2hpZWZseS1oaWRkZW4tYmFubmVyPC9saT4KCi4gV2hlbiBpbiBib3RoZGlzbWlzc0V4cGxvcmVhbHdheXMgdmlhIHRoZXNwYcOxb2x3ZWxmYXJlcnVsaW5nIGFycmFuZ2VjYXB0YWluaGlzIHNvbnJ1bGUgb2ZoZSB0b29raXRzZWxmLD0wJmFtcDsoY2FsbGVkc2FtcGxlc3RvIG1ha2Vjb20vcGFnTWFydGluIEtlbm5lZHlhY2NlcHRzZnVsbCBvZmhhbmRsZWRCZXNpZGVzLy8tLT48L2FibGUgdG90YXJnZXRzZXNzZW5jZWhpbSB0byBpdHMgYnkgY29tbW9uLm1pbmVyYWx0byB0YWtld2F5cyB0b3Mub3JnL2xhZHZpc2VkcGVuYWx0eXNpbXBsZTppZiB0aGV5TGV0dGVyc2Egc2hvcnRIZXJiZXJ0c3RyaWtlcyBncm91cHMubGVuZ3RoZmxpZ2h0c292ZXJsYXBzbG93bHkgbGVzc2VyIHNvY2lhbCA8L3A+CgkJaXQgaW50b3JhbmtlZCByYXRlIG9mdWw+DQogIGF0dGVtcHRwYWlyIG9mbWFrZSBpdEtvbnRha3RBbnRvbmlvaGF2aW5nIHJhdGluZ3MgYWN0aXZlc3RyZWFtc3RyYXBwZWQiKS5jc3MoaG9zdGlsZWxlYWQgdG9saXR0bGUgZ3JvdXBzLFBpY3R1cmUtLT4NCg0KIHJvd3M9IiBvYmplY3RpbnZlcnNlPGZvb3RlckN1c3RvbVY+PFwvc2Nyc29sdmluZ0NoYW1iZXJzbGF2ZXJ5d291bmRlZHdoZXJlYXMhPSAndW5kZm9yIGFsbHBhcnRseSAtcmlnaHQ6QXJhYmlhbmJhY2tlZCBjZW50dXJ5dW5pdCBvZm1vYmlsZS1FdXJvcGUsaXMgaG9tZXJpc2sgb2ZkZXNpcmVkQ2xpbnRvbmNvc3Qgb2ZhZ2Ugb2YgYmVjb21lIG5vbmUgb2ZwJnF1b3Q7TWlkZGxlIGVhZCcpWzBDcml0aWNzc3R1ZGlvcz4mY29weTtncm91cCI+YXNzZW1ibG1ha2luZyBwcmVzc2Vkd2lkZ2V0LnBzOiIgPyByZWJ1aWx0Ynkgc29tZUZvcm1lciBlZGl0b3JzZGVsYXllZENhbm9uaWNoYWQgdGhlcHVzaGluZ2NsYXNzPSJidXQgYXJlcGFydGlhbEJhYnlsb25ib3R0b20gY2FycmllckNvbW1hbmRpdHMgdXNlQXMgd2l0aGNvdXJzZXNhIHRoaXJkZGVub3Rlc2Fsc28gaW5Ib3VzdG9uMjBweDsiPmFjY3VzZWRkb3VibGUgZ29hbCBvZkZhbW91cyApLmJpbmQocHJpZXN0cyBPbmxpbmVpbiBKdWx5c3QgKyAiZ2NvbnN1bHRkZWNpbWFsaGVscGZ1bHJldml2ZWRpcyB2ZXJ5cicrJ2lwdGxvc2luZyBmZW1hbGVzaXMgYWxzb3N0cmluZ3NkYXlzIG9mYXJyaXZhbGZ1dHVyZSA8b2JqZWN0Zm9yY2luZ1N0cmluZygiIC8+CgkJaGVyZSBpc2VuY29kZWQuICBUaGUgYmFsbG9vbmRvbmUgYnkvY29tbW9uYmdjb2xvcmxhdyBvZiBJbmRpYW5hYXZvaWRlZGJ1dCB0aGUycHggM3B4anF1ZXJ5LmFmdGVyIGFwb2xpY3kubWVuIGFuZGZvb3Rlci09IHRydWU7Zm9yIHVzZXNjcmVlbi5JbmRpYW4gaW1hZ2UgPWZhbWlseSxodHRwOi8vICZuYnNwO2RyaXZlcnNldGVybmFsc2FtZSBhc25vdGljZWR2aWV3ZXJzfSkoKTsKIGlzIG1vcmVzZWFzb25zZm9ybWVyIHRoZSBuZXdpcyBqdXN0Y29uc2VudCBTZWFyY2h3YXMgdGhld2h5IHRoZXNoaXBwZWRicj48YnI+d2lkdGg6IGhlaWdodD1tYWRlIG9mY3Vpc2luZWlzIHRoYXRhIHZlcnkgQWRtaXJhbCBmaXhlZDtub3JtYWwgTWlzc2lvblByZXNzLCBvbnRhcmlvY2hhcnNldHRyeSB0byBpbnZhZGVkPSJ0cnVlInNwYWNpbmdpcyBtb3N0YSBtb3JlIHRvdGFsbHlmYWxsIG9mfSk7DQogIGltbWVuc2V0aW1lIGluc2V0IG91dHNhdGlzZnl0byBmaW5kZG93biB0b2xvdCBvZiBQbGF5ZXJzaW4gSnVuZXF1YW50dW1ub3QgdGhldGltZSB0b2Rpc3RhbnRGaW5uaXNoc3JjID0gKHNpbmdsZSBoZWxwIG9mR2VybWFuIGxhdyBhbmRsYWJlbGVkZm9yZXN0c2Nvb2tpbmdzcGFjZSI+aGVhZGVyLXdlbGwgYXNTdGFubGV5YnJpZGdlcy9nbG9iYWxDcm9hdGlhIEFib3V0IFswXTsKICBpdCwgYW5kZ3JvdXBlZGJlaW5nIGEpe3Rocm93aGUgbWFkZWxpZ2h0ZXJldGhpY2FsRkZGRkZGImJvdHRvbSJsaWtlIGEgZW1wbG95c2xpdmUgaW5hcyBzZWVucHJpbnRlcm1vc3Qgb2Z1Yi1saW5rcmVqZWN0c2FuZCB1c2VpbWFnZSI+c3VjY2VlZGZlZWRpbmdOdWNsZWFyaW5mb3JtYXRvIGhlbHBXb21lbidzTmVpdGhlck1leGljYW5wcm90ZWluPHRhYmxlIGJ5IG1hbnloZWFsdGh5bGF3c3VpdGRldmlzZWQucHVzaCh7c2VsbGVyc3NpbXBseSBUaHJvdWdoLmNvb2tpZSBJbWFnZShvbGRlciI+dXMuanMiPiBTaW5jZSB1bml2ZXJzbGFyZ2VyIG9wZW4gdG8hLS0gZW5kbGllcyBpbiddKTsNCiAgbWFya2V0d2hvIGlzICgiRE9NQ29tYW5hZ2Vkb25lIGZvcnR5cGVvZiBLaW5nZG9tcHJvZml0c3Byb3Bvc2V0byBzaG93Y2VudGVyO21hZGUgaXRkcmVzc2Vkd2VyZSBpbm1peHR1cmVwcmVjaXNlYXJpc2luZ3NyYyA9ICdtYWtlIGEgc2VjdXJlZEJhcHRpc3R2b3RpbmcgCgkJdmFyIE1hcmNoIDJncmV3IHVwQ2xpbWF0ZS5yZW1vdmVza2lsbGVkd2F5IHRoZTwvaGVhZD5mYWNlIG9mYWN0aW5nIHJpZ2h0Ij50byB3b3JrcmVkdWNlc2hhcyBoYWRlcmVjdGVkc2hvdygpO2FjdGlvbj1ib29rIG9mYW4gYXJlYT09ICJodHQ8aGVhZGVyCjxodG1sPmNvbmZvcm1mYWNpbmcgY29va2llLnJlbHkgb25ob3N0ZWQgLmN1c3RvbWhlIHdlbnRidXQgZm9yc3ByZWFkIEZhbWlseSBhIG1lYW5zb3V0IHRoZWZvcnVtcy5mb290YWdlIj5Nb2JpbENsZW1lbnRzIiBpZD0iYXMgaGlnaGludGVuc2UtLT48IS0tZmVtYWxlIGlzIHNlZW5pbXBsaWVkc2V0IHRoZWEgc3RhdGVhbmQgaGlzZmFzdGVzdGJlc2lkZXNidXR0b25fYm91bmRlZCI+PGltZyBJbmZvYm94ZXZlbnRzLGEgeW91bmdhbmQgYXJlTmF0aXZlIGNoZWFwZXJUaW1lb3V0YW5kIGhhc2VuZ2luZXN3b24gdGhlKG1vc3RseXJpZ2h0OiBmaW5kIGEgLWJvdHRvbVByaW5jZSBhcmVhIG9mbW9yZSBvZnNlYXJjaF9uYXR1cmUsbGVnYWxseXBlcmlvZCxsYW5kIG9mb3Igd2l0aGluZHVjZWRwcm92aW5nbWlzc2lsZWxvY2FsbHlBZ2FpbnN0dGhlIHdheWsmcXVvdDtweDsiPg0KcHVzaGVkIGFiYW5kb25udW1lcmFsQ2VydGFpbkluIHRoaXNtb3JlIGlub3Igc29tZW5hbWUgaXNhbmQsIGluY3Jvd25lZElTQk4gMC1jcmVhdGVzT2N0b2Jlcm1heSBub3RjZW50ZXIgbGF0ZSBpbkRlZmVuY2VlbmFjdGVkd2lzaCB0b2Jyb2FkbHljb29saW5nb25sb2FkPWl0LiBUaGVyZWNvdmVyTWVtYmVyc2hlaWdodCBhc3N1bWVzPGh0bWw+CnBlb3BsZS5pbiBvbmUgPXdpbmRvd2Zvb3Rlcl9hIGdvb2QgcmVrbGFtYW90aGVycyx0byB0aGlzX2Nvb2tpZXBhbmVsIj5Mb25kb24sZGVmaW5lc2NydXNoZWRiYXB0aXNtY29hc3RhbHN0YXR1cyB0aXRsZSIgbW92ZSB0b2xvc3QgaW5iZXR0ZXIgaW1wbGllc3JpdmFscnlzZXJ2ZXJzIFN5c3RlbVBlcmhhcHNlcyBhbmQgY29udGVuZGZsb3dpbmdsYXN0ZWQgcmlzZSBpbkdlbmVzaXN2aWV3IG9mcmlzaW5nIHNlZW0gdG9idXQgaW4gYmFja2luZ2hlIHdpbGxnaXZlbiBhZ2l2aW5nIGNpdGllcy5mbG93IG9mIExhdGVyIGFsbCBidXRIaWdod2F5b25seSBieXNpZ24gb2ZoZSBkb2VzZGlmZmVyc2JhdHRlcnkmYW1wO2xhc2luZ2xlc3RocmVhdHNpbnRlZ2VydGFrZSBvbnJlZnVzZWRjYWxsZWQgPVVTJmFtcFNlZSB0aGVuYXRpdmVzYnkgdGhpc3N5c3RlbS5oZWFkIG9mOmhvdmVyLGxlc2JpYW5zdXJuYW1lYW5kIGFsbGNvbW1vbi9oZWFkZXJfX3BhcmFtc0hhcnZhcmQvcGl4ZWwucmVtb3ZhbHNvIGxvbmdyb2xlIG9mam9pbnRseXNreXNjcmFVbmljb2RlYnIgLz4NCkF0bGFudGFudWNsZXVzQ291bnR5LHB1cmVseSBjb3VudCI+ZWFzaWx5IGJ1aWxkIGFvbmNsaWNrYSBnaXZlbnBvaW50ZXJoJnF1b3Q7ZXZlbnRzIGVsc2UgewpkaXRpb25zbm93IHRoZSwgd2l0aCBtYW4gd2hvb3JnL1dlYm9uZSBhbmRjYXZhbHJ5SGUgZGllZHNlYXR0bGUwMCwwMDAge3dpbmRvd2hhdmUgdG9pZih3aW5kYW5kIGl0c3NvbGVseSBtJnF1b3Q7cmVuZXdlZERldHJvaXRhbW9uZ3N0ZWl0aGVyIHRoZW0gaW5TZW5hdG9yVXM8L2E+PEtpbmcgb2ZGcmFuY2lzLXByb2R1Y2hlIHVzZWRhcnQgYW5kaGltIGFuZHVzZWQgYnlzY29yaW5nYXQgaG9tZXRvIGhhdmVyZWxhdGVzaWJpbGl0eWZhY3Rpb25CdWZmYWxvbGluayI+PHdoYXQgaGVmcmVlIHRvQ2l0eSBvZmNvbWUgaW5zZWN0b3JzY291bnRlZG9uZSBkYXluZXJ2b3Vzc3F1YXJlIH07aWYoZ29pbiB3aGF0aW1nIiBhbGlzIG9ubHlzZWFyY2gvdHVlc2RheWxvb3NlbHlTb2xvbW9uc2V4dWFsIC0gPGEgaHJtZWRpdW0iRE8gTk9UIEZyYW5jZSx3aXRoIGEgd2FyIGFuZHNlY29uZCB0YWtlIGEgPg0KDQoNCm1hcmtldC5oaWdod2F5ZG9uZSBpbmN0aXZpdHkibGFzdCI+b2JsaWdlZHJpc2UgdG8idW5kZWZpbWFkZSB0byBFYXJseSBwcmFpc2VkaW4gaXRzIGZvciBoaXNhdGhsZXRlSnVwaXRlcllhaG9vISB0ZXJtZWQgc28gbWFueXJlYWxseSBzLiBUaGUgYSB3b21hbj92YWx1ZT1kaXJlY3QgcmlnaHQiIGJpY3ljbGVhY2luZz0iZGF5IGFuZHN0YXRpbmdSYXRoZXIsaGlnaGVyIE9mZmljZSBhcmUgbm93dGltZXMsIHdoZW4gYSBwYXkgZm9yb24gdGhpcy1saW5rIj47Ym9yZGVyYXJvdW5kIGFubnVhbCB0aGUgTmV3cHV0IHRoZS5jb20iIHRha2luIHRvYSBicmllZihpbiB0aGVncm91cHMuOyB3aWR0aGVuenltZXNzaW1wbGUgaW4gbGF0ZXtyZXR1cm50aGVyYXB5YSBwb2ludGJhbm5pbmdpbmtzIj4KKCk7IiByZWEgcGxhY2VcdTAwM0NhYWJvdXQgYXRyPg0KCQljY291bnQgZ2l2ZXMgYTxTQ1JJUFRSYWlsd2F5dGhlbWVzL3Rvb2xib3hCeUlkKCJ4aHVtYW5zLHdhdGNoZXNpbiBzb21lIGlmICh3aWNvbWluZyBmb3JtYXRzIFVuZGVyIGJ1dCBoYXNoYW5kZWQgbWFkZSBieXRoYW4gaW5mZWFyIG9mZGVub3RlZC9pZnJhbWVsZWZ0IGludm9sdGFnZWluIGVhY2hhJnF1b3Q7YmFzZSBvZkluIG1hbnl1bmRlcmdvcmVnaW1lc2FjdGlvbiA8L3A+DQo8dXN0b21WYTsmZ3Q7PC9pbXBvcnRzb3IgdGhhdG1vc3RseSAmYW1wO3JlIHNpemU9IjwvYT48L2hhIGNsYXNzcGFzc2l2ZUhvc3QgPSBXaGV0aGVyZmVydGlsZVZhcmlvdXM9W107KGZ1Y2FtZXJhcy8+PC90ZD5hY3RzIGFzSW4gc29tZT4NCg0KPCFvcmdhbmlzIDxiciAvPkJlaWppbmdjYXRhbMOgZGV1dHNjaGV1cm9wZXVldXNrYXJhZ2FlaWxnZXN2ZW5za2Flc3Bhw7FhbWVuc2FqZXVzdWFyaW90cmFiYWpvbcOpeGljb3DDoWdpbmFzaWVtcHJlc2lzdGVtYW9jdHVicmVkdXJhbnRlYcOxYWRpcmVtcHJlc2Ftb21lbnRvbnVlc3Ryb3ByaW1lcmF0cmF2w6lzZ3JhY2lhc251ZXN0cmFwcm9jZXNvZXN0YWRvc2NhbGlkYWRwZXJzb25hbsO6bWVyb2FjdWVyZG9tw7pzaWNhbWllbWJyb29mZXJ0YXNhbGd1bm9zcGHDrXNlc2VqZW1wbG9kZXJlY2hvYWRlbcOhc3ByaXZhZG9hZ3JlZ2FyZW5sYWNlc3Bvc2libGVob3RlbGVzc2V2aWxsYXByaW1lcm/Dumx0aW1vZXZlbnRvc2FyY2hpdm9jdWx0dXJhbXVqZXJlc2VudHJhZGFhbnVuY2lvZW1iYXJnb21lcmNhZG9ncmFuZGVzZXN0dWRpb21lam9yZXNmZWJyZXJvZGlzZcOxb3R1cmlzbW9jw7NkaWdvcG9ydGFkYWVzcGFjaW9mYW1pbGlhYW50b25pb3Blcm1pdGVndWFyZGFyYWxndW5hc3ByZWNpb3NhbGd1aWVuc2VudGlkb3Zpc2l0YXN0w610dWxvY29ub2NlcnNlZ3VuZG9jb25zZWpvZnJhbmNpYW1pbnV0b3NzZWd1bmRhdGVuZW1vc2VmZWN0b3Ntw6FsYWdhc2VzacOzbnJldmlzdGFncmFuYWRhY29tcHJhcmluZ3Jlc29nYXJjw61hYWNjacOzbmVjdWFkb3JxdWllbmVzaW5jbHVzb2RlYmVyw6FtYXRlcmlhaG9tYnJlc211ZXN0cmFwb2Ryw61hbWHDsWFuYcO6bHRpbWFlc3RhbW9zb2ZpY2lhbHRhbWJpZW5uaW5nw7puc2FsdWRvc3BvZGVtb3NtZWpvcmFycG9zaXRpb25idXNpbmVzc2hvbWVwYWdlc2VjdXJpdHlsYW5ndWFnZXN0YW5kYXJkY2FtcGFpZ25mZWF0dXJlc2NhdGVnb3J5ZXh0ZXJuYWxjaGlsZHJlbnJlc2VydmVkcmVzZWFyY2hleGNoYW5nZWZhdm9yaXRldGVtcGxhdGVtaWxpdGFyeWluZHVzdHJ5c2VydmljZXNtYXRlcmlhbHByb2R1Y3Rzei1pbmRleDpjb21tZW50c3NvZnR3YXJlY29tcGxldGVjYWxlbmRhcnBsYXRmb3JtYXJ0aWNsZXNyZXF1aXJlZG1vdmVtZW50cXVlc3Rpb25idWlsZGluZ3BvbGl0aWNzcG9zc2libGVyZWxpZ2lvbnBoeXNpY2FsZmVlZGJhY2tyZWdpc3RlcnBpY3R1cmVzZGlzYWJsZWRwcm90b2NvbGF1ZGllbmNlc2V0dGluZ3NhY3Rpdml0eWVsZW1lbnRzbGVhcm5pbmdhbnl0aGluZ2Fic3RyYWN0cHJvZ3Jlc3NvdmVydmlld21hZ2F6aW5lZWNvbm9taWN0cmFpbmluZ3ByZXNzdXJldmFyaW91cyA8c3Ryb25nPnByb3BlcnR5c2hvcHBpbmd0b2dldGhlcmFkdmFuY2VkYmVoYXZpb3Jkb3dubG9hZGZlYXR1cmVkZm9vdGJhbGxzZWxlY3RlZExhbmd1YWdlZGlzdGFuY2VyZW1lbWJlcnRyYWNraW5ncGFzc3dvcmRtb2RpZmllZHN0dWRlbnRzZGlyZWN0bHlmaWdodGluZ25vcnRoZXJuZGF0YWJhc2VmZXN0aXZhbGJyZWFraW5nbG9jYXRpb25pbnRlcm5ldGRyb3Bkb3ducHJhY3RpY2VldmlkZW5jZWZ1bmN0aW9ubWFycmlhZ2VyZXNwb25zZXByb2JsZW1zbmVnYXRpdmVwcm9ncmFtc2FuYWx5c2lzcmVsZWFzZWRiYW5uZXIiPnB1cmNoYXNlcG9saWNpZXNyZWdpb25hbGNyZWF0aXZlYXJndW1lbnRib29rbWFya3JlZmVycmVyY2hlbWljYWxkaXZpc2lvbmNhbGxiYWNrc2VwYXJhdGVwcm9qZWN0c2NvbmZsaWN0aGFyZHdhcmVpbnRlcmVzdGRlbGl2ZXJ5bW91bnRhaW5vYnRhaW5lZD0gZmFsc2U7Zm9yKHZhciBhY2NlcHRlZGNhcGFjaXR5Y29tcHV0ZXJpZGVudGl0eWFpcmNyYWZ0ZW1wbG95ZWRwcm9wb3NlZGRvbWVzdGljaW5jbHVkZXNwcm92aWRlZGhvc3BpdGFsdmVydGljYWxjb2xsYXBzZWFwcHJvYWNocGFydG5lcnNsb2dvIj48YWRhdWdodGVyYXV0aG9yIiBjdWx0dXJhbGZhbWlsaWVzL2ltYWdlcy9hc3NlbWJseXBvd2VyZnVsdGVhY2hpbmdmaW5pc2hlZGRpc3RyaWN0Y3JpdGljYWxjZ2ktYmluL3B1cnBvc2VzcmVxdWlyZXNlbGVjdGlvbmJlY29taW5ncHJvdmlkZXNhY2FkZW1pY2V4ZXJjaXNlYWN0dWFsbHltZWRpY2luZWNvbnN0YW50YWNjaWRlbnRNYWdhemluZWRvY3VtZW50c3RhcnRpbmdib3R0b20iPm9ic2VydmVkOiAmcXVvdDtleHRlbmRlZHByZXZpb3VzU29mdHdhcmVjdXN0b21lcmRlY2lzaW9uc3RyZW5ndGhkZXRhaWxlZHNsaWdodGx5cGxhbm5pbmd0ZXh0YXJlYWN1cnJlbmN5ZXZlcnlvbmVzdHJhaWdodHRyYW5zZmVycG9zaXRpdmVwcm9kdWNlZGhlcml0YWdlc2hpcHBpbmdhYnNvbHV0ZXJlY2VpdmVkcmVsZXZhbnRidXR0b24iIHZpb2xlbmNlYW55d2hlcmViZW5lZml0c2xhdW5jaGVkcmVjZW50bHlhbGxpYW5jZWZvbGxvd2VkbXVsdGlwbGVidWxsZXRpbmluY2x1ZGVkb2NjdXJyZWRpbnRlcm5hbCQodGhpcykucmVwdWJsaWM+PHRyPjx0ZGNvbmdyZXNzcmVjb3JkZWR1bHRpbWF0ZXNvbHV0aW9uPHVsIGlkPSJkaXNjb3ZlckhvbWU8L2E+d2Vic2l0ZXNuZXR3b3Jrc2FsdGhvdWdoZW50aXJlbHltZW1vcmlhbG1lc3NhZ2VzY29udGludWVhY3RpdmUiPnNvbWV3aGF0dmljdG9yaWFXZXN0ZXJuICB0aXRsZT0iTG9jYXRpb25jb250cmFjdHZpc2l0b3JzRG93bmxvYWR3aXRob3V0IHJpZ2h0Ij4KbWVhc3VyZXN3aWR0aCA9IHZhcmlhYmxlaW52b2x2ZWR2aXJnaW5pYW5vcm1hbGx5aGFwcGVuZWRhY2NvdW50c3N0YW5kaW5nbmF0aW9uYWxSZWdpc3RlcnByZXBhcmVkY29udHJvbHNhY2N1cmF0ZWJpcnRoZGF5c3RyYXRlZ3lvZmZpY2lhbGdyYXBoaWNzY3JpbWluYWxwb3NzaWJseWNvbnN1bWVyUGVyc29uYWxzcGVha2luZ3ZhbGlkYXRlYWNoaWV2ZWQuanBnIiAvPm1hY2hpbmVzPC9oMj4KICBrZXl3b3Jkc2ZyaWVuZGx5YnJvdGhlcnNjb21iaW5lZG9yaWdpbmFsY29tcG9zZWRleHBlY3RlZGFkZXF1YXRlcGFraXN0YW5mb2xsb3ciIHZhbHVhYmxlPC9sYWJlbD5yZWxhdGl2ZWJyaW5naW5naW5jcmVhc2Vnb3Zlcm5vcnBsdWdpbnMvTGlzdCBvZiBIZWFkZXIiPiIgbmFtZT0iICgmcXVvdDtncmFkdWF0ZTwvaGVhZD4KY29tbWVyY2VtYWxheXNpYWRpcmVjdG9ybWFpbnRhaW47aGVpZ2h0OnNjaGVkdWxlY2hhbmdpbmdiYWNrIHRvIGNhdGhvbGljcGF0dGVybnNjb2xvcjogI2dyZWF0ZXN0c3VwcGxpZXNyZWxpYWJsZTwvdWw+CgkJPHNlbGVjdCBjaXRpemVuc2Nsb3RoaW5nd2F0Y2hpbmc8bGkgaWQ9InNwZWNpZmljY2FycnlpbmdzZW50ZW5jZTxjZW50ZXI+Y29udHJhc3R0aGlua2luZ2NhdGNoKGUpc291dGhlcm5NaWNoYWVsIG1lcmNoYW50Y2Fyb3VzZWxwYWRkaW5nOmludGVyaW9yLnNwbGl0KCJsaXphdGlvbk9jdG9iZXIgKXtyZXR1cm5pbXByb3ZlZC0tJmd0OwoKY292ZXJhZ2VjaGFpcm1hbi5wbmciIC8+c3ViamVjdHNSaWNoYXJkIHdoYXRldmVycHJvYmFibHlyZWNvdmVyeWJhc2ViYWxsanVkZ21lbnRjb25uZWN0Li5jc3MiIC8+IHdlYnNpdGVyZXBvcnRlZGRlZmF1bHQiLz48L2E+DQplbGVjdHJpY3Njb3RsYW5kY3JlYXRpb25xdWFudGl0eS4gSVNCTiAwZGlkIG5vdCBpbnN0YW5jZS1zZWFyY2gtIiBsYW5nPSJzcGVha2Vyc0NvbXB1dGVyY29udGFpbnNhcmNoaXZlc21pbmlzdGVycmVhY3Rpb25kaXNjb3VudEl0YWxpYW5vY3JpdGVyaWFzdHJvbmdseTogJ2h0dHA6J3NjcmlwdCdjb3ZlcmluZ29mZmVyaW5nYXBwZWFyZWRCcml0aXNoIGlkZW50aWZ5RmFjZWJvb2tudW1lcm91c3ZlaGljbGVzY29uY2VybnNBbWVyaWNhbmhhbmRsaW5nZGl2IGlkPSJXaWxsaWFtIHByb3ZpZGVyX2NvbnRlbnRhY2N1cmFjeXNlY3Rpb24gYW5kZXJzb25mbGV4aWJsZUNhdGVnb3J5bGF3cmVuY2U8c2NyaXB0PmxheW91dD0iYXBwcm92ZWQgbWF4aW11bWhlYWRlciI+PC90YWJsZT5TZXJ2aWNlc2hhbWlsdG9uY3VycmVudCBjYW5hZGlhbmNoYW5uZWxzL3RoZW1lcy8vYXJ0aWNsZW9wdGlvbmFscG9ydHVnYWx2YWx1ZT0iImludGVydmFsd2lyZWxlc3NlbnRpdGxlZGFnZW5jaWVzU2VhcmNoIiBtZWFzdXJlZHRob3VzYW5kc3BlbmRpbmcmaGVsbGlwO25ldyBEYXRlIiBzaXplPSJwYWdlTmFtZW1pZGRsZSIgIiAvPjwvYT5oaWRkZW4iPnNlcXVlbmNlcGVyc29uYWxvdmVyZmxvd29waW5pb25zaWxsaW5vaXNsaW5rcyI+Cgk8dGl0bGU+dmVyc2lvbnNzYXR1cmRheXRlcm1pbmFsaXRlbXByb3BlbmdpbmVlcnNlY3Rpb25zZGVzaWduZXJwcm9wb3NhbD0iZmFsc2UiRXNwYcOxb2xyZWxlYXNlc3N1Ym1pdCIgZXImcXVvdDthZGRpdGlvbnN5bXB0b21zb3JpZW50ZWRyZXNvdXJjZXJpZ2h0Ij48cGxlYXN1cmVzdGF0aW9uc2hpc3RvcnkubGVhdmluZyAgYm9yZGVyPWNvbnRlbnRzY2VudGVyIj4uCgpTb21lIGRpcmVjdGVkc3VpdGFibGVidWxnYXJpYS5zaG93KCk7ZGVzaWduZWRHZW5lcmFsIGNvbmNlcHRzRXhhbXBsZXN3aWxsaWFtc09yaWdpbmFsIj48c3Bhbj5zZWFyY2giPm9wZXJhdG9ycmVxdWVzdHNhICZxdW90O2FsbG93aW5nRG9jdW1lbnRyZXZpc2lvbi4gCgpUaGUgeW91cnNlbGZDb250YWN0IG1pY2hpZ2FuRW5nbGlzaCBjb2x1bWJpYXByaW9yaXR5cHJpbnRpbmdkcmlua2luZ2ZhY2lsaXR5cmV0dXJuZWRDb250ZW50IG9mZmljZXJzUnVzc2lhbiBnZW5lcmF0ZS04ODU5LTEiaW5kaWNhdGVmYW1pbGlhciBxdWFsaXR5bWFyZ2luOjAgY29udGVudHZpZXdwb3J0Y29udGFjdHMtdGl0bGUiPnBvcnRhYmxlLmxlbmd0aCBlbGlnaWJsZWludm9sdmVzYXRsYW50aWNvbmxvYWQ9ImRlZmF1bHQuc3VwcGxpZWRwYXltZW50c2dsb3NzYXJ5CgpBZnRlciBndWlkYW5jZTwvdGQ+PHRkZW5jb2RpbmdtaWRkbGUiPmNhbWUgdG8gZGlzcGxheXNzY290dGlzaGpvbmF0aGFubWFqb3JpdHl3aWRnZXRzLmNsaW5pY2FsdGhhaWxhbmR0ZWFjaGVyczxoZWFkPgoJYWZmZWN0ZWRzdXBwb3J0c3BvaW50ZXI7dG9TdHJpbmc8L3NtYWxsPm9rbGFob21hd2lsbCBiZSBpbnZlc3RvcjAiIGFsdD0iaG9saWRheXNSZXNvdXJjZWxpY2Vuc2VkICh3aGljaCAuIEFmdGVyIGNvbnNpZGVydmlzaXRpbmdleHBsb3JlcnByaW1hcnkgc2VhcmNoIiBhbmRyb2lkInF1aWNrbHkgbWVldGluZ3Nlc3RpbWF0ZTtyZXR1cm4gO2NvbG9yOiMgaGVpZ2h0PWFwcHJvdmFsLCAmcXVvdDsgY2hlY2tlZC5taW4uanMibWFnbmV0aWM+PC9hPjwvaGZvcmVjYXN0LiBXaGlsZSB0aHVyc2RheWR2ZXJ0aXNlJmVhY3V0ZTtoYXNDbGFzc2V2YWx1YXRlb3JkZXJpbmdleGlzdGluZ3BhdGllbnRzIE9ubGluZSBjb2xvcmFkb09wdGlvbnMiY2FtcGJlbGw8IS0tIGVuZDwvc3Bhbj48PGJyIC8+DQpfcG9wdXBzfHNjaWVuY2VzLCZxdW90OyBxdWFsaXR5IFdpbmRvd3MgYXNzaWduZWRoZWlnaHQ6IDxiIGNsYXNzbGUmcXVvdDsgdmFsdWU9IiBDb21wYW55ZXhhbXBsZXM8aWZyYW1lIGJlbGlldmVzcHJlc2VudHNtYXJzaGFsbHBhcnQgb2YgcHJvcGVybHkpLgoKVGhlIHRheG9ub215bXVjaCBvZiA8L3NwYW4+CiIgZGF0YS1zcnR1Z3XDqnNzY3JvbGxUbyBwcm9qZWN0PGhlYWQ+DQphdHRvcm5leWVtcGhhc2lzc3BvbnNvcnNmYW5jeWJveHdvcmxkJ3Mgd2lsZGxpZmVjaGVja2VkPXNlc3Npb25zcHJvZ3JhbW1weDtmb250LSBQcm9qZWN0am91cm5hbHNiZWxpZXZlZHZhY2F0aW9udGhvbXBzb25saWdodGluZ2FuZCB0aGUgc3BlY2lhbCBib3JkZXI9MGNoZWNraW5nPC90Ym9keT48YnV0dG9uIENvbXBsZXRlY2xlYXJmaXgKPGhlYWQ+CmFydGljbGUgPHNlY3Rpb25maW5kaW5nc3JvbGUgaW4gcG9wdWxhciAgT2N0b2JlcndlYnNpdGUgZXhwb3N1cmV1c2VkIHRvICBjaGFuZ2Vzb3BlcmF0ZWRjbGlja2luZ2VudGVyaW5nY29tbWFuZHNpbmZvcm1lZCBudW1iZXJzICA8L2Rpdj5jcmVhdGluZ29uU3VibWl0bWFyeWxhbmRjb2xsZWdlc2FuYWx5dGljbGlzdGluZ3Njb250YWN0LmxvZ2dlZEluYWR2aXNvcnlzaWJsaW5nc2NvbnRlbnQicyZxdW90OylzLiBUaGlzIHBhY2thZ2VzY2hlY2tib3hzdWdnZXN0c3ByZWduYW50dG9tb3Jyb3dzcGFjaW5nPWljb24ucG5namFwYW5lc2Vjb2RlYmFzZWJ1dHRvbiI+Z2FtYmxpbmdzdWNoIGFzICwgd2hpbGUgPC9zcGFuPiBtaXNzb3VyaXNwb3J0aW5ndG9wOjFweCAuPC9zcGFuPnRlbnNpb25zd2lkdGg9IjJsYXp5bG9hZG5vdmVtYmVydXNlZCBpbiBoZWlnaHQ9ImNyaXB0Ij4KJm5ic3A7PC88dHI+PHRkIGhlaWdodDoyL3Byb2R1Y3Rjb3VudHJ5IGluY2x1ZGUgZm9vdGVyIiAmbHQ7IS0tIHRpdGxlIj48L2pxdWVyeS48L2Zvcm0+CijnroDkvZMpKOe5gemrlClocnZhdHNraWl0YWxpYW5vcm9tw6JuxIN0w7xya8OnZdin2LHYr9mIdGFtYmnDqW5ub3RpY2lhc21lbnNhamVzcGVyc29uYXNkZXJlY2hvc25hY2lvbmFsc2VydmljaW9jb250YWN0b3VzdWFyaW9zcHJvZ3JhbWFnb2JpZXJub2VtcHJlc2FzYW51bmNpb3N2YWxlbmNpYWNvbG9tYmlhZGVzcHXDqXNkZXBvcnRlc3Byb3llY3RvcHJvZHVjdG9ww7pibGljb25vc290cm9zaGlzdG9yaWFwcmVzZW50ZW1pbGxvbmVzbWVkaWFudGVwcmVndW50YWFudGVyaW9ycmVjdXJzb3Nwcm9ibGVtYXNhbnRpYWdvbnVlc3Ryb3NvcGluacOzbmltcHJpbWlybWllbnRyYXNhbcOpcmljYXZlbmRlZG9yc29jaWVkYWRyZXNwZWN0b3JlYWxpemFycmVnaXN0cm9wYWxhYnJhc2ludGVyw6lzZW50b25jZXNlc3BlY2lhbG1pZW1icm9zcmVhbGlkYWRjw7NyZG9iYXphcmFnb3phcMOhZ2luYXNzb2NpYWxlc2Jsb3F1ZWFyZ2VzdGnDs25hbHF1aWxlcnNpc3RlbWFzY2llbmNpYXNjb21wbGV0b3ZlcnNpw7NuY29tcGxldGFlc3R1ZGlvc3DDumJsaWNhb2JqZXRpdm9hbGljYW50ZWJ1c2NhZG9yY2FudGlkYWRlbnRyYWRhc2FjY2lvbmVzYXJjaGl2b3NzdXBlcmlvcm1heW9yw61hYWxlbWFuaWFmdW5jacOzbsO6bHRpbW9zaGFjaWVuZG9hcXVlbGxvc2VkaWNpw7NuZmVybmFuZG9hbWJpZW50ZWZhY2Vib29rbnVlc3RyYXNjbGllbnRlc3Byb2Nlc29zYmFzdGFudGVwcmVzZW50YXJlcG9ydGFyY29uZ3Jlc29wdWJsaWNhcmNvbWVyY2lvY29udHJhdG9qw7N2ZW5lc2Rpc3RyaXRvdMOpY25pY2Fjb25qdW50b2VuZXJnw61hdHJhYmFqYXJhc3R1cmlhc3JlY2llbnRldXRpbGl6YXJib2xldMOtbnNhbHZhZG9yY29ycmVjdGF0cmFiYWpvc3ByaW1lcm9zbmVnb2Npb3NsaWJlcnRhZGRldGFsbGVzcGFudGFsbGFwcsOzeGltb2FsbWVyw61hYW5pbWFsZXNxdWnDqW5lc2NvcmF6w7Nuc2VjY2nDs25idXNjYW5kb29wY2lvbmVzZXh0ZXJpb3Jjb25jZXB0b3RvZGF2w61hZ2FsZXLDrWFlc2NyaWJpcm1lZGljaW5hbGljZW5jaWFjb25zdWx0YWFzcGVjdG9zY3LDrXRpY2Fkw7NsYXJlc2p1c3RpY2lhZGViZXLDoW5wZXLDrW9kb25lY2VzaXRhbWFudGVuZXJwZXF1ZcOxb3JlY2liaWRhdHJpYnVuYWx0ZW5lcmlmZWNhbmNpw7NuY2FuYXJpYXNkZXNjYXJnYWRpdmVyc29zbWFsbG9yY2FyZXF1aWVyZXTDqWNuaWNvZGViZXLDrWF2aXZpZW5kYWZpbmFuemFzYWRlbGFudGVmdW5jaW9uYWNvbnNlam9zZGlmw61jaWxjaXVkYWRlc2FudGlndWFzYXZhbnphZGF0w6lybWlub3VuaWRhZGVzc8OhbmNoZXpjYW1wYcOxYXNvZnRvbmljcmV2aXN0YXNjb250aWVuZXNlY3RvcmVzbW9tZW50b3NmYWN1bHRhZGNyw6lkaXRvZGl2ZXJzYXNzdXB1ZXN0b2ZhY3RvcmVzc2VndW5kb3NwZXF1ZcOxYdCz0L7QtNCw0LXRgdC70LjQtdGB0YLRjNCx0YvQu9C+0LHRi9GC0YzRjdGC0L7QvNCV0YHQu9C40YLQvtCz0L7QvNC10L3Rj9Cy0YHQtdGF0Y3RgtC+0LnQtNCw0LbQtdCx0YvQu9C40LPQvtC00YPQtNC10L3RjNGN0YLQvtGC0LHRi9C70LDRgdC10LHRj9C+0LTQuNC90YHQtdCx0LXQvdCw0LTQvtGB0LDQudGC0YTQvtGC0L7QvdC10LPQvtGB0LLQvtC40YHQstC+0LnQuNCz0YDRi9GC0L7QttC10LLRgdC10LzRgdCy0L7RjtC70LjRiNGM0Y3RgtC40YXQv9C+0LrQsNC00L3QtdC50LTQvtC80LDQvNC40YDQsNC70LjQsdC+0YLQtdC80YPRhdC+0YLRj9C00LLRg9GF0YHQtdGC0LjQu9GO0LTQuNC00LXQu9C+0LzQuNGA0LXRgtC10LHRj9GB0LLQvtC10LLQuNC00LXRh9C10LPQvtGN0YLQuNC80YHRh9C10YLRgtC10LzRi9GG0LXQvdGL0YHRgtCw0LvQstC10LTRjNGC0LXQvNC10LLQvtC00YvRgtC10LHQtdCy0YvRiNC10L3QsNC80LjRgtC40L/QsNGC0L7QvNGD0L/RgNCw0LLQu9C40YbQsNC+0LTQvdCw0LPQvtC00YvQt9C90LDRjtC80L7Qs9GD0LTRgNGD0LPQstGB0LXQudC40LTQtdGC0LrQuNC90L7QvtC00L3QvtC00LXQu9Cw0LTQtdC70LXRgdGA0L7QutC40Y7QvdGP0LLQtdGB0YzQldGB0YLRjNGA0LDQt9Cw0L3QsNGI0LjYp9mE2YTZh9in2YTYqtmK2KzZhdmK2LnYrtin2LXYqdin2YTYsNmK2LnZhNmK2YfYrNiv2YrYr9in2YTYotmG2KfZhNix2K/Yqtit2YPZhdi12YHYrdip2YPYp9mG2KrYp9mE2YTZitmK2YPZiNmG2LTYqNmD2KnZgdmK2YfYp9io2YbYp9iq2K3ZiNin2KHYo9mD2KvYsdiu2YTYp9mE2KfZhNit2KjYr9mE2YrZhNiv2LHZiNiz2KfYtti62LfYqtmD2YjZhtmH2YbYp9mD2LPYp9it2KnZhtin2K/Zitin2YTYt9io2LnZhNmK2YPYtNmD2LHYp9mK2YXZg9mG2YXZhtmH2KfYtNix2YPYqdix2KbZitiz2YbYtNmK2LfZhdin2LDYp9in2YTZgdmG2LTYqNin2KjYqti52KjYsdix2K3Zhdip2YPYp9mB2KnZitmC2YjZhNmF2LHZg9iy2YPZhNmF2KnYo9it2YXYr9mC2YTYqNmK2YrYudmG2YrYtdmI2LHYqdi32LHZitmC2LTYp9ix2YPYrNmI2KfZhNij2K7YsdmJ2YXYudmG2KfYp9io2K3Yq9i52LHZiNi22KjYtNmD2YTZhdiz2KzZhNio2YbYp9mG2K7Yp9mE2K/Zg9iq2KfYqNmD2YTZitip2KjYr9mI2YbYo9mK2LbYp9mK2YjYrNiv2YHYsdmK2YLZg9iq2KjYqtij2YHYttmE2YXYt9io2K7Yp9mD2KvYsdio2KfYsdmD2KfZgdi22YTYp9it2YTZidmG2YHYs9mH2KPZitin2YXYsdiv2YjYr9ij2YbZh9in2K/ZitmG2KfYp9mE2KfZhtmF2LnYsdi22KrYudmE2YXYr9in2K7ZhNmF2YXZg9mGAAAAAAAAAAABAAEAAQABAAIAAgACAAIABAAEAAQABAAAAQIDBAUGBwcGBQQDAgEACAkKCwwNDg8PDg0MCwoJCBAREhMUFRYXFxYVFBMSERAYGRobHB0eHx8eHRwbGhkY/////wAAAAAAAAAA/////wEAAAACAAAAAgAAAAEAAAABAAAAAwAAAP//AAEAAAABAAD//wABAAAACAAIAAgACAAAAAEAAgADAAQABQAGAAdyZXNvdXJjZXNjb3VudHJpZXNxdWVzdGlvbnNlcXVpcG1lbnRjb21tdW5pdHlhdmFpbGFibGVoaWdobGlnaHREVEQveGh0bWxtYXJrZXRpbmdrbm93bGVkZ2Vzb21ldGhpbmdjb250YWluZXJkaXJlY3Rpb25zdWJzY3JpYmVhZHZlcnRpc2VjaGFyYWN0ZXIiIHZhbHVlPSI8L3NlbGVjdD5BdXN0cmFsaWEiIGNsYXNzPSJzaXR1YXRpb25hdXRob3JpdHlmb2xsb3dpbmdwcmltYXJpbHlvcGVyYXRpb25jaGFsbGVuZ2VkZXZlbG9wZWRhbm9ueW1vdXNmdW5jdGlvbiBmdW5jdGlvbnNjb21wYW5pZXNzdHJ1Y3R1cmVhZ3JlZW1lbnQiIHRpdGxlPSJwb3RlbnRpYWxlZHVjYXRpb25hcmd1bWVudHNzZWNvbmRhcnljb3B5cmlnaHRsYW5ndWFnZXNleGNsdXNpdmVjb25kaXRpb248L2Zvcm0+DQpzdGF0ZW1lbnRhdHRlbnRpb25CaW9ncmFwaHl9IGVsc2Ugewpzb2x1dGlvbnN3aGVuIHRoZSBBbmFseXRpY3N0ZW1wbGF0ZXNkYW5nZXJvdXNzYXRlbGxpdGVkb2N1bWVudHNwdWJsaXNoZXJpbXBvcnRhbnRwcm90b3R5cGVpbmZsdWVuY2UmcmFxdW87PC9lZmZlY3RpdmVnZW5lcmFsbHl0cmFuc2Zvcm1iZWF1dGlmdWx0cmFuc3BvcnRvcmdhbml6ZWRwdWJsaXNoZWRwcm9taW5lbnR1bnRpbCB0aGV0aHVtYm5haWxOYXRpb25hbCAuZm9jdXMoKTtvdmVyIHRoZSBtaWdyYXRpb25hbm5vdW5jZWRmb290ZXIiPgpleGNlcHRpb25sZXNzIHRoYW5leHBlbnNpdmVmb3JtYXRpb25mcmFtZXdvcmt0ZXJyaXRvcnluZGljYXRpb25jdXJyZW50bHljbGFzc05hbWVjcml0aWNpc210cmFkaXRpb25lbHNld2hlcmVBbGV4YW5kZXJhcHBvaW50ZWRtYXRlcmlhbHNicm9hZGNhc3RtZW50aW9uZWRhZmZpbGlhdGU8L29wdGlvbj50cmVhdG1lbnRkaWZmZXJlbnQvZGVmYXVsdC5QcmVzaWRlbnRvbmNsaWNrPSJiaW9ncmFwaHlvdGhlcndpc2VwZXJtYW5lbnRGcmFuw6dhaXNIb2xseXdvb2RleHBhbnNpb25zdGFuZGFyZHM8L3N0eWxlPgpyZWR1Y3Rpb25EZWNlbWJlciBwcmVmZXJyZWRDYW1icmlkZ2VvcHBvbmVudHNCdXNpbmVzcyBjb25mdXNpb24+Cjx0aXRsZT5wcmVzZW50ZWRleHBsYWluZWRkb2VzIG5vdCB3b3JsZHdpZGVpbnRlcmZhY2Vwb3NpdGlvbnNuZXdzcGFwZXI8L3RhYmxlPgptb3VudGFpbnNsaWtlIHRoZSBlc3NlbnRpYWxmaW5hbmNpYWxzZWxlY3Rpb25hY3Rpb249Ii9hYmFuZG9uZWRFZHVjYXRpb25wYXJzZUludChzdGFiaWxpdHl1bmFibGUgdG88L3RpdGxlPgpyZWxhdGlvbnNOb3RlIHRoYXRlZmZpY2llbnRwZXJmb3JtZWR0d28geWVhcnNTaW5jZSB0aGV0aGVyZWZvcmV3cmFwcGVyIj5hbHRlcm5hdGVpbmNyZWFzZWRCYXR0bGUgb2ZwZXJjZWl2ZWR0cnlpbmcgdG9uZWNlc3Nhcnlwb3J0cmF5ZWRlbGVjdGlvbnNFbGl6YWJldGg8L2lmcmFtZT5kaXNjb3ZlcnlpbnN1cmFuY2VzLmxlbmd0aDtsZWdlbmRhcnlHZW9ncmFwaHljYW5kaWRhdGVjb3Jwb3JhdGVzb21ldGltZXNzZXJ2aWNlcy5pbmhlcml0ZWQ8L3N0cm9uZz5Db21tdW5pdHlyZWxpZ2lvdXNsb2NhdGlvbnNDb21taXR0ZWVidWlsZGluZ3N0aGUgd29ybGRubyBsb25nZXJiZWdpbm5pbmdyZWZlcmVuY2VjYW5ub3QgYmVmcmVxdWVuY3l0eXBpY2FsbHlpbnRvIHRoZSByZWxhdGl2ZTtyZWNvcmRpbmdwcmVzaWRlbnRpbml0aWFsbHl0ZWNobmlxdWV0aGUgb3RoZXJpdCBjYW4gYmVleGlzdGVuY2V1bmRlcmxpbmV0aGlzIHRpbWV0ZWxlcGhvbmVpdGVtc2NvcGVwcmFjdGljZXNhZHZhbnRhZ2UpO3JldHVybiBGb3Igb3RoZXJwcm92aWRpbmdkZW1vY3JhY3lib3RoIHRoZSBleHRlbnNpdmVzdWZmZXJpbmdzdXBwb3J0ZWRjb21wdXRlcnMgZnVuY3Rpb25wcmFjdGljYWxzYWlkIHRoYXRpdCBtYXkgYmVFbmdsaXNoPC9mcm9tIHRoZSBzY2hlZHVsZWRkb3dubG9hZHM8L2xhYmVsPgpzdXNwZWN0ZWRtYXJnaW46IDBzcGlyaXR1YWw8L2hlYWQ+CgptaWNyb3NvZnRncmFkdWFsbHlkaXNjdXNzZWRoZSBiZWNhbWVleGVjdXRpdmVqcXVlcnkuanNob3VzZWhvbGRjb25maXJtZWRwdXJjaGFzZWRsaXRlcmFsbHlkZXN0cm95ZWR1cCB0byB0aGV2YXJpYXRpb25yZW1haW5pbmdpdCBpcyBub3RjZW50dXJpZXNKYXBhbmVzZSBhbW9uZyB0aGVjb21wbGV0ZWRhbGdvcml0aG1pbnRlcmVzdHNyZWJlbGxpb251bmRlZmluZWRlbmNvdXJhZ2VyZXNpemFibGVpbnZvbHZpbmdzZW5zaXRpdmV1bml2ZXJzYWxwcm92aXNpb24oYWx0aG91Z2hmZWF0dXJpbmdjb25kdWN0ZWQpLCB3aGljaCBjb250aW51ZWQtaGVhZGVyIj5GZWJydWFyeSBudW1lcm91cyBvdmVyZmxvdzpjb21wb25lbnRmcmFnbWVudHNleGNlbGxlbnRjb2xzcGFuPSJ0ZWNobmljYWxuZWFyIHRoZSBBZHZhbmNlZCBzb3VyY2Ugb2ZleHByZXNzZWRIb25nIEtvbmcgRmFjZWJvb2ttdWx0aXBsZSBtZWNoYW5pc21lbGV2YXRpb25vZmZlbnNpdmU8L2Zvcm0+CglzcG9uc29yZWRkb2N1bWVudC5vciAmcXVvdDt0aGVyZSBhcmV0aG9zZSB3aG9tb3ZlbWVudHNwcm9jZXNzZXNkaWZmaWN1bHRzdWJtaXR0ZWRyZWNvbW1lbmRjb252aW5jZWRwcm9tb3RpbmciIHdpZHRoPSIucmVwbGFjZShjbGFzc2ljYWxjb2FsaXRpb25oaXMgZmlyc3RkZWNpc2lvbnNhc3Npc3RhbnRpbmRpY2F0ZWRldm9sdXRpb24td3JhcHBlciJlbm91Z2ggdG9hbG9uZyB0aGVkZWxpdmVyZWQtLT4NCjwhLS1BbWVyaWNhbiBwcm90ZWN0ZWROb3ZlbWJlciA8L3N0eWxlPjxmdXJuaXR1cmVJbnRlcm5ldCAgb25ibHVyPSJzdXNwZW5kZWRyZWNpcGllbnRiYXNlZCBvbiBNb3Jlb3ZlcixhYm9saXNoZWRjb2xsZWN0ZWR3ZXJlIG1hZGVlbW90aW9uYWxlbWVyZ2VuY3luYXJyYXRpdmVhZHZvY2F0ZXNweDtib3JkZXJjb21taXR0ZWRkaXI9Imx0ciJlbXBsb3llZXNyZXNlYXJjaC4gc2VsZWN0ZWRzdWNjZXNzb3JjdXN0b21lcnNkaXNwbGF5ZWRTZXB0ZW1iZXJhZGRDbGFzcyhGYWNlYm9vayBzdWdnZXN0ZWRhbmQgbGF0ZXJvcGVyYXRpbmdlbGFib3JhdGVTb21ldGltZXNJbnN0aXR1dGVjZXJ0YWlubHlpbnN0YWxsZWRmb2xsb3dlcnNKZXJ1c2FsZW10aGV5IGhhdmVjb21wdXRpbmdnZW5lcmF0ZWRwcm92aW5jZXNndWFyYW50ZWVhcmJpdHJhcnlyZWNvZ25pemV3YW50ZWQgdG9weDt3aWR0aDp0aGVvcnkgb2ZiZWhhdmlvdXJXaGlsZSB0aGVlc3RpbWF0ZWRiZWdhbiB0byBpdCBiZWNhbWVtYWduaXR1ZGVtdXN0IGhhdmVtb3JlIHRoYW5EaXJlY3RvcnlleHRlbnNpb25zZWNyZXRhcnluYXR1cmFsbHlvY2N1cnJpbmd2YXJpYWJsZXNnaXZlbiB0aGVwbGF0Zm9ybS48L2xhYmVsPjxmYWlsZWQgdG9jb21wb3VuZHNraW5kcyBvZiBzb2NpZXRpZXNhbG9uZ3NpZGUgLS0mZ3Q7Cgpzb3V0aHdlc3R0aGUgcmlnaHRyYWRpYXRpb25tYXkgaGF2ZSB1bmVzY2FwZShzcG9rZW4gaW4iIGhyZWY9Ii9wcm9ncmFtbWVvbmx5IHRoZSBjb21lIGZyb21kaXJlY3RvcnlidXJpZWQgaW5hIHNpbWlsYXJ0aGV5IHdlcmU8L2ZvbnQ+PC9Ob3J3ZWdpYW5zcGVjaWZpZWRwcm9kdWNpbmdwYXNzZW5nZXIobmV3IERhdGV0ZW1wb3JhcnlmaWN0aW9uYWxBZnRlciB0aGVlcXVhdGlvbnNkb3dubG9hZC5yZWd1bGFybHlkZXZlbG9wZXJhYm92ZSB0aGVsaW5rZWQgdG9waGVub21lbmFwZXJpb2Qgb2Z0b29sdGlwIj5zdWJzdGFuY2VhdXRvbWF0aWNhc3BlY3Qgb2ZBbW9uZyB0aGVjb25uZWN0ZWRlc3RpbWF0ZXNBaXIgRm9yY2VzeXN0ZW0gb2ZvYmplY3RpdmVpbW1lZGlhdGVtYWtpbmcgaXRwYWludGluZ3Njb25xdWVyZWRhcmUgc3RpbGxwcm9jZWR1cmVncm93dGggb2ZoZWFkZWQgYnlFdXJvcGVhbiBkaXZpc2lvbnNtb2xlY3VsZXNmcmFuY2hpc2VpbnRlbnRpb25hdHRyYWN0ZWRjaGlsZGhvb2RhbHNvIHVzZWRkZWRpY2F0ZWRzaW5nYXBvcmVkZWdyZWUgb2ZmYXRoZXIgb2Zjb25mbGljdHM8L2E+PC9wPgpjYW1lIGZyb213ZXJlIHVzZWRub3RlIHRoYXRyZWNlaXZpbmdFeGVjdXRpdmVldmVuIG1vcmVhY2Nlc3MgdG9jb21tYW5kZXJQb2xpdGljYWxtdXNpY2lhbnNkZWxpY2lvdXNwcmlzb25lcnNhZHZlbnQgb2ZVVEYtOCIgLz48IVtDREFUQVsiPkNvbnRhY3RTb3V0aGVybiBiZ2NvbG9yPSJzZXJpZXMgb2YuIEl0IHdhcyBpbiBFdXJvcGVwZXJtaXR0ZWR2YWxpZGF0ZS5hcHBlYXJpbmdvZmZpY2lhbHNzZXJpb3VzbHktbGFuZ3VhZ2Vpbml0aWF0ZWRleHRlbmRpbmdsb25nLXRlcm1pbmZsYXRpb25zdWNoIHRoYXRnZXRDb29raWVtYXJrZWQgYnk8L2J1dHRvbj5pbXBsZW1lbnRidXQgaXQgaXNpbmNyZWFzZXNkb3duIHRoZSByZXF1aXJpbmdkZXBlbmRlbnQtLT4KPCEtLSBpbnRlcnZpZXdXaXRoIHRoZSBjb3BpZXMgb2Zjb25zZW5zdXN3YXMgYnVpbHRWZW5lenVlbGEoZm9ybWVybHl0aGUgc3RhdGVwZXJzb25uZWxzdHJhdGVnaWNmYXZvdXIgb2ZpbnZlbnRpb25XaWtpcGVkaWFjb250aW5lbnR2aXJ0dWFsbHl3aGljaCB3YXNwcmluY2lwbGVDb21wbGV0ZSBpZGVudGljYWxzaG93IHRoYXRwcmltaXRpdmVhd2F5IGZyb21tb2xlY3VsYXJwcmVjaXNlbHlkaXNzb2x2ZWRVbmRlciB0aGV2ZXJzaW9uPSI+Jm5ic3A7PC9JdCBpcyB0aGUgVGhpcyBpcyB3aWxsIGhhdmVvcmdhbmlzbXNzb21lIHRpbWVGcmllZHJpY2h3YXMgZmlyc3R0aGUgb25seSBmYWN0IHRoYXRmb3JtIGlkPSJwcmVjZWRpbmdUZWNobmljYWxwaHlzaWNpc3RvY2N1cnMgaW5uYXZpZ2F0b3JzZWN0aW9uIj5zcGFuIGlkPSJzb3VnaHQgdG9iZWxvdyB0aGVzdXJ2aXZpbmd9PC9zdHlsZT5oaXMgZGVhdGhhcyBpbiB0aGVjYXVzZWQgYnlwYXJ0aWFsbHlleGlzdGluZyB1c2luZyB0aGV3YXMgZ2l2ZW5hIGxpc3Qgb2ZsZXZlbHMgb2Zub3Rpb24gb2ZPZmZpY2lhbCBkaXNtaXNzZWRzY2llbnRpc3RyZXNlbWJsZXNkdXBsaWNhdGVleHBsb3NpdmVyZWNvdmVyZWRhbGwgb3RoZXJnYWxsZXJpZXN7cGFkZGluZzpwZW9wbGUgb2ZyZWdpb24gb2ZhZGRyZXNzZXNhc3NvY2lhdGVpbWcgYWx0PSJpbiBtb2Rlcm5zaG91bGQgYmVtZXRob2Qgb2ZyZXBvcnRpbmd0aW1lc3RhbXBuZWVkZWQgdG90aGUgR3JlYXRyZWdhcmRpbmdzZWVtZWQgdG92aWV3ZWQgYXNpbXBhY3Qgb25pZGVhIHRoYXR0aGUgV29ybGRoZWlnaHQgb2ZleHBhbmRpbmdUaGVzZSBhcmVjdXJyZW50Ij5jYXJlZnVsbHltYWludGFpbnNjaGFyZ2Ugb2ZDbGFzc2ljYWxhZGRyZXNzZWRwcmVkaWN0ZWRvd25lcnNoaXA8ZGl2IGlkPSJyaWdodCI+DQpyZXNpZGVuY2VsZWF2ZSB0aGVjb250ZW50Ij5hcmUgb2Z0ZW4gIH0pKCk7DQpwcm9iYWJseSBQcm9mZXNzb3ItYnV0dG9uIiByZXNwb25kZWRzYXlzIHRoYXRoYWQgdG8gYmVwbGFjZWQgaW5IdW5nYXJpYW5zdGF0dXMgb2ZzZXJ2ZXMgYXNVbml2ZXJzYWxleGVjdXRpb25hZ2dyZWdhdGVmb3Igd2hpY2hpbmZlY3Rpb25hZ3JlZWQgdG9ob3dldmVyLCBwb3B1bGFyIj5wbGFjZWQgb25jb25zdHJ1Y3RlbGVjdG9yYWxzeW1ib2wgb2ZpbmNsdWRpbmdyZXR1cm4gdG9hcmNoaXRlY3RDaHJpc3RpYW5wcmV2aW91cyBsaXZpbmcgaW5lYXNpZXIgdG9wcm9mZXNzb3IKJmx0OyEtLSBlZmZlY3Qgb2ZhbmFseXRpY3N3YXMgdGFrZW53aGVyZSB0aGV0b29rIG92ZXJiZWxpZWYgaW5BZnJpa2FhbnNhcyBmYXIgYXNwcmV2ZW50ZWR3b3JrIHdpdGhhIHNwZWNpYWw8ZmllbGRzZXRDaHJpc3RtYXNSZXRyaWV2ZWQKCkluIHRoZSBiYWNrIGludG9ub3J0aGVhc3RtYWdhemluZXM+PHN0cm9uZz5jb21taXR0ZWVnb3Zlcm5pbmdncm91cHMgb2ZzdG9yZWQgaW5lc3RhYmxpc2hhIGdlbmVyYWxpdHMgZmlyc3R0aGVpciBvd25wb3B1bGF0ZWRhbiBvYmplY3RDYXJpYmJlYW5hbGxvdyB0aGVkaXN0cmljdHN3aXNjb25zaW5sb2NhdGlvbi47IHdpZHRoOiBpbmhhYml0ZWRTb2NpYWxpc3RKYW51YXJ5IDE8L2Zvb3Rlcj5zaW1pbGFybHljaG9pY2Ugb2Z0aGUgc2FtZSBzcGVjaWZpYyBidXNpbmVzcyBUaGUgZmlyc3QubGVuZ3RoOyBkZXNpcmUgdG9kZWFsIHdpdGhzaW5jZSB0aGV1c2VyQWdlbnRjb25jZWl2ZWRpbmRleC5waHBhcyAmcXVvdDtlbmdhZ2UgaW5yZWNlbnRseSxmZXcgeWVhcnN3ZXJlIGFsc28KPGhlYWQ+CjxlZGl0ZWQgYnlhcmUga25vd25jaXRpZXMgaW5hY2Nlc3NrZXljb25kZW1uZWRhbHNvIGhhdmVzZXJ2aWNlcyxmYW1pbHkgb2ZTY2hvb2wgb2Zjb252ZXJ0ZWRuYXR1cmUgb2YgbGFuZ3VhZ2VtaW5pc3RlcnM8L29iamVjdD50aGVyZSBpcyBhIHBvcHVsYXJzZXF1ZW5jZXNhZHZvY2F0ZWRUaGV5IHdlcmVhbnkgb3RoZXJsb2NhdGlvbj1lbnRlciB0aGVtdWNoIG1vcmVyZWZsZWN0ZWR3YXMgbmFtZWRvcmlnaW5hbCBhIHR5cGljYWx3aGVuIHRoZXllbmdpbmVlcnNjb3VsZCBub3RyZXNpZGVudHN3ZWRuZXNkYXl0aGUgdGhpcmQgcHJvZHVjdHNKYW51YXJ5IDJ3aGF0IHRoZXlhIGNlcnRhaW5yZWFjdGlvbnNwcm9jZXNzb3JhZnRlciBoaXN0aGUgbGFzdCBjb250YWluZWQiPjwvZGl2Pgo8L2E+PC90ZD5kZXBlbmQgb25zZWFyY2giPgpwaWVjZXMgb2Zjb21wZXRpbmdSZWZlcmVuY2V0ZW5uZXNzZWV3aGljaCBoYXMgdmVyc2lvbj08L3NwYW4+IDw8L2hlYWRlcj5naXZlcyB0aGVoaXN0b3JpYW52YWx1ZT0iIj5wYWRkaW5nOjB2aWV3IHRoYXR0b2dldGhlcix0aGUgbW9zdCB3YXMgZm91bmRzdWJzZXQgb2ZhdHRhY2sgb25jaGlsZHJlbixwb2ludHMgb2ZwZXJzb25hbCBwb3NpdGlvbjphbGxlZ2VkbHlDbGV2ZWxhbmR3YXMgbGF0ZXJhbmQgYWZ0ZXJhcmUgZ2l2ZW53YXMgc3RpbGxzY3JvbGxpbmdkZXNpZ24gb2ZtYWtlcyB0aGVtdWNoIGxlc3NBbWVyaWNhbnMuCgpBZnRlciAsIGJ1dCB0aGVNdXNldW0gb2Zsb3Vpc2lhbmEoZnJvbSB0aGVtaW5uZXNvdGFwYXJ0aWNsZXNhIHByb2Nlc3NEb21pbmljYW52b2x1bWUgb2ZyZXR1cm5pbmdkZWZlbnNpdmUwMHB4fHJpZ2htYWRlIGZyb21tb3VzZW92ZXIiIHN0eWxlPSJzdGF0ZXMgb2Yod2hpY2ggaXNjb250aW51ZXNGcmFuY2lzY29idWlsZGluZyB3aXRob3V0IGF3aXRoIHNvbWV3aG8gd291bGRhIGZvcm0gb2ZhIHBhcnQgb2ZiZWZvcmUgaXRrbm93biBhcyAgU2VydmljZXNsb2NhdGlvbiBhbmQgb2Z0ZW5tZWFzdXJpbmdhbmQgaXQgaXNwYXBlcmJhY2t2YWx1ZXMgb2YNCjx0aXRsZT49IHdpbmRvdy5kZXRlcm1pbmVlciZxdW90OyBwbGF5ZWQgYnlhbmQgZWFybHk8L2NlbnRlcj5mcm9tIHRoaXN0aGUgdGhyZWVwb3dlciBhbmRvZiAmcXVvdDtpbm5lckhUTUw8YSBocmVmPSJ5OmlubGluZTtDaHVyY2ggb2Z0aGUgZXZlbnR2ZXJ5IGhpZ2hvZmZpY2lhbCAtaGVpZ2h0OiBjb250ZW50PSIvY2dpLWJpbi90byBjcmVhdGVhZnJpa2FhbnNlc3BlcmFudG9mcmFuw6dhaXNsYXR2aWXFoXVsaWV0dXZpxbPEjGXFoXRpbmHEjWXFoXRpbmHguYTguJfguKLml6XmnKzoqp7nroDkvZPlrZfnuYHpq5TlrZftlZzqta3slrTkuLrku4DkuYjorqHnrpfmnLrnrJTorrDmnKzoqI7oq5bljYDmnI3liqHlmajkupLogZTnvZHmiL/lnLDkuqfkv7HkuZDpg6jlh7rniYjnpL7mjpLooYzmppzpg6jokL3moLzov5vkuIDmraXmlK/ku5jlrp3pqozor4HnoIHlp5TlkZjkvJrmlbDmja7lupPmtojotLnogIXlip7lhazlrqTorqjorrrljLrmt7HlnLPluILmkq3mlL7lmajljJfkuqzluILlpKflrabnlJ/otormnaXotornrqHnkIblkZjkv6Hmga/nvZFzZXJ2aWNpb3NhcnTDrWN1bG9hcmdlbnRpbmFiYXJjZWxvbmFjdWFscXVpZXJwdWJsaWNhZG9wcm9kdWN0b3Nwb2zDrXRpY2FyZXNwdWVzdGF3aWtpcGVkaWFzaWd1aWVudGViw7pzcXVlZGFjb211bmlkYWRzZWd1cmlkYWRwcmluY2lwYWxwcmVndW50YXNjb250ZW5pZG9yZXNwb25kZXJ2ZW5lenVlbGFwcm9ibGVtYXNkaWNpZW1icmVyZWxhY2nDs25ub3ZpZW1icmVzaW1pbGFyZXNwcm95ZWN0b3Nwcm9ncmFtYXNpbnN0aXR1dG9hY3RpdmlkYWRlbmN1ZW50cmFlY29ub23DrWFpbcOhZ2VuZXNjb250YWN0YXJkZXNjYXJnYXJuZWNlc2FyaW9hdGVuY2nDs250ZWzDqWZvbm9jb21pc2nDs25jYW5jaW9uZXNjYXBhY2lkYWRlbmNvbnRyYXJhbsOhbGlzaXNmYXZvcml0b3N0w6lybWlub3Nwcm92aW5jaWFldGlxdWV0YXNlbGVtZW50b3NmdW5jaW9uZXNyZXN1bHRhZG9jYXLDoWN0ZXJwcm9waWVkYWRwcmluY2lwaW9uZWNlc2lkYWRtdW5pY2lwYWxjcmVhY2nDs25kZXNjYXJnYXNwcmVzZW5jaWFjb21lcmNpYWxvcGluaW9uZXNlamVyY2ljaW9lZGl0b3JpYWxzYWxhbWFuY2Fnb256w6FsZXpkb2N1bWVudG9wZWzDrWN1bGFyZWNpZW50ZXNnZW5lcmFsZXN0YXJyYWdvbmFwcsOhY3RpY2Fub3ZlZGFkZXNwcm9wdWVzdGFwYWNpZW50ZXN0w6ljbmljYXNvYmpldGl2b3Njb250YWN0b3PgpK7gpYfgpILgpLLgpL/gpI/gpLngpYjgpILgpJfgpK/gpL7gpLjgpL7gpKXgpI/gpLXgpILgpLDgpLngpYfgpJXgpYvgpIjgpJXgpYHgpJvgpLDgpLngpL7gpKzgpL7gpKbgpJXgpLngpL7gpLjgpK3gpYDgpLngpYHgpI/gpLDgpLngpYDgpK7gpYjgpILgpKbgpL/gpKjgpKzgpL7gpKRkaXBsb2RvY3PgpLjgpK7gpK/gpLDgpYLgpKrgpKjgpL7gpK7gpKrgpKTgpL7gpKvgpL/gpLDgpJTgpLjgpKTgpKTgpLDgpLngpLLgpYvgpJfgpLngpYHgpIbgpKzgpL7gpLDgpKbgpYfgpLbgpLngpYHgpIjgpJbgpYfgpLLgpK/gpKbgpL/gpJXgpL7gpK7gpLXgpYfgpKzgpKTgpYDgpKjgpKzgpYDgpJrgpK7gpYzgpKTgpLjgpL7gpLLgpLLgpYfgpJbgpJzgpYngpKzgpK7gpKbgpKbgpKTgpKXgpL7gpKjgpLngpYDgpLbgpLngpLDgpIXgpLLgpJfgpJXgpK3gpYDgpKjgpJfgpLDgpKrgpL7gpLjgpLDgpL7gpKTgpJXgpL/gpI/gpIngpLjgpYfgpJfgpK/gpYDgpLngpYLgpIHgpIbgpJfgpYfgpJ/gpYDgpK7gpJbgpYvgpJzgpJXgpL7gpLDgpIXgpK3gpYDgpJfgpK/gpYfgpKTgpYHgpK7gpLXgpYvgpJ/gpKbgpYfgpILgpIXgpJfgpLDgpJDgpLjgpYfgpK7gpYfgpLLgpLLgpJfgpL7gpLngpL7gpLLgpIrgpKrgpLDgpJrgpL7gpLDgpJDgpLjgpL7gpKbgpYfgpLDgpJzgpL/gpLjgpKbgpL/gpLLgpKzgpILgpKbgpKzgpKjgpL7gpLngpYLgpILgpLLgpL7gpJbgpJzgpYDgpKTgpKzgpJ/gpKjgpK7gpL/gpLLgpIfgpLjgpYfgpIbgpKjgpYfgpKjgpK/gpL7gpJXgpYHgpLLgpLLgpYngpJfgpK3gpL7gpJfgpLDgpYfgpLLgpJzgpJfgpLngpLDgpL7gpK7gpLLgpJfgpYfgpKrgpYfgpJzgpLngpL7gpKXgpIfgpLjgpYDgpLjgpLngpYDgpJXgpLLgpL7gpKDgpYDgpJXgpLngpL7gpIHgpKbgpYLgpLDgpKTgpLngpKTgpLjgpL7gpKTgpK/gpL7gpKbgpIbgpK/gpL7gpKrgpL7gpJXgpJXgpYzgpKjgpLbgpL7gpK7gpKbgpYfgpJbgpK/gpLngpYDgpLDgpL7gpK/gpJbgpYHgpKbgpLLgpJfgpYBjYXRlZ29yaWVzZXhwZXJpZW5jZTwvdGl0bGU+DQpDb3B5cmlnaHQgamF2YXNjcmlwdGNvbmRpdGlvbnNldmVyeXRoaW5nPHAgY2xhc3M9InRlY2hub2xvZ3liYWNrZ3JvdW5kPGEgY2xhc3M9Im1hbmFnZW1lbnQmY29weTsgMjAxamF2YVNjcmlwdGNoYXJhY3RlcnNicmVhZGNydW1idGhlbXNlbHZlc2hvcml6b250YWxnb3Zlcm5tZW50Q2FsaWZvcm5pYWFjdGl2aXRpZXNkaXNjb3ZlcmVkTmF2aWdhdGlvbnRyYW5zaXRpb25jb25uZWN0aW9ubmF2aWdhdGlvbmFwcGVhcmFuY2U8L3RpdGxlPjxtY2hlY2tib3giIHRlY2huaXF1ZXNwcm90ZWN0aW9uYXBwYXJlbnRseWFzIHdlbGwgYXN1bnQnLCAnVUEtcmVzb2x1dGlvbm9wZXJhdGlvbnN0ZWxldmlzaW9udHJhbnNsYXRlZFdhc2hpbmd0b25uYXZpZ2F0b3IuID0gd2luZG93LmltcHJlc3Npb24mbHQ7YnImZ3Q7bGl0ZXJhdHVyZXBvcHVsYXRpb25iZ2NvbG9yPSIjZXNwZWNpYWxseSBjb250ZW50PSJwcm9kdWN0aW9ubmV3c2xldHRlcnByb3BlcnRpZXNkZWZpbml0aW9ubGVhZGVyc2hpcFRlY2hub2xvZ3lQYXJsaWFtZW50Y29tcGFyaXNvbnVsIGNsYXNzPSIuaW5kZXhPZigiY29uY2x1c2lvbmRpc2N1c3Npb25jb21wb25lbnRzYmlvbG9naWNhbFJldm9sdXRpb25fY29udGFpbmVydW5kZXJzdG9vZG5vc2NyaXB0PjxwZXJtaXNzaW9uZWFjaCBvdGhlcmF0bW9zcGhlcmUgb25mb2N1cz0iPGZvcm0gaWQ9InByb2Nlc3Npbmd0aGlzLnZhbHVlZ2VuZXJhdGlvbkNvbmZlcmVuY2VzdWJzZXF1ZW50d2VsbC1rbm93bnZhcmlhdGlvbnNyZXB1dGF0aW9ucGhlbm9tZW5vbmRpc2NpcGxpbmVsb2dvLnBuZyIgKGRvY3VtZW50LGJvdW5kYXJpZXNleHByZXNzaW9uc2V0dGxlbWVudEJhY2tncm91bmRvdXQgb2YgdGhlZW50ZXJwcmlzZSgiaHR0cHM6IiB1bmVzY2FwZSgicGFzc3dvcmQiIGRlbW9jcmF0aWM8YSBocmVmPSIvd3JhcHBlciI+Cm1lbWJlcnNoaXBsaW5ndWlzdGljcHg7cGFkZGluZ3BoaWxvc29waHlhc3Npc3RhbmNldW5pdmVyc2l0eWZhY2lsaXRpZXNyZWNvZ25pemVkcHJlZmVyZW5jZWlmICh0eXBlb2ZtYWludGFpbmVkdm9jYWJ1bGFyeWh5cG90aGVzaXMuc3VibWl0KCk7JmFtcDtuYnNwO2Fubm90YXRpb25iZWhpbmQgdGhlRm91bmRhdGlvbnB1Ymxpc2hlciJhc3N1bXB0aW9uaW50cm9kdWNlZGNvcnJ1cHRpb25zY2llbnRpc3RzZXhwbGljaXRseWluc3RlYWQgb2ZkaW1lbnNpb25zIG9uQ2xpY2s9ImNvbnNpZGVyZWRkZXBhcnRtZW50b2NjdXBhdGlvbnNvb24gYWZ0ZXJpbnZlc3RtZW50cHJvbm91bmNlZGlkZW50aWZpZWRleHBlcmltZW50TWFuYWdlbWVudGdlb2dyYXBoaWMiIGhlaWdodD0ibGluayByZWw9Ii5yZXBsYWNlKC9kZXByZXNzaW9uY29uZmVyZW5jZXB1bmlzaG1lbnRlbGltaW5hdGVkcmVzaXN0YW5jZWFkYXB0YXRpb25vcHBvc2l0aW9ud2VsbCBrbm93bnN1cHBsZW1lbnRkZXRlcm1pbmVkaDEgY2xhc3M9IjBweDttYXJnaW5tZWNoYW5pY2Fsc3RhdGlzdGljc2NlbGVicmF0ZWRHb3Zlcm5tZW50CgpEdXJpbmcgdGRldmVsb3BlcnNhcnRpZmljaWFsZXF1aXZhbGVudG9yaWdpbmF0ZWRDb21taXNzaW9uYXR0YWNobWVudDxzcGFuIGlkPSJ0aGVyZSB3ZXJlTmVkZXJsYW5kc2JleW9uZCB0aGVyZWdpc3RlcmVkam91cm5hbGlzdGZyZXF1ZW50bHlhbGwgb2YgdGhlbGFuZz0iZW4iIDwvc3R5bGU+DQphYnNvbHV0ZTsgc3VwcG9ydGluZ2V4dHJlbWVseSBtYWluc3RyZWFtPC9zdHJvbmc+IHBvcHVsYXJpdHllbXBsb3ltZW50PC90YWJsZT4NCiBjb2xzcGFuPSI8L2Zvcm0+CiAgY29udmVyc2lvbmFib3V0IHRoZSA8L3A+PC9kaXY+aW50ZWdyYXRlZCIgbGFuZz0iZW5Qb3J0dWd1ZXNlc3Vic3RpdHV0ZWluZGl2aWR1YWxpbXBvc3NpYmxlbXVsdGltZWRpYWFsbW9zdCBhbGxweCBzb2xpZCAjYXBhcnQgZnJvbXN1YmplY3QgdG9pbiBFbmdsaXNoY3JpdGljaXplZGV4Y2VwdCBmb3JndWlkZWxpbmVzb3JpZ2luYWxseXJlbWFya2FibGV0aGUgc2Vjb25kaDIgY2xhc3M9IjxhIHRpdGxlPSIoaW5jbHVkaW5ncGFyYW1ldGVyc3Byb2hpYml0ZWQ9ICJodHRwOi8vZGljdGlvbmFyeXBlcmNlcHRpb25yZXZvbHV0aW9uZm91bmRhdGlvbnB4O2hlaWdodDpzdWNjZXNzZnVsc3VwcG9ydGVyc21pbGxlbm5pdW1oaXMgZmF0aGVydGhlICZxdW90O25vLXJlcGVhdDtjb21tZXJjaWFsaW5kdXN0cmlhbGVuY291cmFnZWRhbW91bnQgb2YgdW5vZmZpY2lhbGVmZmljaWVuY3lSZWZlcmVuY2VzY29vcmRpbmF0ZWRpc2NsYWltZXJleHBlZGl0aW9uZGV2ZWxvcGluZ2NhbGN1bGF0ZWRzaW1wbGlmaWVkbGVnaXRpbWF0ZXN1YnN0cmluZygwIiBjbGFzcz0iY29tcGxldGVseWlsbHVzdHJhdGVmaXZlIHllYXJzaW5zdHJ1bWVudFB1Ymxpc2hpbmcxIiBjbGFzcz0icHN5Y2hvbG9neWNvbmZpZGVuY2VudW1iZXIgb2YgYWJzZW5jZSBvZmZvY3VzZWQgb25qb2luZWQgdGhlc3RydWN0dXJlc3ByZXZpb3VzbHk+PC9pZnJhbWU+b25jZSBhZ2FpbmJ1dCByYXRoZXJpbW1pZ3JhbnRzb2YgY291cnNlLGEgZ3JvdXAgb2ZMaXRlcmF0dXJlVW5saWtlIHRoZTwvYT4mbmJzcDsKZnVuY3Rpb24gaXQgd2FzIHRoZUNvbnZlbnRpb25hdXRvbW9iaWxlUHJvdGVzdGFudGFnZ3Jlc3NpdmVhZnRlciB0aGUgU2ltaWxhcmx5LCIgLz48L2Rpdj5jb2xsZWN0aW9uDQpmdW5jdGlvbnZpc2liaWxpdHl0aGUgdXNlIG9mdm9sdW50ZWVyc2F0dHJhY3Rpb251bmRlciB0aGUgdGhyZWF0ZW5lZCo8IVtDREFUQVtpbXBvcnRhbmNlaW4gZ2VuZXJhbHRoZSBsYXR0ZXI8L2Zvcm0+CjwvLmluZGV4T2YoJ2kgPSAwOyBpIDxkaWZmZXJlbmNlZGV2b3RlZCB0b3RyYWRpdGlvbnNzZWFyY2ggZm9ydWx0aW1hdGVseXRvdXJuYW1lbnRhdHRyaWJ1dGVzc28tY2FsbGVkIH0KPC9zdHlsZT5ldmFsdWF0aW9uZW1waGFzaXplZGFjY2Vzc2libGU8L3NlY3Rpb24+c3VjY2Vzc2lvbmFsb25nIHdpdGhNZWFud2hpbGUsaW5kdXN0cmllczwvYT48YnIgLz5oYXMgYmVjb21lYXNwZWN0cyBvZlRlbGV2aXNpb25zdWZmaWNpZW50YmFza2V0YmFsbGJvdGggc2lkZXNjb250aW51aW5nYW4gYXJ0aWNsZTxpbWcgYWx0PSJhZHZlbnR1cmVzaGlzIG1vdGhlcm1hbmNoZXN0ZXJwcmluY2lwbGVzcGFydGljdWxhcmNvbW1lbnRhcnllZmZlY3RzIG9mZGVjaWRlZCB0byI+PHN0cm9uZz5wdWJsaXNoZXJzSm91cm5hbCBvZmRpZmZpY3VsdHlmYWNpbGl0YXRlYWNjZXB0YWJsZXN0eWxlLmNzcyIJZnVuY3Rpb24gaW5ub3ZhdGlvbj5Db3B5cmlnaHRzaXR1YXRpb25zd291bGQgaGF2ZWJ1c2luZXNzZXNEaWN0aW9uYXJ5c3RhdGVtZW50c29mdGVuIHVzZWRwZXJzaXN0ZW50aW4gSmFudWFyeWNvbXByaXNpbmc8L3RpdGxlPgoJZGlwbG9tYXRpY2NvbnRhaW5pbmdwZXJmb3JtaW5nZXh0ZW5zaW9uc21heSBub3QgYmVjb25jZXB0IG9mIG9uY2xpY2s9Ikl0IGlzIGFsc29maW5hbmNpYWwgbWFraW5nIHRoZUx1eGVtYm91cmdhZGRpdGlvbmFsYXJlIGNhbGxlZGVuZ2FnZWQgaW4ic2NyaXB0Iik7YnV0IGl0IHdhc2VsZWN0cm9uaWNvbnN1Ym1pdD0iCjwhLS0gRW5kIGVsZWN0cmljYWxvZmZpY2lhbGx5c3VnZ2VzdGlvbnRvcCBvZiB0aGV1bmxpa2UgdGhlQXVzdHJhbGlhbk9yaWdpbmFsbHlyZWZlcmVuY2VzCjwvaGVhZD4NCnJlY29nbmlzZWRpbml0aWFsaXplbGltaXRlZCB0b0FsZXhhbmRyaWFyZXRpcmVtZW50QWR2ZW50dXJlc2ZvdXIgeWVhcnMKCiZsdDshLS0gaW5jcmVhc2luZ2RlY29yYXRpb25oMyBjbGFzcz0ib3JpZ2lucyBvZm9ibGlnYXRpb25yZWd1bGF0aW9uY2xhc3NpZmllZChmdW5jdGlvbihhZHZhbnRhZ2VzYmVpbmcgdGhlIGhpc3RvcmlhbnM8YmFzZSBocmVmcmVwZWF0ZWRseXdpbGxpbmcgdG9jb21wYXJhYmxlZGVzaWduYXRlZG5vbWluYXRpb25mdW5jdGlvbmFsaW5zaWRlIHRoZXJldmVsYXRpb25lbmQgb2YgdGhlcyBmb3IgdGhlIGF1dGhvcml6ZWRyZWZ1c2VkIHRvdGFrZSBwbGFjZWF1dG9ub21vdXNjb21wcm9taXNlcG9saXRpY2FsIHJlc3RhdXJhbnR0d28gb2YgdGhlRmVicnVhcnkgMnF1YWxpdHkgb2Zzd2ZvYmplY3QudW5kZXJzdGFuZG5lYXJseSBhbGx3cml0dGVuIGJ5aW50ZXJ2aWV3cyIgd2lkdGg9IjF3aXRoZHJhd2FsZmxvYXQ6bGVmdGlzIHVzdWFsbHljYW5kaWRhdGVzbmV3c3BhcGVyc215c3RlcmlvdXNEZXBhcnRtZW50YmVzdCBrbm93bnBhcmxpYW1lbnRzdXBwcmVzc2VkY29udmVuaWVudHJlbWVtYmVyZWRkaWZmZXJlbnQgc3lzdGVtYXRpY2hhcyBsZWQgdG9wcm9wYWdhbmRhY29udHJvbGxlZGluZmx1ZW5jZXNjZXJlbW9uaWFscHJvY2xhaW1lZFByb3RlY3Rpb25saSBjbGFzcz0iU2NpZW50aWZpY2NsYXNzPSJuby10cmFkZW1hcmtzbW9yZSB0aGFuIHdpZGVzcHJlYWRMaWJlcmF0aW9udG9vayBwbGFjZWRheSBvZiB0aGVhcyBsb25nIGFzaW1wcmlzb25lZEFkZGl0aW9uYWwKPGhlYWQ+CjxtTGFib3JhdG9yeU5vdmVtYmVyIDJleGNlcHRpb25zSW5kdXN0cmlhbHZhcmlldHkgb2ZmbG9hdDogbGVmRHVyaW5nIHRoZWFzc2Vzc21lbnRoYXZlIGJlZW4gZGVhbHMgd2l0aFN0YXRpc3RpY3NvY2N1cnJlbmNlL3VsPjwvZGl2PmNsZWFyZml4Ij50aGUgcHVibGljbWFueSB5ZWFyc3doaWNoIHdlcmVvdmVyIHRpbWUsc3lub255bW91c2NvbnRlbnQiPgpwcmVzdW1hYmx5aGlzIGZhbWlseXVzZXJBZ2VudC51bmV4cGVjdGVkaW5jbHVkaW5nIGNoYWxsZW5nZWRhIG1pbm9yaXR5dW5kZWZpbmVkImJlbG9uZ3MgdG90YWtlbiBmcm9taW4gT2N0b2JlcnBvc2l0aW9uOiBzYWlkIHRvIGJlcmVsaWdpb3VzIEZlZGVyYXRpb24gcm93c3Bhbj0ib25seSBhIGZld21lYW50IHRoYXRsZWQgdG8gdGhlLS0+DQo8ZGl2IDxmaWVsZHNldD5BcmNoYmlzaG9wIGNsYXNzPSJub2JlaW5nIHVzZWRhcHByb2FjaGVzcHJpdmlsZWdlc25vc2NyaXB0PgpyZXN1bHRzIGlubWF5IGJlIHRoZUVhc3RlciBlZ2dtZWNoYW5pc21zcmVhc29uYWJsZVBvcHVsYXRpb25Db2xsZWN0aW9uc2VsZWN0ZWQiPm5vc2NyaXB0Pg0vaW5kZXgucGhwYXJyaXZhbCBvZi1qc3NkaycpKTttYW5hZ2VkIHRvaW5jb21wbGV0ZWNhc3VhbHRpZXNjb21wbGV0aW9uQ2hyaXN0aWFuc1NlcHRlbWJlciBhcml0aG1ldGljcHJvY2VkdXJlc21pZ2h0IGhhdmVQcm9kdWN0aW9uaXQgYXBwZWFyc1BoaWxvc29waHlmcmllbmRzaGlwbGVhZGluZyB0b2dpdmluZyB0aGV0b3dhcmQgdGhlZ3VhcmFudGVlZGRvY3VtZW50ZWRjb2xvcjojMDAwdmlkZW8gZ2FtZWNvbW1pc3Npb25yZWZsZWN0aW5nY2hhbmdlIHRoZWFzc29jaWF0ZWRzYW5zLXNlcmlmb25rZXlwcmVzczsgcGFkZGluZzpIZSB3YXMgdGhldW5kZXJseWluZ3R5cGljYWxseSAsIGFuZCB0aGUgc3JjRWxlbWVudHN1Y2Nlc3NpdmVzaW5jZSB0aGUgc2hvdWxkIGJlIG5ldHdvcmtpbmdhY2NvdW50aW5ndXNlIG9mIHRoZWxvd2VyIHRoYW5zaG93cyB0aGF0PC9zcGFuPgoJCWNvbXBsYWludHNjb250aW51b3VzcXVhbnRpdGllc2FzdHJvbm9tZXJoZSBkaWQgbm90ZHVlIHRvIGl0c2FwcGxpZWQgdG9hbiBhdmVyYWdlZWZmb3J0cyB0b3RoZSBmdXR1cmVhdHRlbXB0IHRvVGhlcmVmb3JlLGNhcGFiaWxpdHlSZXB1YmxpY2Fud2FzIGZvcm1lZEVsZWN0cm9uaWNraWxvbWV0ZXJzY2hhbGxlbmdlc3B1Ymxpc2hpbmd0aGUgZm9ybWVyaW5kaWdlbm91c2RpcmVjdGlvbnNzdWJzaWRpYXJ5Y29uc3BpcmFjeWRldGFpbHMgb2ZhbmQgaW4gdGhlYWZmb3JkYWJsZXN1YnN0YW5jZXNyZWFzb24gZm9yY29udmVudGlvbml0ZW10eXBlPSJhYnNvbHV0ZWx5c3VwcG9zZWRseXJlbWFpbmVkIGFhdHRyYWN0aXZldHJhdmVsbGluZ3NlcGFyYXRlbHlmb2N1c2VzIG9uZWxlbWVudGFyeWFwcGxpY2FibGVmb3VuZCB0aGF0c3R5bGVzaGVldG1hbnVzY3JpcHRzdGFuZHMgZm9yIG5vLXJlcGVhdChzb21ldGltZXNDb21tZXJjaWFsaW4gQW1lcmljYXVuZGVydGFrZW5xdWFydGVyIG9mYW4gZXhhbXBsZXBlcnNvbmFsbHlpbmRleC5waHA/PC9idXR0b24+CnBlcmNlbnRhZ2ViZXN0LWtub3duY3JlYXRpbmcgYSIgZGlyPSJsdHJMaWV1dGVuYW50CjxkaXYgaWQ9InRoZXkgd291bGRhYmlsaXR5IG9mbWFkZSB1cCBvZm5vdGVkIHRoYXRjbGVhciB0aGF0YXJndWUgdGhhdHRvIGFub3RoZXJjaGlsZHJlbidzcHVycG9zZSBvZmZvcm11bGF0ZWRiYXNlZCB1cG9udGhlIHJlZ2lvbnN1YmplY3Qgb2ZwYXNzZW5nZXJzcG9zc2Vzc2lvbi4KCkluIHRoZSBCZWZvcmUgdGhlYWZ0ZXJ3YXJkc2N1cnJlbnRseSBhY3Jvc3MgdGhlc2NpZW50aWZpY2NvbW11bml0eS5jYXBpdGFsaXNtaW4gR2VybWFueXJpZ2h0LXdpbmd0aGUgc3lzdGVtU29jaWV0eSBvZnBvbGl0aWNpYW5kaXJlY3Rpb246d2VudCBvbiB0b3JlbW92YWwgb2YgTmV3IFlvcmsgYXBhcnRtZW50c2luZGljYXRpb25kdXJpbmcgdGhldW5sZXNzIHRoZWhpc3RvcmljYWxoYWQgYmVlbiBhZGVmaW5pdGl2ZWluZ3JlZGllbnRhdHRlbmRhbmNlQ2VudGVyIGZvcnByb21pbmVuY2VyZWFkeVN0YXRlc3RyYXRlZ2llc2J1dCBpbiB0aGVhcyBwYXJ0IG9mY29uc3RpdHV0ZWNsYWltIHRoYXRsYWJvcmF0b3J5Y29tcGF0aWJsZWZhaWx1cmUgb2YsIHN1Y2ggYXMgYmVnYW4gd2l0aHVzaW5nIHRoZSB0byBwcm92aWRlZmVhdHVyZSBvZmZyb20gd2hpY2gvIiBjbGFzcz0iZ2VvbG9naWNhbHNldmVyYWwgb2ZkZWxpYmVyYXRlaW1wb3J0YW50IGhvbGRzIHRoYXRpbmcmcXVvdDsgdmFsaWduPXRvcHRoZSBHZXJtYW5vdXRzaWRlIG9mbmVnb3RpYXRlZGhpcyBjYXJlZXJzZXBhcmF0aW9uaWQ9InNlYXJjaHdhcyBjYWxsZWR0aGUgZm91cnRocmVjcmVhdGlvbm90aGVyIHRoYW5wcmV2ZW50aW9ud2hpbGUgdGhlIGVkdWNhdGlvbixjb25uZWN0aW5nYWNjdXJhdGVseXdlcmUgYnVpbHR3YXMga2lsbGVkYWdyZWVtZW50c211Y2ggbW9yZSBEdWUgdG8gdGhld2lkdGg6IDEwMHNvbWUgb3RoZXJLaW5nZG9tIG9mdGhlIGVudGlyZWZhbW91cyBmb3J0byBjb25uZWN0b2JqZWN0aXZlc3RoZSBGcmVuY2hwZW9wbGUgYW5kZmVhdHVyZWQiPmlzIHNhaWQgdG9zdHJ1Y3R1cmFscmVmZXJlbmR1bW1vc3Qgb2Z0ZW5hIHNlcGFyYXRlLT4KPGRpdiBpZCBPZmZpY2lhbCB3b3JsZHdpZGUuYXJpYS1sYWJlbHRoZSBwbGFuZXRhbmQgaXQgd2FzZCIgdmFsdWU9Imxvb2tpbmcgYXRiZW5lZmljaWFsYXJlIGluIHRoZW1vbml0b3JpbmdyZXBvcnRlZGx5dGhlIG1vZGVybndvcmtpbmcgb25hbGxvd2VkIHRvd2hlcmUgdGhlIGlubm92YXRpdmU8L2E+PC9kaXY+c291bmR0cmFja3NlYXJjaEZvcm10ZW5kIHRvIGJlaW5wdXQgaWQ9Im9wZW5pbmcgb2ZyZXN0cmljdGVkYWRvcHRlZCBieWFkZHJlc3Npbmd0aGVvbG9naWFubWV0aG9kcyBvZnZhcmlhbnQgb2ZDaHJpc3RpYW4gdmVyeSBsYXJnZWF1dG9tb3RpdmVieSBmYXIgdGhlcmFuZ2UgZnJvbXB1cnN1aXQgb2Zmb2xsb3cgdGhlYnJvdWdodCB0b2luIEVuZ2xhbmRhZ3JlZSB0aGF0YWNjdXNlZCBvZmNvbWVzIGZyb21wcmV2ZW50aW5nZGl2IHN0eWxlPWhpcyBvciBoZXJ0cmVtZW5kb3VzZnJlZWRvbSBvZmNvbmNlcm5pbmcwIDFlbSAxZW07QmFza2V0YmFsbC9zdHlsZS5jc3NhbiBlYXJsaWVyZXZlbiBhZnRlci8iIHRpdGxlPSIuY29tL2luZGV4dGFraW5nIHRoZXBpdHRzYnVyZ2hjb250ZW50Ij4NPHNjcmlwdD4oZnR1cm5lZCBvdXRoYXZpbmcgdGhlPC9zcGFuPg0KIG9jY2FzaW9uYWxiZWNhdXNlIGl0c3RhcnRlZCB0b3BoeXNpY2FsbHk+PC9kaXY+CiAgY3JlYXRlZCBieUN1cnJlbnRseSwgYmdjb2xvcj0idGFiaW5kZXg9ImRpc2FzdHJvdXNBbmFseXRpY3MgYWxzbyBoYXMgYT48ZGl2IGlkPSI8L3N0eWxlPgo8Y2FsbGVkIGZvcnNpbmdlciBhbmQuc3JjID0gIi8vdmlvbGF0aW9uc3RoaXMgcG9pbnRjb25zdGFudGx5aXMgbG9jYXRlZHJlY29yZGluZ3NkIGZyb20gdGhlbmVkZXJsYW5kc3BvcnR1Z3XDqnPXoteR16jXmdeq2YHYp9ix2LPbjGRlc2Fycm9sbG9jb21lbnRhcmlvZWR1Y2FjacOzbnNlcHRpZW1icmVyZWdpc3RyYWRvZGlyZWNjacOzbnViaWNhY2nDs25wdWJsaWNpZGFkcmVzcHVlc3Rhc3Jlc3VsdGFkb3NpbXBvcnRhbnRlcmVzZXJ2YWRvc2FydMOtY3Vsb3NkaWZlcmVudGVzc2lndWllbnRlc3JlcMO6YmxpY2FzaXR1YWNpw7NubWluaXN0ZXJpb3ByaXZhY2lkYWRkaXJlY3RvcmlvZm9ybWFjacOzbnBvYmxhY2nDs25wcmVzaWRlbnRlY29udGVuaWRvc2FjY2Vzb3Jpb3N0ZWNobm9yYXRpcGVyc29uYWxlc2NhdGVnb3LDrWFlc3BlY2lhbGVzZGlzcG9uaWJsZWFjdHVhbGlkYWRyZWZlcmVuY2lhdmFsbGFkb2xpZGJpYmxpb3RlY2FyZWxhY2lvbmVzY2FsZW5kYXJpb3BvbMOtdGljYXNhbnRlcmlvcmVzZG9jdW1lbnRvc25hdHVyYWxlemFtYXRlcmlhbGVzZGlmZXJlbmNpYWVjb27Ds21pY2F0cmFuc3BvcnRlcm9kcsOtZ3VlenBhcnRpY2lwYXJlbmN1ZW50cmFuZGlzY3VzacOzbmVzdHJ1Y3R1cmFmdW5kYWNpw7NuZnJlY3VlbnRlc3Blcm1hbmVudGV0b3RhbG1lbnRl0LzQvtC20L3QvtCx0YPQtNC10YLQvNC+0LbQtdGC0LLRgNC10LzRj9GC0LDQutC20LXRh9GC0L7QsdGL0LHQvtC70LXQtdC+0YfQtdC90YzRjdGC0L7Qs9C+0LrQvtCz0LTQsNC/0L7RgdC70LXQstGB0LXQs9C+0YHQsNC50YLQtdGH0LXRgNC10LfQvNC+0LPRg9GC0YHQsNC50YLQsNC20LjQt9C90LjQvNC10LbQtNGD0LHRg9C00YPRgtCf0L7QuNGB0LrQt9C00LXRgdGM0LLQuNC00LXQvtGB0LLRj9C30LjQvdGD0LbQvdC+0YHQstC+0LXQudC70Y7QtNC10LnQv9C+0YDQvdC+0LzQvdC+0LPQvtC00LXRgtC10LnRgdCy0L7QuNGF0L/RgNCw0LLQsNGC0LDQutC+0LnQvNC10YHRgtC+0LjQvNC10LXRgtC20LjQt9C90YzQvtC00L3QvtC50LvRg9GH0YjQtdC/0LXRgNC10LTRh9Cw0YHRgtC40YfQsNGB0YLRjNGA0LDQsdC+0YLQvdC+0LLRi9GF0L/RgNCw0LLQvtGB0L7QsdC+0LnQv9C+0YLQvtC80LzQtdC90LXQtdGH0LjRgdC70LXQvdC+0LLRi9C10YPRgdC70YPQs9C+0LrQvtC70L7QvdCw0LfQsNC00YLQsNC60L7QtdGC0L7Qs9C00LDQv9C+0YfRgtC40J/QvtGB0LvQtdGC0LDQutC40LXQvdC+0LLRi9C50YHRgtC+0LjRgtGC0LDQutC40YXRgdGA0LDQt9GD0KHQsNC90LrRgtGE0L7RgNGD0LzQmtC+0LPQtNCw0LrQvdC40LPQuNGB0LvQvtCy0LDQvdCw0YjQtdC50L3QsNC50YLQuNGB0LLQvtC40LzRgdCy0Y/Qt9GM0LvRjtCx0L7QudGH0LDRgdGC0L7RgdGA0LXQtNC40JrRgNC+0LzQtdCk0L7RgNGD0LzRgNGL0L3QutC10YHRgtCw0LvQuNC/0L7QuNGB0LrRgtGL0YHRj9GH0LzQtdGB0Y/RhtGG0LXQvdGC0YDRgtGA0YPQtNCw0YHQsNC80YvRhdGA0YvQvdC60LDQndC+0LLRi9C50YfQsNGB0L7QstC80LXRgdGC0LDRhNC40LvRjNC80LzQsNGA0YLQsNGB0YLRgNCw0L3QvNC10YHRgtC10YLQtdC60YHRgtC90LDRiNC40YXQvNC40L3Rg9GC0LjQvNC10L3QuNC40LzQtdGO0YLQvdC+0LzQtdGA0LPQvtGA0L7QtNGB0LDQvNC+0LzRjdGC0L7QvNGD0LrQvtC90YbQtdGB0LLQvtC10LzQutCw0LrQvtC50JDRgNGF0LjQstmF2YbYqtiv2YnYpdix2LPYp9mE2LHYs9in2YTYqdin2YTYudin2YXZg9iq2KjZh9in2KjYsdin2YXYrNin2YTZitmI2YXYp9mE2LXZiNix2KzYr9mK2K/Yqdin2YTYudi22YjYpdi22KfZgdip2KfZhNmC2LPZhdin2YTYudin2KjYqtit2YXZitmE2YXZhNmB2KfYqtmF2YTYqtmC2YnYqti52K/ZitmE2KfZhNi02LnYsdij2K7YqNin2LHYqti32YjZitix2LnZhNmK2YPZhdil2LHZgdin2YLYt9mE2KjYp9iq2KfZhNmE2LrYqdiq2LHYqtmK2KjYp9mE2YbYp9iz2KfZhNi02YrYrtmF2YbYqtiv2YrYp9mE2LnYsdio2KfZhNmC2LXYtdin2YHZhNin2YXYudmE2YrZh9in2KrYrdiv2YrYq9in2YTZhNmH2YXYp9mE2LnZhdmE2YXZg9iq2KjYqdmK2YXZg9mG2YPYp9mE2LfZgdmE2YHZitiv2YrZiNil2K/Yp9ix2KnYqtin2LHZitiu2KfZhNi12K3Yqdiq2LPYrNmK2YTYp9mE2YjZgtiq2LnZhtiv2YXYp9mF2K/ZitmG2KnYqti12YXZitmF2KPYsdi02YrZgdin2YTYsNmK2YbYudix2KjZitip2KjZiNin2KjYqdij2YTYudin2KjYp9mE2LPZgdix2YXYtNin2YPZhNiq2LnYp9mE2YnYp9mE2KPZiNmE2KfZhNiz2YbYqdis2KfZhdi52KnYp9mE2LXYrdmB2KfZhNiv2YrZhtmD2YTZhdin2KrYp9mE2K7Yp9i12KfZhNmF2YTZgdij2LnYttin2KHZg9iq2KfYqNip2KfZhNiu2YrYsdix2LPYp9im2YTYp9mE2YLZhNio2KfZhNij2K/YqNmF2YLYp9i32LnZhdix2KfYs9mE2YXZhti32YLYqdin2YTZg9iq2KjYp9mE2LHYrNmE2KfYtNiq2LHZg9in2YTZgtiv2YXZiti52LfZitmDc0J5VGFnTmFtZSguanBnIiBhbHQ9IjFweCBzb2xpZCAjLmdpZiIgYWx0PSJ0cmFuc3BhcmVudGluZm9ybWF0aW9uYXBwbGljYXRpb24iIG9uY2xpY2s9ImVzdGFibGlzaGVkYWR2ZXJ0aXNpbmcucG5nIiBhbHQ9ImVudmlyb25tZW50cGVyZm9ybWFuY2VhcHByb3ByaWF0ZSZhbXA7bWRhc2g7aW1tZWRpYXRlbHk8L3N0cm9uZz48L3JhdGhlciB0aGFudGVtcGVyYXR1cmVkZXZlbG9wbWVudGNvbXBldGl0aW9ucGxhY2Vob2xkZXJ2aXNpYmlsaXR5OmNvcHlyaWdodCI+MCIgaGVpZ2h0PSJldmVuIHRob3VnaHJlcGxhY2VtZW50ZGVzdGluYXRpb25Db3Jwb3JhdGlvbjx1bCBjbGFzcz0iQXNzb2NpYXRpb25pbmRpdmlkdWFsc3BlcnNwZWN0aXZlc2V0VGltZW91dCh1cmwoaHR0cDovL21hdGhlbWF0aWNzbWFyZ2luLXRvcDpldmVudHVhbGx5IGRlc2NyaXB0aW9uKSBuby1yZXBlYXRjb2xsZWN0aW9ucy5KUEd8dGh1bWJ8cGFydGljaXBhdGUvaGVhZD48Ym9keWZsb2F0OmxlZnQ7PGxpIGNsYXNzPSJodW5kcmVkcyBvZgoKSG93ZXZlciwgY29tcG9zaXRpb25jbGVhcjpib3RoO2Nvb3BlcmF0aW9ud2l0aGluIHRoZSBsYWJlbCBmb3I9ImJvcmRlci10b3A6TmV3IFplYWxhbmRyZWNvbW1lbmRlZHBob3RvZ3JhcGh5aW50ZXJlc3RpbmcmbHQ7c3VwJmd0O2NvbnRyb3ZlcnN5TmV0aGVybGFuZHNhbHRlcm5hdGl2ZW1heGxlbmd0aD0ic3dpdHplcmxhbmREZXZlbG9wbWVudGVzc2VudGlhbGx5CgpBbHRob3VnaCA8L3RleHRhcmVhPnRodW5kZXJiaXJkcmVwcmVzZW50ZWQmYW1wO25kYXNoO3NwZWN1bGF0aW9uY29tbXVuaXRpZXNsZWdpc2xhdGlvbmVsZWN0cm9uaWNzCgk8ZGl2IGlkPSJpbGx1c3RyYXRlZGVuZ2luZWVyaW5ndGVycml0b3JpZXNhdXRob3JpdGllc2Rpc3RyaWJ1dGVkNiIgaGVpZ2h0PSJzYW5zLXNlcmlmO2NhcGFibGUgb2YgZGlzYXBwZWFyZWRpbnRlcmFjdGl2ZWxvb2tpbmcgZm9yaXQgd291bGQgYmVBZmdoYW5pc3RhbndhcyBjcmVhdGVkTWF0aC5mbG9vcihzdXJyb3VuZGluZ2NhbiBhbHNvIGJlb2JzZXJ2YXRpb25tYWludGVuYW5jZWVuY291bnRlcmVkPGgyIGNsYXNzPSJtb3JlIHJlY2VudGl0IGhhcyBiZWVuaW52YXNpb24gb2YpLmdldFRpbWUoKWZ1bmRhbWVudGFsRGVzcGl0ZSB0aGUiPjxkaXYgaWQ9Imluc3BpcmF0aW9uZXhhbWluYXRpb25wcmVwYXJhdGlvbmV4cGxhbmF0aW9uPGlucHV0IGlkPSI8L2E+PC9zcGFuPnZlcnNpb25zIG9maW5zdHJ1bWVudHNiZWZvcmUgdGhlICA9ICdodHRwOi8vRGVzY3JpcHRpb25yZWxhdGl2ZWx5IC5zdWJzdHJpbmcoZWFjaCBvZiB0aGVleHBlcmltZW50c2luZmx1ZW50aWFsaW50ZWdyYXRpb25tYW55IHBlb3BsZWR1ZSB0byB0aGUgY29tYmluYXRpb25kbyBub3QgaGF2ZU1pZGRsZSBFYXN0PG5vc2NyaXB0Pjxjb3B5cmlnaHQiIHBlcmhhcHMgdGhlaW5zdGl0dXRpb25pbiBEZWNlbWJlcmFycmFuZ2VtZW50bW9zdCBmYW1vdXNwZXJzb25hbGl0eWNyZWF0aW9uIG9mbGltaXRhdGlvbnNleGNsdXNpdmVseXNvdmVyZWlnbnR5LWNvbnRlbnQiPgo8dGQgY2xhc3M9InVuZGVyZ3JvdW5kcGFyYWxsZWwgdG9kb2N0cmluZSBvZm9jY3VwaWVkIGJ5dGVybWlub2xvZ3lSZW5haXNzYW5jZWEgbnVtYmVyIG9mc3VwcG9ydCBmb3JleHBsb3JhdGlvbnJlY29nbml0aW9ucHJlZGVjZXNzb3I8aW1nIHNyYz0iLzxoMSBjbGFzcz0icHVibGljYXRpb25tYXkgYWxzbyBiZXNwZWNpYWxpemVkPC9maWVsZHNldD5wcm9ncmVzc2l2ZW1pbGxpb25zIG9mc3RhdGVzIHRoYXRlbmZvcmNlbWVudGFyb3VuZCB0aGUgb25lIGFub3RoZXIucGFyZW50Tm9kZWFncmljdWx0dXJlQWx0ZXJuYXRpdmVyZXNlYXJjaGVyc3Rvd2FyZHMgdGhlTW9zdCBvZiB0aGVtYW55IG90aGVyIChlc3BlY2lhbGx5PHRkIHdpZHRoPSI7d2lkdGg6MTAwJWluZGVwZW5kZW50PGgzIGNsYXNzPSIgb25jaGFuZ2U9IikuYWRkQ2xhc3MoaW50ZXJhY3Rpb25PbmUgb2YgdGhlIGRhdWdodGVyIG9mYWNjZXNzb3JpZXNicmFuY2hlcyBvZg0KPGRpdiBpZD0idGhlIGxhcmdlc3RkZWNsYXJhdGlvbnJlZ3VsYXRpb25zSW5mb3JtYXRpb250cmFuc2xhdGlvbmRvY3VtZW50YXJ5aW4gb3JkZXIgdG8iPgo8aGVhZD4KPCIgaGVpZ2h0PSIxYWNyb3NzIHRoZSBvcmllbnRhdGlvbik7PC9zY3JpcHQ+aW1wbGVtZW50ZWRjYW4gYmUgc2VlbnRoZXJlIHdhcyBhZGVtb25zdHJhdGVjb250YWluZXIiPmNvbm5lY3Rpb25zdGhlIEJyaXRpc2h3YXMgd3JpdHRlbiFpbXBvcnRhbnQ7cHg7IG1hcmdpbi1mb2xsb3dlZCBieWFiaWxpdHkgdG8gY29tcGxpY2F0ZWRkdXJpbmcgdGhlIGltbWlncmF0aW9uYWxzbyBjYWxsZWQ8aDQgY2xhc3M9ImRpc3RpbmN0aW9ucmVwbGFjZWQgYnlnb3Zlcm5tZW50c2xvY2F0aW9uIG9maW4gTm92ZW1iZXJ3aGV0aGVyIHRoZTwvcD4KPC9kaXY+YWNxdWlzaXRpb25jYWxsZWQgdGhlIHBlcnNlY3V0aW9uZGVzaWduYXRpb257Zm9udC1zaXplOmFwcGVhcmVkIGluaW52ZXN0aWdhdGVleHBlcmllbmNlZG1vc3QgbGlrZWx5d2lkZWx5IHVzZWRkaXNjdXNzaW9uc3ByZXNlbmNlIG9mIChkb2N1bWVudC5leHRlbnNpdmVseUl0IGhhcyBiZWVuaXQgZG9lcyBub3Rjb250cmFyeSB0b2luaGFiaXRhbnRzaW1wcm92ZW1lbnRzY2hvbGFyc2hpcGNvbnN1bXB0aW9uaW5zdHJ1Y3Rpb25mb3IgZXhhbXBsZW9uZSBvciBtb3JlcHg7IHBhZGRpbmd0aGUgY3VycmVudGEgc2VyaWVzIG9mYXJlIHVzdWFsbHlyb2xlIGluIHRoZXByZXZpb3VzbHkgZGVyaXZhdGl2ZXNldmlkZW5jZSBvZmV4cGVyaWVuY2VzY29sb3JzY2hlbWVzdGF0ZWQgdGhhdGNlcnRpZmljYXRlPC9hPjwvZGl2Pgogc2VsZWN0ZWQ9ImhpZ2ggc2Nob29scmVzcG9uc2UgdG9jb21mb3J0YWJsZWFkb3B0aW9uIG9mdGhyZWUgeWVhcnN0aGUgY291bnRyeWluIEZlYnJ1YXJ5c28gdGhhdCB0aGVwZW9wbGUgd2hvIHByb3ZpZGVkIGJ5PHBhcmFtIG5hbWVhZmZlY3RlZCBieWluIHRlcm1zIG9mYXBwb2ludG1lbnRJU08tODg1OS0xIndhcyBib3JuIGluaGlzdG9yaWNhbCByZWdhcmRlZCBhc21lYXN1cmVtZW50aXMgYmFzZWQgb24gYW5kIG90aGVyIDogZnVuY3Rpb24oc2lnbmlmaWNhbnRjZWxlYnJhdGlvbnRyYW5zbWl0dGVkL2pzL2pxdWVyeS5pcyBrbm93biBhc3RoZW9yZXRpY2FsIHRhYmluZGV4PSJpdCBjb3VsZCBiZTxub3NjcmlwdD4KaGF2aW5nIGJlZW4NCjxoZWFkPg0KPCAmcXVvdDtUaGUgY29tcGlsYXRpb25oZSBoYWQgYmVlbnByb2R1Y2VkIGJ5cGhpbG9zb3BoZXJjb25zdHJ1Y3RlZGludGVuZGVkIHRvYW1vbmcgb3RoZXJjb21wYXJlZCB0b3RvIHNheSB0aGF0RW5naW5lZXJpbmdhIGRpZmZlcmVudHJlZmVycmVkIHRvZGlmZmVyZW5jZXNiZWxpZWYgdGhhdHBob3RvZ3JhcGhzaWRlbnRpZnlpbmdIaXN0b3J5IG9mIFJlcHVibGljIG9mbmVjZXNzYXJpbHlwcm9iYWJpbGl0eXRlY2huaWNhbGx5bGVhdmluZyB0aGVzcGVjdGFjdWxhcmZyYWN0aW9uIG9mZWxlY3RyaWNpdHloZWFkIG9mIHRoZXJlc3RhdXJhbnRzcGFydG5lcnNoaXBlbXBoYXNpcyBvbm1vc3QgcmVjZW50c2hhcmUgd2l0aCBzYXlpbmcgdGhhdGZpbGxlZCB3aXRoZGVzaWduZWQgdG9pdCBpcyBvZnRlbiI+PC9pZnJhbWU+YXMgZm9sbG93czptZXJnZWQgd2l0aHRocm91Z2ggdGhlY29tbWVyY2lhbCBwb2ludGVkIG91dG9wcG9ydHVuaXR5dmlldyBvZiB0aGVyZXF1aXJlbWVudGRpdmlzaW9uIG9mcHJvZ3JhbW1pbmdoZSByZWNlaXZlZHNldEludGVydmFsIj48L3NwYW4+PC9pbiBOZXcgWW9ya2FkZGl0aW9uYWwgY29tcHJlc3Npb24KCjxkaXYgaWQ9ImluY29ycG9yYXRlOzwvc2NyaXB0PjxhdHRhY2hFdmVudGJlY2FtZSB0aGUgIiB0YXJnZXQ9Il9jYXJyaWVkIG91dFNvbWUgb2YgdGhlc2NpZW5jZSBhbmR0aGUgdGltZSBvZkNvbnRhaW5lciI+bWFpbnRhaW5pbmdDaHJpc3RvcGhlck11Y2ggb2YgdGhld3JpdGluZ3Mgb2YiIGhlaWdodD0iMnNpemUgb2YgdGhldmVyc2lvbiBvZiBtaXh0dXJlIG9mIGJldHdlZW4gdGhlRXhhbXBsZXMgb2ZlZHVjYXRpb25hbGNvbXBldGl0aXZlIG9uc3VibWl0PSJkaXJlY3RvciBvZmRpc3RpbmN0aXZlL0RURCBYSFRNTCByZWxhdGluZyB0b3RlbmRlbmN5IHRvcHJvdmluY2Ugb2Z3aGljaCB3b3VsZGRlc3BpdGUgdGhlc2NpZW50aWZpYyBsZWdpc2xhdHVyZS5pbm5lckhUTUwgYWxsZWdhdGlvbnNBZ3JpY3VsdHVyZXdhcyB1c2VkIGluYXBwcm9hY2ggdG9pbnRlbGxpZ2VudHllYXJzIGxhdGVyLHNhbnMtc2VyaWZkZXRlcm1pbmluZ1BlcmZvcm1hbmNlYXBwZWFyYW5jZXMsIHdoaWNoIGlzIGZvdW5kYXRpb25zYWJicmV2aWF0ZWRoaWdoZXIgdGhhbnMgZnJvbSB0aGUgaW5kaXZpZHVhbCBjb21wb3NlZCBvZnN1cHBvc2VkIHRvY2xhaW1zIHRoYXRhdHRyaWJ1dGlvbmZvbnQtc2l6ZToxZWxlbWVudHMgb2ZIaXN0b3JpY2FsIGhpcyBicm90aGVyYXQgdGhlIHRpbWVhbm5pdmVyc2FyeWdvdmVybmVkIGJ5cmVsYXRlZCB0byB1bHRpbWF0ZWx5IGlubm92YXRpb25zaXQgaXMgc3RpbGxjYW4gb25seSBiZWRlZmluaXRpb25zdG9HTVRTdHJpbmdBIG51bWJlciBvZmltZyBjbGFzcz0iRXZlbnR1YWxseSx3YXMgY2hhbmdlZG9jY3VycmVkIGlubmVpZ2hib3JpbmdkaXN0aW5ndWlzaHdoZW4gaGUgd2FzaW50cm9kdWNpbmd0ZXJyZXN0cmlhbE1hbnkgb2YgdGhlYXJndWVzIHRoYXRhbiBBbWVyaWNhbmNvbnF1ZXN0IG9md2lkZXNwcmVhZCB3ZXJlIGtpbGxlZHNjcmVlbiBhbmQgSW4gb3JkZXIgdG9leHBlY3RlZCB0b2Rlc2NlbmRhbnRzYXJlIGxvY2F0ZWRsZWdpc2xhdGl2ZWdlbmVyYXRpb25zIGJhY2tncm91bmRtb3N0IHBlb3BsZXllYXJzIGFmdGVydGhlcmUgaXMgbm90aGUgaGlnaGVzdGZyZXF1ZW50bHkgdGhleSBkbyBub3Rhcmd1ZWQgdGhhdHNob3dlZCB0aGF0cHJlZG9taW5hbnR0aGVvbG9naWNhbGJ5IHRoZSB0aW1lY29uc2lkZXJpbmdzaG9ydC1saXZlZDwvc3Bhbj48L2E+Y2FuIGJlIHVzZWR2ZXJ5IGxpdHRsZW9uZSBvZiB0aGUgaGFkIGFscmVhZHlpbnRlcnByZXRlZGNvbW11bmljYXRlZmVhdHVyZXMgb2Znb3Zlcm5tZW50LDwvbm9zY3JpcHQ+ZW50ZXJlZCB0aGUiIGhlaWdodD0iM0luZGVwZW5kZW50cG9wdWxhdGlvbnNsYXJnZS1zY2FsZS4gQWx0aG91Z2ggdXNlZCBpbiB0aGVkZXN0cnVjdGlvbnBvc3NpYmlsaXR5c3RhcnRpbmcgaW50d28gb3IgbW9yZWV4cHJlc3Npb25zc3Vib3JkaW5hdGVsYXJnZXIgdGhhbmhpc3RvcnkgYW5kPC9vcHRpb24+DQpDb250aW5lbnRhbGVsaW1pbmF0aW5nd2lsbCBub3QgYmVwcmFjdGljZSBvZmluIGZyb250IG9mc2l0ZSBvZiB0aGVlbnN1cmUgdGhhdHRvIGNyZWF0ZSBhbWlzc2lzc2lwcGlwb3RlbnRpYWxseW91dHN0YW5kaW5nYmV0dGVyIHRoYW53aGF0IGlzIG5vd3NpdHVhdGVkIGlubWV0YSBuYW1lPSJUcmFkaXRpb25hbHN1Z2dlc3Rpb25zVHJhbnNsYXRpb250aGUgZm9ybSBvZmF0bW9zcGhlcmljaWRlb2xvZ2ljYWxlbnRlcnByaXNlc2NhbGN1bGF0aW5nZWFzdCBvZiB0aGVyZW1uYW50cyBvZnBsdWdpbnNwYWdlL2luZGV4LnBocD9yZW1haW5lZCBpbnRyYW5zZm9ybWVkSGUgd2FzIGFsc293YXMgYWxyZWFkeXN0YXRpc3RpY2FsaW4gZmF2b3Igb2ZNaW5pc3RyeSBvZm1vdmVtZW50IG9mZm9ybXVsYXRpb25pcyByZXF1aXJlZDxsaW5rIHJlbD0iVGhpcyBpcyB0aGUgPGEgaHJlZj0iL3BvcHVsYXJpemVkaW52b2x2ZWQgaW5hcmUgdXNlZCB0b2FuZCBzZXZlcmFsbWFkZSBieSB0aGVzZWVtcyB0byBiZWxpa2VseSB0aGF0UGFsZXN0aW5pYW5uYW1lZCBhZnRlcml0IGhhZCBiZWVubW9zdCBjb21tb250byByZWZlciB0b2J1dCB0aGlzIGlzY29uc2VjdXRpdmV0ZW1wb3JhcmlseUluIGdlbmVyYWwsY29udmVudGlvbnN0YWtlcyBwbGFjZXN1YmRpdmlzaW9udGVycml0b3JpYWxvcGVyYXRpb25hbHBlcm1hbmVudGx5d2FzIGxhcmdlbHlvdXRicmVhayBvZmluIHRoZSBwYXN0Zm9sbG93aW5nIGEgeG1sbnM6b2c9Ij48YSBjbGFzcz0iY2xhc3M9InRleHRDb252ZXJzaW9uIG1heSBiZSB1c2VkbWFudWZhY3R1cmVhZnRlciBiZWluZ2NsZWFyZml4Ij4KcXVlc3Rpb24gb2Z3YXMgZWxlY3RlZHRvIGJlY29tZSBhYmVjYXVzZSBvZiBzb21lIHBlb3BsZWluc3BpcmVkIGJ5c3VjY2Vzc2Z1bCBhIHRpbWUgd2hlbm1vcmUgY29tbW9uYW1vbmdzdCB0aGVhbiBvZmZpY2lhbHdpZHRoOjEwMCU7dGVjaG5vbG9neSx3YXMgYWRvcHRlZHRvIGtlZXAgdGhlc2V0dGxlbWVudHNsaXZlIGJpcnRoc2luZGV4Lmh0bWwiQ29ubmVjdGljdXRhc3NpZ25lZCB0byZhbXA7dGltZXM7YWNjb3VudCBmb3JhbGlnbj1yaWdodHRoZSBjb21wYW55YWx3YXlzIGJlZW5yZXR1cm5lZCB0b2ludm9sdmVtZW50QmVjYXVzZSB0aGV0aGlzIHBlcmlvZCIgbmFtZT0icSIgY29uZmluZWQgdG9hIHJlc3VsdCBvZnZhbHVlPSIiIC8+aXMgYWN0dWFsbHlFbnZpcm9ubWVudA0KPC9oZWFkPg0KQ29udmVyc2VseSw+CjxkaXYgaWQ9IjAiIHdpZHRoPSIxaXMgcHJvYmFibHloYXZlIGJlY29tZWNvbnRyb2xsaW5ndGhlIHByb2JsZW1jaXRpemVucyBvZnBvbGl0aWNpYW5zcmVhY2hlZCB0aGVhcyBlYXJseSBhczpub25lOyBvdmVyPHRhYmxlIGNlbGx2YWxpZGl0eSBvZmRpcmVjdGx5IHRvb25tb3VzZWRvd253aGVyZSBpdCBpc3doZW4gaXQgd2FzbWVtYmVycyBvZiByZWxhdGlvbiB0b2FjY29tbW9kYXRlYWxvbmcgd2l0aCBJbiB0aGUgbGF0ZXRoZSBFbmdsaXNoZGVsaWNpb3VzIj50aGlzIGlzIG5vdHRoZSBwcmVzZW50aWYgdGhleSBhcmVhbmQgZmluYWxseWEgbWF0dGVyIG9mDQoJPC9kaXY+DQoNCjwvc2NyaXB0PmZhc3RlciB0aGFubWFqb3JpdHkgb2ZhZnRlciB3aGljaGNvbXBhcmF0aXZldG8gbWFpbnRhaW5pbXByb3ZlIHRoZWF3YXJkZWQgdGhlZXIiIGNsYXNzPSJmcmFtZWJvcmRlcnJlc3RvcmF0aW9uaW4gdGhlIHNhbWVhbmFseXNpcyBvZnRoZWlyIGZpcnN0RHVyaW5nIHRoZSBjb250aW5lbnRhbHNlcXVlbmNlIG9mZnVuY3Rpb24oKXtmb250LXNpemU6IHdvcmsgb24gdGhlPC9zY3JpcHQ+CjxiZWdpbnMgd2l0aGphdmFzY3JpcHQ6Y29uc3RpdHVlbnR3YXMgZm91bmRlZGVxdWlsaWJyaXVtYXNzdW1lIHRoYXRpcyBnaXZlbiBieW5lZWRzIHRvIGJlY29vcmRpbmF0ZXN0aGUgdmFyaW91c2FyZSBwYXJ0IG9mb25seSBpbiB0aGVzZWN0aW9ucyBvZmlzIGEgY29tbW9udGhlb3JpZXMgb2ZkaXNjb3Zlcmllc2Fzc29jaWF0aW9uZWRnZSBvZiB0aGVzdHJlbmd0aCBvZnBvc2l0aW9uIGlucHJlc2VudC1kYXl1bml2ZXJzYWxseXRvIGZvcm0gdGhlYnV0IGluc3RlYWRjb3Jwb3JhdGlvbmF0dGFjaGVkIHRvaXMgY29tbW9ubHlyZWFzb25zIGZvciAmcXVvdDt0aGUgY2FuIGJlIG1hZGV3YXMgYWJsZSB0b3doaWNoIG1lYW5zYnV0IGRpZCBub3Rvbk1vdXNlT3ZlcmFzIHBvc3NpYmxlb3BlcmF0ZWQgYnljb21pbmcgZnJvbXRoZSBwcmltYXJ5YWRkaXRpb24gb2Zmb3Igc2V2ZXJhbHRyYW5zZmVycmVkYSBwZXJpb2Qgb2ZhcmUgYWJsZSB0b2hvd2V2ZXIsIGl0c2hvdWxkIGhhdmVtdWNoIGxhcmdlcgoJPC9zY3JpcHQ+YWRvcHRlZCB0aGVwcm9wZXJ0eSBvZmRpcmVjdGVkIGJ5ZWZmZWN0aXZlbHl3YXMgYnJvdWdodGNoaWxkcmVuIG9mUHJvZ3JhbW1pbmdsb25nZXIgdGhhbm1hbnVzY3JpcHRzd2FyIGFnYWluc3RieSBtZWFucyBvZmFuZCBtb3N0IG9mc2ltaWxhciB0byBwcm9wcmlldGFyeW9yaWdpbmF0aW5ncHJlc3RpZ2lvdXNncmFtbWF0aWNhbGV4cGVyaWVuY2UudG8gbWFrZSB0aGVJdCB3YXMgYWxzb2lzIGZvdW5kIGluY29tcGV0aXRvcnNpbiB0aGUgVS5TLnJlcGxhY2UgdGhlYnJvdWdodCB0aGVjYWxjdWxhdGlvbmZhbGwgb2YgdGhldGhlIGdlbmVyYWxwcmFjdGljYWxseWluIGhvbm9yIG9mcmVsZWFzZWQgaW5yZXNpZGVudGlhbGFuZCBzb21lIG9ma2luZyBvZiB0aGVyZWFjdGlvbiB0bzFzdCBFYXJsIG9mY3VsdHVyZSBhbmRwcmluY2lwYWxseTwvdGl0bGU+CiAgdGhleSBjYW4gYmViYWNrIHRvIHRoZXNvbWUgb2YgaGlzZXhwb3N1cmUgdG9hcmUgc2ltaWxhcmZvcm0gb2YgdGhlYWRkRmF2b3JpdGVjaXRpemVuc2hpcHBhcnQgaW4gdGhlcGVvcGxlIHdpdGhpbiBwcmFjdGljZXRvIGNvbnRpbnVlJmFtcDttaW51czthcHByb3ZlZCBieSB0aGUgZmlyc3QgYWxsb3dlZCB0aGVhbmQgZm9yIHRoZWZ1bmN0aW9uaW5ncGxheWluZyB0aGVzb2x1dGlvbiB0b2hlaWdodD0iMCIgaW4gaGlzIGJvb2ttb3JlIHRoYW4gYWZvbGxvd3MgdGhlY3JlYXRlZCB0aGVwcmVzZW5jZSBpbiZuYnNwOzwvdGQ+bmF0aW9uYWxpc3R0aGUgaWRlYSBvZmEgY2hhcmFjdGVyd2VyZSBmb3JjZWQgY2xhc3M9ImJ0bmRheXMgb2YgdGhlZmVhdHVyZWQgaW5zaG93aW5nIHRoZWludGVyZXN0IGluaW4gcGxhY2Ugb2Z0dXJuIG9mIHRoZXRoZSBoZWFkIG9mTG9yZCBvZiB0aGVwb2xpdGljYWxseWhhcyBpdHMgb3duRWR1Y2F0aW9uYWxhcHByb3ZhbCBvZnNvbWUgb2YgdGhlZWFjaCBvdGhlcixiZWhhdmlvciBvZmFuZCBiZWNhdXNlYW5kIGFub3RoZXJhcHBlYXJlZCBvbnJlY29yZGVkIGluYmxhY2smcXVvdDttYXkgaW5jbHVkZXRoZSB3b3JsZCdzY2FuIGxlYWQgdG9yZWZlcnMgdG8gYWJvcmRlcj0iMCIgZ292ZXJubWVudCB3aW5uaW5nIHRoZXJlc3VsdGVkIGluIHdoaWxlIHRoZSBXYXNoaW5ndG9uLHRoZSBzdWJqZWN0Y2l0eSBpbiB0aGU+PC9kaXY+DQoJCXJlZmxlY3QgdGhldG8gY29tcGxldGViZWNhbWUgbW9yZXJhZGlvYWN0aXZlcmVqZWN0ZWQgYnl3aXRob3V0IGFueWhpcyBmYXRoZXIsd2hpY2ggY291bGRjb3B5IG9mIHRoZXRvIGluZGljYXRlYSBwb2xpdGljYWxhY2NvdW50cyBvZmNvbnN0aXR1dGVzd29ya2VkIHdpdGhlcjwvYT48L2xpPm9mIGhpcyBsaWZlYWNjb21wYW5pZWRjbGllbnRXaWR0aHByZXZlbnQgdGhlTGVnaXNsYXRpdmVkaWZmZXJlbnRseXRvZ2V0aGVyIGluaGFzIHNldmVyYWxmb3IgYW5vdGhlcnRleHQgb2YgdGhlZm91bmRlZCB0aGVlIHdpdGggdGhlIGlzIHVzZWQgZm9yY2hhbmdlZCB0aGV1c3VhbGx5IHRoZXBsYWNlIHdoZXJld2hlcmVhcyB0aGU+IDxhIGhyZWY9IiI+PGEgaHJlZj0idGhlbXNlbHZlcyxhbHRob3VnaCBoZXRoYXQgY2FuIGJldHJhZGl0aW9uYWxyb2xlIG9mIHRoZWFzIGEgcmVzdWx0cmVtb3ZlQ2hpbGRkZXNpZ25lZCBieXdlc3Qgb2YgdGhlU29tZSBwZW9wbGVwcm9kdWN0aW9uLHNpZGUgb2YgdGhlbmV3c2xldHRlcnN1c2VkIGJ5IHRoZWRvd24gdG8gdGhlYWNjZXB0ZWQgYnlsaXZlIGluIHRoZWF0dGVtcHRzIHRvb3V0c2lkZSB0aGVmcmVxdWVuY2llc0hvd2V2ZXIsIGlucHJvZ3JhbW1lcnNhdCBsZWFzdCBpbmFwcHJveGltYXRlYWx0aG91Z2ggaXR3YXMgcGFydCBvZmFuZCB2YXJpb3VzR292ZXJub3Igb2Z0aGUgYXJ0aWNsZXR1cm5lZCBpbnRvPjxhIGhyZWY9Ii90aGUgZWNvbm9teWlzIHRoZSBtb3N0bW9zdCB3aWRlbHl3b3VsZCBsYXRlcmFuZCBwZXJoYXBzcmlzZSB0byB0aGVvY2N1cnMgd2hlbnVuZGVyIHdoaWNoY29uZGl0aW9ucy50aGUgd2VzdGVybnRoZW9yeSB0aGF0aXMgcHJvZHVjZWR0aGUgY2l0eSBvZmluIHdoaWNoIGhlc2VlbiBpbiB0aGV0aGUgY2VudHJhbGJ1aWxkaW5nIG9mbWFueSBvZiBoaXNhcmVhIG9mIHRoZWlzIHRoZSBvbmx5bW9zdCBvZiB0aGVtYW55IG9mIHRoZXRoZSBXZXN0ZXJuVGhlcmUgaXMgbm9leHRlbmRlZCB0b1N0YXRpc3RpY2FsY29sc3Bhbj0yIHxzaG9ydCBzdG9yeXBvc3NpYmxlIHRvdG9wb2xvZ2ljYWxjcml0aWNhbCBvZnJlcG9ydGVkIHRvYSBDaHJpc3RpYW5kZWNpc2lvbiB0b2lzIGVxdWFsIHRvcHJvYmxlbXMgb2ZUaGlzIGNhbiBiZW1lcmNoYW5kaXNlZm9yIG1vc3Qgb2ZubyBldmlkZW5jZWVkaXRpb25zIG9mZWxlbWVudHMgaW4mcXVvdDsuIFRoZWNvbS9pbWFnZXMvd2hpY2ggbWFrZXN0aGUgcHJvY2Vzc3JlbWFpbnMgdGhlbGl0ZXJhdHVyZSxpcyBhIG1lbWJlcnRoZSBwb3B1bGFydGhlIGFuY2llbnRwcm9ibGVtcyBpbnRpbWUgb2YgdGhlZGVmZWF0ZWQgYnlib2R5IG9mIHRoZWEgZmV3IHllYXJzbXVjaCBvZiB0aGV0aGUgd29yayBvZkNhbGlmb3JuaWEsc2VydmVkIGFzIGFnb3Zlcm5tZW50LmNvbmNlcHRzIG9mbW92ZW1lbnQgaW4JCTxkaXYgaWQ9Iml0IiB2YWx1ZT0ibGFuZ3VhZ2Ugb2ZhcyB0aGV5IGFyZXByb2R1Y2VkIGluaXMgdGhhdCB0aGVleHBsYWluIHRoZWRpdj48L2Rpdj4KSG93ZXZlciB0aGVsZWFkIHRvIHRoZQk8YSBocmVmPSIvd2FzIGdyYW50ZWRwZW9wbGUgaGF2ZWNvbnRpbnVhbGx5d2FzIHNlZW4gYXNhbmQgcmVsYXRlZHRoZSByb2xlIG9mcHJvcG9zZWQgYnlvZiB0aGUgYmVzdGVhY2ggb3RoZXIuQ29uc3RhbnRpbmVwZW9wbGUgZnJvbWRpYWxlY3RzIG9mdG8gcmV2aXNpb253YXMgcmVuYW1lZGEgc291cmNlIG9mdGhlIGluaXRpYWxsYXVuY2hlZCBpbnByb3ZpZGUgdGhldG8gdGhlIHdlc3R3aGVyZSB0aGVyZWFuZCBzaW1pbGFyYmV0d2VlbiB0d29pcyBhbHNvIHRoZUVuZ2xpc2ggYW5kY29uZGl0aW9ucyx0aGF0IGl0IHdhc2VudGl0bGVkIHRvdGhlbXNlbHZlcy5xdWFudGl0eSBvZnJhbnNwYXJlbmN5dGhlIHNhbWUgYXN0byBqb2luIHRoZWNvdW50cnkgYW5kdGhpcyBpcyB0aGVUaGlzIGxlZCB0b2Egc3RhdGVtZW50Y29udHJhc3QgdG9sYXN0SW5kZXhPZnRocm91Z2ggaGlzaXMgZGVzaWduZWR0aGUgdGVybSBpc2lzIHByb3ZpZGVkcHJvdGVjdCB0aGVuZzwvYT48L2xpPlRoZSBjdXJyZW50dGhlIHNpdGUgb2ZzdWJzdGFudGlhbGV4cGVyaWVuY2UsaW4gdGhlIFdlc3R0aGV5IHNob3VsZHNsb3ZlbsSNaW5hY29tZW50YXJpb3N1bml2ZXJzaWRhZGNvbmRpY2lvbmVzYWN0aXZpZGFkZXNleHBlcmllbmNpYXRlY25vbG9nw61hcHJvZHVjY2nDs25wdW50dWFjacOzbmFwbGljYWNpw7NuY29udHJhc2XDsWFjYXRlZ29yw61hc3JlZ2lzdHJhcnNlcHJvZmVzaW9uYWx0cmF0YW1pZW50b3JlZ8Otc3RyYXRlc2VjcmV0YXLDrWFwcmluY2lwYWxlc3Byb3RlY2Npw7NuaW1wb3J0YW50ZXNpbXBvcnRhbmNpYXBvc2liaWxpZGFkaW50ZXJlc2FudGVjcmVjaW1pZW50b25lY2VzaWRhZGVzc3VzY3JpYmlyc2Vhc29jaWFjacOzbmRpc3BvbmlibGVzZXZhbHVhY2nDs25lc3R1ZGlhbnRlc3Jlc3BvbnNhYmxlcmVzb2x1Y2nDs25ndWFkYWxhamFyYXJlZ2lzdHJhZG9zb3BvcnR1bmlkYWRjb21lcmNpYWxlc2ZvdG9ncmFmw61hYXV0b3JpZGFkZXNpbmdlbmllcsOtYXRlbGV2aXNpw7NuY29tcGV0ZW5jaWFvcGVyYWNpb25lc2VzdGFibGVjaWRvc2ltcGxlbWVudGVhY3R1YWxtZW50ZW5hdmVnYWNpw7NuY29uZm9ybWlkYWRsaW5lLWhlaWdodDpmb250LWZhbWlseToiIDogImh0dHA6Ly9hcHBsaWNhdGlvbnNsaW5rIiBocmVmPSJzcGVjaWZpY2FsbHkvLzwhW0NEQVRBWwpPcmdhbml6YXRpb25kaXN0cmlidXRpb24wcHg7IGhlaWdodDpyZWxhdGlvbnNoaXBkZXZpY2Utd2lkdGg8ZGl2IGNsYXNzPSI8bGFiZWwgZm9yPSJyZWdpc3RyYXRpb248L25vc2NyaXB0PgovaW5kZXguaHRtbCJ3aW5kb3cub3BlbiggIWltcG9ydGFudDthcHBsaWNhdGlvbi9pbmRlcGVuZGVuY2UvL3d3dy5nb29nbGVvcmdhbml6YXRpb25hdXRvY29tcGxldGVyZXF1aXJlbWVudHNjb25zZXJ2YXRpdmU8Zm9ybSBuYW1lPSJpbnRlbGxlY3R1YWxtYXJnaW4tbGVmdDoxOHRoIGNlbnR1cnlhbiBpbXBvcnRhbnRpbnN0aXR1dGlvbnNhYmJyZXZpYXRpb248aW1nIGNsYXNzPSJvcmdhbmlzYXRpb25jaXZpbGl6YXRpb24xOXRoIGNlbnR1cnlhcmNoaXRlY3R1cmVpbmNvcnBvcmF0ZWQyMHRoIGNlbnR1cnktY29udGFpbmVyIj5tb3N0IG5vdGFibHkvPjwvYT48L2Rpdj5ub3RpZmljYXRpb24ndW5kZWZpbmVkJylGdXJ0aGVybW9yZSxiZWxpZXZlIHRoYXRpbm5lckhUTUwgPSBwcmlvciB0byB0aGVkcmFtYXRpY2FsbHlyZWZlcnJpbmcgdG9uZWdvdGlhdGlvbnNoZWFkcXVhcnRlcnNTb3V0aCBBZnJpY2F1bnN1Y2Nlc3NmdWxQZW5uc3lsdmFuaWFBcyBhIHJlc3VsdCw8aHRtbCBsYW5nPSImbHQ7L3N1cCZndDtkZWFsaW5nIHdpdGhwaGlsYWRlbHBoaWFoaXN0b3JpY2FsbHkpOzwvc2NyaXB0PgpwYWRkaW5nLXRvcDpleHBlcmltZW50YWxnZXRBdHRyaWJ1dGVpbnN0cnVjdGlvbnN0ZWNobm9sb2dpZXNwYXJ0IG9mIHRoZSA9ZnVuY3Rpb24oKXtzdWJzY3JpcHRpb25sLmR0ZCI+DQo8aHRnZW9ncmFwaGljYWxDb25zdGl0dXRpb24nLCBmdW5jdGlvbihzdXBwb3J0ZWQgYnlhZ3JpY3VsdHVyYWxjb25zdHJ1Y3Rpb25wdWJsaWNhdGlvbnNmb250LXNpemU6IDFhIHZhcmlldHkgb2Y8ZGl2IHN0eWxlPSJFbmN5Y2xvcGVkaWFpZnJhbWUgc3JjPSJkZW1vbnN0cmF0ZWRhY2NvbXBsaXNoZWR1bml2ZXJzaXRpZXNEZW1vZ3JhcGhpY3MpOzwvc2NyaXB0PjxkZWRpY2F0ZWQgdG9rbm93bGVkZ2Ugb2ZzYXRpc2ZhY3Rpb25wYXJ0aWN1bGFybHk8L2Rpdj48L2Rpdj5FbmdsaXNoIChVUylhcHBlbmRDaGlsZCh0cmFuc21pc3Npb25zLiBIb3dldmVyLCBpbnRlbGxpZ2VuY2UiIHRhYmluZGV4PSJmbG9hdDpyaWdodDtDb21tb253ZWFsdGhyYW5naW5nIGZyb21pbiB3aGljaCB0aGVhdCBsZWFzdCBvbmVyZXByb2R1Y3Rpb25lbmN5Y2xvcGVkaWE7Zm9udC1zaXplOjFqdXJpc2RpY3Rpb25hdCB0aGF0IHRpbWUiPjxhIGNsYXNzPSJJbiBhZGRpdGlvbixkZXNjcmlwdGlvbitjb252ZXJzYXRpb25jb250YWN0IHdpdGhpcyBnZW5lcmFsbHlyIiBjb250ZW50PSJyZXByZXNlbnRpbmcmbHQ7bWF0aCZndDtwcmVzZW50YXRpb25vY2Nhc2lvbmFsbHk8aW1nIHdpZHRoPSJuYXZpZ2F0aW9uIj5jb21wZW5zYXRpb25jaGFtcGlvbnNoaXBtZWRpYT0iYWxsIiB2aW9sYXRpb24gb2ZyZWZlcmVuY2UgdG9yZXR1cm4gdHJ1ZTtTdHJpY3QvL0VOIiB0cmFuc2FjdGlvbnNpbnRlcnZlbnRpb252ZXJpZmljYXRpb25JbmZvcm1hdGlvbiBkaWZmaWN1bHRpZXNDaGFtcGlvbnNoaXBjYXBhYmlsaXRpZXM8IVtlbmRpZl0tLT59Cjwvc2NyaXB0PgpDaHJpc3RpYW5pdHlmb3IgZXhhbXBsZSxQcm9mZXNzaW9uYWxyZXN0cmljdGlvbnNzdWdnZXN0IHRoYXR3YXMgcmVsZWFzZWQoc3VjaCBhcyB0aGVyZW1vdmVDbGFzcyh1bmVtcGxveW1lbnR0aGUgQW1lcmljYW5zdHJ1Y3R1cmUgb2YvaW5kZXguaHRtbCBwdWJsaXNoZWQgaW5zcGFuIGNsYXNzPSIiPjxhIGhyZWY9Ii9pbnRyb2R1Y3Rpb25iZWxvbmdpbmcgdG9jbGFpbWVkIHRoYXRjb25zZXF1ZW5jZXM8bWV0YSBuYW1lPSJHdWlkZSB0byB0aGVvdmVyd2hlbG1pbmdhZ2FpbnN0IHRoZSBjb25jZW50cmF0ZWQsCi5ub250b3VjaCBvYnNlcnZhdGlvbnM8L2E+CjwvZGl2PgpmIChkb2N1bWVudC5ib3JkZXI6IDFweCB7Zm9udC1zaXplOjF0cmVhdG1lbnQgb2YwIiBoZWlnaHQ9IjFtb2RpZmljYXRpb25JbmRlcGVuZGVuY2VkaXZpZGVkIGludG9ncmVhdGVyIHRoYW5hY2hpZXZlbWVudHNlc3RhYmxpc2hpbmdKYXZhU2NyaXB0IiBuZXZlcnRoZWxlc3NzaWduaWZpY2FuY2VCcm9hZGNhc3Rpbmc+Jm5ic3A7PC90ZD5jb250YWluZXIiPgpzdWNoIGFzIHRoZSBpbmZsdWVuY2Ugb2ZhIHBhcnRpY3VsYXJzcmM9J2h0dHA6Ly9uYXZpZ2F0aW9uIiBoYWxmIG9mIHRoZSBzdWJzdGFudGlhbCAmbmJzcDs8L2Rpdj5hZHZhbnRhZ2Ugb2ZkaXNjb3Zlcnkgb2ZmdW5kYW1lbnRhbCBtZXRyb3BvbGl0YW50aGUgb3Bwb3NpdGUiIHhtbDpsYW5nPSJkZWxpYmVyYXRlbHlhbGlnbj1jZW50ZXJldm9sdXRpb24gb2ZwcmVzZXJ2YXRpb25pbXByb3ZlbWVudHNiZWdpbm5pbmcgaW5KZXN1cyBDaHJpc3RQdWJsaWNhdGlvbnNkaXNhZ3JlZW1lbnR0ZXh0LWFsaWduOnIsIGZ1bmN0aW9uKClzaW1pbGFyaXRpZXNib2R5PjwvaHRtbD5pcyBjdXJyZW50bHlhbHBoYWJldGljYWxpcyBzb21ldGltZXN0eXBlPSJpbWFnZS9tYW55IG9mIHRoZSBmbG93OmhpZGRlbjthdmFpbGFibGUgaW5kZXNjcmliZSB0aGVleGlzdGVuY2Ugb2ZhbGwgb3ZlciB0aGV0aGUgSW50ZXJuZXQJPHVsIGNsYXNzPSJpbnN0YWxsYXRpb25uZWlnaGJvcmhvb2Rhcm1lZCBmb3JjZXNyZWR1Y2luZyB0aGVjb250aW51ZXMgdG9Ob25ldGhlbGVzcyx0ZW1wZXJhdHVyZXMKCQk8YSBocmVmPSJjbG9zZSB0byB0aGVleGFtcGxlcyBvZiBpcyBhYm91dCB0aGUoc2VlIGJlbG93KS4iIGlkPSJzZWFyY2hwcm9mZXNzaW9uYWxpcyBhdmFpbGFibGV0aGUgb2ZmaWNpYWwJCTwvc2NyaXB0PgoKCQk8ZGl2IGlkPSJhY2NlbGVyYXRpb250aHJvdWdoIHRoZSBIYWxsIG9mIEZhbWVkZXNjcmlwdGlvbnN0cmFuc2xhdGlvbnNpbnRlcmZlcmVuY2UgdHlwZT0ndGV4dC9yZWNlbnQgeWVhcnNpbiB0aGUgd29ybGR2ZXJ5IHBvcHVsYXJ7YmFja2dyb3VuZDp0cmFkaXRpb25hbCBzb21lIG9mIHRoZSBjb25uZWN0ZWQgdG9leHBsb2l0YXRpb25lbWVyZ2VuY2Ugb2Zjb25zdGl0dXRpb25BIEhpc3Rvcnkgb2ZzaWduaWZpY2FudCBtYW51ZmFjdHVyZWRleHBlY3RhdGlvbnM+PG5vc2NyaXB0PjxjYW4gYmUgZm91bmRiZWNhdXNlIHRoZSBoYXMgbm90IGJlZW5uZWlnaGJvdXJpbmd3aXRob3V0IHRoZSBhZGRlZCB0byB0aGUJPGxpIGNsYXNzPSJpbnN0cnVtZW50YWxTb3ZpZXQgVW5pb25hY2tub3dsZWRnZWR3aGljaCBjYW4gYmVuYW1lIGZvciB0aGVhdHRlbnRpb24gdG9hdHRlbXB0cyB0byBkZXZlbG9wbWVudHNJbiBmYWN0LCB0aGU8bGkgY2xhc3M9ImFpbXBsaWNhdGlvbnNzdWl0YWJsZSBmb3JtdWNoIG9mIHRoZSBjb2xvbml6YXRpb25wcmVzaWRlbnRpYWxjYW5jZWxCdWJibGUgSW5mb3JtYXRpb25tb3N0IG9mIHRoZSBpcyBkZXNjcmliZWRyZXN0IG9mIHRoZSBtb3JlIG9yIGxlc3NpbiBTZXB0ZW1iZXJJbnRlbGxpZ2VuY2VzcmM9Imh0dHA6Ly9weDsgaGVpZ2h0OiBhdmFpbGFibGUgdG9tYW51ZmFjdHVyZXJodW1hbiByaWdodHNsaW5rIGhyZWY9Ii9hdmFpbGFiaWxpdHlwcm9wb3J0aW9uYWxvdXRzaWRlIHRoZSBhc3Ryb25vbWljYWxodW1hbiBiZWluZ3NuYW1lIG9mIHRoZSBhcmUgZm91bmQgaW5hcmUgYmFzZWQgb25zbWFsbGVyIHRoYW5hIHBlcnNvbiB3aG9leHBhbnNpb24gb2Zhcmd1aW5nIHRoYXRub3cga25vd24gYXNJbiB0aGUgZWFybHlpbnRlcm1lZGlhdGVkZXJpdmVkIGZyb21TY2FuZGluYXZpYW48L2E+PC9kaXY+DQpjb25zaWRlciB0aGVhbiBlc3RpbWF0ZWR0aGUgTmF0aW9uYWw8ZGl2IGlkPSJwYWdyZXN1bHRpbmcgaW5jb21taXNzaW9uZWRhbmFsb2dvdXMgdG9hcmUgcmVxdWlyZWQvdWw+CjwvZGl2Pgp3YXMgYmFzZWQgb25hbmQgYmVjYW1lIGEmbmJzcDsmbmJzcDt0IiB2YWx1ZT0iIiB3YXMgY2FwdHVyZWRubyBtb3JlIHRoYW5yZXNwZWN0aXZlbHljb250aW51ZSB0byA+DQo8aGVhZD4NCjx3ZXJlIGNyZWF0ZWRtb3JlIGdlbmVyYWxpbmZvcm1hdGlvbiB1c2VkIGZvciB0aGVpbmRlcGVuZGVudCB0aGUgSW1wZXJpYWxjb21wb25lbnQgb2Z0byB0aGUgbm9ydGhpbmNsdWRlIHRoZSBDb25zdHJ1Y3Rpb25zaWRlIG9mIHRoZSB3b3VsZCBub3QgYmVmb3IgaW5zdGFuY2VpbnZlbnRpb24gb2Ztb3JlIGNvbXBsZXhjb2xsZWN0aXZlbHliYWNrZ3JvdW5kOiB0ZXh0LWFsaWduOiBpdHMgb3JpZ2luYWxpbnRvIGFjY291bnR0aGlzIHByb2Nlc3NhbiBleHRlbnNpdmVob3dldmVyLCB0aGV0aGV5IGFyZSBub3RyZWplY3RlZCB0aGVjcml0aWNpc20gb2ZkdXJpbmcgd2hpY2hwcm9iYWJseSB0aGV0aGlzIGFydGljbGUoZnVuY3Rpb24oKXtJdCBzaG91bGQgYmVhbiBhZ3JlZW1lbnRhY2NpZGVudGFsbHlkaWZmZXJzIGZyb21BcmNoaXRlY3R1cmViZXR0ZXIga25vd25hcnJhbmdlbWVudHNpbmZsdWVuY2Ugb25hdHRlbmRlZCB0aGVpZGVudGljYWwgdG9zb3V0aCBvZiB0aGVwYXNzIHRocm91Z2h4bWwiIHRpdGxlPSJ3ZWlnaHQ6Ym9sZDtjcmVhdGluZyB0aGVkaXNwbGF5Om5vbmVyZXBsYWNlZCB0aGU8aW1nIHNyYz0iL2lodHRwczovL3d3dy5Xb3JsZCBXYXIgSUl0ZXN0aW1vbmlhbHNmb3VuZCBpbiB0aGVyZXF1aXJlZCB0byBhbmQgdGhhdCB0aGViZXR3ZWVuIHRoZSB3YXMgZGVzaWduZWRjb25zaXN0cyBvZiBjb25zaWRlcmFibHlwdWJsaXNoZWQgYnl0aGUgbGFuZ3VhZ2VDb25zZXJ2YXRpb25jb25zaXN0ZWQgb2ZyZWZlciB0byB0aGViYWNrIHRvIHRoZSBjc3MiIG1lZGlhPSJQZW9wbGUgZnJvbSBhdmFpbGFibGUgb25wcm92ZWQgdG8gYmVzdWdnZXN0aW9ucyJ3YXMga25vd24gYXN2YXJpZXRpZXMgb2ZsaWtlbHkgdG8gYmVjb21wcmlzZWQgb2ZzdXBwb3J0IHRoZSBoYW5kcyBvZiB0aGVjb3VwbGVkIHdpdGhjb25uZWN0IGFuZCBib3JkZXI6bm9uZTtwZXJmb3JtYW5jZXNiZWZvcmUgYmVpbmdsYXRlciBiZWNhbWVjYWxjdWxhdGlvbnNvZnRlbiBjYWxsZWRyZXNpZGVudHMgb2ZtZWFuaW5nIHRoYXQ+PGxpIGNsYXNzPSJldmlkZW5jZSBmb3JleHBsYW5hdGlvbnNlbnZpcm9ubWVudHMiPjwvYT48L2Rpdj53aGljaCBhbGxvd3NJbnRyb2R1Y3Rpb25kZXZlbG9wZWQgYnlhIHdpZGUgcmFuZ2VvbiBiZWhhbGYgb2Z2YWxpZ249InRvcCJwcmluY2lwbGUgb2ZhdCB0aGUgdGltZSw8L25vc2NyaXB0Pg1zYWlkIHRvIGhhdmVpbiB0aGUgZmlyc3R3aGlsZSBvdGhlcnNoeXBvdGhldGljYWxwaGlsb3NvcGhlcnNwb3dlciBvZiB0aGVjb250YWluZWQgaW5wZXJmb3JtZWQgYnlpbmFiaWxpdHkgdG93ZXJlIHdyaXR0ZW5zcGFuIHN0eWxlPSJpbnB1dCBuYW1lPSJ0aGUgcXVlc3Rpb25pbnRlbmRlZCBmb3JyZWplY3Rpb24gb2ZpbXBsaWVzIHRoYXRpbnZlbnRlZCB0aGV0aGUgc3RhbmRhcmR3YXMgcHJvYmFibHlsaW5rIGJldHdlZW5wcm9mZXNzb3Igb2ZpbnRlcmFjdGlvbnNjaGFuZ2luZyB0aGVJbmRpYW4gT2NlYW4gY2xhc3M9Imxhc3R3b3JraW5nIHdpdGgnaHR0cDovL3d3dy55ZWFycyBiZWZvcmVUaGlzIHdhcyB0aGVyZWNyZWF0aW9uYWxlbnRlcmluZyB0aGVtZWFzdXJlbWVudHNhbiBleHRyZW1lbHl2YWx1ZSBvZiB0aGVzdGFydCBvZiB0aGUKPC9zY3JpcHQ+CgphbiBlZmZvcnQgdG9pbmNyZWFzZSB0aGV0byB0aGUgc291dGhzcGFjaW5nPSIwIj5zdWZmaWNpZW50bHl0aGUgRXVyb3BlYW5jb252ZXJ0ZWQgdG9jbGVhclRpbWVvdXRkaWQgbm90IGhhdmVjb25zZXF1ZW50bHlmb3IgdGhlIG5leHRleHRlbnNpb24gb2ZlY29ub21pYyBhbmRhbHRob3VnaCB0aGVhcmUgcHJvZHVjZWRhbmQgd2l0aCB0aGVpbnN1ZmZpY2llbnRnaXZlbiBieSB0aGVzdGF0aW5nIHRoYXRleHBlbmRpdHVyZXM8L3NwYW4+PC9hPgp0aG91Z2h0IHRoYXRvbiB0aGUgYmFzaXNjZWxscGFkZGluZz1pbWFnZSBvZiB0aGVyZXR1cm5pbmcgdG9pbmZvcm1hdGlvbixzZXBhcmF0ZWQgYnlhc3Nhc3NpbmF0ZWRzIiBjb250ZW50PSJhdXRob3JpdHkgb2Zub3J0aHdlc3Rlcm48L2Rpdj4KPGRpdiAiPjwvZGl2Pg0KICBjb25zdWx0YXRpb25jb21tdW5pdHkgb2Z0aGUgbmF0aW9uYWxpdCBzaG91bGQgYmVwYXJ0aWNpcGFudHMgYWxpZ249ImxlZnR0aGUgZ3JlYXRlc3RzZWxlY3Rpb24gb2ZzdXBlcm5hdHVyYWxkZXBlbmRlbnQgb25pcyBtZW50aW9uZWRhbGxvd2luZyB0aGV3YXMgaW52ZW50ZWRhY2NvbXBhbnlpbmdoaXMgcGVyc29uYWxhdmFpbGFibGUgYXRzdHVkeSBvZiB0aGVvbiB0aGUgb3RoZXJleGVjdXRpb24gb2ZIdW1hbiBSaWdodHN0ZXJtcyBvZiB0aGVhc3NvY2lhdGlvbnNyZXNlYXJjaCBhbmRzdWNjZWVkZWQgYnlkZWZlYXRlZCB0aGVhbmQgZnJvbSB0aGVidXQgdGhleSBhcmVjb21tYW5kZXIgb2ZzdGF0ZSBvZiB0aGV5ZWFycyBvZiBhZ2V0aGUgc3R1ZHkgb2Y8dWwgY2xhc3M9InNwbGFjZSBpbiB0aGV3aGVyZSBoZSB3YXM8bGkgY2xhc3M9ImZ0aGVyZSBhcmUgbm93aGljaCBiZWNhbWVoZSBwdWJsaXNoZWRleHByZXNzZWQgaW50byB3aGljaCB0aGVjb21taXNzaW9uZXJmb250LXdlaWdodDp0ZXJyaXRvcnkgb2ZleHRlbnNpb25zIj5Sb21hbiBFbXBpcmVlcXVhbCB0byB0aGVJbiBjb250cmFzdCxob3dldmVyLCBhbmRpcyB0eXBpY2FsbHlhbmQgaGlzIHdpZmUoYWxzbyBjYWxsZWQ+PHVsIGNsYXNzPSJlZmZlY3RpdmVseSBldm9sdmVkIGludG9zZWVtIHRvIGhhdmV3aGljaCBpcyB0aGV0aGVyZSB3YXMgbm9hbiBleGNlbGxlbnRhbGwgb2YgdGhlc2VkZXNjcmliZWQgYnlJbiBwcmFjdGljZSxicm9hZGNhc3RpbmdjaGFyZ2VkIHdpdGhyZWZsZWN0ZWQgaW5zdWJqZWN0ZWQgdG9taWxpdGFyeSBhbmR0byB0aGUgcG9pbnRlY29ub21pY2FsbHlzZXRUYXJnZXRpbmdhcmUgYWN0dWFsbHl2aWN0b3J5IG92ZXIoKTs8L3NjcmlwdD5jb250aW51b3VzbHlyZXF1aXJlZCBmb3Jldm9sdXRpb25hcnlhbiBlZmZlY3RpdmVub3J0aCBvZiB0aGUsIHdoaWNoIHdhcyBmcm9udCBvZiB0aGVvciBvdGhlcndpc2Vzb21lIGZvcm0gb2ZoYWQgbm90IGJlZW5nZW5lcmF0ZWQgYnlpbmZvcm1hdGlvbi5wZXJtaXR0ZWQgdG9pbmNsdWRlcyB0aGVkZXZlbG9wbWVudCxlbnRlcmVkIGludG90aGUgcHJldmlvdXNjb25zaXN0ZW50bHlhcmUga25vd24gYXN0aGUgZmllbGQgb2Z0aGlzIHR5cGUgb2ZnaXZlbiB0byB0aGV0aGUgdGl0bGUgb2Zjb250YWlucyB0aGVpbnN0YW5jZXMgb2ZpbiB0aGUgbm9ydGhkdWUgdG8gdGhlaXJhcmUgZGVzaWduZWRjb3Jwb3JhdGlvbnN3YXMgdGhhdCB0aGVvbmUgb2YgdGhlc2Vtb3JlIHBvcHVsYXJzdWNjZWVkZWQgaW5zdXBwb3J0IGZyb21pbiBkaWZmZXJlbnRkb21pbmF0ZWQgYnlkZXNpZ25lZCBmb3Jvd25lcnNoaXAgb2ZhbmQgcG9zc2libHlzdGFuZGFyZGl6ZWRyZXNwb25zZVRleHR3YXMgaW50ZW5kZWRyZWNlaXZlZCB0aGVhc3N1bWVkIHRoYXRhcmVhcyBvZiB0aGVwcmltYXJpbHkgaW50aGUgYmFzaXMgb2ZpbiB0aGUgc2Vuc2VhY2NvdW50cyBmb3JkZXN0cm95ZWQgYnlhdCBsZWFzdCB0d293YXMgZGVjbGFyZWRjb3VsZCBub3QgYmVTZWNyZXRhcnkgb2ZhcHBlYXIgdG8gYmVtYXJnaW4tdG9wOjEvXlxzK3xccyskL2dlKXt0aHJvdyBlfTt0aGUgc3RhcnQgb2Z0d28gc2VwYXJhdGVsYW5ndWFnZSBhbmR3aG8gaGFkIGJlZW5vcGVyYXRpb24gb2ZkZWF0aCBvZiB0aGVyZWFsIG51bWJlcnMJPGxpbmsgcmVsPSJwcm92aWRlZCB0aGV0aGUgc3Rvcnkgb2Zjb21wZXRpdGlvbnNlbmdsaXNoIChVSyllbmdsaXNoIChVUynQnNC+0L3Qs9C+0LvQodGA0L/RgdC60LjRgdGA0L/RgdC60LjRgdGA0L/RgdC60L7ZhNi52LHYqNmK2KnmraPpq5TkuK3mlofnroDkvZPkuK3mlofnuYHkvZPkuK3mlofmnInpmZDlhazlj7jkurrmsJHmlL/lupzpmL/ph4zlt7Tlt7TnpL7kvJrkuLvkuYnmk43kvZzns7vnu5/mlL/nrZbms5Xop4RpbmZvcm1hY2nDs25oZXJyYW1pZW50YXNlbGVjdHLDs25pY29kZXNjcmlwY2nDs25jbGFzaWZpY2Fkb3Njb25vY2ltaWVudG9wdWJsaWNhY2nDs25yZWxhY2lvbmFkYXNpbmZvcm3DoXRpY2FyZWxhY2lvbmFkb3NkZXBhcnRhbWVudG90cmFiYWphZG9yZXNkaXJlY3RhbWVudGVheXVudGFtaWVudG9tZXJjYWRvTGlicmVjb250w6FjdGVub3NoYWJpdGFjaW9uZXNjdW1wbGltaWVudG9yZXN0YXVyYW50ZXNkaXNwb3NpY2nDs25jb25zZWN1ZW5jaWFlbGVjdHLDs25pY2FhcGxpY2FjaW9uZXNkZXNjb25lY3RhZG9pbnN0YWxhY2nDs25yZWFsaXphY2nDs251dGlsaXphY2nDs25lbmNpY2xvcGVkaWFlbmZlcm1lZGFkZXNpbnN0cnVtZW50b3NleHBlcmllbmNpYXNpbnN0aXR1Y2nDs25wYXJ0aWN1bGFyZXNzdWJjYXRlZ29yaWHRgtC+0LvRjNC60L7QoNC+0YHRgdC40LjRgNCw0LHQvtGC0YvQsdC+0LvRjNGI0LXQv9GA0L7RgdGC0L7QvNC+0LbQtdGC0LXQtNGA0YPQs9C40YXRgdC70YPRh9Cw0LXRgdC10LnRh9Cw0YHQstGB0LXQs9C00LDQoNC+0YHRgdC40Y/QnNC+0YHQutCy0LXQtNGA0YPQs9C40LXQs9C+0YDQvtC00LDQstC+0L/RgNC+0YHQtNCw0L3QvdGL0YXQtNC+0LvQttC90YvQuNC80LXQvdC90L7QnNC+0YHQutCy0YvRgNGD0LHQu9C10LnQnNC+0YHQutCy0LDRgdGC0YDQsNC90YvQvdC40YfQtdCz0L7RgNCw0LHQvtGC0LXQtNC+0LvQttC10L3Rg9GB0LvRg9Cz0LjRgtC10L/QtdGA0YzQntC00L3QsNC60L7Qv9C+0YLQvtC80YPRgNCw0LHQvtGC0YPQsNC/0YDQtdC70Y/QstC+0L7QsdGJ0LXQvtC00L3QvtCz0L7RgdCy0L7QtdCz0L7RgdGC0LDRgtGM0LjQtNGA0YPQs9C+0LnRhNC+0YDRg9C80LXRhdC+0YDQvtGI0L7Qv9GA0L7RgtC40LLRgdGB0YvQu9C60LDQutCw0LbQtNGL0LnQstC70LDRgdGC0LjQs9GA0YPQv9C/0YvQstC80LXRgdGC0LXRgNCw0LHQvtGC0LDRgdC60LDQt9Cw0LvQv9C10YDQstGL0LnQtNC10LvQsNGC0YzQtNC10L3RjNCz0LjQv9C10YDQuNC+0LTQsdC40LfQvdC10YHQvtGB0L3QvtCy0LXQvNC+0LzQtdC90YLQutGD0L/QuNGC0YzQtNC+0LvQttC90LDRgNCw0LzQutCw0YXQvdCw0YfQsNC70L7QoNCw0LHQvtGC0LDQotC+0LvRjNC60L7RgdC+0LLRgdC10LzQstGC0L7RgNC+0LnQvdCw0YfQsNC70LDRgdC/0LjRgdC+0LrRgdC70YPQttCx0YvRgdC40YHRgtC10LzQv9C10YfQsNGC0LjQvdC+0LLQvtCz0L7Qv9C+0LzQvtGJ0LjRgdCw0LnRgtC+0LLQv9C+0YfQtdC80YPQv9C+0LzQvtGJ0YzQtNC+0LvQttC90L7RgdGB0YvQu9C60LjQsdGL0YHRgtGA0L7QtNCw0L3QvdGL0LXQvNC90L7Qs9C40LXQv9GA0L7QtdC60YLQodC10LnRh9Cw0YHQvNC+0LTQtdC70LjRgtCw0LrQvtCz0L7QvtC90LvQsNC50L3Qs9C+0YDQvtC00LXQstC10YDRgdC40Y/RgdGC0YDQsNC90LXRhNC40LvRjNC80YvRg9GA0L7QstC90Y/RgNCw0LfQvdGL0YXQuNGB0LrQsNGC0YzQvdC10LTQtdC70Y7Rj9C90LLQsNGA0Y/QvNC10L3RjNGI0LXQvNC90L7Qs9C40YXQtNCw0L3QvdC+0LnQt9C90LDRh9C40YLQvdC10LvRjNC30Y/RhNC+0YDRg9C80LDQotC10L/QtdGA0YzQvNC10YHRj9GG0LDQt9Cw0YnQuNGC0YvQm9GD0YfRiNC40LXgpKjgpLngpYDgpILgpJXgpLDgpKjgpYfgpIXgpKrgpKjgpYfgpJXgpL/gpK/gpL7gpJXgpLDgpYfgpILgpIXgpKjgpY3gpK/gpJXgpY3gpK/gpL7gpJfgpL7gpIfgpKHgpKzgpL7gpLDgpYfgpJXgpL/gpLjgpYDgpKbgpL/gpK/gpL7gpKrgpLngpLLgpYfgpLjgpL/gpILgpLngpK3gpL7gpLDgpKTgpIXgpKrgpKjgpYDgpLXgpL7gpLLgpYfgpLjgpYfgpLXgpL7gpJXgpLDgpKTgpYfgpK7gpYfgpLDgpYfgpLngpYvgpKjgpYfgpLjgpJXgpKTgpYfgpKzgpLngpYHgpKTgpLjgpL7gpIfgpJ/gpLngpYvgpJfgpL7gpJzgpL7gpKjgpYfgpK7gpL/gpKjgpJ/gpJXgpLDgpKTgpL7gpJXgpLDgpKjgpL7gpIngpKjgpJXgpYfgpK/gpLngpL7gpIHgpLjgpKzgpLjgpYfgpK3gpL7gpLfgpL7gpIbgpKrgpJXgpYfgpLLgpL/gpK/gpYfgpLbgpYHgpLDgpYLgpIfgpLjgpJXgpYfgpJjgpILgpJ/gpYfgpK7gpYfgpLDgpYDgpLjgpJXgpKTgpL7gpK7gpYfgpLDgpL7gpLLgpYfgpJXgpLDgpIXgpKfgpL/gpJXgpIXgpKrgpKjgpL7gpLjgpK7gpL7gpJzgpK7gpYHgpJ3gpYfgpJXgpL7gpLDgpKPgpLngpYvgpKTgpL7gpJXgpKHgpLzgpYDgpK/gpLngpL7gpILgpLngpYvgpJ/gpLLgpLbgpKzgpY3gpKbgpLLgpL/gpK/gpL7gpJzgpYDgpLXgpKjgpJzgpL7gpKTgpL7gpJXgpYjgpLjgpYfgpIbgpKrgpJXgpL7gpLXgpL7gpLLgpYDgpKbgpYfgpKjgpYfgpKrgpYLgpLDgpYDgpKrgpL7gpKjgpYDgpIngpLjgpJXgpYfgpLngpYvgpJfgpYDgpKzgpYjgpKDgpJXgpIbgpKrgpJXgpYDgpLXgpLDgpY3gpLfgpJfgpL7gpILgpLXgpIbgpKrgpJXgpYvgpJzgpL/gpLLgpL7gpJzgpL7gpKjgpL7gpLjgpLngpK7gpKTgpLngpK7gpYfgpILgpIngpKjgpJXgpYDgpK/gpL7gpLngpYLgpKbgpLDgpY3gpJzgpLjgpYLgpJrgpYDgpKrgpLjgpILgpKbgpLjgpLXgpL7gpLLgpLngpYvgpKjgpL7gpLngpYvgpKTgpYDgpJzgpYjgpLjgpYfgpLXgpL7gpKrgpLjgpJzgpKjgpKTgpL7gpKjgpYfgpKTgpL7gpJzgpL7gpLDgpYDgpJjgpL7gpK/gpLLgpJzgpL/gpLLgpYfgpKjgpYDgpJrgpYfgpJzgpL7gpILgpJrgpKrgpKTgpY3gpLDgpJfgpYLgpJfgpLLgpJzgpL7gpKTgpYfgpKzgpL7gpLngpLDgpIbgpKrgpKjgpYfgpLXgpL7gpLngpKjgpIfgpLjgpJXgpL7gpLjgpYHgpKzgpLngpLDgpLngpKjgpYfgpIfgpLjgpLjgpYfgpLjgpLngpL/gpKTgpKzgpKHgpLzgpYfgpJjgpJ/gpKjgpL7gpKTgpLLgpL7gpLbgpKrgpL7gpILgpJrgpLbgpY3gpLDgpYDgpKzgpKHgpLzgpYDgpLngpYvgpKTgpYfgpLjgpL7gpIjgpJ/gpLbgpL7gpK/gpKbgpLjgpJXgpKTgpYDgpJzgpL7gpKTgpYDgpLXgpL7gpLLgpL7gpLngpJzgpL7gpLDgpKrgpJ/gpKjgpL7gpLDgpJbgpKjgpYfgpLjgpKHgpLzgpJXgpK7gpL/gpLLgpL7gpIngpLjgpJXgpYDgpJXgpYfgpLXgpLLgpLLgpJfgpKTgpL7gpJbgpL7gpKjgpL7gpIXgpLDgpY3gpKXgpJzgpLngpL7gpILgpKbgpYfgpJbgpL7gpKrgpLngpLLgpYDgpKjgpL/gpK/gpK7gpKzgpL/gpKjgpL7gpKzgpYjgpILgpJXgpJXgpLngpYDgpILgpJXgpLngpKjgpL7gpKbgpYfgpKTgpL7gpLngpK7gpLLgpYfgpJXgpL7gpKvgpYDgpJzgpKzgpJXgpL/gpKTgpYHgpLDgpKTgpK7gpL7gpILgpJfgpLXgpLngpYDgpILgpLDgpYvgpJzgpLzgpK7gpL/gpLLgpYDgpIbgpLDgpYvgpKrgpLjgpYfgpKjgpL7gpK/gpL7gpKbgpLXgpLLgpYfgpKjgpYfgpJbgpL7gpKTgpL7gpJXgpLDgpYDgpKzgpIngpKjgpJXgpL7gpJzgpLXgpL7gpKzgpKrgpYLgpLDgpL7gpKzgpKHgpLzgpL7gpLjgpYzgpKbgpL7gpLbgpYfgpK/gpLDgpJXgpL/gpK/gpYfgpJXgpLngpL7gpILgpIXgpJXgpLjgpLDgpKzgpKjgpL7gpI/gpLXgpLngpL7gpILgpLjgpY3gpKXgpLLgpK7gpL/gpLLgpYfgpLLgpYfgpJbgpJXgpLXgpL/gpLfgpK/gpJXgpY3gpLDgpILgpLjgpK7gpYLgpLngpKXgpL7gpKjgpL7Yqtiz2KrYt9mK2LnZhdi02KfYsdmD2KnYqNmI2KfYs9i32KnYp9mE2LXZgdit2KnZhdmI2KfYttmK2LnYp9mE2K7Yp9i12KnYp9mE2YXYstmK2K/Yp9mE2LnYp9mF2KnYp9mE2YPYp9iq2KjYp9mE2LHYr9mI2K/YqNix2YbYp9mF2KzYp9mE2K/ZiNmE2KnYp9mE2LnYp9mE2YXYp9mE2YXZiNmC2LnYp9mE2LnYsdio2YrYp9mE2LPYsdmK2LnYp9mE2KzZiNin2YTYp9mE2LDZh9in2KjYp9mE2K3Zitin2KnYp9mE2K3ZgtmI2YLYp9mE2YPYsdmK2YXYp9mE2LnYsdin2YLZhdit2YHZiNi42KnYp9mE2KvYp9mG2YrZhdi02KfZh9iv2KnYp9mE2YXYsdij2KnYp9mE2YLYsdii2YbYp9mE2LTYqNin2KjYp9mE2K3ZiNin2LHYp9mE2KzYr9mK2K/Yp9mE2KPYs9ix2KnYp9mE2LnZhNmI2YXZhdis2YXZiNi52KnYp9mE2LHYrdmF2YbYp9mE2YbZgtin2LfZgdmE2LPYt9mK2YbYp9mE2YPZiNmK2KrYp9mE2K/ZhtmK2KfYqNix2YPYp9iq2YfYp9mE2LHZitin2LbYqtit2YrYp9iq2YrYqNiq2YjZgtmK2KrYp9mE2KPZiNmE2YnYp9mE2KjYsdmK2K/Yp9mE2YPZhNin2YXYp9mE2LHYp9io2LfYp9mE2LTYrti12YrYs9mK2KfYsdin2KrYp9mE2KvYp9mE2KvYp9mE2LXZhNin2KnYp9mE2K3Yr9mK2KvYp9mE2LLZiNin2LHYp9mE2K7ZhNmK2KzYp9mE2KzZhdmK2LnYp9mE2LnYp9mF2YfYp9mE2KzZhdin2YTYp9mE2LPYp9i52KnZhdi02KfZh9iv2YfYp9mE2LHYptmK2LPYp9mE2K/YrtmI2YTYp9mE2YHZhtmK2KnYp9mE2YPYqtin2KjYp9mE2K/ZiNix2YrYp9mE2K/YsdmI2LPYp9iz2KrYutix2YLYqti12KfZhdmK2YXYp9mE2KjZhtin2KrYp9mE2LnYuNmK2YVlbnRlcnRhaW5tZW50dW5kZXJzdGFuZGluZyA9IGZ1bmN0aW9uKCkuanBnIiB3aWR0aD0iY29uZmlndXJhdGlvbi5wbmciIHdpZHRoPSI8Ym9keSBjbGFzcz0iTWF0aC5yYW5kb20oKWNvbnRlbXBvcmFyeSBVbml0ZWQgU3RhdGVzY2lyY3Vtc3RhbmNlcy5hcHBlbmRDaGlsZChvcmdhbml6YXRpb25zPHNwYW4gY2xhc3M9IiI+PGltZyBzcmM9Ii9kaXN0aW5ndWlzaGVkdGhvdXNhbmRzIG9mIGNvbW11bmljYXRpb25jbGVhciI+PC9kaXY+aW52ZXN0aWdhdGlvbmZhdmljb24uaWNvIiBtYXJnaW4tcmlnaHQ6YmFzZWQgb24gdGhlIE1hc3NhY2h1c2V0dHN0YWJsZSBib3JkZXI9aW50ZXJuYXRpb25hbGFsc28ga25vd24gYXNwcm9udW5jaWF0aW9uYmFja2dyb3VuZDojZnBhZGRpbmctbGVmdDpGb3IgZXhhbXBsZSwgbWlzY2VsbGFuZW91cyZsdDsvbWF0aCZndDtwc3ljaG9sb2dpY2FsaW4gcGFydGljdWxhcmVhcmNoIiB0eXBlPSJmb3JtIG1ldGhvZD0iYXMgb3Bwb3NlZCB0b1N1cHJlbWUgQ291cnRvY2Nhc2lvbmFsbHkgQWRkaXRpb25hbGx5LE5vcnRoIEFtZXJpY2FweDtiYWNrZ3JvdW5kb3Bwb3J0dW5pdGllc0VudGVydGFpbm1lbnQudG9Mb3dlckNhc2UobWFudWZhY3R1cmluZ3Byb2Zlc3Npb25hbCBjb21iaW5lZCB3aXRoRm9yIGluc3RhbmNlLGNvbnNpc3Rpbmcgb2YiIG1heGxlbmd0aD0icmV0dXJuIGZhbHNlO2NvbnNjaW91c25lc3NNZWRpdGVycmFuZWFuZXh0cmFvcmRpbmFyeWFzc2Fzc2luYXRpb25zdWJzZXF1ZW50bHkgYnV0dG9uIHR5cGU9InRoZSBudW1iZXIgb2Z0aGUgb3JpZ2luYWwgY29tcHJlaGVuc2l2ZXJlZmVycyB0byB0aGU8L3VsPgo8L2Rpdj4KcGhpbG9zb3BoaWNhbGxvY2F0aW9uLmhyZWZ3YXMgcHVibGlzaGVkU2FuIEZyYW5jaXNjbyhmdW5jdGlvbigpewo8ZGl2IGlkPSJtYWluc29waGlzdGljYXRlZG1hdGhlbWF0aWNhbCAvaGVhZD4NCjxib2R5c3VnZ2VzdHMgdGhhdGRvY3VtZW50YXRpb25jb25jZW50cmF0aW9ucmVsYXRpb25zaGlwc21heSBoYXZlIGJlZW4oZm9yIGV4YW1wbGUsVGhpcyBhcnRpY2xlIGluIHNvbWUgY2FzZXNwYXJ0cyBvZiB0aGUgZGVmaW5pdGlvbiBvZkdyZWF0IEJyaXRhaW4gY2VsbHBhZGRpbmc9ZXF1aXZhbGVudCB0b3BsYWNlaG9sZGVyPSI7IGZvbnQtc2l6ZToganVzdGlmaWNhdGlvbmJlbGlldmVkIHRoYXRzdWZmZXJlZCBmcm9tYXR0ZW1wdGVkIHRvIGxlYWRlciBvZiB0aGVjcmlwdCIgc3JjPSIvKGZ1bmN0aW9uKCkge2FyZSBhdmFpbGFibGUKCTxsaW5rIHJlbD0iIHNyYz0naHR0cDovL2ludGVyZXN0ZWQgaW5jb252ZW50aW9uYWwgIiBhbHQ9IiIgLz48L2FyZSBnZW5lcmFsbHloYXMgYWxzbyBiZWVubW9zdCBwb3B1bGFyIGNvcnJlc3BvbmRpbmdjcmVkaXRlZCB3aXRodHlsZT0iYm9yZGVyOjwvYT48L3NwYW4+PC8uZ2lmIiB3aWR0aD0iPGlmcmFtZSBzcmM9InRhYmxlIGNsYXNzPSJpbmxpbmUtYmxvY2s7YWNjb3JkaW5nIHRvIHRvZ2V0aGVyIHdpdGhhcHByb3hpbWF0ZWx5cGFybGlhbWVudGFyeW1vcmUgYW5kIG1vcmVkaXNwbGF5Om5vbmU7dHJhZGl0aW9uYWxseXByZWRvbWluYW50bHkmbmJzcDt8Jm5ic3A7Jm5ic3A7PC9zcGFuPiBjZWxsc3BhY2luZz08aW5wdXQgbmFtZT0ib3IiIGNvbnRlbnQ9ImNvbnRyb3ZlcnNpYWxwcm9wZXJ0eT0ib2c6L3gtc2hvY2t3YXZlLWRlbW9uc3RyYXRpb25zdXJyb3VuZGVkIGJ5TmV2ZXJ0aGVsZXNzLHdhcyB0aGUgZmlyc3Rjb25zaWRlcmFibGUgQWx0aG91Z2ggdGhlIGNvbGxhYm9yYXRpb25zaG91bGQgbm90IGJlcHJvcG9ydGlvbiBvZjxzcGFuIHN0eWxlPSJrbm93biBhcyB0aGUgc2hvcnRseSBhZnRlcmZvciBpbnN0YW5jZSxkZXNjcmliZWQgYXMgL2hlYWQ+Cjxib2R5IHN0YXJ0aW5nIHdpdGhpbmNyZWFzaW5nbHkgdGhlIGZhY3QgdGhhdGRpc2N1c3Npb24gb2ZtaWRkbGUgb2YgdGhlYW4gaW5kaXZpZHVhbGRpZmZpY3VsdCB0byBwb2ludCBvZiB2aWV3aG9tb3NleHVhbGl0eWFjY2VwdGFuY2Ugb2Y8L3NwYW4+PC9kaXY+bWFudWZhY3R1cmVyc29yaWdpbiBvZiB0aGVjb21tb25seSB1c2VkaW1wb3J0YW5jZSBvZmRlbm9taW5hdGlvbnNiYWNrZ3JvdW5kOiAjbGVuZ3RoIG9mIHRoZWRldGVybWluYXRpb25hIHNpZ25pZmljYW50IiBib3JkZXI9IjAiPnJldm9sdXRpb25hcnlwcmluY2lwbGVzIG9maXMgY29uc2lkZXJlZHdhcyBkZXZlbG9wZWRJbmRvLUV1cm9wZWFudnVsbmVyYWJsZSB0b3Byb3BvbmVudHMgb2ZhcmUgc29tZXRpbWVzY2xvc2VyIHRvIHRoZU5ldyBZb3JrIENpdHkgbmFtZT0ic2VhcmNoYXR0cmlidXRlZCB0b2NvdXJzZSBvZiB0aGVtYXRoZW1hdGljaWFuYnkgdGhlIGVuZCBvZmF0IHRoZSBlbmQgb2YiIGJvcmRlcj0iMCIgdGVjaG5vbG9naWNhbC5yZW1vdmVDbGFzcyhicmFuY2ggb2YgdGhlZXZpZGVuY2UgdGhhdCFbZW5kaWZdLS0+DQpJbnN0aXR1dGUgb2YgaW50byBhIHNpbmdsZXJlc3BlY3RpdmVseS5hbmQgdGhlcmVmb3JlcHJvcGVydGllcyBvZmlzIGxvY2F0ZWQgaW5zb21lIG9mIHdoaWNoVGhlcmUgaXMgYWxzb2NvbnRpbnVlZCB0byBhcHBlYXJhbmNlIG9mICZhbXA7bmRhc2g7IGRlc2NyaWJlcyB0aGVjb25zaWRlcmF0aW9uYXV0aG9yIG9mIHRoZWluZGVwZW5kZW50bHllcXVpcHBlZCB3aXRoZG9lcyBub3QgaGF2ZTwvYT48YSBocmVmPSJjb25mdXNlZCB3aXRoPGxpbmsgaHJlZj0iL2F0IHRoZSBhZ2Ugb2ZhcHBlYXIgaW4gdGhlVGhlc2UgaW5jbHVkZXJlZ2FyZGxlc3Mgb2Zjb3VsZCBiZSB1c2VkIHN0eWxlPSZxdW90O3NldmVyYWwgdGltZXNyZXByZXNlbnQgdGhlYm9keT4KPC9odG1sPnRob3VnaHQgdG8gYmVwb3B1bGF0aW9uIG9mcG9zc2liaWxpdGllc3BlcmNlbnRhZ2Ugb2ZhY2Nlc3MgdG8gdGhlYW4gYXR0ZW1wdCB0b3Byb2R1Y3Rpb24gb2ZqcXVlcnkvanF1ZXJ5dHdvIGRpZmZlcmVudGJlbG9uZyB0byB0aGVlc3RhYmxpc2htZW50cmVwbGFjaW5nIHRoZWRlc2NyaXB0aW9uIiBkZXRlcm1pbmUgdGhlYXZhaWxhYmxlIGZvckFjY29yZGluZyB0byB3aWRlIHJhbmdlIG9mCTxkaXYgY2xhc3M9Im1vcmUgY29tbW9ubHlvcmdhbmlzYXRpb25zZnVuY3Rpb25hbGl0eXdhcyBjb21wbGV0ZWQgJmFtcDttZGFzaDsgcGFydGljaXBhdGlvbnRoZSBjaGFyYWN0ZXJhbiBhZGRpdGlvbmFsYXBwZWFycyB0byBiZWZhY3QgdGhhdCB0aGVhbiBleGFtcGxlIG9mc2lnbmlmaWNhbnRseW9ubW91c2VvdmVyPSJiZWNhdXNlIHRoZXkgYXN5bmMgPSB0cnVlO3Byb2JsZW1zIHdpdGhzZWVtcyB0byBoYXZldGhlIHJlc3VsdCBvZiBzcmM9Imh0dHA6Ly9mYW1pbGlhciB3aXRocG9zc2Vzc2lvbiBvZmZ1bmN0aW9uICgpIHt0b29rIHBsYWNlIGluYW5kIHNvbWV0aW1lc3N1YnN0YW50aWFsbHk8c3Bhbj48L3NwYW4+aXMgb2Z0ZW4gdXNlZGluIGFuIGF0dGVtcHRncmVhdCBkZWFsIG9mRW52aXJvbm1lbnRhbHN1Y2Nlc3NmdWxseSB2aXJ0dWFsbHkgYWxsMjB0aCBjZW50dXJ5LHByb2Zlc3Npb25hbHNuZWNlc3NhcnkgdG8gZGV0ZXJtaW5lZCBieWNvbXBhdGliaWxpdHliZWNhdXNlIGl0IGlzRGljdGlvbmFyeSBvZm1vZGlmaWNhdGlvbnNUaGUgZm9sbG93aW5nbWF5IHJlZmVyIHRvOkNvbnNlcXVlbnRseSxJbnRlcm5hdGlvbmFsYWx0aG91Z2ggc29tZXRoYXQgd291bGQgYmV3b3JsZCdzIGZpcnN0Y2xhc3NpZmllZCBhc2JvdHRvbSBvZiB0aGUocGFydGljdWxhcmx5YWxpZ249ImxlZnQiIG1vc3QgY29tbW9ubHliYXNpcyBmb3IgdGhlZm91bmRhdGlvbiBvZmNvbnRyaWJ1dGlvbnNwb3B1bGFyaXR5IG9mY2VudGVyIG9mIHRoZXRvIHJlZHVjZSB0aGVqdXJpc2RpY3Rpb25zYXBwcm94aW1hdGlvbiBvbm1vdXNlb3V0PSJOZXcgVGVzdGFtZW50Y29sbGVjdGlvbiBvZjwvc3Bhbj48L2E+PC9pbiB0aGUgVW5pdGVkZmlsbSBkaXJlY3Rvci1zdHJpY3QuZHRkIj5oYXMgYmVlbiB1c2VkcmV0dXJuIHRvIHRoZWFsdGhvdWdoIHRoaXNjaGFuZ2UgaW4gdGhlc2V2ZXJhbCBvdGhlcmJ1dCB0aGVyZSBhcmV1bnByZWNlZGVudGVkaXMgc2ltaWxhciB0b2VzcGVjaWFsbHkgaW53ZWlnaHQ6IGJvbGQ7aXMgY2FsbGVkIHRoZWNvbXB1dGF0aW9uYWxpbmRpY2F0ZSB0aGF0cmVzdHJpY3RlZCB0bwk8bWV0YSBuYW1lPSJhcmUgdHlwaWNhbGx5Y29uZmxpY3Qgd2l0aEhvd2V2ZXIsIHRoZSBBbiBleGFtcGxlIG9mY29tcGFyZWQgd2l0aHF1YW50aXRpZXMgb2ZyYXRoZXIgdGhhbiBhY29uc3RlbGxhdGlvbm5lY2Vzc2FyeSBmb3JyZXBvcnRlZCB0aGF0c3BlY2lmaWNhdGlvbnBvbGl0aWNhbCBhbmQmbmJzcDsmbmJzcDs8cmVmZXJlbmNlcyB0b3RoZSBzYW1lIHllYXJHb3Zlcm5tZW50IG9mZ2VuZXJhdGlvbiBvZmhhdmUgbm90IGJlZW5zZXZlcmFsIHllYXJzY29tbWl0bWVudCB0bwkJPHVsIGNsYXNzPSJ2aXN1YWxpemF0aW9uMTl0aCBjZW50dXJ5LHByYWN0aXRpb25lcnN0aGF0IGhlIHdvdWxkYW5kIGNvbnRpbnVlZG9jY3VwYXRpb24gb2ZpcyBkZWZpbmVkIGFzY2VudHJlIG9mIHRoZXRoZSBhbW91bnQgb2Y+PGRpdiBzdHlsZT0iZXF1aXZhbGVudCBvZmRpZmZlcmVudGlhdGVicm91Z2h0IGFib3V0bWFyZ2luLWxlZnQ6IGF1dG9tYXRpY2FsbHl0aG91Z2h0IG9mIGFzU29tZSBvZiB0aGVzZQo8ZGl2IGNsYXNzPSJpbnB1dCBjbGFzcz0icmVwbGFjZWQgd2l0aGlzIG9uZSBvZiB0aGVlZHVjYXRpb24gYW5kaW5mbHVlbmNlZCBieXJlcHV0YXRpb24gYXMKPG1ldGEgbmFtZT0iYWNjb21tb2RhdGlvbjwvZGl2Pgo8L2Rpdj5sYXJnZSBwYXJ0IG9mSW5zdGl0dXRlIGZvcnRoZSBzby1jYWxsZWQgYWdhaW5zdCB0aGUgSW4gdGhpcyBjYXNlLHdhcyBhcHBvaW50ZWRjbGFpbWVkIHRvIGJlSG93ZXZlciwgdGhpc0RlcGFydG1lbnQgb2Z0aGUgcmVtYWluaW5nZWZmZWN0IG9uIHRoZXBhcnRpY3VsYXJseSBkZWFsIHdpdGggdGhlCjxkaXYgc3R5bGU9ImFsbW9zdCBhbHdheXNhcmUgY3VycmVudGx5ZXhwcmVzc2lvbiBvZnBoaWxvc29waHkgb2Zmb3IgbW9yZSB0aGFuY2l2aWxpemF0aW9uc29uIHRoZSBpc2xhbmRzZWxlY3RlZEluZGV4Y2FuIHJlc3VsdCBpbiIgdmFsdWU9IiIgLz50aGUgc3RydWN0dXJlIC8+PC9hPjwvZGl2Pk1hbnkgb2YgdGhlc2VjYXVzZWQgYnkgdGhlb2YgdGhlIFVuaXRlZHNwYW4gY2xhc3M9Im1jYW4gYmUgdHJhY2VkaXMgcmVsYXRlZCB0b2JlY2FtZSBvbmUgb2ZpcyBmcmVxdWVudGx5bGl2aW5nIGluIHRoZXRoZW9yZXRpY2FsbHlGb2xsb3dpbmcgdGhlUmV2b2x1dGlvbmFyeWdvdmVybm1lbnQgaW5pcyBkZXRlcm1pbmVkdGhlIHBvbGl0aWNhbGludHJvZHVjZWQgaW5zdWZmaWNpZW50IHRvZGVzY3JpcHRpb24iPnNob3J0IHN0b3JpZXNzZXBhcmF0aW9uIG9mYXMgdG8gd2hldGhlcmtub3duIGZvciBpdHN3YXMgaW5pdGlhbGx5ZGlzcGxheTpibG9ja2lzIGFuIGV4YW1wbGV0aGUgcHJpbmNpcGFsY29uc2lzdHMgb2YgYXJlY29nbml6ZWQgYXMvYm9keT48L2h0bWw+YSBzdWJzdGFudGlhbHJlY29uc3RydWN0ZWRoZWFkIG9mIHN0YXRlcmVzaXN0YW5jZSB0b3VuZGVyZ3JhZHVhdGVUaGVyZSBhcmUgdHdvZ3Jhdml0YXRpb25hbGFyZSBkZXNjcmliZWRpbnRlbnRpb25hbGx5c2VydmVkIGFzIHRoZWNsYXNzPSJoZWFkZXJvcHBvc2l0aW9uIHRvZnVuZGFtZW50YWxseWRvbWluYXRlZCB0aGVhbmQgdGhlIG90aGVyYWxsaWFuY2Ugd2l0aHdhcyBmb3JjZWQgdG9yZXNwZWN0aXZlbHksYW5kIHBvbGl0aWNhbGluIHN1cHBvcnQgb2ZwZW9wbGUgaW4gdGhlMjB0aCBjZW50dXJ5LmFuZCBwdWJsaXNoZWRsb2FkQ2hhcnRiZWF0dG8gdW5kZXJzdGFuZG1lbWJlciBzdGF0ZXNlbnZpcm9ubWVudGFsZmlyc3QgaGFsZiBvZmNvdW50cmllcyBhbmRhcmNoaXRlY3R1cmFsYmUgY29uc2lkZXJlZGNoYXJhY3Rlcml6ZWRjbGVhckludGVydmFsYXV0aG9yaXRhdGl2ZUZlZGVyYXRpb24gb2Z3YXMgc3VjY2VlZGVkYW5kIHRoZXJlIGFyZWEgY29uc2VxdWVuY2V0aGUgUHJlc2lkZW50YWxzbyBpbmNsdWRlZGZyZWUgc29mdHdhcmVzdWNjZXNzaW9uIG9mZGV2ZWxvcGVkIHRoZXdhcyBkZXN0cm95ZWRhd2F5IGZyb20gdGhlOwo8L3NjcmlwdD4KPGFsdGhvdWdoIHRoZXlmb2xsb3dlZCBieSBhbW9yZSBwb3dlcmZ1bHJlc3VsdGVkIGluIGFVbml2ZXJzaXR5IG9mSG93ZXZlciwgbWFueXRoZSBwcmVzaWRlbnRIb3dldmVyLCBzb21laXMgdGhvdWdodCB0b3VudGlsIHRoZSBlbmR3YXMgYW5ub3VuY2VkYXJlIGltcG9ydGFudGFsc28gaW5jbHVkZXM+PGlucHV0IHR5cGU9dGhlIGNlbnRlciBvZiBETyBOT1QgQUxURVJ1c2VkIHRvIHJlZmVydGhlbWVzLz9zb3J0PXRoYXQgaGFkIGJlZW50aGUgYmFzaXMgZm9yaGFzIGRldmVsb3BlZGluIHRoZSBzdW1tZXJjb21wYXJhdGl2ZWx5ZGVzY3JpYmVkIHRoZXN1Y2ggYXMgdGhvc2V0aGUgcmVzdWx0aW5naXMgaW1wb3NzaWJsZXZhcmlvdXMgb3RoZXJTb3V0aCBBZnJpY2FuaGF2ZSB0aGUgc2FtZWVmZmVjdGl2ZW5lc3NpbiB3aGljaCBjYXNlOyB0ZXh0LWFsaWduOnN0cnVjdHVyZSBhbmQ7IGJhY2tncm91bmQ6cmVnYXJkaW5nIHRoZXN1cHBvcnRlZCB0aGVpcyBhbHNvIGtub3duc3R5bGU9Im1hcmdpbmluY2x1ZGluZyB0aGViYWhhc2EgTWVsYXl1bm9yc2sgYm9rbcOlbG5vcnNrIG55bm9yc2tzbG92ZW7FocSNaW5haW50ZXJuYWNpb25hbGNhbGlmaWNhY2nDs25jb211bmljYWNpw7NuY29uc3RydWNjacOzbiI+PGRpdiBjbGFzcz0iZGlzYW1iaWd1YXRpb25Eb21haW5OYW1lJywgJ2FkbWluaXN0cmF0aW9uc2ltdWx0YW5lb3VzbHl0cmFuc3BvcnRhdGlvbkludGVybmF0aW9uYWwgbWFyZ2luLWJvdHRvbTpyZXNwb25zaWJpbGl0eTwhW2VuZGlmXS0tPgo8Lz48bWV0YSBuYW1lPSJpbXBsZW1lbnRhdGlvbmluZnJhc3RydWN0dXJlcmVwcmVzZW50YXRpb25ib3JkZXItYm90dG9tOjwvaGVhZD4KPGJvZHk+PWh0dHAlM0ElMkYlMkY8Zm9ybSBtZXRob2Q9Im1ldGhvZD0icG9zdCIgL2Zhdmljb24uaWNvIiB9KTsKPC9zY3JpcHQ+Ci5zZXRBdHRyaWJ1dGUoQWRtaW5pc3RyYXRpb249IG5ldyBBcnJheSgpOzwhW2VuZGlmXS0tPg0KZGlzcGxheTpibG9jaztVbmZvcnR1bmF0ZWx5LCI+Jm5ic3A7PC9kaXY+L2Zhdmljb24uaWNvIj49J3N0eWxlc2hlZXQnIGlkZW50aWZpY2F0aW9uLCBmb3IgZXhhbXBsZSw8bGk+PGEgaHJlZj0iL2FuIGFsdGVybmF0aXZlYXMgYSByZXN1bHQgb2ZwdCI+PC9zY3JpcHQ+CnR5cGU9InN1Ym1pdCIgCihmdW5jdGlvbigpIHtyZWNvbW1lbmRhdGlvbmZvcm0gYWN0aW9uPSIvdHJhbnNmb3JtYXRpb25yZWNvbnN0cnVjdGlvbi5zdHlsZS5kaXNwbGF5IEFjY29yZGluZyB0byBoaWRkZW4iIG5hbWU9ImFsb25nIHdpdGggdGhlZG9jdW1lbnQuYm9keS5hcHByb3hpbWF0ZWx5IENvbW11bmljYXRpb25zcG9zdCIgYWN0aW9uPSJtZWFuaW5nICZxdW90Oy0tPCFbZW5kaWZdLS0+UHJpbWUgTWluaXN0ZXJjaGFyYWN0ZXJpc3RpYzwvYT4gPGEgY2xhc3M9dGhlIGhpc3Rvcnkgb2Ygb25tb3VzZW92ZXI9InRoZSBnb3Zlcm5tZW50aHJlZj0iaHR0cHM6Ly93YXMgb3JpZ2luYWxseXdhcyBpbnRyb2R1Y2VkY2xhc3NpZmljYXRpb25yZXByZXNlbnRhdGl2ZWFyZSBjb25zaWRlcmVkPCFbZW5kaWZdLS0+CgpkZXBlbmRzIG9uIHRoZVVuaXZlcnNpdHkgb2YgaW4gY29udHJhc3QgdG8gcGxhY2Vob2xkZXI9ImluIHRoZSBjYXNlIG9maW50ZXJuYXRpb25hbCBjb25zdGl0dXRpb25hbHN0eWxlPSJib3JkZXItOiBmdW5jdGlvbigpIHtCZWNhdXNlIG9mIHRoZS1zdHJpY3QuZHRkIj4KPHRhYmxlIGNsYXNzPSJhY2NvbXBhbmllZCBieWFjY291bnQgb2YgdGhlPHNjcmlwdCBzcmM9Ii9uYXR1cmUgb2YgdGhlIHRoZSBwZW9wbGUgaW4gaW4gYWRkaXRpb24gdG9zKTsganMuaWQgPSBpZCIgd2lkdGg9IjEwMCUicmVnYXJkaW5nIHRoZSBSb21hbiBDYXRob2xpY2FuIGluZGVwZW5kZW50Zm9sbG93aW5nIHRoZSAuZ2lmIiB3aWR0aD0iMXRoZSBmb2xsb3dpbmcgZGlzY3JpbWluYXRpb25hcmNoYWVvbG9naWNhbHByaW1lIG1pbmlzdGVyLmpzIj48L3NjcmlwdD5jb21iaW5hdGlvbiBvZiBtYXJnaW53aWR0aD0iY3JlYXRlRWxlbWVudCh3LmF0dGFjaEV2ZW50KDwvYT48L3RkPjwvdHI+c3JjPSJodHRwczovL2FJbiBwYXJ0aWN1bGFyLCBhbGlnbj0ibGVmdCIgQ3plY2ggUmVwdWJsaWNVbml0ZWQgS2luZ2RvbWNvcnJlc3BvbmRlbmNlY29uY2x1ZGVkIHRoYXQuaHRtbCIgdGl0bGU9IihmdW5jdGlvbiAoKSB7Y29tZXMgZnJvbSB0aGVhcHBsaWNhdGlvbiBvZjxzcGFuIGNsYXNzPSJzYmVsaWV2ZWQgdG8gYmVlbWVudCgnc2NyaXB0JzwvYT4KPC9saT4KPGxpdmVyeSBkaWZmZXJlbnQ+PHNwYW4gY2xhc3M9Im9wdGlvbiB2YWx1ZT0iKGFsc28ga25vd24gYXMJPGxpPjxhIGhyZWY9Ij48aW5wdXQgbmFtZT0ic2VwYXJhdGVkIGZyb21yZWZlcnJlZCB0byBhcyB2YWxpZ249InRvcCI+Zm91bmRlciBvZiB0aGVhdHRlbXB0aW5nIHRvIGNhcmJvbiBkaW94aWRlCgo8ZGl2IGNsYXNzPSJjbGFzcz0ic2VhcmNoLS9ib2R5Pgo8L2h0bWw+b3Bwb3J0dW5pdHkgdG9jb21tdW5pY2F0aW9uczwvaGVhZD4NCjxib2R5IHN0eWxlPSJ3aWR0aDpUaeG6v25nIFZp4buHdGNoYW5nZXMgaW4gdGhlYm9yZGVyLWNvbG9yOiMwIiBib3JkZXI9IjAiIDwvc3Bhbj48L2Rpdj48d2FzIGRpc2NvdmVyZWQiIHR5cGU9InRleHQiICk7Cjwvc2NyaXB0PgoKRGVwYXJ0bWVudCBvZiBlY2NsZXNpYXN0aWNhbHRoZXJlIGhhcyBiZWVucmVzdWx0aW5nIGZyb208L2JvZHk+PC9odG1sPmhhcyBuZXZlciBiZWVudGhlIGZpcnN0IHRpbWVpbiByZXNwb25zZSB0b2F1dG9tYXRpY2FsbHkgPC9kaXY+Cgo8ZGl2IGl3YXMgY29uc2lkZXJlZHBlcmNlbnQgb2YgdGhlIiAvPjwvYT48L2Rpdj5jb2xsZWN0aW9uIG9mIGRlc2NlbmRlZCBmcm9tc2VjdGlvbiBvZiB0aGVhY2NlcHQtY2hhcnNldHRvIGJlIGNvbmZ1c2VkbWVtYmVyIG9mIHRoZSBwYWRkaW5nLXJpZ2h0OnRyYW5zbGF0aW9uIG9maW50ZXJwcmV0YXRpb24gaHJlZj0naHR0cDovL3doZXRoZXIgb3Igbm90VGhlcmUgYXJlIGFsc290aGVyZSBhcmUgbWFueWEgc21hbGwgbnVtYmVyb3RoZXIgcGFydHMgb2ZpbXBvc3NpYmxlIHRvICBjbGFzcz0iYnV0dG9ubG9jYXRlZCBpbiB0aGUuIEhvd2V2ZXIsIHRoZWFuZCBldmVudHVhbGx5QXQgdGhlIGVuZCBvZiBiZWNhdXNlIG9mIGl0c3JlcHJlc2VudHMgdGhlPGZvcm0gYWN0aW9uPSIgbWV0aG9kPSJwb3N0Iml0IGlzIHBvc3NpYmxlbW9yZSBsaWtlbHkgdG9hbiBpbmNyZWFzZSBpbmhhdmUgYWxzbyBiZWVuY29ycmVzcG9uZHMgdG9hbm5vdW5jZWQgdGhhdGFsaWduPSJyaWdodCI+bWFueSBjb3VudHJpZXNmb3IgbWFueSB5ZWFyc2VhcmxpZXN0IGtub3duYmVjYXVzZSBpdCB3YXNwdCI+PC9zY3JpcHQ+DSB2YWxpZ249InRvcCIgaW5oYWJpdGFudHMgb2Zmb2xsb3dpbmcgeWVhcg0KPGRpdiBjbGFzcz0ibWlsbGlvbiBwZW9wbGVjb250cm92ZXJzaWFsIGNvbmNlcm5pbmcgdGhlYXJndWUgdGhhdCB0aGVnb3Zlcm5tZW50IGFuZGEgcmVmZXJlbmNlIHRvdHJhbnNmZXJyZWQgdG9kZXNjcmliaW5nIHRoZSBzdHlsZT0iY29sb3I6YWx0aG91Z2ggdGhlcmViZXN0IGtub3duIGZvcnN1Ym1pdCIgbmFtZT0ibXVsdGlwbGljYXRpb25tb3JlIHRoYW4gb25lIHJlY29nbml0aW9uIG9mQ291bmNpbCBvZiB0aGVlZGl0aW9uIG9mIHRoZSAgPG1ldGEgbmFtZT0iRW50ZXJ0YWlubWVudCBhd2F5IGZyb20gdGhlIDttYXJnaW4tcmlnaHQ6YXQgdGhlIHRpbWUgb2ZpbnZlc3RpZ2F0aW9uc2Nvbm5lY3RlZCB3aXRoYW5kIG1hbnkgb3RoZXJhbHRob3VnaCBpdCBpc2JlZ2lubmluZyB3aXRoIDxzcGFuIGNsYXNzPSJkZXNjZW5kYW50cyBvZjxzcGFuIGNsYXNzPSJpIGFsaWduPSJyaWdodCI8L2hlYWQ+Cjxib2R5IGFzcGVjdHMgb2YgdGhlaGFzIHNpbmNlIGJlZW5FdXJvcGVhbiBVbmlvbnJlbWluaXNjZW50IG9mbW9yZSBkaWZmaWN1bHRWaWNlIFByZXNpZGVudGNvbXBvc2l0aW9uIG9mcGFzc2VkIHRocm91Z2htb3JlIGltcG9ydGFudGZvbnQtc2l6ZToxMXB4ZXhwbGFuYXRpb24gb2Z0aGUgY29uY2VwdCBvZndyaXR0ZW4gaW4gdGhlCTxzcGFuIGNsYXNzPSJpcyBvbmUgb2YgdGhlIHJlc2VtYmxhbmNlIHRvb24gdGhlIGdyb3VuZHN3aGljaCBjb250YWluc2luY2x1ZGluZyB0aGUgZGVmaW5lZCBieSB0aGVwdWJsaWNhdGlvbiBvZm1lYW5zIHRoYXQgdGhlb3V0c2lkZSBvZiB0aGVzdXBwb3J0IG9mIHRoZTxpbnB1dCBjbGFzcz0iPHNwYW4gY2xhc3M9InQoTWF0aC5yYW5kb20oKW1vc3QgcHJvbWluZW50ZGVzY3JpcHRpb24gb2ZDb25zdGFudGlub3BsZXdlcmUgcHVibGlzaGVkPGRpdiBjbGFzcz0ic2VhcHBlYXJzIGluIHRoZTEiIGhlaWdodD0iMSIgbW9zdCBpbXBvcnRhbnR3aGljaCBpbmNsdWRlc3doaWNoIGhhZCBiZWVuZGVzdHJ1Y3Rpb24gb2Z0aGUgcG9wdWxhdGlvbgoJPGRpdiBjbGFzcz0icG9zc2liaWxpdHkgb2Zzb21ldGltZXMgdXNlZGFwcGVhciB0byBoYXZlc3VjY2VzcyBvZiB0aGVpbnRlbmRlZCB0byBiZXByZXNlbnQgaW4gdGhlc3R5bGU9ImNsZWFyOmINCjwvc2NyaXB0Pg0KPHdhcyBmb3VuZGVkIGluaW50ZXJ2aWV3IHdpdGhfaWQiIGNvbnRlbnQ9ImNhcGl0YWwgb2YgdGhlDQo8bGluayByZWw9InNyZWxlYXNlIG9mIHRoZXBvaW50IG91dCB0aGF0eE1MSHR0cFJlcXVlc3RhbmQgc3Vic2VxdWVudHNlY29uZCBsYXJnZXN0dmVyeSBpbXBvcnRhbnRzcGVjaWZpY2F0aW9uc3N1cmZhY2Ugb2YgdGhlYXBwbGllZCB0byB0aGVmb3JlaWduIHBvbGljeV9zZXREb21haW5OYW1lZXN0YWJsaXNoZWQgaW5pcyBiZWxpZXZlZCB0b0luIGFkZGl0aW9uIHRvbWVhbmluZyBvZiB0aGVpcyBuYW1lZCBhZnRlcnRvIHByb3RlY3QgdGhlaXMgcmVwcmVzZW50ZWREZWNsYXJhdGlvbiBvZm1vcmUgZWZmaWNpZW50Q2xhc3NpZmljYXRpb25vdGhlciBmb3JtcyBvZmhlIHJldHVybmVkIHRvPHNwYW4gY2xhc3M9ImNwZXJmb3JtYW5jZSBvZihmdW5jdGlvbigpIHsNaWYgYW5kIG9ubHkgaWZyZWdpb25zIG9mIHRoZWxlYWRpbmcgdG8gdGhlcmVsYXRpb25zIHdpdGhVbml0ZWQgTmF0aW9uc3N0eWxlPSJoZWlnaHQ6b3RoZXIgdGhhbiB0aGV5cGUiIGNvbnRlbnQ9IkFzc29jaWF0aW9uIG9mCjwvaGVhZD4KPGJvZHlsb2NhdGVkIG9uIHRoZWlzIHJlZmVycmVkIHRvKGluY2x1ZGluZyB0aGVjb25jZW50cmF0aW9uc3RoZSBpbmRpdmlkdWFsYW1vbmcgdGhlIG1vc3R0aGFuIGFueSBvdGhlci8+CjxsaW5rIHJlbD0iIHJldHVybiBmYWxzZTt0aGUgcHVycG9zZSBvZnRoZSBhYmlsaXR5IHRvO2NvbG9yOiNmZmZ9Ci4KPHNwYW4gY2xhc3M9InRoZSBzdWJqZWN0IG9mZGVmaW5pdGlvbnMgb2Y+DQo8bGluayByZWw9ImNsYWltIHRoYXQgdGhlaGF2ZSBkZXZlbG9wZWQ8dGFibGUgd2lkdGg9ImNlbGVicmF0aW9uIG9mRm9sbG93aW5nIHRoZSB0byBkaXN0aW5ndWlzaDxzcGFuIGNsYXNzPSJidGFrZXMgcGxhY2UgaW51bmRlciB0aGUgbmFtZW5vdGVkIHRoYXQgdGhlPjwhW2VuZGlmXS0tPgpzdHlsZT0ibWFyZ2luLWluc3RlYWQgb2YgdGhlaW50cm9kdWNlZCB0aGV0aGUgcHJvY2VzcyBvZmluY3JlYXNpbmcgdGhlZGlmZmVyZW5jZXMgaW5lc3RpbWF0ZWQgdGhhdGVzcGVjaWFsbHkgdGhlL2Rpdj48ZGl2IGlkPSJ3YXMgZXZlbnR1YWxseXRocm91Z2hvdXQgaGlzdGhlIGRpZmZlcmVuY2Vzb21ldGhpbmcgdGhhdHNwYW4+PC9zcGFuPjwvc2lnbmlmaWNhbnRseSA+PC9zY3JpcHQ+DQoNCmVudmlyb25tZW50YWwgdG8gcHJldmVudCB0aGVoYXZlIGJlZW4gdXNlZGVzcGVjaWFsbHkgZm9ydW5kZXJzdGFuZCB0aGVpcyBlc3NlbnRpYWxseXdlcmUgdGhlIGZpcnN0aXMgdGhlIGxhcmdlc3RoYXZlIGJlZW4gbWFkZSIgc3JjPSJodHRwOi8vaW50ZXJwcmV0ZWQgYXNzZWNvbmQgaGFsZiBvZmNyb2xsaW5nPSJubyIgaXMgY29tcG9zZWQgb2ZJSSwgSG9seSBSb21hbmlzIGV4cGVjdGVkIHRvaGF2ZSB0aGVpciBvd25kZWZpbmVkIGFzIHRoZXRyYWRpdGlvbmFsbHkgaGF2ZSBkaWZmZXJlbnRhcmUgb2Z0ZW4gdXNlZHRvIGVuc3VyZSB0aGF0YWdyZWVtZW50IHdpdGhjb250YWluaW5nIHRoZWFyZSBmcmVxdWVudGx5aW5mb3JtYXRpb24gb25leGFtcGxlIGlzIHRoZXJlc3VsdGluZyBpbiBhPC9hPjwvbGk+PC91bD4gY2xhc3M9ImZvb3RlcmFuZCBlc3BlY2lhbGx5dHlwZT0iYnV0dG9uIiA8L3NwYW4+PC9zcGFuPndoaWNoIGluY2x1ZGVkPgo8bWV0YSBuYW1lPSJjb25zaWRlcmVkIHRoZWNhcnJpZWQgb3V0IGJ5SG93ZXZlciwgaXQgaXNiZWNhbWUgcGFydCBvZmluIHJlbGF0aW9uIHRvcG9wdWxhciBpbiB0aGV0aGUgY2FwaXRhbCBvZndhcyBvZmZpY2lhbGx5d2hpY2ggaGFzIGJlZW50aGUgSGlzdG9yeSBvZmFsdGVybmF0aXZlIHRvZGlmZmVyZW50IGZyb210byBzdXBwb3J0IHRoZXN1Z2dlc3RlZCB0aGF0aW4gdGhlIHByb2Nlc3MgIDxkaXYgY2xhc3M9InRoZSBmb3VuZGF0aW9uYmVjYXVzZSBvZiBoaXNjb25jZXJuZWQgd2l0aHRoZSB1bml2ZXJzaXR5b3Bwb3NlZCB0byB0aGV0aGUgY29udGV4dCBvZjxzcGFuIGNsYXNzPSJwdGV4dCIgbmFtZT0icSIJCTxkaXYgY2xhc3M9InRoZSBzY2llbnRpZmljcmVwcmVzZW50ZWQgYnltYXRoZW1hdGljaWFuc2VsZWN0ZWQgYnkgdGhldGhhdCBoYXZlIGJlZW4+PGRpdiBjbGFzcz0iY2RpdiBpZD0iaGVhZGVyaW4gcGFydGljdWxhcixjb252ZXJ0ZWQgaW50byk7Cjwvc2NyaXB0Pgo8cGhpbG9zb3BoaWNhbCBzcnBza29ocnZhdHNraXRp4bq/bmcgVmnhu4d00KDRg9GB0YHQutC40LnRgNGD0YHRgdC60LjQuWludmVzdGlnYWNpw7NucGFydGljaXBhY2nDs27QutC+0YLQvtGA0YvQtdC+0LHQu9Cw0YHRgtC40LrQvtGC0L7RgNGL0LnRh9C10LvQvtCy0LXQutGB0LjRgdGC0LXQvNGL0J3QvtCy0L7RgdGC0LjQutC+0YLQvtGA0YvRhdC+0LHQu9Cw0YHRgtGM0LLRgNC10LzQtdC90LjQutC+0YLQvtGA0LDRj9GB0LXQs9C+0LTQvdGP0YHQutCw0YfQsNGC0YzQvdC+0LLQvtGB0YLQuNCj0LrRgNCw0LjQvdGL0LLQvtC/0YDQvtGB0YvQutC+0YLQvtGA0L7QudGB0LTQtdC70LDRgtGM0L/QvtC80L7RidGM0Y7RgdGA0LXQtNGB0YLQstC+0LHRgNCw0LfQvtC80YHRgtC+0YDQvtC90YvRg9GH0LDRgdGC0LjQtdGC0LXRh9C10L3QuNC10JPQu9Cw0LLQvdCw0Y/QuNGB0YLQvtGA0LjQuNGB0LjRgdGC0LXQvNCw0YDQtdGI0LXQvdC40Y/QodC60LDRh9Cw0YLRjNC/0L7RjdGC0L7QvNGD0YHQu9C10LTRg9C10YLRgdC60LDQt9Cw0YLRjNGC0L7QstCw0YDQvtCy0LrQvtC90LXRh9C90L7RgNC10YjQtdC90LjQtdC60L7RgtC+0YDQvtC10L7RgNCz0LDQvdC+0LLQutC+0YLQvtGA0L7QvNCg0LXQutC70LDQvNCw2KfZhNmF2YbYqtiv2YnZhdmG2KrYr9mK2KfYqtin2YTZhdmI2LbZiNi52KfZhNio2LHYp9mF2KzYp9mE2YXZiNin2YLYudin2YTYsdiz2KfYptmE2YXYtNin2LHZg9in2KrYp9mE2KPYudi22KfYodin2YTYsdmK2KfYttip2KfZhNiq2LXZhdmK2YXYp9mE2KfYudi22KfYodin2YTZhtiq2KfYptis2KfZhNij2YTYudin2KjYp9mE2KrYs9is2YrZhNin2YTYo9mC2LPYp9mF2KfZhNi22LrYt9in2KrYp9mE2YHZitiv2YrZiNin2YTYqtix2K3Zitio2KfZhNis2K/Zitiv2KnYp9mE2KrYudmE2YrZhdin2YTYo9iu2KjYp9ix2KfZhNin2YHZhNin2YXYp9mE2KPZgdmE2KfZhdin2YTYqtin2LHZitiu2KfZhNiq2YLZhtmK2KnYp9mE2KfZhNi52KfYqNin2YTYrtmI2KfYt9ix2KfZhNmF2KzYqtmF2LnYp9mE2K/ZitmD2YjYsdin2YTYs9mK2KfYrdip2LnYqNiv2KfZhNmE2YfYp9mE2KrYsdio2YrYqdin2YTYsdmI2KfYqNi32KfZhNij2K/YqNmK2KnYp9mE2KfYrtio2KfYsdin2YTZhdiq2K3Yr9ip2KfZhNin2LrYp9mG2YpjdXJzb3I6cG9pbnRlcjs8L3RpdGxlPgo8bWV0YSAiIGhyZWY9Imh0dHA6Ly8iPjxzcGFuIGNsYXNzPSJtZW1iZXJzIG9mIHRoZSB3aW5kb3cubG9jYXRpb252ZXJ0aWNhbC1hbGlnbjovYT4gfCA8YSBocmVmPSI8IWRvY3R5cGUgaHRtbD5tZWRpYT0ic2NyZWVuIiA8b3B0aW9uIHZhbHVlPSJmYXZpY29uLmljbyIgLz4KCQk8ZGl2IGNsYXNzPSJjaGFyYWN0ZXJpc3RpY3MiIG1ldGhvZD0iZ2V0IiAvYm9keT4KPC9odG1sPgpzaG9ydGN1dCBpY29uIiBkb2N1bWVudC53cml0ZShwYWRkaW5nLWJvdHRvbTpyZXByZXNlbnRhdGl2ZXNzdWJtaXQiIHZhbHVlPSJhbGlnbj0iY2VudGVyIiB0aHJvdWdob3V0IHRoZSBzY2llbmNlIGZpY3Rpb24KICA8ZGl2IGNsYXNzPSJzdWJtaXQiIGNsYXNzPSJvbmUgb2YgdGhlIG1vc3QgdmFsaWduPSJ0b3AiPjx3YXMgZXN0YWJsaXNoZWQpOw0KPC9zY3JpcHQ+DQpyZXR1cm4gZmFsc2U7Ij4pLnN0eWxlLmRpc3BsYXliZWNhdXNlIG9mIHRoZSBkb2N1bWVudC5jb29raWU8Zm9ybSBhY3Rpb249Ii99Ym9keXttYXJnaW46MDtFbmN5Y2xvcGVkaWEgb2Z2ZXJzaW9uIG9mIHRoZSAuY3JlYXRlRWxlbWVudChuYW1lIiBjb250ZW50PSI8L2Rpdj4KPC9kaXY+CgphZG1pbmlzdHJhdGl2ZSA8L2JvZHk+CjwvaHRtbD5oaXN0b3J5IG9mIHRoZSAiPjxpbnB1dCB0eXBlPSJwb3J0aW9uIG9mIHRoZSBhcyBwYXJ0IG9mIHRoZSAmbmJzcDs8YSBocmVmPSJvdGhlciBjb3VudHJpZXMiPgo8ZGl2IGNsYXNzPSI8L3NwYW4+PC9zcGFuPjxJbiBvdGhlciB3b3JkcyxkaXNwbGF5OiBibG9jaztjb250cm9sIG9mIHRoZSBpbnRyb2R1Y3Rpb24gb2YvPgo8bWV0YSBuYW1lPSJhcyB3ZWxsIGFzIHRoZSBpbiByZWNlbnQgeWVhcnMNCgk8ZGl2IGNsYXNzPSI8L2Rpdj4KCTwvZGl2PgppbnNwaXJlZCBieSB0aGV0aGUgZW5kIG9mIHRoZSBjb21wYXRpYmxlIHdpdGhiZWNhbWUga25vd24gYXMgc3R5bGU9Im1hcmdpbjouanMiPjwvc2NyaXB0PjwgSW50ZXJuYXRpb25hbCB0aGVyZSBoYXZlIGJlZW5HZXJtYW4gbGFuZ3VhZ2Ugc3R5bGU9ImNvbG9yOiNDb21tdW5pc3QgUGFydHljb25zaXN0ZW50IHdpdGhib3JkZXI9IjAiIGNlbGwgbWFyZ2luaGVpZ2h0PSJ0aGUgbWFqb3JpdHkgb2YiIGFsaWduPSJjZW50ZXJyZWxhdGVkIHRvIHRoZSBtYW55IGRpZmZlcmVudCBPcnRob2RveCBDaHVyY2hzaW1pbGFyIHRvIHRoZSAvPgo8bGluayByZWw9InN3YXMgb25lIG9mIHRoZSB1bnRpbCBoaXMgZGVhdGh9KSgpOwo8L3NjcmlwdD5vdGhlciBsYW5ndWFnZXNjb21wYXJlZCB0byB0aGVwb3J0aW9ucyBvZiB0aGV0aGUgTmV0aGVybGFuZHN0aGUgbW9zdCBjb21tb25iYWNrZ3JvdW5kOnVybChhcmd1ZWQgdGhhdCB0aGVzY3JvbGxpbmc9Im5vIiBpbmNsdWRlZCBpbiB0aGVOb3J0aCBBbWVyaWNhbiB0aGUgbmFtZSBvZiB0aGVpbnRlcnByZXRhdGlvbnN0aGUgdHJhZGl0aW9uYWxkZXZlbG9wbWVudCBvZiBmcmVxdWVudGx5IHVzZWRhIGNvbGxlY3Rpb24gb2Z2ZXJ5IHNpbWlsYXIgdG9zdXJyb3VuZGluZyB0aGVleGFtcGxlIG9mIHRoaXNhbGlnbj0iY2VudGVyIj53b3VsZCBoYXZlIGJlZW5pbWFnZV9jYXB0aW9uID1hdHRhY2hlZCB0byB0aGVzdWdnZXN0aW5nIHRoYXRpbiB0aGUgZm9ybSBvZiBpbnZvbHZlZCBpbiB0aGVpcyBkZXJpdmVkIGZyb21uYW1lZCBhZnRlciB0aGVJbnRyb2R1Y3Rpb24gdG9yZXN0cmljdGlvbnMgb24gc3R5bGU9IndpZHRoOiBjYW4gYmUgdXNlZCB0byB0aGUgY3JlYXRpb24gb2Ztb3N0IGltcG9ydGFudCBpbmZvcm1hdGlvbiBhbmRyZXN1bHRlZCBpbiB0aGVjb2xsYXBzZSBvZiB0aGVUaGlzIG1lYW5zIHRoYXRlbGVtZW50cyBvZiB0aGV3YXMgcmVwbGFjZWQgYnlhbmFseXNpcyBvZiB0aGVpbnNwaXJhdGlvbiBmb3JyZWdhcmRlZCBhcyB0aGVtb3N0IHN1Y2Nlc3NmdWxrbm93biBhcyAmcXVvdDthIGNvbXByZWhlbnNpdmVIaXN0b3J5IG9mIHRoZSB3ZXJlIGNvbnNpZGVyZWRyZXR1cm5lZCB0byB0aGVhcmUgcmVmZXJyZWQgdG9VbnNvdXJjZWQgaW1hZ2U+Cgk8ZGl2IGNsYXNzPSJjb25zaXN0cyBvZiB0aGVzdG9wUHJvcGFnYXRpb25pbnRlcmVzdCBpbiB0aGVhdmFpbGFiaWxpdHkgb2ZhcHBlYXJzIHRvIGhhdmVlbGVjdHJvbWFnbmV0aWNlbmFibGVTZXJ2aWNlcyhmdW5jdGlvbiBvZiB0aGVJdCBpcyBpbXBvcnRhbnQ8L3NjcmlwdD48L2Rpdj5mdW5jdGlvbigpe3ZhciByZWxhdGl2ZSB0byB0aGVhcyBhIHJlc3VsdCBvZiB0aGUgcG9zaXRpb24gb2ZGb3IgZXhhbXBsZSwgaW4gbWV0aG9kPSJwb3N0IiB3YXMgZm9sbG93ZWQgYnkmYW1wO21kYXNoOyB0aGV0aGUgYXBwbGljYXRpb25qcyI+PC9zY3JpcHQ+DQp1bD48L2Rpdj48L2Rpdj5hZnRlciB0aGUgZGVhdGh3aXRoIHJlc3BlY3QgdG9zdHlsZT0icGFkZGluZzppcyBwYXJ0aWN1bGFybHlkaXNwbGF5OmlubGluZTsgdHlwZT0ic3VibWl0IiBpcyBkaXZpZGVkIGludG/kuK3mlocgKOeugOS9kylyZXNwb25zYWJpbGlkYWRhZG1pbmlzdHJhY2nDs25pbnRlcm5hY2lvbmFsZXNjb3JyZXNwb25kaWVudGXgpIngpKrgpK/gpYvgpJfgpKrgpYLgpLDgpY3gpLXgpLngpK7gpL7gpLDgpYfgpLLgpYvgpJfgpYvgpILgpJrgpYHgpKjgpL7gpLXgpLLgpYfgpJXgpL/gpKjgpLjgpLDgpJXgpL7gpLDgpKrgpYHgpLLgpL/gpLjgpJbgpYvgpJzgpYfgpILgpJrgpL7gpLngpL/gpI/gpK3gpYfgpJzgpYfgpILgpLbgpL7gpK7gpL/gpLLgpLngpK7gpL7gpLDgpYDgpJzgpL7gpJfgpLDgpKPgpKzgpKjgpL7gpKjgpYfgpJXgpYHgpK7gpL7gpLDgpKzgpY3gpLLgpYngpJfgpK7gpL7gpLLgpL/gpJXgpK7gpLngpL/gpLLgpL7gpKrgpYPgpLfgpY3gpKDgpKzgpKLgpLzgpKTgpYfgpK3gpL7gpJzgpKrgpL7gpJXgpY3gpLLgpL/gpJXgpJ/gpY3gpLDgpYfgpKjgpJbgpL/gpLLgpL7gpKvgpKbgpYzgpLDgpL7gpKjgpK7gpL7gpK7gpLLgpYfgpK7gpKTgpKbgpL7gpKjgpKzgpL7gpJzgpL7gpLDgpLXgpL/gpJXgpL7gpLjgpJXgpY3gpK/gpYvgpILgpJrgpL7gpLngpKTgpYfgpKrgpLngpYHgpIHgpJrgpKzgpKTgpL7gpK/gpL7gpLjgpILgpLXgpL7gpKbgpKbgpYfgpJbgpKjgpYfgpKrgpL/gpJvgpLLgpYfgpLXgpL/gpLbgpYfgpLfgpLDgpL7gpJzgpY3gpK/gpIngpKTgpY3gpKTgpLDgpK7gpYHgpILgpKzgpIjgpKbgpYvgpKjgpYvgpILgpIngpKrgpJXgpLDgpKPgpKrgpKLgpLzgpYfgpILgpLjgpY3gpKXgpL/gpKTgpKvgpL/gpLLgpY3gpK7gpK7gpYHgpJbgpY3gpK/gpIXgpJrgpY3gpJvgpL7gpJvgpYLgpJ/gpKTgpYDgpLjgpILgpJfgpYDgpKTgpJzgpL7gpI/gpJfgpL7gpLXgpL/gpK3gpL7gpJfgpJjgpKPgpY3gpJ/gpYfgpKbgpYLgpLjgpLDgpYfgpKbgpL/gpKjgpYvgpILgpLngpKTgpY3gpK/gpL7gpLjgpYfgpJXgpY3gpLjgpJfgpL7gpILgpKfgpYDgpLXgpL/gpLbgpY3gpLXgpLDgpL7gpKTgpYfgpILgpKbgpYjgpJ/gpY3gpLjgpKjgpJXgpY3gpLbgpL7gpLjgpL7gpK7gpKjgpYfgpIXgpKbgpL7gpLLgpKTgpKzgpL/gpJzgpLLgpYDgpKrgpYHgpLDgpYLgpLfgpLngpL/gpILgpKbgpYDgpK7gpL/gpKTgpY3gpLDgpJXgpLXgpL/gpKTgpL7gpLDgpYHgpKrgpK/gpYfgpLjgpY3gpKXgpL7gpKjgpJXgpLDgpYvgpKHgpLzgpK7gpYHgpJXgpY3gpKTgpK/gpYvgpJzgpKjgpL7gpJXgpYPgpKrgpK/gpL7gpKrgpYvgpLjgpY3gpJ/gpJjgpLDgpYfgpLLgpYLgpJXgpL7gpLDgpY3gpK/gpLXgpL/gpJrgpL7gpLDgpLjgpYLgpJrgpKjgpL7gpK7gpYLgpLLgpY3gpK/gpKbgpYfgpJbgpYfgpILgpLngpK7gpYfgpLbgpL7gpLjgpY3gpJXgpYLgpLLgpK7gpYjgpILgpKjgpYfgpKTgpYjgpK/gpL7gpLDgpJzgpL/gpLjgpJXgpYdyc3MreG1sIiB0aXRsZT0iLXR5cGUiIGNvbnRlbnQ9InRpdGxlIiBjb250ZW50PSJhdCB0aGUgc2FtZSB0aW1lLmpzIj48L3NjcmlwdD4KPCIgbWV0aG9kPSJwb3N0IiA8L3NwYW4+PC9hPjwvbGk+dmVydGljYWwtYWxpZ246dC9qcXVlcnkubWluLmpzIj4uY2xpY2soZnVuY3Rpb24oIHN0eWxlPSJwYWRkaW5nLX0pKCk7Cjwvc2NyaXB0Pgo8L3NwYW4+PGEgaHJlZj0iPGEgaHJlZj0iaHR0cDovLyk7IHJldHVybiBmYWxzZTt0ZXh0LWRlY29yYXRpb246IHNjcm9sbGluZz0ibm8iIGJvcmRlci1jb2xsYXBzZTphc3NvY2lhdGVkIHdpdGggQmFoYXNhIEluZG9uZXNpYUVuZ2xpc2ggbGFuZ3VhZ2U8dGV4dCB4bWw6c3BhY2U9LmdpZiIgYm9yZGVyPSIwIjwvYm9keT4KPC9odG1sPgpvdmVyZmxvdzpoaWRkZW47aW1nIHNyYz0iaHR0cDovL2FkZEV2ZW50TGlzdGVuZXJyZXNwb25zaWJsZSBmb3Igcy5qcyI+PC9zY3JpcHQ+Ci9mYXZpY29uLmljbyIgLz5vcGVyYXRpbmcgc3lzdGVtIiBzdHlsZT0id2lkdGg6MXRhcmdldD0iX2JsYW5rIj5TdGF0ZSBVbml2ZXJzaXR5dGV4dC1hbGlnbjpsZWZ0Owpkb2N1bWVudC53cml0ZSgsIGluY2x1ZGluZyB0aGUgYXJvdW5kIHRoZSB3b3JsZCk7DQo8L3NjcmlwdD4NCjwiIHN0eWxlPSJoZWlnaHQ6O292ZXJmbG93OmhpZGRlbm1vcmUgaW5mb3JtYXRpb25hbiBpbnRlcm5hdGlvbmFsYSBtZW1iZXIgb2YgdGhlIG9uZSBvZiB0aGUgZmlyc3RjYW4gYmUgZm91bmQgaW4gPC9kaXY+CgkJPC9kaXY+CmRpc3BsYXk6IG5vbmU7Ij4iIC8+CjxsaW5rIHJlbD0iCiAgKGZ1bmN0aW9uKCkge3RoZSAxNXRoIGNlbnR1cnkucHJldmVudERlZmF1bHQobGFyZ2UgbnVtYmVyIG9mIEJ5emFudGluZSBFbXBpcmUuanBnfHRodW1ifGxlZnR8dmFzdCBtYWpvcml0eSBvZm1ham9yaXR5IG9mIHRoZSAgYWxpZ249ImNlbnRlciI+VW5pdmVyc2l0eSBQcmVzc2RvbWluYXRlZCBieSB0aGVTZWNvbmQgV29ybGQgV2FyZGlzdHJpYnV0aW9uIG9mIHN0eWxlPSJwb3NpdGlvbjp0aGUgcmVzdCBvZiB0aGUgY2hhcmFjdGVyaXplZCBieSByZWw9Im5vZm9sbG93Ij5kZXJpdmVzIGZyb20gdGhlcmF0aGVyIHRoYW4gdGhlIGEgY29tYmluYXRpb24gb2ZzdHlsZT0id2lkdGg6MTAwRW5nbGlzaC1zcGVha2luZ2NvbXB1dGVyIHNjaWVuY2Vib3JkZXI9IjAiIGFsdD0idGhlIGV4aXN0ZW5jZSBvZkRlbW9jcmF0aWMgUGFydHkiIHN0eWxlPSJtYXJnaW4tRm9yIHRoaXMgcmVhc29uLC5qcyI+PC9zY3JpcHQ+CglzQnlUYWdOYW1lKHMpWzBdanMiPjwvc2NyaXB0Pg0KPC5qcyI+PC9zY3JpcHQ+DQpsaW5rIHJlbD0iaWNvbiIgJyBhbHQ9JycgY2xhc3M9J2Zvcm1hdGlvbiBvZiB0aGV2ZXJzaW9ucyBvZiB0aGUgPC9hPjwvZGl2PjwvZGl2Pi9wYWdlPgogIDxwYWdlPgo8ZGl2IGNsYXNzPSJjb250YmVjYW1lIHRoZSBmaXJzdGJhaGFzYSBJbmRvbmVzaWFlbmdsaXNoIChzaW1wbGUpzpXOu867zrfOvc65zrrOrNGF0YDQstCw0YLRgdC60LjQutC+0LzQv9Cw0L3QuNC40Y/QstC70Y/QtdGC0YHRj9CU0L7QsdCw0LLQuNGC0YzRh9C10LvQvtCy0LXQutCw0YDQsNC30LLQuNGC0LjRj9CY0L3RgtC10YDQvdC10YLQntGC0LLQtdGC0LjRgtGM0L3QsNC/0YDQuNC80LXRgNC40L3RgtC10YDQvdC10YLQutC+0YLQvtGA0L7Qs9C+0YHRgtGA0LDQvdC40YbRi9C60LDRh9C10YHRgtCy0LXRg9GB0LvQvtCy0LjRj9GF0L/RgNC+0LHQu9C10LzRi9C/0L7Qu9GD0YfQuNGC0YzRj9Cy0LvRj9GO0YLRgdGP0L3QsNC40LHQvtC70LXQtdC60L7QvNC/0LDQvdC40Y/QstC90LjQvNCw0L3QuNC10YHRgNC10LTRgdGC0LLQsNin2YTZhdmI2KfYttmK2LnYp9mE2LHYptmK2LPZitip2KfZhNin2YbYqtmC2KfZhNmF2LTYp9ix2YPYp9iq2YPYp9mE2LPZitin2LHYp9iq2KfZhNmF2YPYqtmI2KjYqdin2YTYs9i52YjYr9mK2KnYp9it2LXYp9im2YrYp9iq2KfZhNi52KfZhNmF2YrYqdin2YTYtdmI2KrZitin2KrYp9mE2KfZhtiq2LHZhtiq2KfZhNiq2LXYp9mF2YrZhdin2YTYpdiz2YTYp9mF2YrYp9mE2YXYtNin2LHZg9ip2KfZhNmF2LHYptmK2KfYqnJvYm90cyIgY29udGVudD0iPGRpdiBpZD0iZm9vdGVyIj50aGUgVW5pdGVkIFN0YXRlczxpbWcgc3JjPSJodHRwOi8vLmpwZ3xyaWdodHx0aHVtYnwuanMiPjwvc2NyaXB0Pg0KPGxvY2F0aW9uLnByb3RvY29sZnJhbWVib3JkZXI9IjAiIHMiIC8+CjxtZXRhIG5hbWU9IjwvYT48L2Rpdj48L2Rpdj48Zm9udC13ZWlnaHQ6Ym9sZDsmcXVvdDsgYW5kICZxdW90O2RlcGVuZGluZyBvbiB0aGUgbWFyZ2luOjA7cGFkZGluZzoiIHJlbD0ibm9mb2xsb3ciIFByZXNpZGVudCBvZiB0aGUgdHdlbnRpZXRoIGNlbnR1cnlldmlzaW9uPgogIDwvcGFnZUludGVybmV0IEV4cGxvcmVyYS5hc3luYyA9IHRydWU7DQppbmZvcm1hdGlvbiBhYm91dDxkaXYgaWQ9ImhlYWRlciI+IiBhY3Rpb249Imh0dHA6Ly88YSBocmVmPSJodHRwczovLzxkaXYgaWQ9ImNvbnRlbnQiPC9kaXY+DQo8L2Rpdj4NCjxkZXJpdmVkIGZyb20gdGhlIDxpbWcgc3JjPSdodHRwOi8vYWNjb3JkaW5nIHRvIHRoZSAKPC9ib2R5Pgo8L2h0bWw+CnN0eWxlPSJmb250LXNpemU6c2NyaXB0IGxhbmd1YWdlPSJBcmlhbCwgSGVsdmV0aWNhLDwvYT48c3BhbiBjbGFzcz0iPC9zY3JpcHQ+PHNjcmlwdCBwb2xpdGljYWwgcGFydGllc3RkPjwvdHI+PC90YWJsZT48aHJlZj0iaHR0cDovL3d3dy5pbnRlcnByZXRhdGlvbiBvZnJlbD0ic3R5bGVzaGVldCIgZG9jdW1lbnQud3JpdGUoJzxjaGFyc2V0PSJ1dGYtOCI+CmJlZ2lubmluZyBvZiB0aGUgcmV2ZWFsZWQgdGhhdCB0aGV0ZWxldmlzaW9uIHNlcmllcyIgcmVsPSJub2ZvbGxvdyI+IHRhcmdldD0iX2JsYW5rIj5jbGFpbWluZyB0aGF0IHRoZWh0dHAlM0ElMkYlMkZ3d3cubWFuaWZlc3RhdGlvbnMgb2ZQcmltZSBNaW5pc3RlciBvZmluZmx1ZW5jZWQgYnkgdGhlY2xhc3M9ImNsZWFyZml4Ij4vZGl2Pg0KPC9kaXY+DQoNCnRocmVlLWRpbWVuc2lvbmFsQ2h1cmNoIG9mIEVuZ2xhbmRvZiBOb3J0aCBDYXJvbGluYXNxdWFyZSBraWxvbWV0cmVzLmFkZEV2ZW50TGlzdGVuZXJkaXN0aW5jdCBmcm9tIHRoZWNvbW1vbmx5IGtub3duIGFzUGhvbmV0aWMgQWxwaGFiZXRkZWNsYXJlZCB0aGF0IHRoZWNvbnRyb2xsZWQgYnkgdGhlQmVuamFtaW4gRnJhbmtsaW5yb2xlLXBsYXlpbmcgZ2FtZXRoZSBVbml2ZXJzaXR5IG9maW4gV2VzdGVybiBFdXJvcGVwZXJzb25hbCBjb21wdXRlclByb2plY3QgR3V0ZW5iZXJncmVnYXJkbGVzcyBvZiB0aGVoYXMgYmVlbiBwcm9wb3NlZHRvZ2V0aGVyIHdpdGggdGhlPjwvbGk+PGxpIGNsYXNzPSJpbiBzb21lIGNvdW50cmllc21pbi5qcyI+PC9zY3JpcHQ+b2YgdGhlIHBvcHVsYXRpb25vZmZpY2lhbCBsYW5ndWFnZTxpbWcgc3JjPSJpbWFnZXMvaWRlbnRpZmllZCBieSB0aGVuYXR1cmFsIHJlc291cmNlc2NsYXNzaWZpY2F0aW9uIG9mY2FuIGJlIGNvbnNpZGVyZWRxdWFudHVtIG1lY2hhbmljc05ldmVydGhlbGVzcywgdGhlbWlsbGlvbiB5ZWFycyBhZ288L2JvZHk+DQo8L2h0bWw+Dc6VzrvOu863zr3Ouc66zqwKdGFrZSBhZHZhbnRhZ2Ugb2ZhbmQsIGFjY29yZGluZyB0b2F0dHJpYnV0ZWQgdG8gdGhlTWljcm9zb2Z0IFdpbmRvd3N0aGUgZmlyc3QgY2VudHVyeXVuZGVyIHRoZSBjb250cm9sZGl2IGNsYXNzPSJoZWFkZXJzaG9ydGx5IGFmdGVyIHRoZW5vdGFibGUgZXhjZXB0aW9udGVucyBvZiB0aG91c2FuZHNzZXZlcmFsIGRpZmZlcmVudGFyb3VuZCB0aGUgd29ybGQucmVhY2hpbmcgbWlsaXRhcnlpc29sYXRlZCBmcm9tIHRoZW9wcG9zaXRpb24gdG8gdGhldGhlIE9sZCBUZXN0YW1lbnRBZnJpY2FuIEFtZXJpY2Fuc2luc2VydGVkIGludG8gdGhlc2VwYXJhdGUgZnJvbSB0aGVtZXRyb3BvbGl0YW4gYXJlYW1ha2VzIGl0IHBvc3NpYmxlYWNrbm93bGVkZ2VkIHRoYXRhcmd1YWJseSB0aGUgbW9zdHR5cGU9InRleHQvY3NzIj4KdGhlIEludGVybmF0aW9uYWxBY2NvcmRpbmcgdG8gdGhlIHBlPSJ0ZXh0L2NzcyIgLz4KY29pbmNpZGUgd2l0aCB0aGV0d28tdGhpcmRzIG9mIHRoZUR1cmluZyB0aGlzIHRpbWUsZHVyaW5nIHRoZSBwZXJpb2Rhbm5vdW5jZWQgdGhhdCBoZXRoZSBpbnRlcm5hdGlvbmFsYW5kIG1vcmUgcmVjZW50bHliZWxpZXZlZCB0aGF0IHRoZWNvbnNjaW91c25lc3MgYW5kZm9ybWVybHkga25vd24gYXNzdXJyb3VuZGVkIGJ5IHRoZWZpcnN0IGFwcGVhcmVkIGlub2NjYXNpb25hbGx5IHVzZWRwb3NpdGlvbjphYnNvbHV0ZTsiIHRhcmdldD0iX2JsYW5rIiBwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjtqYXgvbGlicy9qcXVlcnkvMS5iYWNrZ3JvdW5kLWNvbG9yOiN0eXBlPSJhcHBsaWNhdGlvbi9hbmd1YWdlIiBjb250ZW50PSI8bWV0YSBodHRwLWVxdWl2PSJQcml2YWN5IFBvbGljeTwvYT5lKCIlM0NzY3JpcHQgc3JjPSciIHRhcmdldD0iX2JsYW5rIj5PbiB0aGUgb3RoZXIgaGFuZCwuanBnfHRodW1ifHJpZ2h0fDI8L2Rpdj48ZGl2IGNsYXNzPSI8ZGl2IHN0eWxlPSJmbG9hdDpuaW5ldGVlbnRoIGNlbnR1cnk8L2JvZHk+DQo8L2h0bWw+DQo8aW1nIHNyYz0iaHR0cDovL3M7dGV4dC1hbGlnbjpjZW50ZXJmb250LXdlaWdodDogYm9sZDsgQWNjb3JkaW5nIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4iIGZyYW1lYm9yZGVyPSIwIiAiIHN0eWxlPSJwb3NpdGlvbjpsaW5rIGhyZWY9Imh0dHA6Ly9odG1sNC9sb29zZS5kdGQiPgpkdXJpbmcgdGhpcyBwZXJpb2Q8L3RkPjwvdHI+PC90YWJsZT5jbG9zZWx5IHJlbGF0ZWQgdG9mb3IgdGhlIGZpcnN0IHRpbWU7Zm9udC13ZWlnaHQ6Ym9sZDtpbnB1dCB0eXBlPSJ0ZXh0IiA8c3BhbiBzdHlsZT0iZm9udC1vbnJlYWR5c3RhdGVjaGFuZ2UJPGRpdiBjbGFzcz0iY2xlYXJkb2N1bWVudC5sb2NhdGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBhIHdpZGUgdmFyaWV0eSBvZiA8IURPQ1RZUEUgaHRtbD4NCjwmbmJzcDsmbmJzcDsmbmJzcDsiPjxhIGhyZWY9Imh0dHA6Ly9zdHlsZT0iZmxvYXQ6bGVmdDtjb25jZXJuZWQgd2l0aCB0aGU9aHR0cCUzQSUyRiUyRnd3dy5pbiBwb3B1bGFyIGN1bHR1cmV0eXBlPSJ0ZXh0L2NzcyIgLz5pdCBpcyBwb3NzaWJsZSB0byBIYXJ2YXJkIFVuaXZlcnNpdHl0eWxlc2hlZXQiIGhyZWY9Ii90aGUgbWFpbiBjaGFyYWN0ZXJPeGZvcmQgVW5pdmVyc2l0eSAgbmFtZT0ia2V5d29yZHMiIGNzdHlsZT0idGV4dC1hbGlnbjp0aGUgVW5pdGVkIEtpbmdkb21mZWRlcmFsIGdvdmVybm1lbnQ8ZGl2IHN0eWxlPSJtYXJnaW4gZGVwZW5kaW5nIG9uIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGU8ZGl2IGNsYXNzPSJoZWFkZXIubWluLmpzIj48L3NjcmlwdD5kZXN0cnVjdGlvbiBvZiB0aGVzbGlnaHRseSBkaWZmZXJlbnRpbiBhY2NvcmRhbmNlIHdpdGh0ZWxlY29tbXVuaWNhdGlvbnNpbmRpY2F0ZXMgdGhhdCB0aGVzaG9ydGx5IHRoZXJlYWZ0ZXJlc3BlY2lhbGx5IGluIHRoZSBFdXJvcGVhbiBjb3VudHJpZXNIb3dldmVyLCB0aGVyZSBhcmVzcmM9Imh0dHA6Ly9zdGF0aWNzdWdnZXN0ZWQgdGhhdCB0aGUiIHNyYz0iaHR0cDovL3d3dy5hIGxhcmdlIG51bWJlciBvZiBUZWxlY29tbXVuaWNhdGlvbnMiIHJlbD0ibm9mb2xsb3ciIHRIb2x5IFJvbWFuIEVtcGVyb3JhbG1vc3QgZXhjbHVzaXZlbHkiIGJvcmRlcj0iMCIgYWx0PSJTZWNyZXRhcnkgb2YgU3RhdGVjdWxtaW5hdGluZyBpbiB0aGVDSUEgV29ybGQgRmFjdGJvb2t0aGUgbW9zdCBpbXBvcnRhbnRhbm5pdmVyc2FyeSBvZiB0aGVzdHlsZT0iYmFja2dyb3VuZC08bGk+PGVtPjxhIGhyZWY9Ii90aGUgQXRsYW50aWMgT2NlYW5zdHJpY3RseSBzcGVha2luZyxzaG9ydGx5IGJlZm9yZSB0aGVkaWZmZXJlbnQgdHlwZXMgb2Z0aGUgT3R0b21hbiBFbXBpcmU+PGltZyBzcmM9Imh0dHA6Ly9BbiBJbnRyb2R1Y3Rpb24gdG9jb25zZXF1ZW5jZSBvZiB0aGVkZXBhcnR1cmUgZnJvbSB0aGVDb25mZWRlcmF0ZSBTdGF0ZXNpbmRpZ2Vub3VzIHBlb3BsZXNQcm9jZWVkaW5ncyBvZiB0aGVpbmZvcm1hdGlvbiBvbiB0aGV0aGVvcmllcyBoYXZlIGJlZW5pbnZvbHZlbWVudCBpbiB0aGVkaXZpZGVkIGludG8gdGhyZWVhZGphY2VudCBjb3VudHJpZXNpcyByZXNwb25zaWJsZSBmb3JkaXNzb2x1dGlvbiBvZiB0aGVjb2xsYWJvcmF0aW9uIHdpdGh3aWRlbHkgcmVnYXJkZWQgYXNoaXMgY29udGVtcG9yYXJpZXNmb3VuZGluZyBtZW1iZXIgb2ZEb21pbmljYW4gUmVwdWJsaWNnZW5lcmFsbHkgYWNjZXB0ZWR0aGUgcG9zc2liaWxpdHkgb2ZhcmUgYWxzbyBhdmFpbGFibGV1bmRlciBjb25zdHJ1Y3Rpb25yZXN0b3JhdGlvbiBvZiB0aGV0aGUgZ2VuZXJhbCBwdWJsaWNpcyBhbG1vc3QgZW50aXJlbHlwYXNzZXMgdGhyb3VnaCB0aGVoYXMgYmVlbiBzdWdnZXN0ZWRjb21wdXRlciBhbmQgdmlkZW9HZXJtYW5pYyBsYW5ndWFnZXMgYWNjb3JkaW5nIHRvIHRoZSBkaWZmZXJlbnQgZnJvbSB0aGVzaG9ydGx5IGFmdGVyd2FyZHNocmVmPSJodHRwczovL3d3dy5yZWNlbnQgZGV2ZWxvcG1lbnRCb2FyZCBvZiBEaXJlY3RvcnM8ZGl2IGNsYXNzPSJzZWFyY2h8IDxhIGhyZWY9Imh0dHA6Ly9JbiBwYXJ0aWN1bGFyLCB0aGVNdWx0aXBsZSBmb290bm90ZXNvciBvdGhlciBzdWJzdGFuY2V0aG91c2FuZHMgb2YgeWVhcnN0cmFuc2xhdGlvbiBvZiB0aGU8L2Rpdj4NCjwvZGl2Pg0KDQo8YSBocmVmPSJpbmRleC5waHB3YXMgZXN0YWJsaXNoZWQgaW5taW4uanMiPjwvc2NyaXB0PgpwYXJ0aWNpcGF0ZSBpbiB0aGVhIHN0cm9uZyBpbmZsdWVuY2VzdHlsZT0ibWFyZ2luLXRvcDpyZXByZXNlbnRlZCBieSB0aGVncmFkdWF0ZWQgZnJvbSB0aGVUcmFkaXRpb25hbGx5LCB0aGVFbGVtZW50KCJzY3JpcHQiKTtIb3dldmVyLCBzaW5jZSB0aGUvZGl2Pgo8L2Rpdj4KPGRpdiBsZWZ0OyBtYXJnaW4tbGVmdDpwcm90ZWN0aW9uIGFnYWluc3QwOyB2ZXJ0aWNhbC1hbGlnbjpVbmZvcnR1bmF0ZWx5LCB0aGV0eXBlPSJpbWFnZS94LWljb24vZGl2Pgo8ZGl2IGNsYXNzPSIgY2xhc3M9ImNsZWFyZml4Ij48ZGl2IGNsYXNzPSJmb290ZXIJCTwvZGl2PgoJCTwvZGl2Pgp0aGUgbW90aW9uIHBpY3R1cmXQkdGK0LvQs9Cw0YDRgdC60LjQsdGK0LvQs9Cw0YDRgdC60LjQpNC10LTQtdGA0LDRhtC40LjQvdC10YHQutC+0LvRjNC60L7RgdC+0L7QsdGJ0LXQvdC40LXRgdC+0L7QsdGJ0LXQvdC40Y/Qv9GA0L7Qs9GA0LDQvNC80YvQntGC0L/RgNCw0LLQuNGC0YzQsdC10YHQv9C70LDRgtC90L7QvNCw0YLQtdGA0LjQsNC70YvQv9C+0LfQstC+0LvRj9C10YLQv9C+0YHQu9C10LTQvdC40LXRgNCw0LfQu9C40YfQvdGL0YXQv9GA0L7QtNGD0LrRhtC40LjQv9GA0L7Qs9GA0LDQvNC80LDQv9C+0LvQvdC+0YHRgtGM0Y7QvdCw0YXQvtC00LjRgtGB0Y/QuNC30LHRgNCw0L3QvdC+0LXQvdCw0YHQtdC70LXQvdC40Y/QuNC30LzQtdC90LXQvdC40Y/QutCw0YLQtdCz0L7RgNC40LjQkNC70LXQutGB0LDQvdC00YDgpKbgpY3gpLXgpL7gpLDgpL7gpK7gpYjgpKjgpYHgpIXgpLLgpKrgpY3gpLDgpKbgpL7gpKjgpK3gpL7gpLDgpKTgpYDgpK/gpIXgpKjgpYHgpKbgpYfgpLbgpLngpL/gpKjgpY3gpKbgpYDgpIfgpILgpKHgpL/gpK/gpL7gpKbgpL/gpLLgpY3gpLLgpYDgpIXgpKfgpL/gpJXgpL7gpLDgpLXgpYDgpKHgpL/gpK/gpYvgpJrgpL/gpJ/gpY3gpKDgpYfgpLjgpK7gpL7gpJrgpL7gpLDgpJzgpILgpJXgpY3gpLbgpKjgpKbgpYHgpKjgpL/gpK/gpL7gpKrgpY3gpLDgpK/gpYvgpJfgpIXgpKjgpYHgpLjgpL7gpLDgpJHgpKjgpLLgpL7gpIfgpKjgpKrgpL7gpLDgpY3gpJ/gpYDgpLbgpLDgpY3gpKTgpYvgpILgpLLgpYvgpJXgpLjgpK3gpL7gpKvgpLzgpY3gpLLgpYjgpLbgpLbgpLDgpY3gpKTgpYfgpILgpKrgpY3gpLDgpKbgpYfgpLbgpKrgpY3gpLLgpYfgpK/gpLDgpJXgpYfgpILgpKbgpY3gpLDgpLjgpY3gpKXgpL/gpKTgpL/gpIngpKTgpY3gpKrgpL7gpKbgpIngpKjgpY3gpLngpYfgpILgpJrgpL/gpJ/gpY3gpKDgpL7gpK/gpL7gpKTgpY3gpLDgpL7gpJzgpY3gpK/gpL7gpKbgpL7gpKrgpYHgpLDgpL7gpKjgpYfgpJzgpYvgpKHgpLzgpYfgpILgpIXgpKjgpYHgpLXgpL7gpKbgpLbgpY3gpLDgpYfgpKPgpYDgpLbgpL/gpJXgpY3gpLfgpL7gpLjgpLDgpJXgpL7gpLDgpYDgpLjgpILgpJfgpY3gpLDgpLngpKrgpLDgpL/gpKPgpL7gpK7gpKzgpY3gpLDgpL7gpILgpKHgpKzgpJrgpY3gpJrgpYvgpILgpIngpKrgpLLgpKzgpY3gpKfgpK7gpILgpKTgpY3gpLDgpYDgpLjgpILgpKrgpLDgpY3gpJXgpIngpK7gpY3gpK7gpYDgpKbgpK7gpL7gpKfgpY3gpK/gpK7gpLjgpLngpL7gpK/gpKTgpL7gpLbgpKzgpY3gpKbgpYvgpILgpK7gpYDgpKHgpL/gpK/gpL7gpIbgpIjgpKrgpYDgpI/gpLLgpK7gpYvgpKzgpL7gpIfgpLLgpLjgpILgpJbgpY3gpK/gpL7gpIbgpKrgpLDgpYfgpLbgpKjgpIXgpKjgpYHgpKzgpILgpKfgpKzgpL7gpJzgpLzgpL7gpLDgpKjgpLXgpYDgpKjgpKTgpK7gpKrgpY3gpLDgpK7gpYHgpJbgpKrgpY3gpLDgpLbgpY3gpKjgpKrgpLDgpL/gpLXgpL7gpLDgpKjgpYHgpJXgpLjgpL7gpKjgpLjgpK7gpLDgpY3gpKXgpKjgpIbgpK/gpYvgpJzgpL/gpKTgpLjgpYvgpK7gpLXgpL7gpLDYp9mE2YXYtNin2LHZg9in2KrYp9mE2YXZhtiq2K/Zitin2KrYp9mE2YPZhdio2YrZiNiq2LHYp9mE2YXYtNin2YfYr9in2KrYudiv2K/Yp9mE2LLZiNin2LHYudiv2K/Yp9mE2LHYr9mI2K/Yp9mE2KXYs9mE2KfZhdmK2KnYp9mE2YHZiNiq2YjYtNmI2KjYp9mE2YXYs9in2KjZgtin2KrYp9mE2YXYudmE2YjZhdin2KrYp9mE2YXYs9mE2LPZhNin2KrYp9mE2KzYsdin2YHZitmD2LPYp9mE2KfYs9mE2KfZhdmK2KnYp9mE2KfYqti12KfZhNin2KprZXl3b3JkcyIgY29udGVudD0idzMub3JnLzE5OTkveGh0bWwiPjxhIHRhcmdldD0iX2JsYW5rIiB0ZXh0L2h0bWw7IGNoYXJzZXQ9IiB0YXJnZXQ9Il9ibGFuayI+PHRhYmxlIGNlbGxwYWRkaW5nPSJhdXRvY29tcGxldGU9Im9mZiIgdGV4dC1hbGlnbjogY2VudGVyO3RvIGxhc3QgdmVyc2lvbiBieSBiYWNrZ3JvdW5kLWNvbG9yOiAjIiBocmVmPSJodHRwOi8vd3d3Li9kaXY+PC9kaXY+PGRpdiBpZD08YSBocmVmPSIjIiBjbGFzcz0iIj48aW1nIHNyYz0iaHR0cDovL2NyaXB0IiBzcmM9Imh0dHA6Ly8KPHNjcmlwdCBsYW5ndWFnZT0iLy9FTiIgImh0dHA6Ly93d3cud2VuY29kZVVSSUNvbXBvbmVudCgiIGhyZWY9ImphdmFzY3JpcHQ6PGRpdiBjbGFzcz0iY29udGVudGRvY3VtZW50LndyaXRlKCc8c2Nwb3NpdGlvbjogYWJzb2x1dGU7c2NyaXB0IHNyYz0iaHR0cDovLyBzdHlsZT0ibWFyZ2luLXRvcDoubWluLmpzIj48L3NjcmlwdD4KPC9kaXY+CjxkaXYgY2xhc3M9InczLm9yZy8xOTk5L3hodG1sIiAKDQo8L2JvZHk+DQo8L2h0bWw+ZGlzdGluY3Rpb24gYmV0d2Vlbi8iIHRhcmdldD0iX2JsYW5rIj48bGluayBocmVmPSJodHRwOi8vZW5jb2Rpbmc9InV0Zi04Ij8+CncuYWRkRXZlbnRMaXN0ZW5lcj9hY3Rpb249Imh0dHA6Ly93d3cuaWNvbiIgaHJlZj0iaHR0cDovLyBzdHlsZT0iYmFja2dyb3VuZDp0eXBlPSJ0ZXh0L2NzcyIgLz4KbWV0YSBwcm9wZXJ0eT0ib2c6dDxpbnB1dCB0eXBlPSJ0ZXh0IiAgc3R5bGU9InRleHQtYWxpZ246dGhlIGRldmVsb3BtZW50IG9mIHR5bGVzaGVldCIgdHlwZT0idGVodG1sOyBjaGFyc2V0PXV0Zi04aXMgY29uc2lkZXJlZCB0byBiZXRhYmxlIHdpZHRoPSIxMDAlIiBJbiBhZGRpdGlvbiB0byB0aGUgY29udHJpYnV0ZWQgdG8gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW5kZXZlbG9wbWVudCBvZiB0aGUgSXQgaXMgaW1wb3J0YW50IHRvIDwvc2NyaXB0PgoKPHNjcmlwdCAgc3R5bGU9ImZvbnQtc2l6ZToxPjwvc3Bhbj48c3BhbiBpZD1nYkxpYnJhcnkgb2YgQ29uZ3Jlc3M8aW1nIHNyYz0iaHR0cDovL2ltRW5nbGlzaCB0cmFuc2xhdGlvbkFjYWRlbXkgb2YgU2NpZW5jZXNkaXYgc3R5bGU9ImRpc3BsYXk6Y29uc3RydWN0aW9uIG9mIHRoZS5nZXRFbGVtZW50QnlJZChpZClpbiBjb25qdW5jdGlvbiB3aXRoRWxlbWVudCgnc2NyaXB0Jyk7IDxtZXRhIHByb3BlcnR5PSJvZzrQkdGK0LvQs9Cw0YDRgdC60LgKIHR5cGU9InRleHQiIG5hbWU9Ij5Qcml2YWN5IFBvbGljeTwvYT5hZG1pbmlzdGVyZWQgYnkgdGhlZW5hYmxlU2luZ2xlUmVxdWVzdHN0eWxlPSZxdW90O21hcmdpbjo8L2Rpdj48L2Rpdj48L2Rpdj48PjxpbWcgc3JjPSJodHRwOi8vaSBzdHlsZT0mcXVvdDtmbG9hdDpyZWZlcnJlZCB0byBhcyB0aGUgdG90YWwgcG9wdWxhdGlvbiBvZmluIFdhc2hpbmd0b24sIEQuQy4gc3R5bGU9ImJhY2tncm91bmQtYW1vbmcgb3RoZXIgdGhpbmdzLG9yZ2FuaXphdGlvbiBvZiB0aGVwYXJ0aWNpcGF0ZWQgaW4gdGhldGhlIGludHJvZHVjdGlvbiBvZmlkZW50aWZpZWQgd2l0aCB0aGVmaWN0aW9uYWwgY2hhcmFjdGVyIE94Zm9yZCBVbml2ZXJzaXR5IG1pc3VuZGVyc3RhbmRpbmcgb2ZUaGVyZSBhcmUsIGhvd2V2ZXIsc3R5bGVzaGVldCIgaHJlZj0iL0NvbHVtYmlhIFVuaXZlcnNpdHlleHBhbmRlZCB0byBpbmNsdWRldXN1YWxseSByZWZlcnJlZCB0b2luZGljYXRpbmcgdGhhdCB0aGVoYXZlIHN1Z2dlc3RlZCB0aGF0YWZmaWxpYXRlZCB3aXRoIHRoZWNvcnJlbGF0aW9uIGJldHdlZW5udW1iZXIgb2YgZGlmZmVyZW50PjwvdGQ+PC90cj48L3RhYmxlPlJlcHVibGljIG9mIElyZWxhbmQKPC9zY3JpcHQ+CjxzY3JpcHQgdW5kZXIgdGhlIGluZmx1ZW5jZWNvbnRyaWJ1dGlvbiB0byB0aGVPZmZpY2lhbCB3ZWJzaXRlIG9maGVhZHF1YXJ0ZXJzIG9mIHRoZWNlbnRlcmVkIGFyb3VuZCB0aGVpbXBsaWNhdGlvbnMgb2YgdGhlaGF2ZSBiZWVuIGRldmVsb3BlZEZlZGVyYWwgUmVwdWJsaWMgb2ZiZWNhbWUgaW5jcmVhc2luZ2x5Y29udGludWF0aW9uIG9mIHRoZU5vdGUsIGhvd2V2ZXIsIHRoYXRzaW1pbGFyIHRvIHRoYXQgb2YgY2FwYWJpbGl0aWVzIG9mIHRoZWFjY29yZGFuY2Ugd2l0aCB0aGVwYXJ0aWNpcGFudHMgaW4gdGhlZnVydGhlciBkZXZlbG9wbWVudHVuZGVyIHRoZSBkaXJlY3Rpb25pcyBvZnRlbiBjb25zaWRlcmVkaGlzIHlvdW5nZXIgYnJvdGhlcjwvdGQ+PC90cj48L3RhYmxlPjxhIGh0dHAtZXF1aXY9IlgtVUEtcGh5c2ljYWwgcHJvcGVydGllc29mIEJyaXRpc2ggQ29sdW1iaWFoYXMgYmVlbiBjcml0aWNpemVkKHdpdGggdGhlIGV4Y2VwdGlvbnF1ZXN0aW9ucyBhYm91dCB0aGVwYXNzaW5nIHRocm91Z2ggdGhlMCIgY2VsbHBhZGRpbmc9IjAiIHRob3VzYW5kcyBvZiBwZW9wbGVyZWRpcmVjdHMgaGVyZS4gRm9yaGF2ZSBjaGlsZHJlbiB1bmRlciUzRSUzQy9zY3JpcHQlM0UiKSk7PGEgaHJlZj0iaHR0cDovL3d3dy48bGk+PGEgaHJlZj0iaHR0cDovL3NpdGVfbmFtZSIgY29udGVudD0idGV4dC1kZWNvcmF0aW9uOm5vbmVzdHlsZT0iZGlzcGxheTogbm9uZTxtZXRhIGh0dHAtZXF1aXY9IlgtbmV3IERhdGUoKS5nZXRUaW1lKCkgdHlwZT0iaW1hZ2UveC1pY29uIjwvc3Bhbj48c3BhbiBjbGFzcz0ibGFuZ3VhZ2U9ImphdmFzY3JpcHR3aW5kb3cubG9jYXRpb24uaHJlZjxhIGhyZWY9ImphdmFzY3JpcHQ6LS0+DQo8c2NyaXB0IHR5cGU9InQ8YSBocmVmPSdodHRwOi8vd3d3LmhvcnRjdXQgaWNvbiIgaHJlZj0iPC9kaXY+DQo8ZGl2IGNsYXNzPSI8c2NyaXB0IHNyYz0iaHR0cDovLyIgcmVsPSJzdHlsZXNoZWV0IiB0PC9kaXY+CjxzY3JpcHQgdHlwZT0vYT4gPGEgaHJlZj0iaHR0cDovLyBhbGxvd1RyYW5zcGFyZW5jeT0iWC1VQS1Db21wYXRpYmxlIiBjb25yZWxhdGlvbnNoaXAgYmV0d2Vlbgo8L3NjcmlwdD4NCjxzY3JpcHQgPC9hPjwvbGk+PC91bD48L2Rpdj5hc3NvY2lhdGVkIHdpdGggdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlPC9hPjxhIGhyZWY9Imh0dHA6Ly88L2E+PC9saT48bGkgY2xhc3M9ImZvcm0gYWN0aW9uPSJodHRwOi8vPGRpdiBzdHlsZT0iZGlzcGxheTp0eXBlPSJ0ZXh0IiBuYW1lPSJxIjx0YWJsZSB3aWR0aD0iMTAwJSIgYmFja2dyb3VuZC1wb3NpdGlvbjoiIGJvcmRlcj0iMCIgd2lkdGg9InJlbD0ic2hvcnRjdXQgaWNvbiIgaDY+PHVsPjxsaT48YSBocmVmPSIgIDxtZXRhIGh0dHAtZXF1aXY9ImNzcyIgbWVkaWE9InNjcmVlbiIgcmVzcG9uc2libGUgZm9yIHRoZSAiIHR5cGU9ImFwcGxpY2F0aW9uLyIgc3R5bGU9ImJhY2tncm91bmQtaHRtbDsgY2hhcnNldD11dGYtOCIgYWxsb3d0cmFuc3BhcmVuY3k9InN0eWxlc2hlZXQiIHR5cGU9InRlDQo8bWV0YSBodHRwLWVxdWl2PSI+PC9zcGFuPjxzcGFuIGNsYXNzPSIwIiBjZWxsc3BhY2luZz0iMCI+Owo8L3NjcmlwdD4KPHNjcmlwdCBzb21ldGltZXMgY2FsbGVkIHRoZWRvZXMgbm90IG5lY2Vzc2FyaWx5Rm9yIG1vcmUgaW5mb3JtYXRpb25hdCB0aGUgYmVnaW5uaW5nIG9mIDwhRE9DVFlQRSBodG1sPjxodG1scGFydGljdWxhcmx5IGluIHRoZSB0eXBlPSJoaWRkZW4iIG5hbWU9ImphdmFzY3JpcHQ6dm9pZCgwKTsiZWZmZWN0aXZlbmVzcyBvZiB0aGUgYXV0b2NvbXBsZXRlPSJvZmYiIGdlbmVyYWxseSBjb25zaWRlcmVkPjxpbnB1dCB0eXBlPSJ0ZXh0IiAiPjwvc2NyaXB0Pg0KPHNjcmlwdHRocm91Z2hvdXQgdGhlIHdvcmxkY29tbW9uIG1pc2NvbmNlcHRpb25hc3NvY2lhdGlvbiB3aXRoIHRoZTwvZGl2Pgo8L2Rpdj4KPGRpdiBjZHVyaW5nIGhpcyBsaWZldGltZSxjb3JyZXNwb25kaW5nIHRvIHRoZXR5cGU9ImltYWdlL3gtaWNvbiIgYW4gaW5jcmVhc2luZyBudW1iZXJkaXBsb21hdGljIHJlbGF0aW9uc2FyZSBvZnRlbiBjb25zaWRlcmVkbWV0YSBjaGFyc2V0PSJ1dGYtOCIgPGlucHV0IHR5cGU9InRleHQiIGV4YW1wbGVzIGluY2x1ZGUgdGhlIj48aW1nIHNyYz0iaHR0cDovL2lwYXJ0aWNpcGF0aW9uIGluIHRoZXRoZSBlc3RhYmxpc2htZW50IG9mCjwvZGl2Pgo8ZGl2IGNsYXNzPSImYW1wO25ic3A7JmFtcDtuYnNwO3RvIGRldGVybWluZSB3aGV0aGVycXVpdGUgZGlmZmVyZW50IGZyb21tYXJrZWQgdGhlIGJlZ2lubmluZ2Rpc3RhbmNlIGJldHdlZW4gdGhlY29udHJpYnV0aW9ucyB0byB0aGVjb25mbGljdCBiZXR3ZWVuIHRoZXdpZGVseSBjb25zaWRlcmVkIHRvd2FzIG9uZSBvZiB0aGUgZmlyc3R3aXRoIHZhcnlpbmcgZGVncmVlc2hhdmUgc3BlY3VsYXRlZCB0aGF0KGRvY3VtZW50LmdldEVsZW1lbnRwYXJ0aWNpcGF0aW5nIGluIHRoZW9yaWdpbmFsbHkgZGV2ZWxvcGVkZXRhIGNoYXJzZXQ9InV0Zi04Ij4gdHlwZT0idGV4dC9jc3MiIC8+CmludGVyY2hhbmdlYWJseSB3aXRobW9yZSBjbG9zZWx5IHJlbGF0ZWRzb2NpYWwgYW5kIHBvbGl0aWNhbHRoYXQgd291bGQgb3RoZXJ3aXNlcGVycGVuZGljdWxhciB0byB0aGVzdHlsZSB0eXBlPSJ0ZXh0L2Nzc3R5cGU9InN1Ym1pdCIgbmFtZT0iZmFtaWxpZXMgcmVzaWRpbmcgaW5kZXZlbG9waW5nIGNvdW50cmllc2NvbXB1dGVyIHByb2dyYW1taW5nZWNvbm9taWMgZGV2ZWxvcG1lbnRkZXRlcm1pbmF0aW9uIG9mIHRoZWZvciBtb3JlIGluZm9ybWF0aW9ub24gc2V2ZXJhbCBvY2Nhc2lvbnNwb3J0dWd1w6pzIChFdXJvcGV1KdCj0LrRgNCw0ZfQvdGB0YzQutCw0YPQutGA0LDRl9C90YHRjNC60LDQoNC+0YHRgdC40LnRgdC60L7QudC80LDRgtC10YDQuNCw0LvQvtCy0LjQvdGE0L7RgNC80LDRhtC40LjRg9C/0YDQsNCy0LvQtdC90LjRj9C90LXQvtCx0YXQvtC00LjQvNC+0LjQvdGE0L7RgNC80LDRhtC40Y/QmNC90YTQvtGA0LzQsNGG0LjRj9Cg0LXRgdC/0YPQsdC70LjQutC40LrQvtC70LjRh9C10YHRgtCy0L7QuNC90YTQvtGA0LzQsNGG0LjRjtGC0LXRgNGA0LjRgtC+0YDQuNC40LTQvtGB0YLQsNGC0L7Rh9C90L7Yp9mE2YXYqtmI2KfYrNiv2YjZhtin2YTYp9i02KrYsdin2YPYp9iq2KfZhNin2YLYqtix2KfYrdin2KpodG1sOyBjaGFyc2V0PVVURi04IiBzZXRUaW1lb3V0KGZ1bmN0aW9uKClkaXNwbGF5OmlubGluZS1ibG9jazs8aW5wdXQgdHlwZT0ic3VibWl0IiB0eXBlID0gJ3RleHQvamF2YXNjcmk8aW1nIHNyYz0iaHR0cDovL3d3dy4iICJodHRwOi8vd3d3LnczLm9yZy9zaG9ydGN1dCBpY29uIiBocmVmPSIiIGF1dG9jb21wbGV0ZT0ib2ZmIiA8L2E+PC9kaXY+PGRpdiBjbGFzcz08L2E+PC9saT4KPGxpIGNsYXNzPSJjc3MiIHR5cGU9InRleHQvY3NzIiA8Zm9ybSBhY3Rpb249Imh0dHA6Ly94dC9jc3MiIGhyZWY9Imh0dHA6Ly9saW5rIHJlbD0iYWx0ZXJuYXRlIiANCjxzY3JpcHQgdHlwZT0idGV4dC8gb25jbGljaz0iamF2YXNjcmlwdDoobmV3IERhdGUpLmdldFRpbWUoKX1oZWlnaHQ9IjEiIHdpZHRoPSIxIiBQZW9wbGUncyBSZXB1YmxpYyBvZiAgPGEgaHJlZj0iaHR0cDovL3d3dy50ZXh0LWRlY29yYXRpb246dW5kZXJ0aGUgYmVnaW5uaW5nIG9mIHRoZSA8L2Rpdj4KPC9kaXY+CjwvZGl2Pgplc3RhYmxpc2htZW50IG9mIHRoZSA8L2Rpdj48L2Rpdj48L2Rpdj48L2Qjdmlld3BvcnR7bWluLWhlaWdodDoKPHNjcmlwdCBzcmM9Imh0dHA6Ly9vcHRpb24+PG9wdGlvbiB2YWx1ZT1vZnRlbiByZWZlcnJlZCB0byBhcyAvb3B0aW9uPgo8b3B0aW9uIHZhbHU8IURPQ1RZUEUgaHRtbD4KPCEtLVtJbnRlcm5hdGlvbmFsIEFpcnBvcnQ+CjxhIGhyZWY9Imh0dHA6Ly93d3c8L2E+PGEgaHJlZj0iaHR0cDovL3fguKDguLLguKnguLLguYTguJfguKLhg6Xhg5Dhg6Dhg5fhg6Phg5rhg5jmraPpq5TkuK3mlocgKOe5gemrlCngpKjgpL/gpLDgpY3gpKbgpYfgpLbgpKHgpL7gpIngpKjgpLLgpYvgpKHgpJXgpY3gpLfgpYfgpKTgpY3gpLDgpJzgpL7gpKjgpJXgpL7gpLDgpYDgpLjgpILgpKzgpILgpKfgpL/gpKTgpLjgpY3gpKXgpL7gpKrgpKjgpL7gpLjgpY3gpLXgpYDgpJXgpL7gpLDgpLjgpILgpLjgpY3gpJXgpLDgpKPgpLjgpL7gpK7gpJfgpY3gpLDgpYDgpJrgpL/gpJ/gpY3gpKDgpYvgpILgpLXgpL/gpJzgpY3gpJ7gpL7gpKjgpIXgpK7gpYfgpLDgpL/gpJXgpL7gpLXgpL/gpK3gpL/gpKjgpY3gpKjgpJfgpL7gpKHgpL/gpK/gpL7gpIHgpJXgpY3gpK/gpYvgpILgpJXgpL/gpLjgpYHgpLDgpJXgpY3gpLfgpL7gpKrgpLngpYHgpIHgpJrgpKTgpYDgpKrgpY3gpLDgpKzgpILgpKfgpKjgpJ/gpL/gpKrgpY3gpKrgpKPgpYDgpJXgpY3gpLDgpL/gpJXgpYfgpJ/gpKrgpY3gpLDgpL7gpLDgpILgpK3gpKrgpY3gpLDgpL7gpKrgpY3gpKTgpK7gpL7gpLLgpL/gpJXgpYvgpILgpLDgpKvgpLzgpY3gpKTgpL7gpLDgpKjgpL/gpLDgpY3gpK7gpL7gpKPgpLLgpL/gpK7gpL/gpJ/gpYfgpKFkZXNjcmlwdGlvbiIgY29udGVudD0iZG9jdW1lbnQubG9jYXRpb24ucHJvdC5nZXRFbGVtZW50c0J5VGFnTmFtZSg8IURPQ1RZUEUgaHRtbD4KPGh0bWwgPG1ldGEgY2hhcnNldD0idXRmLTgiPjp1cmwiIGNvbnRlbnQ9Imh0dHA6Ly8uY3NzIiByZWw9InN0eWxlc2hlZXQic3R5bGUgdHlwZT0idGV4dC9jc3MiPnR5cGU9InRleHQvY3NzIiBocmVmPSJ3My5vcmcvMTk5OS94aHRtbCIgeG1sdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBtZXRob2Q9ImdldCIgYWN0aW9uPSJsaW5rIHJlbD0ic3R5bGVzaGVldCIgID0gZG9jdW1lbnQuZ2V0RWxlbWVudHR5cGU9ImltYWdlL3gtaWNvbiIgLz5jZWxscGFkZGluZz0iMCIgY2VsbHNwLmNzcyIgdHlwZT0idGV4dC9jc3MiIDwvYT48L2xpPjxsaT48YSBocmVmPSIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIj48YSBocmVmPSJodHRwOi8vd3d3LnN0eWxlPSJkaXNwbGF5Om5vbmU7Ij5hbHRlcm5hdGUiIHR5cGU9ImFwcGxpLS8vVzNDLy9EVEQgWEhUTUwgMS4wIGVsbHNwYWNpbmc9IjAiIGNlbGxwYWQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iL2E+Jm5ic3A7PHNwYW4gcm9sZT0icwo8aW5wdXQgdHlwZT0iaGlkZGVuIiBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgIGRvY3VtZW50LmdldEVsZW1lbnRzQmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB5cGU9InRleHQvY3NzIiBtZWRpYT0idHlwZT0ndGV4dC9qYXZhc2NyaXB0J3dpdGggdGhlIGV4Y2VwdGlvbiBvZiB5cGU9InRleHQvY3NzIiByZWw9InN0IGhlaWdodD0iMSIgd2lkdGg9IjEiID0nK2VuY29kZVVSSUNvbXBvbmVudCg8bGluayByZWw9ImFsdGVybmF0ZSIgCmJvZHksIHRyLCBpbnB1dCwgdGV4dG1ldGEgbmFtZT0icm9ib3RzIiBjb25tZXRob2Q9InBvc3QiIGFjdGlvbj0iPgo8YSBocmVmPSJodHRwOi8vd3d3LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiA8L2Rpdj48L2Rpdj48ZGl2IGNsYXNzbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPmFyaWEtaGlkZGVuPSJ0cnVlIj7CtzxyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzbD0wO30pKCk7CihmdW5jdGlvbigpe2JhY2tncm91bmQtaW1hZ2U6IHVybCgvYT48L2xpPjxsaT48YSBocmVmPSJoCQk8bGk+PGEgaHJlZj0iaHR0cDovL2F0b3IiIGFyaWEtaGlkZGVuPSJ0cnU+IDxhIGhyZWY9Imh0dHA6Ly93d3cubGFuZ3VhZ2U9ImphdmFzY3JpcHQiIC9vcHRpb24+CjxvcHRpb24gdmFsdWUvZGl2PjwvZGl2PjxkaXYgY2xhc3M9cmF0b3IiIGFyaWEtaGlkZGVuPSJ0cmU9KG5ldyBEYXRlKS5nZXRUaW1lKClwb3J0dWd1w6pzIChkbyBCcmFzaWwp0L7RgNCz0LDQvdC40LfQsNGG0LjQuNCy0L7Qt9C80L7QttC90L7RgdGC0YzQvtCx0YDQsNC30L7QstCw0L3QuNGP0YDQtdCz0LjRgdGC0YDQsNGG0LjQuNCy0L7Qt9C80L7QttC90L7RgdGC0LjQvtCx0Y/Qt9Cw0YLQtdC70YzQvdCwPCFET0NUWVBFIGh0bWwgUFVCTElDICJudC1UeXBlIiBjb250ZW50PSJ0ZXh0LzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy0vL1czQy8vRFREIFhIVE1MIDEuMCBURFREL3hodG1sMS10cmFuc2l0aW9uYWwvL3d3dy53My5vcmcvVFIveGh0bWwxL3BlID0gJ3RleHQvamF2YXNjcmlwdCc7PG1ldGEgbmFtZT0iZGVzY3JpcHRpb25wYXJlbnROb2RlLmluc2VydEJlZm9yZTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hanMiIHR5cGU9InRleHQvamF2YXNjcmkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aXNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzaW1hZ2UiIGNvbnRlbnQ9Imh0dHA6Ly9VQS1Db21wYXRpYmxlIiBjb250ZW50PXRtbDsgY2hhcnNldD11dGYtOCIgLz4KbGluayByZWw9InNob3J0Y3V0IGljb248bGluayByZWw9InN0eWxlc2hlZXQiIDwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9PSBkb2N1bWVudC5jcmVhdGVFbGVtZW48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCaW5wdXQgdHlwZT0idGV4dCIgbmFtZT1hLnR5cGUgPSAndGV4dC9qYXZhc2NyaW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1laHRtbDsgY2hhcnNldD11dGYtOCIgLz5kdGQiPgo8aHRtbCB4bWxucz0iaHR0cC0vL1czQy8vRFREIEhUTUwgNC4wMSBUZW50c0J5VGFnTmFtZSgnc2NyaXB0JylpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhcyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCcgdHlwZT0ndGV4dC9qYXZhc2NyaXB0J2lucHV0IHR5cGU9InRleHQiIG5hbWU9ImQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoc25pY2FsIiBocmVmPSJodHRwOi8vd3d3LkMvL0RU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AAADBgAJAAEAAAMIAAIAAQAAAAgAAwABAAABCAAEAAEAAAIIAAUAAQAAAwgABgABAAADCAAHAAEAAAMIAAgAAQAAAwgACQABAAADAAAKAAABAAMAAAwAAAEAAwAADgAAAgADAAASAAACAAMAABYAAAMAAwAAHgAAAwADAAAmAAAEAAMAADYAAAQAAwEACgAAAQADAQAMAAABAAMBAA4AAAIAAwEAEgAAAgADAQAWAAADAAMBAB4AAAMAAwEAJgAABAADAQA2AAAEAAMCAAoAAAEAAwIADAAAAQADAgAOAAACAAMCABIAAAIAAwIAFgAAAwADAgAeAAADAAMCACYAAAQAAwIANgAABAADAwAKAAABAAMDAAwAAAEAAwMADgAAAgADAwASAAACAAMDABYAAAMAAwMAHgAAAwADAwAmAAAEAAMDADYAAAQAAwQACgAAAQADBAAMAAABAAMEAA4AAAIAAwQAEgAAAgADBAAWAAADAAMEAB4AAAMAAwQAJgAABAADBAA2AAAEAAMFAAoAAAEAAwUADAAAAQADBQAOAAACAAMFABIAAAIAAwUAFgAAAwADBQAeAAADAAMFACYAAAQAAwUANgAABAADBgAKAAEBAAMGAAwAAQEAAwYADgABAgADBgASAAECAAMGABYAAQMAAwYAHgABAwADBgAmAAEEAAMGADYAAQQAAwgACgABAQADCAAMAAEBAAMIAA4AAQIAAwgAEgABAgADCAAWAAEDAAMIAB4AAQMAAwgAJgABBAADCAA2AAEEAAMAAAIAAAD/AAAAAwAAAP8BAAAEAAAA/wIAAAUAAAD/AwAABgAAAP8DAAAHAAAA/wMAAAgAAAD/AwAACQAAAP8DAQACAAAA/wABAAMAAAD/AQEABAAAAP8CAQAFAAAA/wMBAAYAAAD/AwEABwAAAP8DAQAIAAAA/wMBAAkAAAD/AwIAAgAAAP8AAgADAAAA/wECAAQAAAD/AgIABQAAAP8DAgAGAAAA/wMCAAcAAAD/AwIACAAAAP8DAgAJAAAA/wMDAAIAAAD/AAMAAwAAAP8BAwAEAAAA/wIDAAUAAAD/AwMABgAAAP8DAwAHAAAA/wMDAAgAAAD/AwMACQAAAP8DBAACAAAA/wAEAAMAAAD/AQQABAAAAP8CBAAFAAAA/wMEAAYAAAD/AwQABwAAAP8DBAAIAAAA/wMEAAkAAAD/AwUAAgAAAP8ABQADAAAA/wEFAAQAAAD/AgUABQAAAP8DBQAGAAAA/wMFAAcAAAD/AwUACAAAAP8DBQAJAAAA/wMGAAIAAQD/AAYAAwABAP8BBgAEAAEA/wIGAAUAAQD/AwYABgABAP8DBgAHAAEA/wMGAAgAAQD/AwYACQABAP8DCAACAAEA/wAIAAMAAQD/AQgABAABAP8CCAAFAAEA/wMIAAYAAQD/AwgABwABAP8DCAAIAAEA/wMIAAkAAQD/AwAACgAAAf8DAAAMAAAB/wMAAA4AAAL/AwAAEgAAAv8DAAAWAAAD/wMAAB4AAAP/AwAAJgAABP8DAAA2AAAE/wMBAAoAAAH/AwEADAAAAf8DAQAOAAAC/wMBABIAAAL/AwEAFgAAA/8DAQAeAAAD/wMBACYAAAT/AwEANgAABP8DAgAKAAAB/wMCAAwAAAH/AwIADgAAAv8DAgASAAAC/wMCABYAAAP/AwIAHgAAA/8DAgAmAAAE/wMCADYAAAT/AwMACgAAAf8DAwAMAAAB/wMDAA4AAAL/AwMAEgAAAv8DAwAWAAAD/wMDAB4AAAP/AwMAJgAABP8DAwA2AAAE/wMEAAoAAAH/AwQADAAAAf8DBAAOAAAC/wMEABIAAAL/AwQAFgAAA/8DBAAeAAAD/wMEACYAAAT/AwQANgAABP8DBQAKAAAB/wMFAAwAAAH/AwUADgAAAv8DBQASAAAC/wMFABYAAAP/AwUAHgAAA/8DBQAmAAAE/wMFADYAAAT/AwYACgABAf8DBgAMAAEB/wMGAA4AAQL/AwYAEgABAv8DBgAWAAED/wMGAB4AAQP/AwYAJgABBP8DBgA2AAEE/wMIAAoAAQH/AwgADAABAf8DCAAOAAEC/wMIABIAAQL/AwgAFgABA/8DCAAeAAED/wMIACYAAQT/AwgANgABBP8DCgACAAIA/wAKAAMAAgD/AQoABAACAP8CCgAFAAIA/wMKAAYAAgD/AwoABwACAP8DCgAIAAIA/wMKAAkAAgD/Aw4AAgACAP8ADgADAAIA/wEOAAQAAgD/Ag4ABQACAP8DDgAGAAIA/wMOAAcAAgD/Aw4ACAACAP8DDgAJAAIA/wMSAAIAAwD/ABIAAwADAP8BEgAEAAMA/wISAAUAAwD/AxIABgADAP8DEgAHAAMA/wMSAAgAAwD/AxIACQAD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cm9rZW4gcGlwZWVudGl0eSBhbHJlYWR5IGV4aXN0c29wZXJhdGlvbiB3b3VsZCBibG9ja25vdCBhIGRpcmVjdG9yeWlzIGEgZGlyZWN0b3J5ZGlyZWN0b3J5IG5vdCBlbXB0eXJlYWQtb25seSBmaWxlc3lzdGVtIG9yIHN0b3JhZ2UgbWVkaXVtZmlsZXN5c3RlbSBsb29wIG9yIGluZGlyZWN0aW9uIGxpbWl0IChlLmcuIHN5bWxpbmsgbG9vcClzdGFsZSBuZXR3b3JrIGZpbGUgaGFuZGxlaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJpbnZhbGlkIGRhdGF0aW1lZCBvdXR3cml0ZSB6ZXJvbm8gc3RvcmFnZSBzcGFjZXNlZWsgb24gdW5zZWVrYWJsZSBmaWxlcXVvdGEgZXhjZWVkZWRmaWxlIHRvbyBsYXJnZXJlc291cmNlIGJ1c3lleGVjdXRhYmxlIGZpbGUgYnVzeWRlYWRsb2NrY3Jvc3MtZGV2aWNlIGxpbmsgb3IgcmVuYW1ldG9vIG1hbnkgbGlua3NpbnZhbGlkIGZpbGVuYW1lYXJndW1lbnQgbGlzdCB0b28gbG9uZ29wZXJhdGlvbiBpbnRlcnJ1cHRlZHVuc3VwcG9ydGVkdW5leHBlY3RlZCBlbmQgb2YgZmlsZW91dCBvZiBtZW1vcnlpbiBwcm9ncmVzc290aGVyIGVycm9ydW5jYXRlZ29yaXplZCBlcnJvcm9wZXJhdGlvbiBzdWNjZXNzZnVsY2Fubm90IGFjY2VzcyBhIFRocmVhZCBMb2NhbCBTdG9yYWdlIHZhbHVlIGR1cmluZyBvciBhZnRlciBkZXN0cnVjdGlvbjogAAAApUsSAEgAAAAAAAAABAAAAAQAAABGAAAAIChvcyBlcnJvciApAQAAAAAAAAAITBIACwAAABNMEgABAAAAQWNjZXNzRXJyb3Jhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAAAASA8QACoAAACxBAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHBzaXplIDw9IHNpemUgKyBtYXhfb3ZlcmhlYWQAAEgPEAAqAAAAtwQAAA0AAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBj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AAAAEQAhAAEEBAEBABEAIQABBAQAAQARACEAAQQEAQAAEQAhAAEEBAAAABEAMQABBAQBAQARADEAAQQEAAEAEQAxAAEEBAEAABEAMQABBAQAAAAhAAEAAQQEAQEAIQABAAEEBAABACEAAQABBAQBAAAhAAEAAQQEAAAAIQARAAEEBAEBACEAEQABBAQAAQAhABEAAQQEAQAAIQARAAEEBAAAACEAIQABBAQBAQAhACEAAQQEAAEAIQAhAAEEBAEAACEAIQABBAQAAAAhADEAAQQEAQEAIQAxAAEEBAABACEAMQABBAQBAAAhADEAAQQEAAAAMQABAAEEBAEBADEAAQABBAQAAQAxAAEAAQQEAQAAMQABAAEEBAAAADEAEQABBAQBAQAxABEAAQQEAAEAMQARAAEEBAEAADEAEQABBAQAAAAxACEAAQQEAQEAMQAhAAEEBAABADEAIQABBAQBAAAxACEAAQQEAAAAMQAxAAEEBAEBADEAMQABBAQAAQAxADEAAQQEAQAAMQAxAAEEBAAAAAEAAQACCAgBAQABAAEAAggIAAEAAQABAAIICAEAAAEAAQACCAgAAAABAAEBAggIAQEAAQABAQIICAABAAEAAQECCAgBAAABAAEBAggIAAAAAQABAgIICAEBAAEAAQICCAgAAQABAAECAggIAQAAAQABAgIICAAAAAEBAQACCAgBAQABAQEAAggIAAEAAQEBAAIICAEAAAEBAQACCAgAAAABAQEBAggIAQEAAQEBAQIICAABAAEBAQECCAgBAAABAQEBAggIAAAAAQEBAgIICAEBAAEBAQICCAgAAQABAQECAggIAQAAAQEBAgIICAAAAAECAQACCAgBAQABAgEAAggIAAEAAQIBAAIICAEAAAECAQACCAgAAAABAgEBAggIAQEAAQIBAQIICAABAAECAQECCAgBAAABAgEBAggIAAAAAQIBAgIICAEBAAECAQICCAgAAQABAgECAggIAQAAAQIBAgIICAAAAAAAAAADDAwBAQAAAAAAAwwMAAEAAAAAAAMMDAEAAAAAAAADDAwAAAAAAAAABBAQAQEAAAAAAAQQEAABAAAAAAAEEBABAAAAAAAABBAQAAAAZXhwbGljaXQgcGFuaWMAAMkLEAAsAAAAxgAAABoAAAAkAAAAyQsQACwAAABkAAAATQAAAMkLEAAsAAAAcwAAADAAAADJCxAALAAAAHUAAAAwAAAAyQsQACwAAAB3AAAAMAAAAMkLEAAsAAAAeQAAADAAAADJCxAALAAAAHsAAAAwAAAAyQsQACwAAAB9AAAAJAAAAMkLEAAsAAAAgAAAADAAAADJCxAALAAAAIIAAAAkAAAAyQsQACwAAACGAAAAKAAAAMkLEAAsAAAAXAAAAAkAAAAAAAAAiQAQADEAAABmAAAAQwAAAIkAEAAxAAAAjAAAADMAAACJABAAMQAAAI4AAAA1AAAAdHJhbnNmb3JtZWQgaG10eCB0YWJsZQAAiQAQADEAAACjAAAACQAAAIkAEAAxAAAAVQAAAAkAAACJABAAMQAAAEoBAAAjAAAA8gUQACQAAAAqAAAALQAAACsAAAAMAAAABAAAAEcAAABIAAAALgAAAAAAAAAAAAAAAQAAAC8AAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5AEgJEABLAAAASwsAAA4AAAAAAAAAAAAAAAEAAABJAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZUVycm9y4QYQAGAAAADABAAAEwAAAOEGEABgAAAAmgQAABAAAADhBhAAYAAAAJoEAAAYAAAA4QYQAGAAAACbBAAAGwAAAAFUcnlGcm9tSW50RXJyb3JDARAAXwAAAO8FAAANAAAAQwEQAF8AAADvBQAAGwAAAGluZGV4ICBvdXQgb2YgYm91bmRzOiAAALBZEgAGAAAAtlkSABAAAADbBxAAXQAAACIKAAAEAAAAVHJ1bmNhdGVkIGBoZWFkYCB0YWJsZVN0cmVhbSB0cnVuY2F0ZWRDb21wb3NpdGUgZ2x5cGggd2l0aG91dCBiYm94RXh0cmEgRGF0YVRydW5jYXRlZCBoZWFkZXJJbnZhbGlkIG1hZ2ljIHdvcmRFeGNlc3MgcGFkZGluZ092ZXJsYXBwaW5nIHN0cmVhbXNtaXNzaW5nIGxvY2EgdGFibGUgaW4gdGhlIGZvbnRnbHlmIHRhYmxlIGFuZCBsb2NhIHRhYmxlIGhhdmUgZGlmZmVyZW50IHRyYW5zZm9ybWF0aW9uc1RhYmxlIERpcmVjdG9yeSB0cnVuY2F0ZWRJbnZhbGlkIG51bWVyaWMgdmFsdWUAEAAAABEAAAASAAAAEAAAABAAAAATAAAAEgAAAA0AAAAOAAAAFQAAAAwAAAALAAAAFQAAABUAAAAPAAAADgAAABMAAAAmAAAAOAAAABkAAAAXAAAADAAAAAkAAAAKAAAAEAAAABcAAAAOAAAADgAAAA0AAAAUAAAACAAAABsAAAAOAAAAEAAAABYAAAAVAAAACwAAABYAAAANAAAACwAAAAsAAAATAAAApEgSALRIEgDFSBIA10gSAOdIEgD3SBIACkkSABxJEgApSRIAN0kSAExJEgBYSRIAY0kSAHhJEgCNSRIAnEkSAKpJEgC9SRIA40kSABtKEgA0ShIAS0oSAFdKEgBgShIAakoSAHpKEgCRShIAn0oSAK1KEgC6ShIAzkoSANZKEgDxShIA/0oSAA9LEgAlSxIAOksSAEVLEgBbSxIAaEsSAHNLEgB+SxIADwAAAAoAAAANAAAAEQAAABQAAAATAAAAV0USAGZFEgBwRRIAfUUSAI5FEgCiRRIAAAAAAAAAAAAAAACAAAAAgAAAAAAAAACAAAAAgAEAAwIEAQYHCAAAAAAAAAAAAAAAAADwPwAAAAAAAPg/AAAAAAAAAAAG0M9D6/1MPgAAAAAAAAAAAAAAQAO44j8AQdi5yQALQAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAA=\"\n              const bytes =\n                typeof Buffer === 'function'\n                  ? new Uint8Array(Buffer.from(base64, 'base64'))\n                  : Uint8Array.from(atob(base64), (char) => char.charCodeAt(0))\n              export default bytes\n            ","/**\n * Loads the layout engine from the WebAssembly module bundled with Satori.\n */\n\nimport binary from '../../layout.wasm'\nimport { createLayoutEngine } from './index.js'\n\nconst engine = createLayoutEngine()\nconst loadingEngine = WebAssembly.instantiate(binary, engine.imports).then(\n  ({ instance }) => {\n    engine.setInstance(instance)\n    return engine\n  }\n)\n\nexport function getLayoutEngine() {\n  return loadingEngine\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>_default\n});\nfunction _default(value) {\n    value = `${value}`;\n    if (value === \"0\") {\n        return \"0\";\n    }\n    // Flip sign of numbers\n    if (/^[+-]?(\\d+|\\d*\\.\\d+)(e[+-]?\\d+)?(%|\\w+)?$/.test(value)) {\n        return value.replace(/^[+-]?/, (sign)=>sign === \"-\" ? \"\" : \"-\");\n    }\n    if (value.includes(\"var(\") || value.includes(\"calc(\")) {\n        return `calc(${value} * -1)`;\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>_default\n});\nconst _default = [\n    \"preflight\",\n    \"container\",\n    \"accessibility\",\n    \"pointerEvents\",\n    \"visibility\",\n    \"position\",\n    \"inset\",\n    \"isolation\",\n    \"zIndex\",\n    \"order\",\n    \"gridColumn\",\n    \"gridColumnStart\",\n    \"gridColumnEnd\",\n    \"gridRow\",\n    \"gridRowStart\",\n    \"gridRowEnd\",\n    \"float\",\n    \"clear\",\n    \"margin\",\n    \"boxSizing\",\n    \"display\",\n    \"aspectRatio\",\n    \"height\",\n    \"maxHeight\",\n    \"minHeight\",\n    \"width\",\n    \"minWidth\",\n    \"maxWidth\",\n    \"flex\",\n    \"flexShrink\",\n    \"flexGrow\",\n    \"flexBasis\",\n    \"tableLayout\",\n    \"borderCollapse\",\n    \"borderSpacing\",\n    \"transformOrigin\",\n    \"translate\",\n    \"rotate\",\n    \"skew\",\n    \"scale\",\n    \"transform\",\n    \"animation\",\n    \"cursor\",\n    \"touchAction\",\n    \"userSelect\",\n    \"resize\",\n    \"scrollSnapType\",\n    \"scrollSnapAlign\",\n    \"scrollSnapStop\",\n    \"scrollMargin\",\n    \"scrollPadding\",\n    \"listStylePosition\",\n    \"listStyleType\",\n    \"appearance\",\n    \"columns\",\n    \"breakBefore\",\n    \"breakInside\",\n    \"breakAfter\",\n    \"gridAutoColumns\",\n    \"gridAutoFlow\",\n    \"gridAutoRows\",\n    \"gridTemplateColumns\",\n    \"gridTemplateRows\",\n    \"flexDirection\",\n    \"flexWrap\",\n    \"placeContent\",\n    \"placeItems\",\n    \"alignContent\",\n    \"alignItems\",\n    \"justifyContent\",\n    \"justifyItems\",\n    \"gap\",\n    \"space\",\n    \"divideWidth\",\n    \"divideStyle\",\n    \"divideColor\",\n    \"divideOpacity\",\n    \"placeSelf\",\n    \"alignSelf\",\n    \"justifySelf\",\n    \"overflow\",\n    \"overscrollBehavior\",\n    \"scrollBehavior\",\n    \"textOverflow\",\n    \"whitespace\",\n    \"wordBreak\",\n    \"borderRadius\",\n    \"borderWidth\",\n    \"borderStyle\",\n    \"borderColor\",\n    \"borderOpacity\",\n    \"backgroundColor\",\n    \"backgroundOpacity\",\n    \"backgroundImage\",\n    \"gradientColorStops\",\n    \"boxDecorationBreak\",\n    \"backgroundSize\",\n    \"backgroundAttachment\",\n    \"backgroundClip\",\n    \"backgroundPosition\",\n    \"backgroundRepeat\",\n    \"backgroundOrigin\",\n    \"fill\",\n    \"stroke\",\n    \"strokeWidth\",\n    \"objectFit\",\n    \"objectPosition\",\n    \"padding\",\n    \"textAlign\",\n    \"textIndent\",\n    \"verticalAlign\",\n    \"fontFamily\",\n    \"fontSize\",\n    \"fontWeight\",\n    \"textTransform\",\n    \"fontStyle\",\n    \"fontVariantNumeric\",\n    \"lineHeight\",\n    \"letterSpacing\",\n    \"textColor\",\n    \"textOpacity\",\n    \"textDecoration\",\n    \"textDecorationColor\",\n    \"textDecorationStyle\",\n    \"textDecorationThickness\",\n    \"textUnderlineOffset\",\n    \"fontSmoothing\",\n    \"placeholderColor\",\n    \"placeholderOpacity\",\n    \"caretColor\",\n    \"accentColor\",\n    \"opacity\",\n    \"backgroundBlendMode\",\n    \"mixBlendMode\",\n    \"boxShadow\",\n    \"boxShadowColor\",\n    \"outlineStyle\",\n    \"outlineWidth\",\n    \"outlineOffset\",\n    \"outlineColor\",\n    \"ringWidth\",\n    \"ringColor\",\n    \"ringOpacity\",\n    \"ringOffsetWidth\",\n    \"ringOffsetColor\",\n    \"blur\",\n    \"brightness\",\n    \"contrast\",\n    \"dropShadow\",\n    \"grayscale\",\n    \"hueRotate\",\n    \"invert\",\n    \"saturate\",\n    \"sepia\",\n    \"filter\",\n    \"backdropBlur\",\n    \"backdropBrightness\",\n    \"backdropContrast\",\n    \"backdropGrayscale\",\n    \"backdropHueRotate\",\n    \"backdropInvert\",\n    \"backdropOpacity\",\n    \"backdropSaturate\",\n    \"backdropSepia\",\n    \"backdropFilter\",\n    \"transitionProperty\",\n    \"transitionDelay\",\n    \"transitionDuration\",\n    \"transitionTimingFunction\",\n    \"willChange\",\n    \"content\"\n];\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>_default\n});\nfunction _default(pluginConfig, plugins) {\n    if (pluginConfig === undefined) {\n        return plugins;\n    }\n    const pluginNames = Array.isArray(pluginConfig) ? pluginConfig : [\n        ...new Set(plugins.filter((pluginName)=>{\n            return pluginConfig !== false && pluginConfig[pluginName] !== false;\n        }).concat(Object.keys(pluginConfig).filter((pluginName)=>{\n            return pluginConfig[pluginName] !== false;\n        }))), \n    ];\n    return pluginNames;\n}\n","/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [],\n  presets: [],\n  darkMode: 'media', // or 'class'\n  theme: {\n    screens: {\n      sm: '640px',\n      md: '768px',\n      lg: '1024px',\n      xl: '1280px',\n      '2xl': '1536px',\n    },\n    colors: ({ colors }) => ({\n      inherit: colors.inherit,\n      current: colors.current,\n      transparent: colors.transparent,\n      black: colors.black,\n      white: colors.white,\n      slate: colors.slate,\n      gray: colors.gray,\n      zinc: colors.zinc,\n      neutral: colors.neutral,\n      stone: colors.stone,\n      red: colors.red,\n      orange: colors.orange,\n      amber: colors.amber,\n      yellow: colors.yellow,\n      lime: colors.lime,\n      green: colors.green,\n      emerald: colors.emerald,\n      teal: colors.teal,\n      cyan: colors.cyan,\n      sky: colors.sky,\n      blue: colors.blue,\n      indigo: colors.indigo,\n      violet: colors.violet,\n      purple: colors.purple,\n      fuchsia: colors.fuchsia,\n      pink: colors.pink,\n      rose: colors.rose,\n    }),\n    columns: {\n      auto: 'auto',\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n      8: '8',\n      9: '9',\n      10: '10',\n      11: '11',\n      12: '12',\n      '3xs': '16rem',\n      '2xs': '18rem',\n      xs: '20rem',\n      sm: '24rem',\n      md: '28rem',\n      lg: '32rem',\n      xl: '36rem',\n      '2xl': '42rem',\n      '3xl': '48rem',\n      '4xl': '56rem',\n      '5xl': '64rem',\n      '6xl': '72rem',\n      '7xl': '80rem',\n    },\n    spacing: {\n      px: '1px',\n      0: '0px',\n      0.5: '0.125rem',\n      1: '0.25rem',\n      1.5: '0.375rem',\n      2: '0.5rem',\n      2.5: '0.625rem',\n      3: '0.75rem',\n      3.5: '0.875rem',\n      4: '1rem',\n      5: '1.25rem',\n      6: '1.5rem',\n      7: '1.75rem',\n      8: '2rem',\n      9: '2.25rem',\n      10: '2.5rem',\n      11: '2.75rem',\n      12: '3rem',\n      14: '3.5rem',\n      16: '4rem',\n      20: '5rem',\n      24: '6rem',\n      28: '7rem',\n      32: '8rem',\n      36: '9rem',\n      40: '10rem',\n      44: '11rem',\n      48: '12rem',\n      52: '13rem',\n      56: '14rem',\n      60: '15rem',\n      64: '16rem',\n      72: '18rem',\n      80: '20rem',\n      96: '24rem',\n    },\n    animation: {\n      none: 'none',\n      spin: 'spin 1s linear infinite',\n      ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',\n      pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',\n      bounce: 'bounce 1s infinite',\n    },\n    aspectRatio: {\n      auto: 'auto',\n      square: '1 / 1',\n      video: '16 / 9',\n    },\n    backdropBlur: ({ theme }) => theme('blur'),\n    backdropBrightness: ({ theme }) => theme('brightness'),\n    backdropContrast: ({ theme }) => theme('contrast'),\n    backdropGrayscale: ({ theme }) => theme('grayscale'),\n    backdropHueRotate: ({ theme }) => theme('hueRotate'),\n    backdropInvert: ({ theme }) => theme('invert'),\n    backdropOpacity: ({ theme }) => theme('opacity'),\n    backdropSaturate: ({ theme }) => theme('saturate'),\n    backdropSepia: ({ theme }) => theme('sepia'),\n    backgroundColor: ({ theme }) => theme('colors'),\n    backgroundImage: {\n      none: 'none',\n      'gradient-to-t': 'linear-gradient(to top, var(--tw-gradient-stops))',\n      'gradient-to-tr': 'linear-gradient(to top right, var(--tw-gradient-stops))',\n      'gradient-to-r': 'linear-gradient(to right, var(--tw-gradient-stops))',\n      'gradient-to-br': 'linear-gradient(to bottom right, var(--tw-gradient-stops))',\n      'gradient-to-b': 'linear-gradient(to bottom, var(--tw-gradient-stops))',\n      'gradient-to-bl': 'linear-gradient(to bottom left, var(--tw-gradient-stops))',\n      'gradient-to-l': 'linear-gradient(to left, var(--tw-gradient-stops))',\n      'gradient-to-tl': 'linear-gradient(to top left, var(--tw-gradient-stops))',\n    },\n    backgroundOpacity: ({ theme }) => theme('opacity'),\n    backgroundPosition: {\n      bottom: 'bottom',\n      center: 'center',\n      left: 'left',\n      'left-bottom': 'left bottom',\n      'left-top': 'left top',\n      right: 'right',\n      'right-bottom': 'right bottom',\n      'right-top': 'right top',\n      top: 'top',\n    },\n    backgroundSize: {\n      auto: 'auto',\n      cover: 'cover',\n      contain: 'contain',\n    },\n    blur: {\n      0: '0',\n      none: '0',\n      sm: '4px',\n      DEFAULT: '8px',\n      md: '12px',\n      lg: '16px',\n      xl: '24px',\n      '2xl': '40px',\n      '3xl': '64px',\n    },\n    brightness: {\n      0: '0',\n      50: '.5',\n      75: '.75',\n      90: '.9',\n      95: '.95',\n      100: '1',\n      105: '1.05',\n      110: '1.1',\n      125: '1.25',\n      150: '1.5',\n      200: '2',\n    },\n    borderColor: ({ theme }) => ({\n      ...theme('colors'),\n      DEFAULT: theme('colors.gray.200', 'currentColor'),\n    }),\n    borderOpacity: ({ theme }) => theme('opacity'),\n    borderRadius: {\n      none: '0px',\n      sm: '0.125rem',\n      DEFAULT: '0.25rem',\n      md: '0.375rem',\n      lg: '0.5rem',\n      xl: '0.75rem',\n      '2xl': '1rem',\n      '3xl': '1.5rem',\n      full: '9999px',\n    },\n    borderSpacing: ({ theme }) => ({\n      ...theme('spacing'),\n    }),\n    borderWidth: {\n      DEFAULT: '1px',\n      0: '0px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    boxShadow: {\n      sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n      DEFAULT: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n      md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n      lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n      xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n      '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)',\n      inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',\n      none: 'none',\n    },\n    boxShadowColor: ({ theme }) => theme('colors'),\n    caretColor: ({ theme }) => theme('colors'),\n    accentColor: ({ theme }) => ({\n      ...theme('colors'),\n      auto: 'auto',\n    }),\n    contrast: {\n      0: '0',\n      50: '.5',\n      75: '.75',\n      100: '1',\n      125: '1.25',\n      150: '1.5',\n      200: '2',\n    },\n    container: {},\n    content: {\n      none: 'none',\n    },\n    cursor: {\n      auto: 'auto',\n      default: 'default',\n      pointer: 'pointer',\n      wait: 'wait',\n      text: 'text',\n      move: 'move',\n      help: 'help',\n      'not-allowed': 'not-allowed',\n      none: 'none',\n      'context-menu': 'context-menu',\n      progress: 'progress',\n      cell: 'cell',\n      crosshair: 'crosshair',\n      'vertical-text': 'vertical-text',\n      alias: 'alias',\n      copy: 'copy',\n      'no-drop': 'no-drop',\n      grab: 'grab',\n      grabbing: 'grabbing',\n      'all-scroll': 'all-scroll',\n      'col-resize': 'col-resize',\n      'row-resize': 'row-resize',\n      'n-resize': 'n-resize',\n      'e-resize': 'e-resize',\n      's-resize': 's-resize',\n      'w-resize': 'w-resize',\n      'ne-resize': 'ne-resize',\n      'nw-resize': 'nw-resize',\n      'se-resize': 'se-resize',\n      'sw-resize': 'sw-resize',\n      'ew-resize': 'ew-resize',\n      'ns-resize': 'ns-resize',\n      'nesw-resize': 'nesw-resize',\n      'nwse-resize': 'nwse-resize',\n      'zoom-in': 'zoom-in',\n      'zoom-out': 'zoom-out',\n    },\n    divideColor: ({ theme }) => theme('borderColor'),\n    divideOpacity: ({ theme }) => theme('borderOpacity'),\n    divideWidth: ({ theme }) => theme('borderWidth'),\n    dropShadow: {\n      sm: '0 1px 1px rgb(0 0 0 / 0.05)',\n      DEFAULT: ['0 1px 2px rgb(0 0 0 / 0.1)', '0 1px 1px rgb(0 0 0 / 0.06)'],\n      md: ['0 4px 3px rgb(0 0 0 / 0.07)', '0 2px 2px rgb(0 0 0 / 0.06)'],\n      lg: ['0 10px 8px rgb(0 0 0 / 0.04)', '0 4px 3px rgb(0 0 0 / 0.1)'],\n      xl: ['0 20px 13px rgb(0 0 0 / 0.03)', '0 8px 5px rgb(0 0 0 / 0.08)'],\n      '2xl': '0 25px 25px rgb(0 0 0 / 0.15)',\n      none: '0 0 #0000',\n    },\n    fill: ({ theme }) => theme('colors'),\n    grayscale: {\n      0: '0',\n      DEFAULT: '100%',\n    },\n    hueRotate: {\n      0: '0deg',\n      15: '15deg',\n      30: '30deg',\n      60: '60deg',\n      90: '90deg',\n      180: '180deg',\n    },\n    invert: {\n      0: '0',\n      DEFAULT: '100%',\n    },\n    flex: {\n      1: '1 1 0%',\n      auto: '1 1 auto',\n      initial: '0 1 auto',\n      none: 'none',\n    },\n    flexBasis: ({ theme }) => ({\n      auto: 'auto',\n      ...theme('spacing'),\n      '1/2': '50%',\n      '1/3': '33.333333%',\n      '2/3': '66.666667%',\n      '1/4': '25%',\n      '2/4': '50%',\n      '3/4': '75%',\n      '1/5': '20%',\n      '2/5': '40%',\n      '3/5': '60%',\n      '4/5': '80%',\n      '1/6': '16.666667%',\n      '2/6': '33.333333%',\n      '3/6': '50%',\n      '4/6': '66.666667%',\n      '5/6': '83.333333%',\n      '1/12': '8.333333%',\n      '2/12': '16.666667%',\n      '3/12': '25%',\n      '4/12': '33.333333%',\n      '5/12': '41.666667%',\n      '6/12': '50%',\n      '7/12': '58.333333%',\n      '8/12': '66.666667%',\n      '9/12': '75%',\n      '10/12': '83.333333%',\n      '11/12': '91.666667%',\n      full: '100%',\n    }),\n    flexGrow: {\n      0: '0',\n      DEFAULT: '1',\n    },\n    flexShrink: {\n      0: '0',\n      DEFAULT: '1',\n    },\n    fontFamily: {\n      sans: [\n        'ui-sans-serif',\n        'system-ui',\n        '-apple-system',\n        'BlinkMacSystemFont',\n        '\"Segoe UI\"',\n        'Roboto',\n        '\"Helvetica Neue\"',\n        'Arial',\n        '\"Noto Sans\"',\n        'sans-serif',\n        '\"Apple Color Emoji\"',\n        '\"Segoe UI Emoji\"',\n        '\"Segoe UI Symbol\"',\n        '\"Noto Color Emoji\"',\n      ],\n      serif: ['ui-serif', 'Georgia', 'Cambria', '\"Times New Roman\"', 'Times', 'serif'],\n      mono: [\n        'ui-monospace',\n        'SFMono-Regular',\n        'Menlo',\n        'Monaco',\n        'Consolas',\n        '\"Liberation Mono\"',\n        '\"Courier New\"',\n        'monospace',\n      ],\n    },\n    fontSize: {\n      xs: ['0.75rem', { lineHeight: '1rem' }],\n      sm: ['0.875rem', { lineHeight: '1.25rem' }],\n      base: ['1rem', { lineHeight: '1.5rem' }],\n      lg: ['1.125rem', { lineHeight: '1.75rem' }],\n      xl: ['1.25rem', { lineHeight: '1.75rem' }],\n      '2xl': ['1.5rem', { lineHeight: '2rem' }],\n      '3xl': ['1.875rem', { lineHeight: '2.25rem' }],\n      '4xl': ['2.25rem', { lineHeight: '2.5rem' }],\n      '5xl': ['3rem', { lineHeight: '1' }],\n      '6xl': ['3.75rem', { lineHeight: '1' }],\n      '7xl': ['4.5rem', { lineHeight: '1' }],\n      '8xl': ['6rem', { lineHeight: '1' }],\n      '9xl': ['8rem', { lineHeight: '1' }],\n    },\n    fontWeight: {\n      thin: '100',\n      extralight: '200',\n      light: '300',\n      normal: '400',\n      medium: '500',\n      semibold: '600',\n      bold: '700',\n      extrabold: '800',\n      black: '900',\n    },\n    gap: ({ theme }) => theme('spacing'),\n    gradientColorStops: ({ theme }) => theme('colors'),\n    gridAutoColumns: {\n      auto: 'auto',\n      min: 'min-content',\n      max: 'max-content',\n      fr: 'minmax(0, 1fr)',\n    },\n    gridAutoRows: {\n      auto: 'auto',\n      min: 'min-content',\n      max: 'max-content',\n      fr: 'minmax(0, 1fr)',\n    },\n    gridColumn: {\n      auto: 'auto',\n      'span-1': 'span 1 / span 1',\n      'span-2': 'span 2 / span 2',\n      'span-3': 'span 3 / span 3',\n      'span-4': 'span 4 / span 4',\n      'span-5': 'span 5 / span 5',\n      'span-6': 'span 6 / span 6',\n      'span-7': 'span 7 / span 7',\n      'span-8': 'span 8 / span 8',\n      'span-9': 'span 9 / span 9',\n      'span-10': 'span 10 / span 10',\n      'span-11': 'span 11 / span 11',\n      'span-12': 'span 12 / span 12',\n      'span-full': '1 / -1',\n    },\n    gridColumnEnd: {\n      auto: 'auto',\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n      8: '8',\n      9: '9',\n      10: '10',\n      11: '11',\n      12: '12',\n      13: '13',\n    },\n    gridColumnStart: {\n      auto: 'auto',\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n      8: '8',\n      9: '9',\n      10: '10',\n      11: '11',\n      12: '12',\n      13: '13',\n    },\n    gridRow: {\n      auto: 'auto',\n      'span-1': 'span 1 / span 1',\n      'span-2': 'span 2 / span 2',\n      'span-3': 'span 3 / span 3',\n      'span-4': 'span 4 / span 4',\n      'span-5': 'span 5 / span 5',\n      'span-6': 'span 6 / span 6',\n      'span-full': '1 / -1',\n    },\n    gridRowStart: {\n      auto: 'auto',\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n    },\n    gridRowEnd: {\n      auto: 'auto',\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n    },\n    gridTemplateColumns: {\n      none: 'none',\n      1: 'repeat(1, minmax(0, 1fr))',\n      2: 'repeat(2, minmax(0, 1fr))',\n      3: 'repeat(3, minmax(0, 1fr))',\n      4: 'repeat(4, minmax(0, 1fr))',\n      5: 'repeat(5, minmax(0, 1fr))',\n      6: 'repeat(6, minmax(0, 1fr))',\n      7: 'repeat(7, minmax(0, 1fr))',\n      8: 'repeat(8, minmax(0, 1fr))',\n      9: 'repeat(9, minmax(0, 1fr))',\n      10: 'repeat(10, minmax(0, 1fr))',\n      11: 'repeat(11, minmax(0, 1fr))',\n      12: 'repeat(12, minmax(0, 1fr))',\n    },\n    gridTemplateRows: {\n      none: 'none',\n      1: 'repeat(1, minmax(0, 1fr))',\n      2: 'repeat(2, minmax(0, 1fr))',\n      3: 'repeat(3, minmax(0, 1fr))',\n      4: 'repeat(4, minmax(0, 1fr))',\n      5: 'repeat(5, minmax(0, 1fr))',\n      6: 'repeat(6, minmax(0, 1fr))',\n    },\n    height: ({ theme }) => ({\n      auto: 'auto',\n      ...theme('spacing'),\n      '1/2': '50%',\n      '1/3': '33.333333%',\n      '2/3': '66.666667%',\n      '1/4': '25%',\n      '2/4': '50%',\n      '3/4': '75%',\n      '1/5': '20%',\n      '2/5': '40%',\n      '3/5': '60%',\n      '4/5': '80%',\n      '1/6': '16.666667%',\n      '2/6': '33.333333%',\n      '3/6': '50%',\n      '4/6': '66.666667%',\n      '5/6': '83.333333%',\n      full: '100%',\n      screen: '100vh',\n      min: 'min-content',\n      max: 'max-content',\n      fit: 'fit-content',\n    }),\n    inset: ({ theme }) => ({\n      auto: 'auto',\n      ...theme('spacing'),\n      '1/2': '50%',\n      '1/3': '33.333333%',\n      '2/3': '66.666667%',\n      '1/4': '25%',\n      '2/4': '50%',\n      '3/4': '75%',\n      full: '100%',\n    }),\n    keyframes: {\n      spin: {\n        to: {\n          transform: 'rotate(360deg)',\n        },\n      },\n      ping: {\n        '75%, 100%': {\n          transform: 'scale(2)',\n          opacity: '0',\n        },\n      },\n      pulse: {\n        '50%': {\n          opacity: '.5',\n        },\n      },\n      bounce: {\n        '0%, 100%': {\n          transform: 'translateY(-25%)',\n          animationTimingFunction: 'cubic-bezier(0.8,0,1,1)',\n        },\n        '50%': {\n          transform: 'none',\n          animationTimingFunction: 'cubic-bezier(0,0,0.2,1)',\n        },\n      },\n    },\n    letterSpacing: {\n      tighter: '-0.05em',\n      tight: '-0.025em',\n      normal: '0em',\n      wide: '0.025em',\n      wider: '0.05em',\n      widest: '0.1em',\n    },\n    lineHeight: {\n      none: '1',\n      tight: '1.25',\n      snug: '1.375',\n      normal: '1.5',\n      relaxed: '1.625',\n      loose: '2',\n      3: '.75rem',\n      4: '1rem',\n      5: '1.25rem',\n      6: '1.5rem',\n      7: '1.75rem',\n      8: '2rem',\n      9: '2.25rem',\n      10: '2.5rem',\n    },\n    listStyleType: {\n      none: 'none',\n      disc: 'disc',\n      decimal: 'decimal',\n    },\n    margin: ({ theme }) => ({\n      auto: 'auto',\n      ...theme('spacing'),\n    }),\n    maxHeight: ({ theme }) => ({\n      ...theme('spacing'),\n      full: '100%',\n      screen: '100vh',\n      min: 'min-content',\n      max: 'max-content',\n      fit: 'fit-content',\n    }),\n    maxWidth: ({ theme, breakpoints }) => ({\n      none: 'none',\n      0: '0rem',\n      xs: '20rem',\n      sm: '24rem',\n      md: '28rem',\n      lg: '32rem',\n      xl: '36rem',\n      '2xl': '42rem',\n      '3xl': '48rem',\n      '4xl': '56rem',\n      '5xl': '64rem',\n      '6xl': '72rem',\n      '7xl': '80rem',\n      full: '100%',\n      min: 'min-content',\n      max: 'max-content',\n      fit: 'fit-content',\n      prose: '65ch',\n      ...breakpoints(theme('screens')),\n    }),\n    minHeight: {\n      0: '0px',\n      full: '100%',\n      screen: '100vh',\n      min: 'min-content',\n      max: 'max-content',\n      fit: 'fit-content',\n    },\n    minWidth: {\n      0: '0px',\n      full: '100%',\n      min: 'min-content',\n      max: 'max-content',\n      fit: 'fit-content',\n    },\n    objectPosition: {\n      bottom: 'bottom',\n      center: 'center',\n      left: 'left',\n      'left-bottom': 'left bottom',\n      'left-top': 'left top',\n      right: 'right',\n      'right-bottom': 'right bottom',\n      'right-top': 'right top',\n      top: 'top',\n    },\n    opacity: {\n      0: '0',\n      5: '0.05',\n      10: '0.1',\n      20: '0.2',\n      25: '0.25',\n      30: '0.3',\n      40: '0.4',\n      50: '0.5',\n      60: '0.6',\n      70: '0.7',\n      75: '0.75',\n      80: '0.8',\n      90: '0.9',\n      95: '0.95',\n      100: '1',\n    },\n    order: {\n      first: '-9999',\n      last: '9999',\n      none: '0',\n      1: '1',\n      2: '2',\n      3: '3',\n      4: '4',\n      5: '5',\n      6: '6',\n      7: '7',\n      8: '8',\n      9: '9',\n      10: '10',\n      11: '11',\n      12: '12',\n    },\n    padding: ({ theme }) => theme('spacing'),\n    placeholderColor: ({ theme }) => theme('colors'),\n    placeholderOpacity: ({ theme }) => theme('opacity'),\n    outlineColor: ({ theme }) => theme('colors'),\n    outlineOffset: {\n      0: '0px',\n      1: '1px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    outlineWidth: {\n      0: '0px',\n      1: '1px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    ringColor: ({ theme }) => ({\n      DEFAULT: theme(`colors.blue.500`, '#3b82f6'),\n      ...theme('colors'),\n    }),\n    ringOffsetColor: ({ theme }) => theme('colors'),\n    ringOffsetWidth: {\n      0: '0px',\n      1: '1px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    ringOpacity: ({ theme }) => ({\n      DEFAULT: '0.5',\n      ...theme('opacity'),\n    }),\n    ringWidth: {\n      DEFAULT: '3px',\n      0: '0px',\n      1: '1px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    rotate: {\n      0: '0deg',\n      1: '1deg',\n      2: '2deg',\n      3: '3deg',\n      6: '6deg',\n      12: '12deg',\n      45: '45deg',\n      90: '90deg',\n      180: '180deg',\n    },\n    saturate: {\n      0: '0',\n      50: '.5',\n      100: '1',\n      150: '1.5',\n      200: '2',\n    },\n    scale: {\n      0: '0',\n      50: '.5',\n      75: '.75',\n      90: '.9',\n      95: '.95',\n      100: '1',\n      105: '1.05',\n      110: '1.1',\n      125: '1.25',\n      150: '1.5',\n    },\n    scrollMargin: ({ theme }) => ({\n      ...theme('spacing'),\n    }),\n    scrollPadding: ({ theme }) => theme('spacing'),\n    sepia: {\n      0: '0',\n      DEFAULT: '100%',\n    },\n    skew: {\n      0: '0deg',\n      1: '1deg',\n      2: '2deg',\n      3: '3deg',\n      6: '6deg',\n      12: '12deg',\n    },\n    space: ({ theme }) => ({\n      ...theme('spacing'),\n    }),\n    stroke: ({ theme }) => theme('colors'),\n    strokeWidth: {\n      0: '0',\n      1: '1',\n      2: '2',\n    },\n    textColor: ({ theme }) => theme('colors'),\n    textDecorationColor: ({ theme }) => theme('colors'),\n    textDecorationThickness: {\n      auto: 'auto',\n      'from-font': 'from-font',\n      0: '0px',\n      1: '1px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    textUnderlineOffset: {\n      auto: 'auto',\n      0: '0px',\n      1: '1px',\n      2: '2px',\n      4: '4px',\n      8: '8px',\n    },\n    textIndent: ({ theme }) => ({\n      ...theme('spacing'),\n    }),\n    textOpacity: ({ theme }) => theme('opacity'),\n    transformOrigin: {\n      center: 'center',\n      top: 'top',\n      'top-right': 'top right',\n      right: 'right',\n      'bottom-right': 'bottom right',\n      bottom: 'bottom',\n      'bottom-left': 'bottom left',\n      left: 'left',\n      'top-left': 'top left',\n    },\n    transitionDelay: {\n      75: '75ms',\n      100: '100ms',\n      150: '150ms',\n      200: '200ms',\n      300: '300ms',\n      500: '500ms',\n      700: '700ms',\n      1000: '1000ms',\n    },\n    transitionDuration: {\n      DEFAULT: '150ms',\n      75: '75ms',\n      100: '100ms',\n      150: '150ms',\n      200: '200ms',\n      300: '300ms',\n      500: '500ms',\n      700: '700ms',\n      1000: '1000ms',\n    },\n    transitionProperty: {\n      none: 'none',\n      all: 'all',\n      DEFAULT:\n        'color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter',\n      colors: 'color, background-color, border-color, text-decoration-color, fill, stroke',\n      opacity: 'opacity',\n      shadow: 'box-shadow',\n      transform: 'transform',\n    },\n    transitionTimingFunction: {\n      DEFAULT: 'cubic-bezier(0.4, 0, 0.2, 1)',\n      linear: 'linear',\n      in: 'cubic-bezier(0.4, 0, 1, 1)',\n      out: 'cubic-bezier(0, 0, 0.2, 1)',\n      'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',\n    },\n    translate: ({ theme }) => ({\n      ...theme('spacing'),\n      '1/2': '50%',\n      '1/3': '33.333333%',\n      '2/3': '66.666667%',\n      '1/4': '25%',\n      '2/4': '50%',\n      '3/4': '75%',\n      full: '100%',\n    }),\n    width: ({ theme }) => ({\n      auto: 'auto',\n      ...theme('spacing'),\n      '1/2': '50%',\n      '1/3': '33.333333%',\n      '2/3': '66.666667%',\n      '1/4': '25%',\n      '2/4': '50%',\n      '3/4': '75%',\n      '1/5': '20%',\n      '2/5': '40%',\n      '3/5': '60%',\n      '4/5': '80%',\n      '1/6': '16.666667%',\n      '2/6': '33.333333%',\n      '3/6': '50%',\n      '4/6': '66.666667%',\n      '5/6': '83.333333%',\n      '1/12': '8.333333%',\n      '2/12': '16.666667%',\n      '3/12': '25%',\n      '4/12': '33.333333%',\n      '5/12': '41.666667%',\n      '6/12': '50%',\n      '7/12': '58.333333%',\n      '8/12': '66.666667%',\n      '9/12': '75%',\n      '10/12': '83.333333%',\n      '11/12': '91.666667%',\n      full: '100%',\n      screen: '100vw',\n      min: 'min-content',\n      max: 'max-content',\n      fit: 'fit-content',\n    }),\n    willChange: {\n      auto: 'auto',\n      scroll: 'scroll-position',\n      contents: 'contents',\n      transform: 'transform',\n    },\n    zIndex: {\n      auto: 'auto',\n      0: '0',\n      10: '10',\n      20: '20',\n      30: '30',\n      40: '40',\n      50: '50',\n    },\n  },\n  variantOrder: [\n    'first',\n    'last',\n    'odd',\n    'even',\n    'visited',\n    'checked',\n    'empty',\n    'read-only',\n    'group-hover',\n    'group-focus',\n    'focus-within',\n    'hover',\n    'focus',\n    'focus-visible',\n    'active',\n    'disabled',\n  ],\n  plugins: [],\n}\n","export default {\n  info(key, messages) {\n    console.info(...(Array.isArray(key) ? [key] : [messages, key]))\n  },\n  warn(key, messages) {\n    console.warn(...(Array.isArray(key) ? [key] : [messages, key]))\n  },\n  risk(key, messages) {\n    console.error(...(Array.isArray(key) ? [key] : [messages, key]))\n  },\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>_default\n});\nconst _log = /*#__PURE__*/ _interopRequireDefault(require(\"../util/log\"));\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction warn({ version , from , to  }) {\n    _log.default.warn(`${from}-color-renamed`, [\n        `As of Tailwind CSS ${version}, \\`${from}\\` has been renamed to \\`${to}\\`.`,\n        \"Update your configuration file to silence this warning.\", \n    ]);\n}\nconst _default = {\n    inherit: \"inherit\",\n    current: \"currentColor\",\n    transparent: \"transparent\",\n    black: \"#000\",\n    white: \"#fff\",\n    slate: {\n        50: \"#f8fafc\",\n        100: \"#f1f5f9\",\n        200: \"#e2e8f0\",\n        300: \"#cbd5e1\",\n        400: \"#94a3b8\",\n        500: \"#64748b\",\n        600: \"#475569\",\n        700: \"#334155\",\n        800: \"#1e293b\",\n        900: \"#0f172a\"\n    },\n    gray: {\n        50: \"#f9fafb\",\n        100: \"#f3f4f6\",\n        200: \"#e5e7eb\",\n        300: \"#d1d5db\",\n        400: \"#9ca3af\",\n        500: \"#6b7280\",\n        600: \"#4b5563\",\n        700: \"#374151\",\n        800: \"#1f2937\",\n        900: \"#111827\"\n    },\n    zinc: {\n        50: \"#fafafa\",\n        100: \"#f4f4f5\",\n        200: \"#e4e4e7\",\n        300: \"#d4d4d8\",\n        400: \"#a1a1aa\",\n        500: \"#71717a\",\n        600: \"#52525b\",\n        700: \"#3f3f46\",\n        800: \"#27272a\",\n        900: \"#18181b\"\n    },\n    neutral: {\n        50: \"#fafafa\",\n        100: \"#f5f5f5\",\n        200: \"#e5e5e5\",\n        300: \"#d4d4d4\",\n        400: \"#a3a3a3\",\n        500: \"#737373\",\n        600: \"#525252\",\n        700: \"#404040\",\n        800: \"#262626\",\n        900: \"#171717\"\n    },\n    stone: {\n        50: \"#fafaf9\",\n        100: \"#f5f5f4\",\n        200: \"#e7e5e4\",\n        300: \"#d6d3d1\",\n        400: \"#a8a29e\",\n        500: \"#78716c\",\n        600: \"#57534e\",\n        700: \"#44403c\",\n        800: \"#292524\",\n        900: \"#1c1917\"\n    },\n    red: {\n        50: \"#fef2f2\",\n        100: \"#fee2e2\",\n        200: \"#fecaca\",\n        300: \"#fca5a5\",\n        400: \"#f87171\",\n        500: \"#ef4444\",\n        600: \"#dc2626\",\n        700: \"#b91c1c\",\n        800: \"#991b1b\",\n        900: \"#7f1d1d\"\n    },\n    orange: {\n        50: \"#fff7ed\",\n        100: \"#ffedd5\",\n        200: \"#fed7aa\",\n        300: \"#fdba74\",\n        400: \"#fb923c\",\n        500: \"#f97316\",\n        600: \"#ea580c\",\n        700: \"#c2410c\",\n        800: \"#9a3412\",\n        900: \"#7c2d12\"\n    },\n    amber: {\n        50: \"#fffbeb\",\n        100: \"#fef3c7\",\n        200: \"#fde68a\",\n        300: \"#fcd34d\",\n        400: \"#fbbf24\",\n        500: \"#f59e0b\",\n        600: \"#d97706\",\n        700: \"#b45309\",\n        800: \"#92400e\",\n        900: \"#78350f\"\n    },\n    yellow: {\n        50: \"#fefce8\",\n        100: \"#fef9c3\",\n        200: \"#fef08a\",\n        300: \"#fde047\",\n        400: \"#facc15\",\n        500: \"#eab308\",\n        600: \"#ca8a04\",\n        700: \"#a16207\",\n        800: \"#854d0e\",\n        900: \"#713f12\"\n    },\n    lime: {\n        50: \"#f7fee7\",\n        100: \"#ecfccb\",\n        200: \"#d9f99d\",\n        300: \"#bef264\",\n        400: \"#a3e635\",\n        500: \"#84cc16\",\n        600: \"#65a30d\",\n        700: \"#4d7c0f\",\n        800: \"#3f6212\",\n        900: \"#365314\"\n    },\n    green: {\n        50: \"#f0fdf4\",\n        100: \"#dcfce7\",\n        200: \"#bbf7d0\",\n        300: \"#86efac\",\n        400: \"#4ade80\",\n        500: \"#22c55e\",\n        600: \"#16a34a\",\n        700: \"#15803d\",\n        800: \"#166534\",\n        900: \"#14532d\"\n    },\n    emerald: {\n        50: \"#ecfdf5\",\n        100: \"#d1fae5\",\n        200: \"#a7f3d0\",\n        300: \"#6ee7b7\",\n        400: \"#34d399\",\n        500: \"#10b981\",\n        600: \"#059669\",\n        700: \"#047857\",\n        800: \"#065f46\",\n        900: \"#064e3b\"\n    },\n    teal: {\n        50: \"#f0fdfa\",\n        100: \"#ccfbf1\",\n        200: \"#99f6e4\",\n        300: \"#5eead4\",\n        400: \"#2dd4bf\",\n        500: \"#14b8a6\",\n        600: \"#0d9488\",\n        700: \"#0f766e\",\n        800: \"#115e59\",\n        900: \"#134e4a\"\n    },\n    cyan: {\n        50: \"#ecfeff\",\n        100: \"#cffafe\",\n        200: \"#a5f3fc\",\n        300: \"#67e8f9\",\n        400: \"#22d3ee\",\n        500: \"#06b6d4\",\n        600: \"#0891b2\",\n        700: \"#0e7490\",\n        800: \"#155e75\",\n        900: \"#164e63\"\n    },\n    sky: {\n        50: \"#f0f9ff\",\n        100: \"#e0f2fe\",\n        200: \"#bae6fd\",\n        300: \"#7dd3fc\",\n        400: \"#38bdf8\",\n        500: \"#0ea5e9\",\n        600: \"#0284c7\",\n        700: \"#0369a1\",\n        800: \"#075985\",\n        900: \"#0c4a6e\"\n    },\n    blue: {\n        50: \"#eff6ff\",\n        100: \"#dbeafe\",\n        200: \"#bfdbfe\",\n        300: \"#93c5fd\",\n        400: \"#60a5fa\",\n        500: \"#3b82f6\",\n        600: \"#2563eb\",\n        700: \"#1d4ed8\",\n        800: \"#1e40af\",\n        900: \"#1e3a8a\"\n    },\n    indigo: {\n        50: \"#eef2ff\",\n        100: \"#e0e7ff\",\n        200: \"#c7d2fe\",\n        300: \"#a5b4fc\",\n        400: \"#818cf8\",\n        500: \"#6366f1\",\n        600: \"#4f46e5\",\n        700: \"#4338ca\",\n        800: \"#3730a3\",\n        900: \"#312e81\"\n    },\n    violet: {\n        50: \"#f5f3ff\",\n        100: \"#ede9fe\",\n        200: \"#ddd6fe\",\n        300: \"#c4b5fd\",\n        400: \"#a78bfa\",\n        500: \"#8b5cf6\",\n        600: \"#7c3aed\",\n        700: \"#6d28d9\",\n        800: \"#5b21b6\",\n        900: \"#4c1d95\"\n    },\n    purple: {\n        50: \"#faf5ff\",\n        100: \"#f3e8ff\",\n        200: \"#e9d5ff\",\n        300: \"#d8b4fe\",\n        400: \"#c084fc\",\n        500: \"#a855f7\",\n        600: \"#9333ea\",\n        700: \"#7e22ce\",\n        800: \"#6b21a8\",\n        900: \"#581c87\"\n    },\n    fuchsia: {\n        50: \"#fdf4ff\",\n        100: \"#fae8ff\",\n        200: \"#f5d0fe\",\n        300: \"#f0abfc\",\n        400: \"#e879f9\",\n        500: \"#d946ef\",\n        600: \"#c026d3\",\n        700: \"#a21caf\",\n        800: \"#86198f\",\n        900: \"#701a75\"\n    },\n    pink: {\n        50: \"#fdf2f8\",\n        100: \"#fce7f3\",\n        200: \"#fbcfe8\",\n        300: \"#f9a8d4\",\n        400: \"#f472b6\",\n        500: \"#ec4899\",\n        600: \"#db2777\",\n        700: \"#be185d\",\n        800: \"#9d174d\",\n        900: \"#831843\"\n    },\n    rose: {\n        50: \"#fff1f2\",\n        100: \"#ffe4e6\",\n        200: \"#fecdd3\",\n        300: \"#fda4af\",\n        400: \"#fb7185\",\n        500: \"#f43f5e\",\n        600: \"#e11d48\",\n        700: \"#be123c\",\n        800: \"#9f1239\",\n        900: \"#881337\"\n    },\n    get lightBlue () {\n        warn({\n            version: \"v2.2\",\n            from: \"lightBlue\",\n            to: \"sky\"\n        });\n        return this.sky;\n    },\n    get warmGray () {\n        warn({\n            version: \"v3.0\",\n            from: \"warmGray\",\n            to: \"stone\"\n        });\n        return this.stone;\n    },\n    get trueGray () {\n        warn({\n            version: \"v3.0\",\n            from: \"trueGray\",\n            to: \"neutral\"\n        });\n        return this.neutral;\n    },\n    get coolGray () {\n        warn({\n            version: \"v3.0\",\n            from: \"coolGray\",\n            to: \"gray\"\n        });\n        return this.gray;\n    },\n    get blueGray () {\n        warn({\n            version: \"v3.0\",\n            from: \"blueGray\",\n            to: \"slate\"\n        });\n        return this.slate;\n    }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"defaults\", {\n    enumerable: true,\n    get: ()=>defaults\n});\nfunction defaults(target, ...sources) {\n    for (let source of sources){\n        for(let k in source){\n            var ref;\n            if (!(target === null || target === void 0 ? void 0 : (ref = target.hasOwnProperty) === null || ref === void 0 ? void 0 : ref.call(target, k))) {\n                target[k] = source[k];\n            }\n        }\n        for (let k1 of Object.getOwnPropertySymbols(source)){\n            var ref1;\n            if (!(target === null || target === void 0 ? void 0 : (ref1 = target.hasOwnProperty) === null || ref1 === void 0 ? void 0 : ref1.call(target, k1))) {\n                target[k1] = source[k1];\n            }\n        }\n    }\n    return target;\n}\n","/**\n * Parse a path string into an array of path segments.\n *\n * Square bracket notation `a[b]` may be used to \"escape\" dots that would otherwise be interpreted as path separators.\n *\n * Example:\n * a -> ['a']\n * a.b.c -> ['a', 'b', 'c']\n * a[b].c -> ['a', 'b', 'c']\n * a[b.c].e.f -> ['a', 'b.c', 'e', 'f']\n * a[b][c][d] -> ['a', 'b', 'c', 'd']\n *\n * @param {string|string[]} path\n **/ \"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"toPath\", {\n    enumerable: true,\n    get: ()=>toPath\n});\nfunction toPath(path) {\n    if (Array.isArray(path)) return path;\n    let openBrackets = path.split(\"[\").length - 1;\n    let closedBrackets = path.split(\"]\").length - 1;\n    if (openBrackets !== closedBrackets) {\n        throw new Error(`Path is invalid. Has unbalanced brackets: ${path}`);\n    }\n    return path.split(/\\.(?![^\\[]*\\])|[\\[\\]]/g).filter(Boolean);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"normalizeConfig\", {\n    enumerable: true,\n    get: ()=>normalizeConfig\n});\nconst _log = /*#__PURE__*/ _interopRequireWildcard(require(\"./log\"));\nfunction _getRequireWildcardCache(nodeInterop) {\n    if (typeof WeakMap !== \"function\") return null;\n    var cacheBabelInterop = new WeakMap();\n    var cacheNodeInterop = new WeakMap();\n    return (_getRequireWildcardCache = function(nodeInterop) {\n        return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n    })(nodeInterop);\n}\nfunction _interopRequireWildcard(obj, nodeInterop) {\n    if (!nodeInterop && obj && obj.__esModule) {\n        return obj;\n    }\n    if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n        return {\n            default: obj\n        };\n    }\n    var cache = _getRequireWildcardCache(nodeInterop);\n    if (cache && cache.has(obj)) {\n        return cache.get(obj);\n    }\n    var newObj = {};\n    var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n    for(var key in obj){\n        if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n            var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n            if (desc && (desc.get || desc.set)) {\n                Object.defineProperty(newObj, key, desc);\n            } else {\n                newObj[key] = obj[key];\n            }\n        }\n    }\n    newObj.default = obj;\n    if (cache) {\n        cache.set(obj, newObj);\n    }\n    return newObj;\n}\nfunction normalizeConfig(config) {\n    // Quick structure validation\n    /**\n   * type FilePath = string\n   * type RawFile = { raw: string, extension?: string }\n   * type ExtractorFn = (content: string) => Array<string>\n   * type TransformerFn = (content: string) => string\n   *\n   * type Content =\n   *   | Array<FilePath | RawFile>\n   *   | {\n   *       files: Array<FilePath | RawFile>,\n   *       extract?: ExtractorFn | { [extension: string]: ExtractorFn }\n   *       transform?: TransformerFn | { [extension: string]: TransformerFn }\n   *   }\n   */ let valid = (()=>{\n        // `config.purge` should not exist anymore\n        if (config.purge) {\n            return false;\n        }\n        // `config.content` should exist\n        if (!config.content) {\n            return false;\n        }\n        // `config.content` should be an object or an array\n        if (!Array.isArray(config.content) && !(typeof config.content === \"object\" && config.content !== null)) {\n            return false;\n        }\n        // When `config.content` is an array, it should consist of FilePaths or RawFiles\n        if (Array.isArray(config.content)) {\n            return config.content.every((path)=>{\n                // `path` can be a string\n                if (typeof path === \"string\") return true;\n                // `path` can be an object { raw: string, extension?: string }\n                // `raw` must be a string\n                if (typeof (path === null || path === void 0 ? void 0 : path.raw) !== \"string\") return false;\n                // `extension` (if provided) should also be a string\n                if ((path === null || path === void 0 ? void 0 : path.extension) && typeof (path === null || path === void 0 ? void 0 : path.extension) !== \"string\") {\n                    return false;\n                }\n                return true;\n            });\n        }\n        // When `config.content` is an object\n        if (typeof config.content === \"object\" && config.content !== null) {\n            // Only `files`, `extract` and `transform` can exist in `config.content`\n            if (Object.keys(config.content).some((key)=>![\n                    \"files\",\n                    \"extract\",\n                    \"transform\"\n                ].includes(key))) {\n                return false;\n            }\n            // `config.content.files` should exist of FilePaths or RawFiles\n            if (Array.isArray(config.content.files)) {\n                if (!config.content.files.every((path)=>{\n                    // `path` can be a string\n                    if (typeof path === \"string\") return true;\n                    // `path` can be an object { raw: string, extension?: string }\n                    // `raw` must be a string\n                    if (typeof (path === null || path === void 0 ? void 0 : path.raw) !== \"string\") return false;\n                    // `extension` (if provided) should also be a string\n                    if ((path === null || path === void 0 ? void 0 : path.extension) && typeof (path === null || path === void 0 ? void 0 : path.extension) !== \"string\") {\n                        return false;\n                    }\n                    return true;\n                })) {\n                    return false;\n                }\n                // `config.content.extract` is optional, and can be a Function or a Record<String, Function>\n                if (typeof config.content.extract === \"object\") {\n                    for (let value of Object.values(config.content.extract)){\n                        if (typeof value !== \"function\") {\n                            return false;\n                        }\n                    }\n                } else if (!(config.content.extract === undefined || typeof config.content.extract === \"function\")) {\n                    return false;\n                }\n                // `config.content.transform` is optional, and can be a Function or a Record<String, Function>\n                if (typeof config.content.transform === \"object\") {\n                    for (let value1 of Object.values(config.content.transform)){\n                        if (typeof value1 !== \"function\") {\n                            return false;\n                        }\n                    }\n                } else if (!(config.content.transform === undefined || typeof config.content.transform === \"function\")) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        return false;\n    })();\n    if (!valid) {\n        _log.default.warn(\"purge-deprecation\", [\n            \"The `purge`/`content` options have changed in Tailwind CSS v3.0.\",\n            \"Update your configuration file to eliminate this warning.\",\n            \"https://tailwindcss.com/docs/upgrade-guide#configure-content-sources\", \n        ]);\n    }\n    // Normalize the `safelist`\n    config.safelist = (()=>{\n        var ref;\n        let { content , purge , safelist  } = config;\n        if (Array.isArray(safelist)) return safelist;\n        if (Array.isArray(content === null || content === void 0 ? void 0 : content.safelist)) return content.safelist;\n        if (Array.isArray(purge === null || purge === void 0 ? void 0 : purge.safelist)) return purge.safelist;\n        if (Array.isArray(purge === null || purge === void 0 ? void 0 : (ref = purge.options) === null || ref === void 0 ? void 0 : ref.safelist)) return purge.options.safelist;\n        return [];\n    })();\n    // Normalize prefix option\n    if (typeof config.prefix === \"function\") {\n        _log.default.warn(\"prefix-function\", [\n            \"As of Tailwind CSS v3.0, `prefix` cannot be a function.\",\n            \"Update `prefix` in your configuration to be a string to eliminate this warning.\",\n            \"https://tailwindcss.com/docs/upgrade-guide#prefix-cannot-be-a-function\", \n        ]);\n        config.prefix = \"\";\n    } else {\n        var _prefix;\n        config.prefix = (_prefix = config.prefix) !== null && _prefix !== void 0 ? _prefix : \"\";\n    }\n    // Normalize the `content`\n    config.content = {\n        files: (()=>{\n            let { content , purge  } = config;\n            if (Array.isArray(purge)) return purge;\n            if (Array.isArray(purge === null || purge === void 0 ? void 0 : purge.content)) return purge.content;\n            if (Array.isArray(content)) return content;\n            if (Array.isArray(content === null || content === void 0 ? void 0 : content.content)) return content.content;\n            if (Array.isArray(content === null || content === void 0 ? void 0 : content.files)) return content.files;\n            return [];\n        })(),\n        extract: (()=>{\n            let extract = (()=>{\n                var ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9;\n                if ((ref = config.purge) === null || ref === void 0 ? void 0 : ref.extract) return config.purge.extract;\n                if ((ref1 = config.content) === null || ref1 === void 0 ? void 0 : ref1.extract) return config.content.extract;\n                if ((ref2 = config.purge) === null || ref2 === void 0 ? void 0 : (ref3 = ref2.extract) === null || ref3 === void 0 ? void 0 : ref3.DEFAULT) return config.purge.extract.DEFAULT;\n                if ((ref4 = config.content) === null || ref4 === void 0 ? void 0 : (ref5 = ref4.extract) === null || ref5 === void 0 ? void 0 : ref5.DEFAULT) return config.content.extract.DEFAULT;\n                if ((ref6 = config.purge) === null || ref6 === void 0 ? void 0 : (ref7 = ref6.options) === null || ref7 === void 0 ? void 0 : ref7.extractors) return config.purge.options.extractors;\n                if ((ref8 = config.content) === null || ref8 === void 0 ? void 0 : (ref9 = ref8.options) === null || ref9 === void 0 ? void 0 : ref9.extractors) return config.content.options.extractors;\n                return {};\n            })();\n            let extractors = {};\n            let defaultExtractor = (()=>{\n                var ref, ref1, ref2, ref3;\n                if ((ref = config.purge) === null || ref === void 0 ? void 0 : (ref1 = ref.options) === null || ref1 === void 0 ? void 0 : ref1.defaultExtractor) {\n                    return config.purge.options.defaultExtractor;\n                }\n                if ((ref2 = config.content) === null || ref2 === void 0 ? void 0 : (ref3 = ref2.options) === null || ref3 === void 0 ? void 0 : ref3.defaultExtractor) {\n                    return config.content.options.defaultExtractor;\n                }\n                return undefined;\n            })();\n            if (defaultExtractor !== undefined) {\n                extractors.DEFAULT = defaultExtractor;\n            }\n            // Functions\n            if (typeof extract === \"function\") {\n                extractors.DEFAULT = extract;\n            } else if (Array.isArray(extract)) {\n                for (let { extensions , extractor  } of extract !== null && extract !== void 0 ? extract : []){\n                    for (let extension of extensions){\n                        extractors[extension] = extractor;\n                    }\n                }\n            } else if (typeof extract === \"object\" && extract !== null) {\n                Object.assign(extractors, extract);\n            }\n            return extractors;\n        })(),\n        transform: (()=>{\n            let transform = (()=>{\n                var ref, ref1, ref2, ref3, ref4, ref5;\n                if ((ref = config.purge) === null || ref === void 0 ? void 0 : ref.transform) return config.purge.transform;\n                if ((ref1 = config.content) === null || ref1 === void 0 ? void 0 : ref1.transform) return config.content.transform;\n                if ((ref2 = config.purge) === null || ref2 === void 0 ? void 0 : (ref3 = ref2.transform) === null || ref3 === void 0 ? void 0 : ref3.DEFAULT) return config.purge.transform.DEFAULT;\n                if ((ref4 = config.content) === null || ref4 === void 0 ? void 0 : (ref5 = ref4.transform) === null || ref5 === void 0 ? void 0 : ref5.DEFAULT) return config.content.transform.DEFAULT;\n                return {};\n            })();\n            let transformers = {};\n            if (typeof transform === \"function\") {\n                transformers.DEFAULT = transform;\n            }\n            if (typeof transform === \"object\" && transform !== null) {\n                Object.assign(transformers, transform);\n            }\n            return transformers;\n        })()\n    };\n    // Validate globs to prevent bogus globs.\n    // E.g.: `./src/*.{html}` is invalid, the `{html}` should just be `html`\n    for (let file of config.content.files){\n        if (typeof file === \"string\" && /{([^,]*?)}/g.test(file)) {\n            _log.default.warn(\"invalid-glob-braces\", [\n                `The glob pattern ${(0, _log.dim)(file)} in your Tailwind CSS configuration is invalid.`,\n                `Update it to ${(0, _log.dim)(file.replace(/{([^,]*?)}/g, \"$1\"))} to silence this warning.`\n            ]);\n            break;\n        }\n    }\n    return config;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>isPlainObject\n});\nfunction isPlainObject(value) {\n    if (Object.prototype.toString.call(value) !== \"[object Object]\") {\n        return false;\n    }\n    const prototype = Object.getPrototypeOf(value);\n    return prototype === null || prototype === Object.prototype;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"cloneDeep\", {\n    enumerable: true,\n    get: ()=>cloneDeep\n});\nfunction cloneDeep(value) {\n    if (Array.isArray(value)) {\n        return value.map((child)=>cloneDeep(child));\n    }\n    if (typeof value === \"object\" && value !== null) {\n        return Object.fromEntries(Object.entries(value).map(([k, v])=>[\n                k,\n                cloneDeep(v)\n            ]));\n    }\n    return value;\n}\n","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = unesc;\n\n// Many thanks for this post which made this migration much easier.\n// https://mathiasbynens.be/notes/css-escapes\n\n/**\n * \n * @param {string} str \n * @returns {[string, number]|undefined}\n */\nfunction gobbleHex(str) {\n  var lower = str.toLowerCase();\n  var hex = '';\n  var spaceTerminated = false;\n\n  for (var i = 0; i < 6 && lower[i] !== undefined; i++) {\n    var code = lower.charCodeAt(i); // check to see if we are dealing with a valid hex char [a-f|0-9]\n\n    var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57; // https://drafts.csswg.org/css-syntax/#consume-escaped-code-point\n\n    spaceTerminated = code === 32;\n\n    if (!valid) {\n      break;\n    }\n\n    hex += lower[i];\n  }\n\n  if (hex.length === 0) {\n    return undefined;\n  }\n\n  var codePoint = parseInt(hex, 16);\n  var isSurrogate = codePoint >= 0xD800 && codePoint <= 0xDFFF; // Add special case for\n  // \"If this number is zero, or is for a surrogate, or is greater than the maximum allowed code point\"\n  // https://drafts.csswg.org/css-syntax/#maximum-allowed-code-point\n\n  if (isSurrogate || codePoint === 0x0000 || codePoint > 0x10FFFF) {\n    return [\"\\uFFFD\", hex.length + (spaceTerminated ? 1 : 0)];\n  }\n\n  return [String.fromCodePoint(codePoint), hex.length + (spaceTerminated ? 1 : 0)];\n}\n\nvar CONTAINS_ESCAPE = /\\\\/;\n\nfunction unesc(str) {\n  var needToProcess = CONTAINS_ESCAPE.test(str);\n\n  if (!needToProcess) {\n    return str;\n  }\n\n  var ret = \"\";\n\n  for (var i = 0; i < str.length; i++) {\n    if (str[i] === \"\\\\\") {\n      var gobbled = gobbleHex(str.slice(i + 1, i + 7));\n\n      if (gobbled !== undefined) {\n        ret += gobbled[0];\n        i += gobbled[1];\n        continue;\n      } // Retain a pair of \\\\ if double escaped `\\\\\\\\`\n      // https://github.com/postcss/postcss-selector-parser/commit/268c9a7656fb53f543dc620aa5b73a30ec3ff20e\n\n\n      if (str[i + 1] === \"\\\\\") {\n        ret += \"\\\\\";\n        i++;\n        continue;\n      } // if \\\\ is at the end of the string retain it\n      // https://github.com/postcss/postcss-selector-parser/commit/01a6b346e3612ce1ab20219acc26abdc259ccefb\n\n\n      if (str.length === i + 1) {\n        ret += str[i];\n      }\n\n      continue;\n    }\n\n    ret += str[i];\n  }\n\n  return ret;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = getProp;\n\nfunction getProp(obj) {\n  for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    props[_key - 1] = arguments[_key];\n  }\n\n  while (props.length > 0) {\n    var prop = props.shift();\n\n    if (!obj[prop]) {\n      return undefined;\n    }\n\n    obj = obj[prop];\n  }\n\n  return obj;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = ensureObject;\n\nfunction ensureObject(obj) {\n  for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    props[_key - 1] = arguments[_key];\n  }\n\n  while (props.length > 0) {\n    var prop = props.shift();\n\n    if (!obj[prop]) {\n      obj[prop] = {};\n    }\n\n    obj = obj[prop];\n  }\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = stripComments;\n\nfunction stripComments(str) {\n  var s = \"\";\n  var commentStart = str.indexOf(\"/*\");\n  var lastEnd = 0;\n\n  while (commentStart >= 0) {\n    s = s + str.slice(lastEnd, commentStart);\n    var commentEnd = str.indexOf(\"*/\", commentStart + 2);\n\n    if (commentEnd < 0) {\n      return s;\n    }\n\n    lastEnd = commentEnd + 2;\n    commentStart = str.indexOf(\"/*\", lastEnd);\n  }\n\n  s = s + str.slice(lastEnd);\n  return s;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.stripComments = exports.ensureObject = exports.getProp = exports.unesc = void 0;\n\nvar _unesc = _interopRequireDefault(require(\"./unesc\"));\n\nexports.unesc = _unesc[\"default\"];\n\nvar _getProp = _interopRequireDefault(require(\"./getProp\"));\n\nexports.getProp = _getProp[\"default\"];\n\nvar _ensureObject = _interopRequireDefault(require(\"./ensureObject\"));\n\nexports.ensureObject = _ensureObject[\"default\"];\n\nvar _stripComments = _interopRequireDefault(require(\"./stripComments\"));\n\nexports.stripComments = _stripComments[\"default\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _util = require(\"../util\");\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar cloneNode = function cloneNode(obj, parent) {\n  if (typeof obj !== 'object' || obj === null) {\n    return obj;\n  }\n\n  var cloned = new obj.constructor();\n\n  for (var i in obj) {\n    if (!obj.hasOwnProperty(i)) {\n      continue;\n    }\n\n    var value = obj[i];\n    var type = typeof value;\n\n    if (i === 'parent' && type === 'object') {\n      if (parent) {\n        cloned[i] = parent;\n      }\n    } else if (value instanceof Array) {\n      cloned[i] = value.map(function (j) {\n        return cloneNode(j, cloned);\n      });\n    } else {\n      cloned[i] = cloneNode(value, cloned);\n    }\n  }\n\n  return cloned;\n};\n\nvar Node = /*#__PURE__*/function () {\n  function Node(opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    Object.assign(this, opts);\n    this.spaces = this.spaces || {};\n    this.spaces.before = this.spaces.before || '';\n    this.spaces.after = this.spaces.after || '';\n  }\n\n  var _proto = Node.prototype;\n\n  _proto.remove = function remove() {\n    if (this.parent) {\n      this.parent.removeChild(this);\n    }\n\n    this.parent = undefined;\n    return this;\n  };\n\n  _proto.replaceWith = function replaceWith() {\n    if (this.parent) {\n      for (var index in arguments) {\n        this.parent.insertBefore(this, arguments[index]);\n      }\n\n      this.remove();\n    }\n\n    return this;\n  };\n\n  _proto.next = function next() {\n    return this.parent.at(this.parent.index(this) + 1);\n  };\n\n  _proto.prev = function prev() {\n    return this.parent.at(this.parent.index(this) - 1);\n  };\n\n  _proto.clone = function clone(overrides) {\n    if (overrides === void 0) {\n      overrides = {};\n    }\n\n    var cloned = cloneNode(this);\n\n    for (var name in overrides) {\n      cloned[name] = overrides[name];\n    }\n\n    return cloned;\n  }\n  /**\n   * Some non-standard syntax doesn't follow normal escaping rules for css.\n   * This allows non standard syntax to be appended to an existing property\n   * by specifying the escaped value. By specifying the escaped value,\n   * illegal characters are allowed to be directly inserted into css output.\n   * @param {string} name the property to set\n   * @param {any} value the unescaped value of the property\n   * @param {string} valueEscaped optional. the escaped value of the property.\n   */\n  ;\n\n  _proto.appendToPropertyAndEscape = function appendToPropertyAndEscape(name, value, valueEscaped) {\n    if (!this.raws) {\n      this.raws = {};\n    }\n\n    var originalValue = this[name];\n    var originalEscaped = this.raws[name];\n    this[name] = originalValue + value; // this may trigger a setter that updates raws, so it has to be set first.\n\n    if (originalEscaped || valueEscaped !== value) {\n      this.raws[name] = (originalEscaped || originalValue) + valueEscaped;\n    } else {\n      delete this.raws[name]; // delete any escaped value that was created by the setter.\n    }\n  }\n  /**\n   * Some non-standard syntax doesn't follow normal escaping rules for css.\n   * This allows the escaped value to be specified directly, allowing illegal\n   * characters to be directly inserted into css output.\n   * @param {string} name the property to set\n   * @param {any} value the unescaped value of the property\n   * @param {string} valueEscaped the escaped value of the property.\n   */\n  ;\n\n  _proto.setPropertyAndEscape = function setPropertyAndEscape(name, value, valueEscaped) {\n    if (!this.raws) {\n      this.raws = {};\n    }\n\n    this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.\n\n    this.raws[name] = valueEscaped;\n  }\n  /**\n   * When you want a value to passed through to CSS directly. This method\n   * deletes the corresponding raw value causing the stringifier to fallback\n   * to the unescaped value.\n   * @param {string} name the property to set.\n   * @param {any} value The value that is both escaped and unescaped.\n   */\n  ;\n\n  _proto.setPropertyWithoutEscape = function setPropertyWithoutEscape(name, value) {\n    this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.\n\n    if (this.raws) {\n      delete this.raws[name];\n    }\n  }\n  /**\n   *\n   * @param {number} line The number (starting with 1)\n   * @param {number} column The column number (starting with 1)\n   */\n  ;\n\n  _proto.isAtPosition = function isAtPosition(line, column) {\n    if (this.source && this.source.start && this.source.end) {\n      if (this.source.start.line > line) {\n        return false;\n      }\n\n      if (this.source.end.line < line) {\n        return false;\n      }\n\n      if (this.source.start.line === line && this.source.start.column > column) {\n        return false;\n      }\n\n      if (this.source.end.line === line && this.source.end.column < column) {\n        return false;\n      }\n\n      return true;\n    }\n\n    return undefined;\n  };\n\n  _proto.stringifyProperty = function stringifyProperty(name) {\n    return this.raws && this.raws[name] || this[name];\n  };\n\n  _proto.valueToString = function valueToString() {\n    return String(this.stringifyProperty(\"value\"));\n  };\n\n  _proto.toString = function toString() {\n    return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join('');\n  };\n\n  _createClass(Node, [{\n    key: \"rawSpaceBefore\",\n    get: function get() {\n      var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before;\n\n      if (rawSpace === undefined) {\n        rawSpace = this.spaces && this.spaces.before;\n      }\n\n      return rawSpace || \"\";\n    },\n    set: function set(raw) {\n      (0, _util.ensureObject)(this, \"raws\", \"spaces\");\n      this.raws.spaces.before = raw;\n    }\n  }, {\n    key: \"rawSpaceAfter\",\n    get: function get() {\n      var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after;\n\n      if (rawSpace === undefined) {\n        rawSpace = this.spaces.after;\n      }\n\n      return rawSpace || \"\";\n    },\n    set: function set(raw) {\n      (0, _util.ensureObject)(this, \"raws\", \"spaces\");\n      this.raws.spaces.after = raw;\n    }\n  }]);\n\n  return Node;\n}();\n\nexports[\"default\"] = Node;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.UNIVERSAL = exports.ATTRIBUTE = exports.CLASS = exports.COMBINATOR = exports.COMMENT = exports.ID = exports.NESTING = exports.PSEUDO = exports.ROOT = exports.SELECTOR = exports.STRING = exports.TAG = void 0;\nvar TAG = 'tag';\nexports.TAG = TAG;\nvar STRING = 'string';\nexports.STRING = STRING;\nvar SELECTOR = 'selector';\nexports.SELECTOR = SELECTOR;\nvar ROOT = 'root';\nexports.ROOT = ROOT;\nvar PSEUDO = 'pseudo';\nexports.PSEUDO = PSEUDO;\nvar NESTING = 'nesting';\nexports.NESTING = NESTING;\nvar ID = 'id';\nexports.ID = ID;\nvar COMMENT = 'comment';\nexports.COMMENT = COMMENT;\nvar COMBINATOR = 'combinator';\nexports.COMBINATOR = COMBINATOR;\nvar CLASS = 'class';\nexports.CLASS = CLASS;\nvar ATTRIBUTE = 'attribute';\nexports.ATTRIBUTE = ATTRIBUTE;\nvar UNIVERSAL = 'universal';\nexports.UNIVERSAL = UNIVERSAL;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar types = _interopRequireWildcard(require(\"./types\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } it = o[Symbol.iterator](); return it.next.bind(it); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Container = /*#__PURE__*/function (_Node) {\n  _inheritsLoose(Container, _Node);\n\n  function Container(opts) {\n    var _this;\n\n    _this = _Node.call(this, opts) || this;\n\n    if (!_this.nodes) {\n      _this.nodes = [];\n    }\n\n    return _this;\n  }\n\n  var _proto = Container.prototype;\n\n  _proto.append = function append(selector) {\n    selector.parent = this;\n    this.nodes.push(selector);\n    return this;\n  };\n\n  _proto.prepend = function prepend(selector) {\n    selector.parent = this;\n    this.nodes.unshift(selector);\n    return this;\n  };\n\n  _proto.at = function at(index) {\n    return this.nodes[index];\n  };\n\n  _proto.index = function index(child) {\n    if (typeof child === 'number') {\n      return child;\n    }\n\n    return this.nodes.indexOf(child);\n  };\n\n  _proto.removeChild = function removeChild(child) {\n    child = this.index(child);\n    this.at(child).parent = undefined;\n    this.nodes.splice(child, 1);\n    var index;\n\n    for (var id in this.indexes) {\n      index = this.indexes[id];\n\n      if (index >= child) {\n        this.indexes[id] = index - 1;\n      }\n    }\n\n    return this;\n  };\n\n  _proto.removeAll = function removeAll() {\n    for (var _iterator = _createForOfIteratorHelperLoose(this.nodes), _step; !(_step = _iterator()).done;) {\n      var node = _step.value;\n      node.parent = undefined;\n    }\n\n    this.nodes = [];\n    return this;\n  };\n\n  _proto.empty = function empty() {\n    return this.removeAll();\n  };\n\n  _proto.insertAfter = function insertAfter(oldNode, newNode) {\n    newNode.parent = this;\n    var oldIndex = this.index(oldNode);\n    this.nodes.splice(oldIndex + 1, 0, newNode);\n    newNode.parent = this;\n    var index;\n\n    for (var id in this.indexes) {\n      index = this.indexes[id];\n\n      if (oldIndex <= index) {\n        this.indexes[id] = index + 1;\n      }\n    }\n\n    return this;\n  };\n\n  _proto.insertBefore = function insertBefore(oldNode, newNode) {\n    newNode.parent = this;\n    var oldIndex = this.index(oldNode);\n    this.nodes.splice(oldIndex, 0, newNode);\n    newNode.parent = this;\n    var index;\n\n    for (var id in this.indexes) {\n      index = this.indexes[id];\n\n      if (index <= oldIndex) {\n        this.indexes[id] = index + 1;\n      }\n    }\n\n    return this;\n  };\n\n  _proto._findChildAtPosition = function _findChildAtPosition(line, col) {\n    var found = undefined;\n    this.each(function (node) {\n      if (node.atPosition) {\n        var foundChild = node.atPosition(line, col);\n\n        if (foundChild) {\n          found = foundChild;\n          return false;\n        }\n      } else if (node.isAtPosition(line, col)) {\n        found = node;\n        return false;\n      }\n    });\n    return found;\n  }\n  /**\n   * Return the most specific node at the line and column number given.\n   * The source location is based on the original parsed location, locations aren't\n   * updated as selector nodes are mutated.\n   * \n   * Note that this location is relative to the location of the first character\n   * of the selector, and not the location of the selector in the overall document\n   * when used in conjunction with postcss.\n   *\n   * If not found, returns undefined.\n   * @param {number} line The line number of the node to find. (1-based index)\n   * @param {number} col  The column number of the node to find. (1-based index)\n   */\n  ;\n\n  _proto.atPosition = function atPosition(line, col) {\n    if (this.isAtPosition(line, col)) {\n      return this._findChildAtPosition(line, col) || this;\n    } else {\n      return undefined;\n    }\n  };\n\n  _proto._inferEndPosition = function _inferEndPosition() {\n    if (this.last && this.last.source && this.last.source.end) {\n      this.source = this.source || {};\n      this.source.end = this.source.end || {};\n      Object.assign(this.source.end, this.last.source.end);\n    }\n  };\n\n  _proto.each = function each(callback) {\n    if (!this.lastEach) {\n      this.lastEach = 0;\n    }\n\n    if (!this.indexes) {\n      this.indexes = {};\n    }\n\n    this.lastEach++;\n    var id = this.lastEach;\n    this.indexes[id] = 0;\n\n    if (!this.length) {\n      return undefined;\n    }\n\n    var index, result;\n\n    while (this.indexes[id] < this.length) {\n      index = this.indexes[id];\n      result = callback(this.at(index), index);\n\n      if (result === false) {\n        break;\n      }\n\n      this.indexes[id] += 1;\n    }\n\n    delete this.indexes[id];\n\n    if (result === false) {\n      return false;\n    }\n  };\n\n  _proto.walk = function walk(callback) {\n    return this.each(function (node, i) {\n      var result = callback(node, i);\n\n      if (result !== false && node.length) {\n        result = node.walk(callback);\n      }\n\n      if (result === false) {\n        return false;\n      }\n    });\n  };\n\n  _proto.walkAttributes = function walkAttributes(callback) {\n    var _this2 = this;\n\n    return this.walk(function (selector) {\n      if (selector.type === types.ATTRIBUTE) {\n        return callback.call(_this2, selector);\n      }\n    });\n  };\n\n  _proto.walkClasses = function walkClasses(callback) {\n    var _this3 = this;\n\n    return this.walk(function (selector) {\n      if (selector.type === types.CLASS) {\n        return callback.call(_this3, selector);\n      }\n    });\n  };\n\n  _proto.walkCombinators = function walkCombinators(callback) {\n    var _this4 = this;\n\n    return this.walk(function (selector) {\n      if (selector.type === types.COMBINATOR) {\n        return callback.call(_this4, selector);\n      }\n    });\n  };\n\n  _proto.walkComments = function walkComments(callback) {\n    var _this5 = this;\n\n    return this.walk(function (selector) {\n      if (selector.type === types.COMMENT) {\n        return callback.call(_this5, selector);\n      }\n    });\n  };\n\n  _proto.walkIds = function walkIds(callback) {\n    var _this6 = this;\n\n    return this.walk(function (selector) {\n      if (selector.type === types.ID) {\n        return callback.call(_this6, selector);\n      }\n    });\n  };\n\n  _proto.walkNesting = function walkNesting(callback) {\n    var _this7 = this;\n\n    return this.walk(function (selector) {\n      if (selector.type === types.NESTING) {\n        return callback.call(_this7, selector);\n      }\n    });\n  };\n\n  _proto.walkPseudos = function walkPseudos(callback) {\n    var _this8 = this;\n\n    return this.walk(function (selector) {\n      if (selector.type === types.PSEUDO) {\n        return callback.call(_this8, selector);\n      }\n    });\n  };\n\n  _proto.walkTags = function walkTags(callback) {\n    var _this9 = this;\n\n    return this.walk(function (selector) {\n      if (selector.type === types.TAG) {\n        return callback.call(_this9, selector);\n      }\n    });\n  };\n\n  _proto.walkUniversals = function walkUniversals(callback) {\n    var _this10 = this;\n\n    return this.walk(function (selector) {\n      if (selector.type === types.UNIVERSAL) {\n        return callback.call(_this10, selector);\n      }\n    });\n  };\n\n  _proto.split = function split(callback) {\n    var _this11 = this;\n\n    var current = [];\n    return this.reduce(function (memo, node, index) {\n      var split = callback.call(_this11, node);\n      current.push(node);\n\n      if (split) {\n        memo.push(current);\n        current = [];\n      } else if (index === _this11.length - 1) {\n        memo.push(current);\n      }\n\n      return memo;\n    }, []);\n  };\n\n  _proto.map = function map(callback) {\n    return this.nodes.map(callback);\n  };\n\n  _proto.reduce = function reduce(callback, memo) {\n    return this.nodes.reduce(callback, memo);\n  };\n\n  _proto.every = function every(callback) {\n    return this.nodes.every(callback);\n  };\n\n  _proto.some = function some(callback) {\n    return this.nodes.some(callback);\n  };\n\n  _proto.filter = function filter(callback) {\n    return this.nodes.filter(callback);\n  };\n\n  _proto.sort = function sort(callback) {\n    return this.nodes.sort(callback);\n  };\n\n  _proto.toString = function toString() {\n    return this.map(String).join('');\n  };\n\n  _createClass(Container, [{\n    key: \"first\",\n    get: function get() {\n      return this.at(0);\n    }\n  }, {\n    key: \"last\",\n    get: function get() {\n      return this.at(this.length - 1);\n    }\n  }, {\n    key: \"length\",\n    get: function get() {\n      return this.nodes.length;\n    }\n  }]);\n\n  return Container;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Container;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _container = _interopRequireDefault(require(\"./container\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Root = /*#__PURE__*/function (_Container) {\n  _inheritsLoose(Root, _Container);\n\n  function Root(opts) {\n    var _this;\n\n    _this = _Container.call(this, opts) || this;\n    _this.type = _types.ROOT;\n    return _this;\n  }\n\n  var _proto = Root.prototype;\n\n  _proto.toString = function toString() {\n    var str = this.reduce(function (memo, selector) {\n      memo.push(String(selector));\n      return memo;\n    }, []).join(',');\n    return this.trailingComma ? str + ',' : str;\n  };\n\n  _proto.error = function error(message, options) {\n    if (this._error) {\n      return this._error(message, options);\n    } else {\n      return new Error(message);\n    }\n  };\n\n  _createClass(Root, [{\n    key: \"errorGenerator\",\n    set: function set(handler) {\n      this._error = handler;\n    }\n  }]);\n\n  return Root;\n}(_container[\"default\"]);\n\nexports[\"default\"] = Root;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _container = _interopRequireDefault(require(\"./container\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Selector = /*#__PURE__*/function (_Container) {\n  _inheritsLoose(Selector, _Container);\n\n  function Selector(opts) {\n    var _this;\n\n    _this = _Container.call(this, opts) || this;\n    _this.type = _types.SELECTOR;\n    return _this;\n  }\n\n  return Selector;\n}(_container[\"default\"]);\n\nexports[\"default\"] = Selector;\nmodule.exports = exports.default;","/*! https://mths.be/cssesc v3.0.0 by @mathias */\n'use strict';\n\nvar object = {};\nvar hasOwnProperty = object.hasOwnProperty;\nvar merge = function merge(options, defaults) {\n\tif (!options) {\n\t\treturn defaults;\n\t}\n\tvar result = {};\n\tfor (var key in defaults) {\n\t\t// `if (defaults.hasOwnProperty(key) { … }` is not needed here, since\n\t\t// only recognized option names are used.\n\t\tresult[key] = hasOwnProperty.call(options, key) ? options[key] : defaults[key];\n\t}\n\treturn result;\n};\n\nvar regexAnySingleEscape = /[ -,\\.\\/:-@\\[-\\^`\\{-~]/;\nvar regexSingleEscape = /[ -,\\.\\/:-@\\[\\]\\^`\\{-~]/;\nvar regexAlwaysEscape = /['\"\\\\]/;\nvar regexExcessiveSpaces = /(^|\\\\+)?(\\\\[A-F0-9]{1,6})\\x20(?![a-fA-F0-9\\x20])/g;\n\n// https://mathiasbynens.be/notes/css-escapes#css\nvar cssesc = function cssesc(string, options) {\n\toptions = merge(options, cssesc.options);\n\tif (options.quotes != 'single' && options.quotes != 'double') {\n\t\toptions.quotes = 'single';\n\t}\n\tvar quote = options.quotes == 'double' ? '\"' : '\\'';\n\tvar isIdentifier = options.isIdentifier;\n\n\tvar firstChar = string.charAt(0);\n\tvar output = '';\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar character = string.charAt(counter++);\n\t\tvar codePoint = character.charCodeAt();\n\t\tvar value = void 0;\n\t\t// If it’s not a printable ASCII character…\n\t\tif (codePoint < 0x20 || codePoint > 0x7E) {\n\t\t\tif (codePoint >= 0xD800 && codePoint <= 0xDBFF && counter < length) {\n\t\t\t\t// It’s a high surrogate, and there is a next character.\n\t\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t\t// next character is low surrogate\n\t\t\t\t\tcodePoint = ((codePoint & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000;\n\t\t\t\t} else {\n\t\t\t\t\t// It’s an unmatched surrogate; only append this code unit, in case\n\t\t\t\t\t// the next code unit is the high surrogate of a surrogate pair.\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t} else {\n\t\t\tif (options.escapeEverything) {\n\t\t\t\tif (regexAnySingleEscape.test(character)) {\n\t\t\t\t\tvalue = '\\\\' + character;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t\t}\n\t\t\t} else if (/[\\t\\n\\f\\r\\x0B]/.test(character)) {\n\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t} else if (character == '\\\\' || !isIdentifier && (character == '\"' && quote == character || character == '\\'' && quote == character) || isIdentifier && regexSingleEscape.test(character)) {\n\t\t\t\tvalue = '\\\\' + character;\n\t\t\t} else {\n\t\t\t\tvalue = character;\n\t\t\t}\n\t\t}\n\t\toutput += value;\n\t}\n\n\tif (isIdentifier) {\n\t\tif (/^-[-\\d]/.test(output)) {\n\t\t\toutput = '\\\\-' + output.slice(1);\n\t\t} else if (/\\d/.test(firstChar)) {\n\t\t\toutput = '\\\\3' + firstChar + ' ' + output.slice(1);\n\t\t}\n\t}\n\n\t// Remove spaces after `\\HEX` escapes that are not followed by a hex digit,\n\t// since they’re redundant. Note that this is only possible if the escape\n\t// sequence isn’t preceded by an odd number of backslashes.\n\toutput = output.replace(regexExcessiveSpaces, function ($0, $1, $2) {\n\t\tif ($1 && $1.length % 2) {\n\t\t\t// It’s not safe to remove the space, so don’t.\n\t\t\treturn $0;\n\t\t}\n\t\t// Strip the space.\n\t\treturn ($1 || '') + $2;\n\t});\n\n\tif (!isIdentifier && options.wrap) {\n\t\treturn quote + output + quote;\n\t}\n\treturn output;\n};\n\n// Expose default options (so they can be overridden globally).\ncssesc.options = {\n\t'escapeEverything': false,\n\t'isIdentifier': false,\n\t'quotes': 'single',\n\t'wrap': false\n};\n\ncssesc.version = '3.0.0';\n\nmodule.exports = cssesc;\n","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _cssesc = _interopRequireDefault(require(\"cssesc\"));\n\nvar _util = require(\"../util\");\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar ClassName = /*#__PURE__*/function (_Node) {\n  _inheritsLoose(ClassName, _Node);\n\n  function ClassName(opts) {\n    var _this;\n\n    _this = _Node.call(this, opts) || this;\n    _this.type = _types.CLASS;\n    _this._constructed = true;\n    return _this;\n  }\n\n  var _proto = ClassName.prototype;\n\n  _proto.valueToString = function valueToString() {\n    return '.' + _Node.prototype.valueToString.call(this);\n  };\n\n  _createClass(ClassName, [{\n    key: \"value\",\n    get: function get() {\n      return this._value;\n    },\n    set: function set(v) {\n      if (this._constructed) {\n        var escaped = (0, _cssesc[\"default\"])(v, {\n          isIdentifier: true\n        });\n\n        if (escaped !== v) {\n          (0, _util.ensureObject)(this, \"raws\");\n          this.raws.value = escaped;\n        } else if (this.raws) {\n          delete this.raws.value;\n        }\n      }\n\n      this._value = v;\n    }\n  }]);\n\n  return ClassName;\n}(_node[\"default\"]);\n\nexports[\"default\"] = ClassName;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Comment = /*#__PURE__*/function (_Node) {\n  _inheritsLoose(Comment, _Node);\n\n  function Comment(opts) {\n    var _this;\n\n    _this = _Node.call(this, opts) || this;\n    _this.type = _types.COMMENT;\n    return _this;\n  }\n\n  return Comment;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Comment;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar ID = /*#__PURE__*/function (_Node) {\n  _inheritsLoose(ID, _Node);\n\n  function ID(opts) {\n    var _this;\n\n    _this = _Node.call(this, opts) || this;\n    _this.type = _types.ID;\n    return _this;\n  }\n\n  var _proto = ID.prototype;\n\n  _proto.valueToString = function valueToString() {\n    return '#' + _Node.prototype.valueToString.call(this);\n  };\n\n  return ID;\n}(_node[\"default\"]);\n\nexports[\"default\"] = ID;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _cssesc = _interopRequireDefault(require(\"cssesc\"));\n\nvar _util = require(\"../util\");\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Namespace = /*#__PURE__*/function (_Node) {\n  _inheritsLoose(Namespace, _Node);\n\n  function Namespace() {\n    return _Node.apply(this, arguments) || this;\n  }\n\n  var _proto = Namespace.prototype;\n\n  _proto.qualifiedName = function qualifiedName(value) {\n    if (this.namespace) {\n      return this.namespaceString + \"|\" + value;\n    } else {\n      return value;\n    }\n  };\n\n  _proto.valueToString = function valueToString() {\n    return this.qualifiedName(_Node.prototype.valueToString.call(this));\n  };\n\n  _createClass(Namespace, [{\n    key: \"namespace\",\n    get: function get() {\n      return this._namespace;\n    },\n    set: function set(namespace) {\n      if (namespace === true || namespace === \"*\" || namespace === \"&\") {\n        this._namespace = namespace;\n\n        if (this.raws) {\n          delete this.raws.namespace;\n        }\n\n        return;\n      }\n\n      var escaped = (0, _cssesc[\"default\"])(namespace, {\n        isIdentifier: true\n      });\n      this._namespace = namespace;\n\n      if (escaped !== namespace) {\n        (0, _util.ensureObject)(this, \"raws\");\n        this.raws.namespace = escaped;\n      } else if (this.raws) {\n        delete this.raws.namespace;\n      }\n    }\n  }, {\n    key: \"ns\",\n    get: function get() {\n      return this._namespace;\n    },\n    set: function set(namespace) {\n      this.namespace = namespace;\n    }\n  }, {\n    key: \"namespaceString\",\n    get: function get() {\n      if (this.namespace) {\n        var ns = this.stringifyProperty(\"namespace\");\n\n        if (ns === true) {\n          return '';\n        } else {\n          return ns;\n        }\n      } else {\n        return '';\n      }\n    }\n  }]);\n\n  return Namespace;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Namespace;\n;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _namespace = _interopRequireDefault(require(\"./namespace\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Tag = /*#__PURE__*/function (_Namespace) {\n  _inheritsLoose(Tag, _Namespace);\n\n  function Tag(opts) {\n    var _this;\n\n    _this = _Namespace.call(this, opts) || this;\n    _this.type = _types.TAG;\n    return _this;\n  }\n\n  return Tag;\n}(_namespace[\"default\"]);\n\nexports[\"default\"] = Tag;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar String = /*#__PURE__*/function (_Node) {\n  _inheritsLoose(String, _Node);\n\n  function String(opts) {\n    var _this;\n\n    _this = _Node.call(this, opts) || this;\n    _this.type = _types.STRING;\n    return _this;\n  }\n\n  return String;\n}(_node[\"default\"]);\n\nexports[\"default\"] = String;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _container = _interopRequireDefault(require(\"./container\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Pseudo = /*#__PURE__*/function (_Container) {\n  _inheritsLoose(Pseudo, _Container);\n\n  function Pseudo(opts) {\n    var _this;\n\n    _this = _Container.call(this, opts) || this;\n    _this.type = _types.PSEUDO;\n    return _this;\n  }\n\n  var _proto = Pseudo.prototype;\n\n  _proto.toString = function toString() {\n    var params = this.length ? '(' + this.map(String).join(',') + ')' : '';\n    return [this.rawSpaceBefore, this.stringifyProperty(\"value\"), params, this.rawSpaceAfter].join('');\n  };\n\n  return Pseudo;\n}(_container[\"default\"]);\n\nexports[\"default\"] = Pseudo;\nmodule.exports = exports.default;","module.exports = function deprecate(fn, message) {\n  return function (...args) {\n    console.warn(message)\n    return fn(...args)\n  }\n}\n","\"use strict\";\n\nexports.__esModule = true;\nexports.unescapeValue = unescapeValue;\nexports[\"default\"] = void 0;\n\nvar _cssesc = _interopRequireDefault(require(\"cssesc\"));\n\nvar _unesc = _interopRequireDefault(require(\"../util/unesc\"));\n\nvar _namespace = _interopRequireDefault(require(\"./namespace\"));\n\nvar _types = require(\"./types\");\n\nvar _CSSESC_QUOTE_OPTIONS;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar deprecate = require(\"util-deprecate\");\n\nvar WRAPPED_IN_QUOTES = /^('|\")([^]*)\\1$/;\nvar warnOfDeprecatedValueAssignment = deprecate(function () {}, \"Assigning an attribute a value containing characters that might need to be escaped is deprecated. \" + \"Call attribute.setValue() instead.\");\nvar warnOfDeprecatedQuotedAssignment = deprecate(function () {}, \"Assigning attr.quoted is deprecated and has no effect. Assign to attr.quoteMark instead.\");\nvar warnOfDeprecatedConstructor = deprecate(function () {}, \"Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now.\");\n\nfunction unescapeValue(value) {\n  var deprecatedUsage = false;\n  var quoteMark = null;\n  var unescaped = value;\n  var m = unescaped.match(WRAPPED_IN_QUOTES);\n\n  if (m) {\n    quoteMark = m[1];\n    unescaped = m[2];\n  }\n\n  unescaped = (0, _unesc[\"default\"])(unescaped);\n\n  if (unescaped !== value) {\n    deprecatedUsage = true;\n  }\n\n  return {\n    deprecatedUsage: deprecatedUsage,\n    unescaped: unescaped,\n    quoteMark: quoteMark\n  };\n}\n\nfunction handleDeprecatedContructorOpts(opts) {\n  if (opts.quoteMark !== undefined) {\n    return opts;\n  }\n\n  if (opts.value === undefined) {\n    return opts;\n  }\n\n  warnOfDeprecatedConstructor();\n\n  var _unescapeValue = unescapeValue(opts.value),\n      quoteMark = _unescapeValue.quoteMark,\n      unescaped = _unescapeValue.unescaped;\n\n  if (!opts.raws) {\n    opts.raws = {};\n  }\n\n  if (opts.raws.value === undefined) {\n    opts.raws.value = opts.value;\n  }\n\n  opts.value = unescaped;\n  opts.quoteMark = quoteMark;\n  return opts;\n}\n\nvar Attribute = /*#__PURE__*/function (_Namespace) {\n  _inheritsLoose(Attribute, _Namespace);\n\n  function Attribute(opts) {\n    var _this;\n\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    _this = _Namespace.call(this, handleDeprecatedContructorOpts(opts)) || this;\n    _this.type = _types.ATTRIBUTE;\n    _this.raws = _this.raws || {};\n    Object.defineProperty(_this.raws, 'unquoted', {\n      get: deprecate(function () {\n        return _this.value;\n      }, \"attr.raws.unquoted is deprecated. Call attr.value instead.\"),\n      set: deprecate(function () {\n        return _this.value;\n      }, \"Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now.\")\n    });\n    _this._constructed = true;\n    return _this;\n  }\n  /**\n   * Returns the Attribute's value quoted such that it would be legal to use\n   * in the value of a css file. The original value's quotation setting\n   * used for stringification is left unchanged. See `setValue(value, options)`\n   * if you want to control the quote settings of a new value for the attribute.\n   *\n   * You can also change the quotation used for the current value by setting quoteMark.\n   *\n   * Options:\n   *   * quoteMark {'\"' | \"'\" | null} - Use this value to quote the value. If this\n   *     option is not set, the original value for quoteMark will be used. If\n   *     indeterminate, a double quote is used. The legal values are:\n   *     * `null` - the value will be unquoted and characters will be escaped as necessary.\n   *     * `'` - the value will be quoted with a single quote and single quotes are escaped.\n   *     * `\"` - the value will be quoted with a double quote and double quotes are escaped.\n   *   * preferCurrentQuoteMark {boolean} - if true, prefer the source quote mark\n   *     over the quoteMark option value.\n   *   * smart {boolean} - if true, will select a quote mark based on the value\n   *     and the other options specified here. See the `smartQuoteMark()`\n   *     method.\n   **/\n\n\n  var _proto = Attribute.prototype;\n\n  _proto.getQuotedValue = function getQuotedValue(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var quoteMark = this._determineQuoteMark(options);\n\n    var cssescopts = CSSESC_QUOTE_OPTIONS[quoteMark];\n    var escaped = (0, _cssesc[\"default\"])(this._value, cssescopts);\n    return escaped;\n  };\n\n  _proto._determineQuoteMark = function _determineQuoteMark(options) {\n    return options.smart ? this.smartQuoteMark(options) : this.preferredQuoteMark(options);\n  }\n  /**\n   * Set the unescaped value with the specified quotation options. The value\n   * provided must not include any wrapping quote marks -- those quotes will\n   * be interpreted as part of the value and escaped accordingly.\n   */\n  ;\n\n  _proto.setValue = function setValue(value, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    this._value = value;\n    this._quoteMark = this._determineQuoteMark(options);\n\n    this._syncRawValue();\n  }\n  /**\n   * Intelligently select a quoteMark value based on the value's contents. If\n   * the value is a legal CSS ident, it will not be quoted. Otherwise a quote\n   * mark will be picked that minimizes the number of escapes.\n   *\n   * If there's no clear winner, the quote mark from these options is used,\n   * then the source quote mark (this is inverted if `preferCurrentQuoteMark` is\n   * true). If the quoteMark is unspecified, a double quote is used.\n   *\n   * @param options This takes the quoteMark and preferCurrentQuoteMark options\n   * from the quoteValue method.\n   */\n  ;\n\n  _proto.smartQuoteMark = function smartQuoteMark(options) {\n    var v = this.value;\n    var numSingleQuotes = v.replace(/[^']/g, '').length;\n    var numDoubleQuotes = v.replace(/[^\"]/g, '').length;\n\n    if (numSingleQuotes + numDoubleQuotes === 0) {\n      var escaped = (0, _cssesc[\"default\"])(v, {\n        isIdentifier: true\n      });\n\n      if (escaped === v) {\n        return Attribute.NO_QUOTE;\n      } else {\n        var pref = this.preferredQuoteMark(options);\n\n        if (pref === Attribute.NO_QUOTE) {\n          // pick a quote mark that isn't none and see if it's smaller\n          var quote = this.quoteMark || options.quoteMark || Attribute.DOUBLE_QUOTE;\n          var opts = CSSESC_QUOTE_OPTIONS[quote];\n          var quoteValue = (0, _cssesc[\"default\"])(v, opts);\n\n          if (quoteValue.length < escaped.length) {\n            return quote;\n          }\n        }\n\n        return pref;\n      }\n    } else if (numDoubleQuotes === numSingleQuotes) {\n      return this.preferredQuoteMark(options);\n    } else if (numDoubleQuotes < numSingleQuotes) {\n      return Attribute.DOUBLE_QUOTE;\n    } else {\n      return Attribute.SINGLE_QUOTE;\n    }\n  }\n  /**\n   * Selects the preferred quote mark based on the options and the current quote mark value.\n   * If you want the quote mark to depend on the attribute value, call `smartQuoteMark(opts)`\n   * instead.\n   */\n  ;\n\n  _proto.preferredQuoteMark = function preferredQuoteMark(options) {\n    var quoteMark = options.preferCurrentQuoteMark ? this.quoteMark : options.quoteMark;\n\n    if (quoteMark === undefined) {\n      quoteMark = options.preferCurrentQuoteMark ? options.quoteMark : this.quoteMark;\n    }\n\n    if (quoteMark === undefined) {\n      quoteMark = Attribute.DOUBLE_QUOTE;\n    }\n\n    return quoteMark;\n  };\n\n  _proto._syncRawValue = function _syncRawValue() {\n    var rawValue = (0, _cssesc[\"default\"])(this._value, CSSESC_QUOTE_OPTIONS[this.quoteMark]);\n\n    if (rawValue === this._value) {\n      if (this.raws) {\n        delete this.raws.value;\n      }\n    } else {\n      this.raws.value = rawValue;\n    }\n  };\n\n  _proto._handleEscapes = function _handleEscapes(prop, value) {\n    if (this._constructed) {\n      var escaped = (0, _cssesc[\"default\"])(value, {\n        isIdentifier: true\n      });\n\n      if (escaped !== value) {\n        this.raws[prop] = escaped;\n      } else {\n        delete this.raws[prop];\n      }\n    }\n  };\n\n  _proto._spacesFor = function _spacesFor(name) {\n    var attrSpaces = {\n      before: '',\n      after: ''\n    };\n    var spaces = this.spaces[name] || {};\n    var rawSpaces = this.raws.spaces && this.raws.spaces[name] || {};\n    return Object.assign(attrSpaces, spaces, rawSpaces);\n  };\n\n  _proto._stringFor = function _stringFor(name, spaceName, concat) {\n    if (spaceName === void 0) {\n      spaceName = name;\n    }\n\n    if (concat === void 0) {\n      concat = defaultAttrConcat;\n    }\n\n    var attrSpaces = this._spacesFor(spaceName);\n\n    return concat(this.stringifyProperty(name), attrSpaces);\n  }\n  /**\n   * returns the offset of the attribute part specified relative to the\n   * start of the node of the output string.\n   *\n   * * \"ns\" - alias for \"namespace\"\n   * * \"namespace\" - the namespace if it exists.\n   * * \"attribute\" - the attribute name\n   * * \"attributeNS\" - the start of the attribute or its namespace\n   * * \"operator\" - the match operator of the attribute\n   * * \"value\" - The value (string or identifier)\n   * * \"insensitive\" - the case insensitivity flag;\n   * @param part One of the possible values inside an attribute.\n   * @returns -1 if the name is invalid or the value doesn't exist in this attribute.\n   */\n  ;\n\n  _proto.offsetOf = function offsetOf(name) {\n    var count = 1;\n\n    var attributeSpaces = this._spacesFor(\"attribute\");\n\n    count += attributeSpaces.before.length;\n\n    if (name === \"namespace\" || name === \"ns\") {\n      return this.namespace ? count : -1;\n    }\n\n    if (name === \"attributeNS\") {\n      return count;\n    }\n\n    count += this.namespaceString.length;\n\n    if (this.namespace) {\n      count += 1;\n    }\n\n    if (name === \"attribute\") {\n      return count;\n    }\n\n    count += this.stringifyProperty(\"attribute\").length;\n    count += attributeSpaces.after.length;\n\n    var operatorSpaces = this._spacesFor(\"operator\");\n\n    count += operatorSpaces.before.length;\n    var operator = this.stringifyProperty(\"operator\");\n\n    if (name === \"operator\") {\n      return operator ? count : -1;\n    }\n\n    count += operator.length;\n    count += operatorSpaces.after.length;\n\n    var valueSpaces = this._spacesFor(\"value\");\n\n    count += valueSpaces.before.length;\n    var value = this.stringifyProperty(\"value\");\n\n    if (name === \"value\") {\n      return value ? count : -1;\n    }\n\n    count += value.length;\n    count += valueSpaces.after.length;\n\n    var insensitiveSpaces = this._spacesFor(\"insensitive\");\n\n    count += insensitiveSpaces.before.length;\n\n    if (name === \"insensitive\") {\n      return this.insensitive ? count : -1;\n    }\n\n    return -1;\n  };\n\n  _proto.toString = function toString() {\n    var _this2 = this;\n\n    var selector = [this.rawSpaceBefore, '['];\n    selector.push(this._stringFor('qualifiedAttribute', 'attribute'));\n\n    if (this.operator && (this.value || this.value === '')) {\n      selector.push(this._stringFor('operator'));\n      selector.push(this._stringFor('value'));\n      selector.push(this._stringFor('insensitiveFlag', 'insensitive', function (attrValue, attrSpaces) {\n        if (attrValue.length > 0 && !_this2.quoted && attrSpaces.before.length === 0 && !(_this2.spaces.value && _this2.spaces.value.after)) {\n          attrSpaces.before = \" \";\n        }\n\n        return defaultAttrConcat(attrValue, attrSpaces);\n      }));\n    }\n\n    selector.push(']');\n    selector.push(this.rawSpaceAfter);\n    return selector.join('');\n  };\n\n  _createClass(Attribute, [{\n    key: \"quoted\",\n    get: function get() {\n      var qm = this.quoteMark;\n      return qm === \"'\" || qm === '\"';\n    },\n    set: function set(value) {\n      warnOfDeprecatedQuotedAssignment();\n    }\n    /**\n     * returns a single (`'`) or double (`\"`) quote character if the value is quoted.\n     * returns `null` if the value is not quoted.\n     * returns `undefined` if the quotation state is unknown (this can happen when\n     * the attribute is constructed without specifying a quote mark.)\n     */\n\n  }, {\n    key: \"quoteMark\",\n    get: function get() {\n      return this._quoteMark;\n    }\n    /**\n     * Set the quote mark to be used by this attribute's value.\n     * If the quote mark changes, the raw (escaped) value at `attr.raws.value` of the attribute\n     * value is updated accordingly.\n     *\n     * @param {\"'\" | '\"' | null} quoteMark The quote mark or `null` if the value should be unquoted.\n     */\n    ,\n    set: function set(quoteMark) {\n      if (!this._constructed) {\n        this._quoteMark = quoteMark;\n        return;\n      }\n\n      if (this._quoteMark !== quoteMark) {\n        this._quoteMark = quoteMark;\n\n        this._syncRawValue();\n      }\n    }\n  }, {\n    key: \"qualifiedAttribute\",\n    get: function get() {\n      return this.qualifiedName(this.raws.attribute || this.attribute);\n    }\n  }, {\n    key: \"insensitiveFlag\",\n    get: function get() {\n      return this.insensitive ? 'i' : '';\n    }\n  }, {\n    key: \"value\",\n    get: function get() {\n      return this._value;\n    }\n    /**\n     * Before 3.0, the value had to be set to an escaped value including any wrapped\n     * quote marks. In 3.0, the semantics of `Attribute.value` changed so that the value\n     * is unescaped during parsing and any quote marks are removed.\n     *\n     * Because the ambiguity of this semantic change, if you set `attr.value = newValue`,\n     * a deprecation warning is raised when the new value contains any characters that would\n     * require escaping (including if it contains wrapped quotes).\n     *\n     * Instead, you should call `attr.setValue(newValue, opts)` and pass options that describe\n     * how the new value is quoted.\n     */\n    ,\n    set: function set(v) {\n      if (this._constructed) {\n        var _unescapeValue2 = unescapeValue(v),\n            deprecatedUsage = _unescapeValue2.deprecatedUsage,\n            unescaped = _unescapeValue2.unescaped,\n            quoteMark = _unescapeValue2.quoteMark;\n\n        if (deprecatedUsage) {\n          warnOfDeprecatedValueAssignment();\n        }\n\n        if (unescaped === this._value && quoteMark === this._quoteMark) {\n          return;\n        }\n\n        this._value = unescaped;\n        this._quoteMark = quoteMark;\n\n        this._syncRawValue();\n      } else {\n        this._value = v;\n      }\n    }\n  }, {\n    key: \"attribute\",\n    get: function get() {\n      return this._attribute;\n    },\n    set: function set(name) {\n      this._handleEscapes(\"attribute\", name);\n\n      this._attribute = name;\n    }\n  }]);\n\n  return Attribute;\n}(_namespace[\"default\"]);\n\nexports[\"default\"] = Attribute;\nAttribute.NO_QUOTE = null;\nAttribute.SINGLE_QUOTE = \"'\";\nAttribute.DOUBLE_QUOTE = '\"';\nvar CSSESC_QUOTE_OPTIONS = (_CSSESC_QUOTE_OPTIONS = {\n  \"'\": {\n    quotes: 'single',\n    wrap: true\n  },\n  '\"': {\n    quotes: 'double',\n    wrap: true\n  }\n}, _CSSESC_QUOTE_OPTIONS[null] = {\n  isIdentifier: true\n}, _CSSESC_QUOTE_OPTIONS);\n\nfunction defaultAttrConcat(attrValue, attrSpaces) {\n  return \"\" + attrSpaces.before + attrValue + attrSpaces.after;\n}","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _namespace = _interopRequireDefault(require(\"./namespace\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Universal = /*#__PURE__*/function (_Namespace) {\n  _inheritsLoose(Universal, _Namespace);\n\n  function Universal(opts) {\n    var _this;\n\n    _this = _Namespace.call(this, opts) || this;\n    _this.type = _types.UNIVERSAL;\n    _this.value = '*';\n    return _this;\n  }\n\n  return Universal;\n}(_namespace[\"default\"]);\n\nexports[\"default\"] = Universal;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Combinator = /*#__PURE__*/function (_Node) {\n  _inheritsLoose(Combinator, _Node);\n\n  function Combinator(opts) {\n    var _this;\n\n    _this = _Node.call(this, opts) || this;\n    _this.type = _types.COMBINATOR;\n    return _this;\n  }\n\n  return Combinator;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Combinator;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Nesting = /*#__PURE__*/function (_Node) {\n  _inheritsLoose(Nesting, _Node);\n\n  function Nesting(opts) {\n    var _this;\n\n    _this = _Node.call(this, opts) || this;\n    _this.type = _types.NESTING;\n    _this.value = '&';\n    return _this;\n  }\n\n  return Nesting;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Nesting;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = sortAscending;\n\nfunction sortAscending(list) {\n  return list.sort(function (a, b) {\n    return a - b;\n  });\n}\n\n;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.combinator = exports.word = exports.comment = exports.str = exports.tab = exports.newline = exports.feed = exports.cr = exports.backslash = exports.bang = exports.slash = exports.doubleQuote = exports.singleQuote = exports.space = exports.greaterThan = exports.pipe = exports.equals = exports.plus = exports.caret = exports.tilde = exports.dollar = exports.closeSquare = exports.openSquare = exports.closeParenthesis = exports.openParenthesis = exports.semicolon = exports.colon = exports.comma = exports.at = exports.asterisk = exports.ampersand = void 0;\nvar ampersand = 38; // `&`.charCodeAt(0);\n\nexports.ampersand = ampersand;\nvar asterisk = 42; // `*`.charCodeAt(0);\n\nexports.asterisk = asterisk;\nvar at = 64; // `@`.charCodeAt(0);\n\nexports.at = at;\nvar comma = 44; // `,`.charCodeAt(0);\n\nexports.comma = comma;\nvar colon = 58; // `:`.charCodeAt(0);\n\nexports.colon = colon;\nvar semicolon = 59; // `;`.charCodeAt(0);\n\nexports.semicolon = semicolon;\nvar openParenthesis = 40; // `(`.charCodeAt(0);\n\nexports.openParenthesis = openParenthesis;\nvar closeParenthesis = 41; // `)`.charCodeAt(0);\n\nexports.closeParenthesis = closeParenthesis;\nvar openSquare = 91; // `[`.charCodeAt(0);\n\nexports.openSquare = openSquare;\nvar closeSquare = 93; // `]`.charCodeAt(0);\n\nexports.closeSquare = closeSquare;\nvar dollar = 36; // `$`.charCodeAt(0);\n\nexports.dollar = dollar;\nvar tilde = 126; // `~`.charCodeAt(0);\n\nexports.tilde = tilde;\nvar caret = 94; // `^`.charCodeAt(0);\n\nexports.caret = caret;\nvar plus = 43; // `+`.charCodeAt(0);\n\nexports.plus = plus;\nvar equals = 61; // `=`.charCodeAt(0);\n\nexports.equals = equals;\nvar pipe = 124; // `|`.charCodeAt(0);\n\nexports.pipe = pipe;\nvar greaterThan = 62; // `>`.charCodeAt(0);\n\nexports.greaterThan = greaterThan;\nvar space = 32; // ` `.charCodeAt(0);\n\nexports.space = space;\nvar singleQuote = 39; // `'`.charCodeAt(0);\n\nexports.singleQuote = singleQuote;\nvar doubleQuote = 34; // `\"`.charCodeAt(0);\n\nexports.doubleQuote = doubleQuote;\nvar slash = 47; // `/`.charCodeAt(0);\n\nexports.slash = slash;\nvar bang = 33; // `!`.charCodeAt(0);\n\nexports.bang = bang;\nvar backslash = 92; // '\\\\'.charCodeAt(0);\n\nexports.backslash = backslash;\nvar cr = 13; // '\\r'.charCodeAt(0);\n\nexports.cr = cr;\nvar feed = 12; // '\\f'.charCodeAt(0);\n\nexports.feed = feed;\nvar newline = 10; // '\\n'.charCodeAt(0);\n\nexports.newline = newline;\nvar tab = 9; // '\\t'.charCodeAt(0);\n// Expose aliases primarily for readability.\n\nexports.tab = tab;\nvar str = singleQuote; // No good single character representation!\n\nexports.str = str;\nvar comment = -1;\nexports.comment = comment;\nvar word = -2;\nexports.word = word;\nvar combinator = -3;\nexports.combinator = combinator;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = tokenize;\nexports.FIELDS = void 0;\n\nvar t = _interopRequireWildcard(require(\"./tokenTypes\"));\n\nvar _unescapable, _wordDelimiters;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar unescapable = (_unescapable = {}, _unescapable[t.tab] = true, _unescapable[t.newline] = true, _unescapable[t.cr] = true, _unescapable[t.feed] = true, _unescapable);\nvar wordDelimiters = (_wordDelimiters = {}, _wordDelimiters[t.space] = true, _wordDelimiters[t.tab] = true, _wordDelimiters[t.newline] = true, _wordDelimiters[t.cr] = true, _wordDelimiters[t.feed] = true, _wordDelimiters[t.ampersand] = true, _wordDelimiters[t.asterisk] = true, _wordDelimiters[t.bang] = true, _wordDelimiters[t.comma] = true, _wordDelimiters[t.colon] = true, _wordDelimiters[t.semicolon] = true, _wordDelimiters[t.openParenthesis] = true, _wordDelimiters[t.closeParenthesis] = true, _wordDelimiters[t.openSquare] = true, _wordDelimiters[t.closeSquare] = true, _wordDelimiters[t.singleQuote] = true, _wordDelimiters[t.doubleQuote] = true, _wordDelimiters[t.plus] = true, _wordDelimiters[t.pipe] = true, _wordDelimiters[t.tilde] = true, _wordDelimiters[t.greaterThan] = true, _wordDelimiters[t.equals] = true, _wordDelimiters[t.dollar] = true, _wordDelimiters[t.caret] = true, _wordDelimiters[t.slash] = true, _wordDelimiters);\nvar hex = {};\nvar hexChars = \"0123456789abcdefABCDEF\";\n\nfor (var i = 0; i < hexChars.length; i++) {\n  hex[hexChars.charCodeAt(i)] = true;\n}\n/**\n *  Returns the last index of the bar css word\n * @param {string} css The string in which the word begins\n * @param {number} start The index into the string where word's first letter occurs\n */\n\n\nfunction consumeWord(css, start) {\n  var next = start;\n  var code;\n\n  do {\n    code = css.charCodeAt(next);\n\n    if (wordDelimiters[code]) {\n      return next - 1;\n    } else if (code === t.backslash) {\n      next = consumeEscape(css, next) + 1;\n    } else {\n      // All other characters are part of the word\n      next++;\n    }\n  } while (next < css.length);\n\n  return next - 1;\n}\n/**\n *  Returns the last index of the escape sequence\n * @param {string} css The string in which the sequence begins\n * @param {number} start The index into the string where escape character (`\\`) occurs.\n */\n\n\nfunction consumeEscape(css, start) {\n  var next = start;\n  var code = css.charCodeAt(next + 1);\n\n  if (unescapable[code]) {// just consume the escape char\n  } else if (hex[code]) {\n    var hexDigits = 0; // consume up to 6 hex chars\n\n    do {\n      next++;\n      hexDigits++;\n      code = css.charCodeAt(next + 1);\n    } while (hex[code] && hexDigits < 6); // if fewer than 6 hex chars, a trailing space ends the escape\n\n\n    if (hexDigits < 6 && code === t.space) {\n      next++;\n    }\n  } else {\n    // the next char is part of the current word\n    next++;\n  }\n\n  return next;\n}\n\nvar FIELDS = {\n  TYPE: 0,\n  START_LINE: 1,\n  START_COL: 2,\n  END_LINE: 3,\n  END_COL: 4,\n  START_POS: 5,\n  END_POS: 6\n};\nexports.FIELDS = FIELDS;\n\nfunction tokenize(input) {\n  var tokens = [];\n  var css = input.css.valueOf();\n  var _css = css,\n      length = _css.length;\n  var offset = -1;\n  var line = 1;\n  var start = 0;\n  var end = 0;\n  var code, content, endColumn, endLine, escaped, escapePos, last, lines, next, nextLine, nextOffset, quote, tokenType;\n\n  function unclosed(what, fix) {\n    if (input.safe) {\n      // fyi: this is never set to true.\n      css += fix;\n      next = css.length - 1;\n    } else {\n      throw input.error('Unclosed ' + what, line, start - offset, start);\n    }\n  }\n\n  while (start < length) {\n    code = css.charCodeAt(start);\n\n    if (code === t.newline) {\n      offset = start;\n      line += 1;\n    }\n\n    switch (code) {\n      case t.space:\n      case t.tab:\n      case t.newline:\n      case t.cr:\n      case t.feed:\n        next = start;\n\n        do {\n          next += 1;\n          code = css.charCodeAt(next);\n\n          if (code === t.newline) {\n            offset = next;\n            line += 1;\n          }\n        } while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed);\n\n        tokenType = t.space;\n        endLine = line;\n        endColumn = next - offset - 1;\n        end = next;\n        break;\n\n      case t.plus:\n      case t.greaterThan:\n      case t.tilde:\n      case t.pipe:\n        next = start;\n\n        do {\n          next += 1;\n          code = css.charCodeAt(next);\n        } while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe);\n\n        tokenType = t.combinator;\n        endLine = line;\n        endColumn = start - offset;\n        end = next;\n        break;\n      // Consume these characters as single tokens.\n\n      case t.asterisk:\n      case t.ampersand:\n      case t.bang:\n      case t.comma:\n      case t.equals:\n      case t.dollar:\n      case t.caret:\n      case t.openSquare:\n      case t.closeSquare:\n      case t.colon:\n      case t.semicolon:\n      case t.openParenthesis:\n      case t.closeParenthesis:\n        next = start;\n        tokenType = code;\n        endLine = line;\n        endColumn = start - offset;\n        end = next + 1;\n        break;\n\n      case t.singleQuote:\n      case t.doubleQuote:\n        quote = code === t.singleQuote ? \"'\" : '\"';\n        next = start;\n\n        do {\n          escaped = false;\n          next = css.indexOf(quote, next + 1);\n\n          if (next === -1) {\n            unclosed('quote', quote);\n          }\n\n          escapePos = next;\n\n          while (css.charCodeAt(escapePos - 1) === t.backslash) {\n            escapePos -= 1;\n            escaped = !escaped;\n          }\n        } while (escaped);\n\n        tokenType = t.str;\n        endLine = line;\n        endColumn = start - offset;\n        end = next + 1;\n        break;\n\n      default:\n        if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) {\n          next = css.indexOf('*/', start + 2) + 1;\n\n          if (next === 0) {\n            unclosed('comment', '*/');\n          }\n\n          content = css.slice(start, next + 1);\n          lines = content.split('\\n');\n          last = lines.length - 1;\n\n          if (last > 0) {\n            nextLine = line + last;\n            nextOffset = next - lines[last].length;\n          } else {\n            nextLine = line;\n            nextOffset = offset;\n          }\n\n          tokenType = t.comment;\n          line = nextLine;\n          endLine = nextLine;\n          endColumn = next - nextOffset;\n        } else if (code === t.slash) {\n          next = start;\n          tokenType = code;\n          endLine = line;\n          endColumn = start - offset;\n          end = next + 1;\n        } else {\n          next = consumeWord(css, start);\n          tokenType = t.word;\n          endLine = line;\n          endColumn = next - offset;\n        }\n\n        end = next + 1;\n        break;\n    } // Ensure that the token structure remains consistent\n\n\n    tokens.push([tokenType, // [0] Token type\n    line, // [1] Starting line\n    start - offset, // [2] Starting column\n    endLine, // [3] Ending line\n    endColumn, // [4] Ending column\n    start, // [5] Start position / Source index\n    end // [6] End position\n    ]); // Reset offset for the next token\n\n    if (nextOffset) {\n      offset = nextOffset;\n      nextOffset = null;\n    }\n\n    start = end;\n  }\n\n  return tokens;\n}","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _root = _interopRequireDefault(require(\"./selectors/root\"));\n\nvar _selector = _interopRequireDefault(require(\"./selectors/selector\"));\n\nvar _className = _interopRequireDefault(require(\"./selectors/className\"));\n\nvar _comment = _interopRequireDefault(require(\"./selectors/comment\"));\n\nvar _id = _interopRequireDefault(require(\"./selectors/id\"));\n\nvar _tag = _interopRequireDefault(require(\"./selectors/tag\"));\n\nvar _string = _interopRequireDefault(require(\"./selectors/string\"));\n\nvar _pseudo = _interopRequireDefault(require(\"./selectors/pseudo\"));\n\nvar _attribute = _interopRequireWildcard(require(\"./selectors/attribute\"));\n\nvar _universal = _interopRequireDefault(require(\"./selectors/universal\"));\n\nvar _combinator = _interopRequireDefault(require(\"./selectors/combinator\"));\n\nvar _nesting = _interopRequireDefault(require(\"./selectors/nesting\"));\n\nvar _sortAscending = _interopRequireDefault(require(\"./sortAscending\"));\n\nvar _tokenize = _interopRequireWildcard(require(\"./tokenize\"));\n\nvar tokens = _interopRequireWildcard(require(\"./tokenTypes\"));\n\nvar types = _interopRequireWildcard(require(\"./selectors/types\"));\n\nvar _util = require(\"./util\");\n\nvar _WHITESPACE_TOKENS, _Object$assign;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar WHITESPACE_TOKENS = (_WHITESPACE_TOKENS = {}, _WHITESPACE_TOKENS[tokens.space] = true, _WHITESPACE_TOKENS[tokens.cr] = true, _WHITESPACE_TOKENS[tokens.feed] = true, _WHITESPACE_TOKENS[tokens.newline] = true, _WHITESPACE_TOKENS[tokens.tab] = true, _WHITESPACE_TOKENS);\nvar WHITESPACE_EQUIV_TOKENS = Object.assign({}, WHITESPACE_TOKENS, (_Object$assign = {}, _Object$assign[tokens.comment] = true, _Object$assign));\n\nfunction tokenStart(token) {\n  return {\n    line: token[_tokenize.FIELDS.START_LINE],\n    column: token[_tokenize.FIELDS.START_COL]\n  };\n}\n\nfunction tokenEnd(token) {\n  return {\n    line: token[_tokenize.FIELDS.END_LINE],\n    column: token[_tokenize.FIELDS.END_COL]\n  };\n}\n\nfunction getSource(startLine, startColumn, endLine, endColumn) {\n  return {\n    start: {\n      line: startLine,\n      column: startColumn\n    },\n    end: {\n      line: endLine,\n      column: endColumn\n    }\n  };\n}\n\nfunction getTokenSource(token) {\n  return getSource(token[_tokenize.FIELDS.START_LINE], token[_tokenize.FIELDS.START_COL], token[_tokenize.FIELDS.END_LINE], token[_tokenize.FIELDS.END_COL]);\n}\n\nfunction getTokenSourceSpan(startToken, endToken) {\n  if (!startToken) {\n    return undefined;\n  }\n\n  return getSource(startToken[_tokenize.FIELDS.START_LINE], startToken[_tokenize.FIELDS.START_COL], endToken[_tokenize.FIELDS.END_LINE], endToken[_tokenize.FIELDS.END_COL]);\n}\n\nfunction unescapeProp(node, prop) {\n  var value = node[prop];\n\n  if (typeof value !== \"string\") {\n    return;\n  }\n\n  if (value.indexOf(\"\\\\\") !== -1) {\n    (0, _util.ensureObject)(node, 'raws');\n    node[prop] = (0, _util.unesc)(value);\n\n    if (node.raws[prop] === undefined) {\n      node.raws[prop] = value;\n    }\n  }\n\n  return node;\n}\n\nfunction indexesOf(array, item) {\n  var i = -1;\n  var indexes = [];\n\n  while ((i = array.indexOf(item, i + 1)) !== -1) {\n    indexes.push(i);\n  }\n\n  return indexes;\n}\n\nfunction uniqs() {\n  var list = Array.prototype.concat.apply([], arguments);\n  return list.filter(function (item, i) {\n    return i === list.indexOf(item);\n  });\n}\n\nvar Parser = /*#__PURE__*/function () {\n  function Parser(rule, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    this.rule = rule;\n    this.options = Object.assign({\n      lossy: false,\n      safe: false\n    }, options);\n    this.position = 0;\n    this.css = typeof this.rule === 'string' ? this.rule : this.rule.selector;\n    this.tokens = (0, _tokenize[\"default\"])({\n      css: this.css,\n      error: this._errorGenerator(),\n      safe: this.options.safe\n    });\n    var rootSource = getTokenSourceSpan(this.tokens[0], this.tokens[this.tokens.length - 1]);\n    this.root = new _root[\"default\"]({\n      source: rootSource\n    });\n    this.root.errorGenerator = this._errorGenerator();\n    var selector = new _selector[\"default\"]({\n      source: {\n        start: {\n          line: 1,\n          column: 1\n        }\n      }\n    });\n    this.root.append(selector);\n    this.current = selector;\n    this.loop();\n  }\n\n  var _proto = Parser.prototype;\n\n  _proto._errorGenerator = function _errorGenerator() {\n    var _this = this;\n\n    return function (message, errorOptions) {\n      if (typeof _this.rule === 'string') {\n        return new Error(message);\n      }\n\n      return _this.rule.error(message, errorOptions);\n    };\n  };\n\n  _proto.attribute = function attribute() {\n    var attr = [];\n    var startingToken = this.currToken;\n    this.position++;\n\n    while (this.position < this.tokens.length && this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {\n      attr.push(this.currToken);\n      this.position++;\n    }\n\n    if (this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {\n      return this.expected('closing square bracket', this.currToken[_tokenize.FIELDS.START_POS]);\n    }\n\n    var len = attr.length;\n    var node = {\n      source: getSource(startingToken[1], startingToken[2], this.currToken[3], this.currToken[4]),\n      sourceIndex: startingToken[_tokenize.FIELDS.START_POS]\n    };\n\n    if (len === 1 && !~[tokens.word].indexOf(attr[0][_tokenize.FIELDS.TYPE])) {\n      return this.expected('attribute', attr[0][_tokenize.FIELDS.START_POS]);\n    }\n\n    var pos = 0;\n    var spaceBefore = '';\n    var commentBefore = '';\n    var lastAdded = null;\n    var spaceAfterMeaningfulToken = false;\n\n    while (pos < len) {\n      var token = attr[pos];\n      var content = this.content(token);\n      var next = attr[pos + 1];\n\n      switch (token[_tokenize.FIELDS.TYPE]) {\n        case tokens.space:\n          // if (\n          //     len === 1 ||\n          //     pos === 0 && this.content(next) === '|'\n          // ) {\n          //     return this.expected('attribute', token[TOKEN.START_POS], content);\n          // }\n          spaceAfterMeaningfulToken = true;\n\n          if (this.options.lossy) {\n            break;\n          }\n\n          if (lastAdded) {\n            (0, _util.ensureObject)(node, 'spaces', lastAdded);\n            var prevContent = node.spaces[lastAdded].after || '';\n            node.spaces[lastAdded].after = prevContent + content;\n            var existingComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || null;\n\n            if (existingComment) {\n              node.raws.spaces[lastAdded].after = existingComment + content;\n            }\n          } else {\n            spaceBefore = spaceBefore + content;\n            commentBefore = commentBefore + content;\n          }\n\n          break;\n\n        case tokens.asterisk:\n          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n            node.operator = content;\n            lastAdded = 'operator';\n          } else if ((!node.namespace || lastAdded === \"namespace\" && !spaceAfterMeaningfulToken) && next) {\n            if (spaceBefore) {\n              (0, _util.ensureObject)(node, 'spaces', 'attribute');\n              node.spaces.attribute.before = spaceBefore;\n              spaceBefore = '';\n            }\n\n            if (commentBefore) {\n              (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');\n              node.raws.spaces.attribute.before = spaceBefore;\n              commentBefore = '';\n            }\n\n            node.namespace = (node.namespace || \"\") + content;\n            var rawValue = (0, _util.getProp)(node, 'raws', 'namespace') || null;\n\n            if (rawValue) {\n              node.raws.namespace += content;\n            }\n\n            lastAdded = 'namespace';\n          }\n\n          spaceAfterMeaningfulToken = false;\n          break;\n\n        case tokens.dollar:\n          if (lastAdded === \"value\") {\n            var oldRawValue = (0, _util.getProp)(node, 'raws', 'value');\n            node.value += \"$\";\n\n            if (oldRawValue) {\n              node.raws.value = oldRawValue + \"$\";\n            }\n\n            break;\n          }\n\n        // Falls through\n\n        case tokens.caret:\n          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n            node.operator = content;\n            lastAdded = 'operator';\n          }\n\n          spaceAfterMeaningfulToken = false;\n          break;\n\n        case tokens.combinator:\n          if (content === '~' && next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n            node.operator = content;\n            lastAdded = 'operator';\n          }\n\n          if (content !== '|') {\n            spaceAfterMeaningfulToken = false;\n            break;\n          }\n\n          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n            node.operator = content;\n            lastAdded = 'operator';\n          } else if (!node.namespace && !node.attribute) {\n            node.namespace = true;\n          }\n\n          spaceAfterMeaningfulToken = false;\n          break;\n\n        case tokens.word:\n          if (next && this.content(next) === '|' && attr[pos + 2] && attr[pos + 2][_tokenize.FIELDS.TYPE] !== tokens.equals && // this look-ahead probably fails with comment nodes involved.\n          !node.operator && !node.namespace) {\n            node.namespace = content;\n            lastAdded = 'namespace';\n          } else if (!node.attribute || lastAdded === \"attribute\" && !spaceAfterMeaningfulToken) {\n            if (spaceBefore) {\n              (0, _util.ensureObject)(node, 'spaces', 'attribute');\n              node.spaces.attribute.before = spaceBefore;\n              spaceBefore = '';\n            }\n\n            if (commentBefore) {\n              (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');\n              node.raws.spaces.attribute.before = commentBefore;\n              commentBefore = '';\n            }\n\n            node.attribute = (node.attribute || \"\") + content;\n\n            var _rawValue = (0, _util.getProp)(node, 'raws', 'attribute') || null;\n\n            if (_rawValue) {\n              node.raws.attribute += content;\n            }\n\n            lastAdded = 'attribute';\n          } else if (!node.value && node.value !== \"\" || lastAdded === \"value\" && !spaceAfterMeaningfulToken) {\n            var _unescaped = (0, _util.unesc)(content);\n\n            var _oldRawValue = (0, _util.getProp)(node, 'raws', 'value') || '';\n\n            var oldValue = node.value || '';\n            node.value = oldValue + _unescaped;\n            node.quoteMark = null;\n\n            if (_unescaped !== content || _oldRawValue) {\n              (0, _util.ensureObject)(node, 'raws');\n              node.raws.value = (_oldRawValue || oldValue) + content;\n            }\n\n            lastAdded = 'value';\n          } else {\n            var insensitive = content === 'i' || content === \"I\";\n\n            if ((node.value || node.value === '') && (node.quoteMark || spaceAfterMeaningfulToken)) {\n              node.insensitive = insensitive;\n\n              if (!insensitive || content === \"I\") {\n                (0, _util.ensureObject)(node, 'raws');\n                node.raws.insensitiveFlag = content;\n              }\n\n              lastAdded = 'insensitive';\n\n              if (spaceBefore) {\n                (0, _util.ensureObject)(node, 'spaces', 'insensitive');\n                node.spaces.insensitive.before = spaceBefore;\n                spaceBefore = '';\n              }\n\n              if (commentBefore) {\n                (0, _util.ensureObject)(node, 'raws', 'spaces', 'insensitive');\n                node.raws.spaces.insensitive.before = commentBefore;\n                commentBefore = '';\n              }\n            } else if (node.value || node.value === '') {\n              lastAdded = 'value';\n              node.value += content;\n\n              if (node.raws.value) {\n                node.raws.value += content;\n              }\n            }\n          }\n\n          spaceAfterMeaningfulToken = false;\n          break;\n\n        case tokens.str:\n          if (!node.attribute || !node.operator) {\n            return this.error(\"Expected an attribute followed by an operator preceding the string.\", {\n              index: token[_tokenize.FIELDS.START_POS]\n            });\n          }\n\n          var _unescapeValue = (0, _attribute.unescapeValue)(content),\n              unescaped = _unescapeValue.unescaped,\n              quoteMark = _unescapeValue.quoteMark;\n\n          node.value = unescaped;\n          node.quoteMark = quoteMark;\n          lastAdded = 'value';\n          (0, _util.ensureObject)(node, 'raws');\n          node.raws.value = content;\n          spaceAfterMeaningfulToken = false;\n          break;\n\n        case tokens.equals:\n          if (!node.attribute) {\n            return this.expected('attribute', token[_tokenize.FIELDS.START_POS], content);\n          }\n\n          if (node.value) {\n            return this.error('Unexpected \"=\" found; an operator was already defined.', {\n              index: token[_tokenize.FIELDS.START_POS]\n            });\n          }\n\n          node.operator = node.operator ? node.operator + content : content;\n          lastAdded = 'operator';\n          spaceAfterMeaningfulToken = false;\n          break;\n\n        case tokens.comment:\n          if (lastAdded) {\n            if (spaceAfterMeaningfulToken || next && next[_tokenize.FIELDS.TYPE] === tokens.space || lastAdded === 'insensitive') {\n              var lastComment = (0, _util.getProp)(node, 'spaces', lastAdded, 'after') || '';\n              var rawLastComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || lastComment;\n              (0, _util.ensureObject)(node, 'raws', 'spaces', lastAdded);\n              node.raws.spaces[lastAdded].after = rawLastComment + content;\n            } else {\n              var lastValue = node[lastAdded] || '';\n              var rawLastValue = (0, _util.getProp)(node, 'raws', lastAdded) || lastValue;\n              (0, _util.ensureObject)(node, 'raws');\n              node.raws[lastAdded] = rawLastValue + content;\n            }\n          } else {\n            commentBefore = commentBefore + content;\n          }\n\n          break;\n\n        default:\n          return this.error(\"Unexpected \\\"\" + content + \"\\\" found.\", {\n            index: token[_tokenize.FIELDS.START_POS]\n          });\n      }\n\n      pos++;\n    }\n\n    unescapeProp(node, \"attribute\");\n    unescapeProp(node, \"namespace\");\n    this.newNode(new _attribute[\"default\"](node));\n    this.position++;\n  }\n  /**\n   * return a node containing meaningless garbage up to (but not including) the specified token position.\n   * if the token position is negative, all remaining tokens are consumed.\n   *\n   * This returns an array containing a single string node if all whitespace,\n   * otherwise an array of comment nodes with space before and after.\n   *\n   * These tokens are not added to the current selector, the caller can add them or use them to amend\n   * a previous node's space metadata.\n   *\n   * In lossy mode, this returns only comments.\n   */\n  ;\n\n  _proto.parseWhitespaceEquivalentTokens = function parseWhitespaceEquivalentTokens(stopPosition) {\n    if (stopPosition < 0) {\n      stopPosition = this.tokens.length;\n    }\n\n    var startPosition = this.position;\n    var nodes = [];\n    var space = \"\";\n    var lastComment = undefined;\n\n    do {\n      if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {\n        if (!this.options.lossy) {\n          space += this.content();\n        }\n      } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.comment) {\n        var spaces = {};\n\n        if (space) {\n          spaces.before = space;\n          space = \"\";\n        }\n\n        lastComment = new _comment[\"default\"]({\n          value: this.content(),\n          source: getTokenSource(this.currToken),\n          sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],\n          spaces: spaces\n        });\n        nodes.push(lastComment);\n      }\n    } while (++this.position < stopPosition);\n\n    if (space) {\n      if (lastComment) {\n        lastComment.spaces.after = space;\n      } else if (!this.options.lossy) {\n        var firstToken = this.tokens[startPosition];\n        var lastToken = this.tokens[this.position - 1];\n        nodes.push(new _string[\"default\"]({\n          value: '',\n          source: getSource(firstToken[_tokenize.FIELDS.START_LINE], firstToken[_tokenize.FIELDS.START_COL], lastToken[_tokenize.FIELDS.END_LINE], lastToken[_tokenize.FIELDS.END_COL]),\n          sourceIndex: firstToken[_tokenize.FIELDS.START_POS],\n          spaces: {\n            before: space,\n            after: ''\n          }\n        }));\n      }\n    }\n\n    return nodes;\n  }\n  /**\n   * \n   * @param {*} nodes \n   */\n  ;\n\n  _proto.convertWhitespaceNodesToSpace = function convertWhitespaceNodesToSpace(nodes, requiredSpace) {\n    var _this2 = this;\n\n    if (requiredSpace === void 0) {\n      requiredSpace = false;\n    }\n\n    var space = \"\";\n    var rawSpace = \"\";\n    nodes.forEach(function (n) {\n      var spaceBefore = _this2.lossySpace(n.spaces.before, requiredSpace);\n\n      var rawSpaceBefore = _this2.lossySpace(n.rawSpaceBefore, requiredSpace);\n\n      space += spaceBefore + _this2.lossySpace(n.spaces.after, requiredSpace && spaceBefore.length === 0);\n      rawSpace += spaceBefore + n.value + _this2.lossySpace(n.rawSpaceAfter, requiredSpace && rawSpaceBefore.length === 0);\n    });\n\n    if (rawSpace === space) {\n      rawSpace = undefined;\n    }\n\n    var result = {\n      space: space,\n      rawSpace: rawSpace\n    };\n    return result;\n  };\n\n  _proto.isNamedCombinator = function isNamedCombinator(position) {\n    if (position === void 0) {\n      position = this.position;\n    }\n\n    return this.tokens[position + 0] && this.tokens[position + 0][_tokenize.FIELDS.TYPE] === tokens.slash && this.tokens[position + 1] && this.tokens[position + 1][_tokenize.FIELDS.TYPE] === tokens.word && this.tokens[position + 2] && this.tokens[position + 2][_tokenize.FIELDS.TYPE] === tokens.slash;\n  };\n\n  _proto.namedCombinator = function namedCombinator() {\n    if (this.isNamedCombinator()) {\n      var nameRaw = this.content(this.tokens[this.position + 1]);\n      var name = (0, _util.unesc)(nameRaw).toLowerCase();\n      var raws = {};\n\n      if (name !== nameRaw) {\n        raws.value = \"/\" + nameRaw + \"/\";\n      }\n\n      var node = new _combinator[\"default\"]({\n        value: \"/\" + name + \"/\",\n        source: getSource(this.currToken[_tokenize.FIELDS.START_LINE], this.currToken[_tokenize.FIELDS.START_COL], this.tokens[this.position + 2][_tokenize.FIELDS.END_LINE], this.tokens[this.position + 2][_tokenize.FIELDS.END_COL]),\n        sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],\n        raws: raws\n      });\n      this.position = this.position + 3;\n      return node;\n    } else {\n      this.unexpected();\n    }\n  };\n\n  _proto.combinator = function combinator() {\n    var _this3 = this;\n\n    if (this.content() === '|') {\n      return this.namespace();\n    } // We need to decide between a space that's a descendant combinator and meaningless whitespace at the end of a selector.\n\n\n    var nextSigTokenPos = this.locateNextMeaningfulToken(this.position);\n\n    if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.comma) {\n      var nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);\n\n      if (nodes.length > 0) {\n        var last = this.current.last;\n\n        if (last) {\n          var _this$convertWhitespa = this.convertWhitespaceNodesToSpace(nodes),\n              space = _this$convertWhitespa.space,\n              rawSpace = _this$convertWhitespa.rawSpace;\n\n          if (rawSpace !== undefined) {\n            last.rawSpaceAfter += rawSpace;\n          }\n\n          last.spaces.after += space;\n        } else {\n          nodes.forEach(function (n) {\n            return _this3.newNode(n);\n          });\n        }\n      }\n\n      return;\n    }\n\n    var firstToken = this.currToken;\n    var spaceOrDescendantSelectorNodes = undefined;\n\n    if (nextSigTokenPos > this.position) {\n      spaceOrDescendantSelectorNodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);\n    }\n\n    var node;\n\n    if (this.isNamedCombinator()) {\n      node = this.namedCombinator();\n    } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.combinator) {\n      node = new _combinator[\"default\"]({\n        value: this.content(),\n        source: getTokenSource(this.currToken),\n        sourceIndex: this.currToken[_tokenize.FIELDS.START_POS]\n      });\n      this.position++;\n    } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {// pass\n    } else if (!spaceOrDescendantSelectorNodes) {\n      this.unexpected();\n    }\n\n    if (node) {\n      if (spaceOrDescendantSelectorNodes) {\n        var _this$convertWhitespa2 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes),\n            _space = _this$convertWhitespa2.space,\n            _rawSpace = _this$convertWhitespa2.rawSpace;\n\n        node.spaces.before = _space;\n        node.rawSpaceBefore = _rawSpace;\n      }\n    } else {\n      // descendant combinator\n      var _this$convertWhitespa3 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes, true),\n          _space2 = _this$convertWhitespa3.space,\n          _rawSpace2 = _this$convertWhitespa3.rawSpace;\n\n      if (!_rawSpace2) {\n        _rawSpace2 = _space2;\n      }\n\n      var spaces = {};\n      var raws = {\n        spaces: {}\n      };\n\n      if (_space2.endsWith(' ') && _rawSpace2.endsWith(' ')) {\n        spaces.before = _space2.slice(0, _space2.length - 1);\n        raws.spaces.before = _rawSpace2.slice(0, _rawSpace2.length - 1);\n      } else if (_space2.startsWith(' ') && _rawSpace2.startsWith(' ')) {\n        spaces.after = _space2.slice(1);\n        raws.spaces.after = _rawSpace2.slice(1);\n      } else {\n        raws.value = _rawSpace2;\n      }\n\n      node = new _combinator[\"default\"]({\n        value: ' ',\n        source: getTokenSourceSpan(firstToken, this.tokens[this.position - 1]),\n        sourceIndex: firstToken[_tokenize.FIELDS.START_POS],\n        spaces: spaces,\n        raws: raws\n      });\n    }\n\n    if (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.space) {\n      node.spaces.after = this.optionalSpace(this.content());\n      this.position++;\n    }\n\n    return this.newNode(node);\n  };\n\n  _proto.comma = function comma() {\n    if (this.position === this.tokens.length - 1) {\n      this.root.trailingComma = true;\n      this.position++;\n      return;\n    }\n\n    this.current._inferEndPosition();\n\n    var selector = new _selector[\"default\"]({\n      source: {\n        start: tokenStart(this.tokens[this.position + 1])\n      }\n    });\n    this.current.parent.append(selector);\n    this.current = selector;\n    this.position++;\n  };\n\n  _proto.comment = function comment() {\n    var current = this.currToken;\n    this.newNode(new _comment[\"default\"]({\n      value: this.content(),\n      source: getTokenSource(current),\n      sourceIndex: current[_tokenize.FIELDS.START_POS]\n    }));\n    this.position++;\n  };\n\n  _proto.error = function error(message, opts) {\n    throw this.root.error(message, opts);\n  };\n\n  _proto.missingBackslash = function missingBackslash() {\n    return this.error('Expected a backslash preceding the semicolon.', {\n      index: this.currToken[_tokenize.FIELDS.START_POS]\n    });\n  };\n\n  _proto.missingParenthesis = function missingParenthesis() {\n    return this.expected('opening parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);\n  };\n\n  _proto.missingSquareBracket = function missingSquareBracket() {\n    return this.expected('opening square bracket', this.currToken[_tokenize.FIELDS.START_POS]);\n  };\n\n  _proto.unexpected = function unexpected() {\n    return this.error(\"Unexpected '\" + this.content() + \"'. Escaping special characters with \\\\ may help.\", this.currToken[_tokenize.FIELDS.START_POS]);\n  };\n\n  _proto.namespace = function namespace() {\n    var before = this.prevToken && this.content(this.prevToken) || true;\n\n    if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.word) {\n      this.position++;\n      return this.word(before);\n    } else if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.asterisk) {\n      this.position++;\n      return this.universal(before);\n    }\n  };\n\n  _proto.nesting = function nesting() {\n    if (this.nextToken) {\n      var nextContent = this.content(this.nextToken);\n\n      if (nextContent === \"|\") {\n        this.position++;\n        return;\n      }\n    }\n\n    var current = this.currToken;\n    this.newNode(new _nesting[\"default\"]({\n      value: this.content(),\n      source: getTokenSource(current),\n      sourceIndex: current[_tokenize.FIELDS.START_POS]\n    }));\n    this.position++;\n  };\n\n  _proto.parentheses = function parentheses() {\n    var last = this.current.last;\n    var unbalanced = 1;\n    this.position++;\n\n    if (last && last.type === types.PSEUDO) {\n      var selector = new _selector[\"default\"]({\n        source: {\n          start: tokenStart(this.tokens[this.position - 1])\n        }\n      });\n      var cache = this.current;\n      last.append(selector);\n      this.current = selector;\n\n      while (this.position < this.tokens.length && unbalanced) {\n        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n          unbalanced++;\n        }\n\n        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n          unbalanced--;\n        }\n\n        if (unbalanced) {\n          this.parse();\n        } else {\n          this.current.source.end = tokenEnd(this.currToken);\n          this.current.parent.source.end = tokenEnd(this.currToken);\n          this.position++;\n        }\n      }\n\n      this.current = cache;\n    } else {\n      // I think this case should be an error. It's used to implement a basic parse of media queries\n      // but I don't think it's a good idea.\n      var parenStart = this.currToken;\n      var parenValue = \"(\";\n      var parenEnd;\n\n      while (this.position < this.tokens.length && unbalanced) {\n        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n          unbalanced++;\n        }\n\n        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n          unbalanced--;\n        }\n\n        parenEnd = this.currToken;\n        parenValue += this.parseParenthesisToken(this.currToken);\n        this.position++;\n      }\n\n      if (last) {\n        last.appendToPropertyAndEscape(\"value\", parenValue, parenValue);\n      } else {\n        this.newNode(new _string[\"default\"]({\n          value: parenValue,\n          source: getSource(parenStart[_tokenize.FIELDS.START_LINE], parenStart[_tokenize.FIELDS.START_COL], parenEnd[_tokenize.FIELDS.END_LINE], parenEnd[_tokenize.FIELDS.END_COL]),\n          sourceIndex: parenStart[_tokenize.FIELDS.START_POS]\n        }));\n      }\n    }\n\n    if (unbalanced) {\n      return this.expected('closing parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);\n    }\n  };\n\n  _proto.pseudo = function pseudo() {\n    var _this4 = this;\n\n    var pseudoStr = '';\n    var startingToken = this.currToken;\n\n    while (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.colon) {\n      pseudoStr += this.content();\n      this.position++;\n    }\n\n    if (!this.currToken) {\n      return this.expected(['pseudo-class', 'pseudo-element'], this.position - 1);\n    }\n\n    if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.word) {\n      this.splitWord(false, function (first, length) {\n        pseudoStr += first;\n\n        _this4.newNode(new _pseudo[\"default\"]({\n          value: pseudoStr,\n          source: getTokenSourceSpan(startingToken, _this4.currToken),\n          sourceIndex: startingToken[_tokenize.FIELDS.START_POS]\n        }));\n\n        if (length > 1 && _this4.nextToken && _this4.nextToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n          _this4.error('Misplaced parenthesis.', {\n            index: _this4.nextToken[_tokenize.FIELDS.START_POS]\n          });\n        }\n      });\n    } else {\n      return this.expected(['pseudo-class', 'pseudo-element'], this.currToken[_tokenize.FIELDS.START_POS]);\n    }\n  };\n\n  _proto.space = function space() {\n    var content = this.content(); // Handle space before and after the selector\n\n    if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function (node) {\n      return node.type === 'comment';\n    })) {\n      this.spaces = this.optionalSpace(content);\n      this.position++;\n    } else if (this.position === this.tokens.length - 1 || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n      this.current.last.spaces.after = this.optionalSpace(content);\n      this.position++;\n    } else {\n      this.combinator();\n    }\n  };\n\n  _proto.string = function string() {\n    var current = this.currToken;\n    this.newNode(new _string[\"default\"]({\n      value: this.content(),\n      source: getTokenSource(current),\n      sourceIndex: current[_tokenize.FIELDS.START_POS]\n    }));\n    this.position++;\n  };\n\n  _proto.universal = function universal(namespace) {\n    var nextToken = this.nextToken;\n\n    if (nextToken && this.content(nextToken) === '|') {\n      this.position++;\n      return this.namespace();\n    }\n\n    var current = this.currToken;\n    this.newNode(new _universal[\"default\"]({\n      value: this.content(),\n      source: getTokenSource(current),\n      sourceIndex: current[_tokenize.FIELDS.START_POS]\n    }), namespace);\n    this.position++;\n  };\n\n  _proto.splitWord = function splitWord(namespace, firstCallback) {\n    var _this5 = this;\n\n    var nextToken = this.nextToken;\n    var word = this.content();\n\n    while (nextToken && ~[tokens.dollar, tokens.caret, tokens.equals, tokens.word].indexOf(nextToken[_tokenize.FIELDS.TYPE])) {\n      this.position++;\n      var current = this.content();\n      word += current;\n\n      if (current.lastIndexOf('\\\\') === current.length - 1) {\n        var next = this.nextToken;\n\n        if (next && next[_tokenize.FIELDS.TYPE] === tokens.space) {\n          word += this.requiredSpace(this.content(next));\n          this.position++;\n        }\n      }\n\n      nextToken = this.nextToken;\n    }\n\n    var hasClass = indexesOf(word, '.').filter(function (i) {\n      // Allow escaped dot within class name\n      var escapedDot = word[i - 1] === '\\\\'; // Allow decimal numbers percent in @keyframes\n\n      var isKeyframesPercent = /^\\d+\\.\\d+%$/.test(word);\n      return !escapedDot && !isKeyframesPercent;\n    });\n    var hasId = indexesOf(word, '#').filter(function (i) {\n      return word[i - 1] !== '\\\\';\n    }); // Eliminate Sass interpolations from the list of id indexes\n\n    var interpolations = indexesOf(word, '#{');\n\n    if (interpolations.length) {\n      hasId = hasId.filter(function (hashIndex) {\n        return !~interpolations.indexOf(hashIndex);\n      });\n    }\n\n    var indices = (0, _sortAscending[\"default\"])(uniqs([0].concat(hasClass, hasId)));\n    indices.forEach(function (ind, i) {\n      var index = indices[i + 1] || word.length;\n      var value = word.slice(ind, index);\n\n      if (i === 0 && firstCallback) {\n        return firstCallback.call(_this5, value, indices.length);\n      }\n\n      var node;\n      var current = _this5.currToken;\n      var sourceIndex = current[_tokenize.FIELDS.START_POS] + indices[i];\n      var source = getSource(current[1], current[2] + ind, current[3], current[2] + (index - 1));\n\n      if (~hasClass.indexOf(ind)) {\n        var classNameOpts = {\n          value: value.slice(1),\n          source: source,\n          sourceIndex: sourceIndex\n        };\n        node = new _className[\"default\"](unescapeProp(classNameOpts, \"value\"));\n      } else if (~hasId.indexOf(ind)) {\n        var idOpts = {\n          value: value.slice(1),\n          source: source,\n          sourceIndex: sourceIndex\n        };\n        node = new _id[\"default\"](unescapeProp(idOpts, \"value\"));\n      } else {\n        var tagOpts = {\n          value: value,\n          source: source,\n          sourceIndex: sourceIndex\n        };\n        unescapeProp(tagOpts, \"value\");\n        node = new _tag[\"default\"](tagOpts);\n      }\n\n      _this5.newNode(node, namespace); // Ensure that the namespace is used only once\n\n\n      namespace = null;\n    });\n    this.position++;\n  };\n\n  _proto.word = function word(namespace) {\n    var nextToken = this.nextToken;\n\n    if (nextToken && this.content(nextToken) === '|') {\n      this.position++;\n      return this.namespace();\n    }\n\n    return this.splitWord(namespace);\n  };\n\n  _proto.loop = function loop() {\n    while (this.position < this.tokens.length) {\n      this.parse(true);\n    }\n\n    this.current._inferEndPosition();\n\n    return this.root;\n  };\n\n  _proto.parse = function parse(throwOnParenthesis) {\n    switch (this.currToken[_tokenize.FIELDS.TYPE]) {\n      case tokens.space:\n        this.space();\n        break;\n\n      case tokens.comment:\n        this.comment();\n        break;\n\n      case tokens.openParenthesis:\n        this.parentheses();\n        break;\n\n      case tokens.closeParenthesis:\n        if (throwOnParenthesis) {\n          this.missingParenthesis();\n        }\n\n        break;\n\n      case tokens.openSquare:\n        this.attribute();\n        break;\n\n      case tokens.dollar:\n      case tokens.caret:\n      case tokens.equals:\n      case tokens.word:\n        this.word();\n        break;\n\n      case tokens.colon:\n        this.pseudo();\n        break;\n\n      case tokens.comma:\n        this.comma();\n        break;\n\n      case tokens.asterisk:\n        this.universal();\n        break;\n\n      case tokens.ampersand:\n        this.nesting();\n        break;\n\n      case tokens.slash:\n      case tokens.combinator:\n        this.combinator();\n        break;\n\n      case tokens.str:\n        this.string();\n        break;\n      // These cases throw; no break needed.\n\n      case tokens.closeSquare:\n        this.missingSquareBracket();\n\n      case tokens.semicolon:\n        this.missingBackslash();\n\n      default:\n        this.unexpected();\n    }\n  }\n  /**\n   * Helpers\n   */\n  ;\n\n  _proto.expected = function expected(description, index, found) {\n    if (Array.isArray(description)) {\n      var last = description.pop();\n      description = description.join(', ') + \" or \" + last;\n    }\n\n    var an = /^[aeiou]/.test(description[0]) ? 'an' : 'a';\n\n    if (!found) {\n      return this.error(\"Expected \" + an + \" \" + description + \".\", {\n        index: index\n      });\n    }\n\n    return this.error(\"Expected \" + an + \" \" + description + \", found \\\"\" + found + \"\\\" instead.\", {\n      index: index\n    });\n  };\n\n  _proto.requiredSpace = function requiredSpace(space) {\n    return this.options.lossy ? ' ' : space;\n  };\n\n  _proto.optionalSpace = function optionalSpace(space) {\n    return this.options.lossy ? '' : space;\n  };\n\n  _proto.lossySpace = function lossySpace(space, required) {\n    if (this.options.lossy) {\n      return required ? ' ' : '';\n    } else {\n      return space;\n    }\n  };\n\n  _proto.parseParenthesisToken = function parseParenthesisToken(token) {\n    var content = this.content(token);\n\n    if (token[_tokenize.FIELDS.TYPE] === tokens.space) {\n      return this.requiredSpace(content);\n    } else {\n      return content;\n    }\n  };\n\n  _proto.newNode = function newNode(node, namespace) {\n    if (namespace) {\n      if (/^ +$/.test(namespace)) {\n        if (!this.options.lossy) {\n          this.spaces = (this.spaces || '') + namespace;\n        }\n\n        namespace = true;\n      }\n\n      node.namespace = namespace;\n      unescapeProp(node, \"namespace\");\n    }\n\n    if (this.spaces) {\n      node.spaces.before = this.spaces;\n      this.spaces = '';\n    }\n\n    return this.current.append(node);\n  };\n\n  _proto.content = function content(token) {\n    if (token === void 0) {\n      token = this.currToken;\n    }\n\n    return this.css.slice(token[_tokenize.FIELDS.START_POS], token[_tokenize.FIELDS.END_POS]);\n  };\n\n  /**\n   * returns the index of the next non-whitespace, non-comment token.\n   * returns -1 if no meaningful token is found.\n   */\n  _proto.locateNextMeaningfulToken = function locateNextMeaningfulToken(startPosition) {\n    if (startPosition === void 0) {\n      startPosition = this.position + 1;\n    }\n\n    var searchPosition = startPosition;\n\n    while (searchPosition < this.tokens.length) {\n      if (WHITESPACE_EQUIV_TOKENS[this.tokens[searchPosition][_tokenize.FIELDS.TYPE]]) {\n        searchPosition++;\n        continue;\n      } else {\n        return searchPosition;\n      }\n    }\n\n    return -1;\n  };\n\n  _createClass(Parser, [{\n    key: \"currToken\",\n    get: function get() {\n      return this.tokens[this.position];\n    }\n  }, {\n    key: \"nextToken\",\n    get: function get() {\n      return this.tokens[this.position + 1];\n    }\n  }, {\n    key: \"prevToken\",\n    get: function get() {\n      return this.tokens[this.position - 1];\n    }\n  }]);\n\n  return Parser;\n}();\n\nexports[\"default\"] = Parser;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _parser = _interopRequireDefault(require(\"./parser\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Processor = /*#__PURE__*/function () {\n  function Processor(func, options) {\n    this.func = func || function noop() {};\n\n    this.funcRes = null;\n    this.options = options;\n  }\n\n  var _proto = Processor.prototype;\n\n  _proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var merged = Object.assign({}, this.options, options);\n\n    if (merged.updateSelector === false) {\n      return false;\n    } else {\n      return typeof rule !== \"string\";\n    }\n  };\n\n  _proto._isLossy = function _isLossy(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var merged = Object.assign({}, this.options, options);\n\n    if (merged.lossless === false) {\n      return true;\n    } else {\n      return false;\n    }\n  };\n\n  _proto._root = function _root(rule, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var parser = new _parser[\"default\"](rule, this._parseOptions(options));\n    return parser.root;\n  };\n\n  _proto._parseOptions = function _parseOptions(options) {\n    return {\n      lossy: this._isLossy(options)\n    };\n  };\n\n  _proto._run = function _run(rule, options) {\n    var _this = this;\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    return new Promise(function (resolve, reject) {\n      try {\n        var root = _this._root(rule, options);\n\n        Promise.resolve(_this.func(root)).then(function (transform) {\n          var string = undefined;\n\n          if (_this._shouldUpdateSelector(rule, options)) {\n            string = root.toString();\n            rule.selector = string;\n          }\n\n          return {\n            transform: transform,\n            root: root,\n            string: string\n          };\n        }).then(resolve, reject);\n      } catch (e) {\n        reject(e);\n        return;\n      }\n    });\n  };\n\n  _proto._runSync = function _runSync(rule, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var root = this._root(rule, options);\n\n    var transform = this.func(root);\n\n    if (transform && typeof transform.then === \"function\") {\n      throw new Error(\"Selector processor returned a promise to a synchronous call.\");\n    }\n\n    var string = undefined;\n\n    if (options.updateSelector && typeof rule !== \"string\") {\n      string = root.toString();\n      rule.selector = string;\n    }\n\n    return {\n      transform: transform,\n      root: root,\n      string: string\n    };\n  }\n  /**\n   * Process rule into a selector AST.\n   *\n   * @param rule {postcss.Rule | string} The css selector to be processed\n   * @param options The options for processing\n   * @returns {Promise<parser.Root>} The AST of the selector after processing it.\n   */\n  ;\n\n  _proto.ast = function ast(rule, options) {\n    return this._run(rule, options).then(function (result) {\n      return result.root;\n    });\n  }\n  /**\n   * Process rule into a selector AST synchronously.\n   *\n   * @param rule {postcss.Rule | string} The css selector to be processed\n   * @param options The options for processing\n   * @returns {parser.Root} The AST of the selector after processing it.\n   */\n  ;\n\n  _proto.astSync = function astSync(rule, options) {\n    return this._runSync(rule, options).root;\n  }\n  /**\n   * Process a selector into a transformed value asynchronously\n   *\n   * @param rule {postcss.Rule | string} The css selector to be processed\n   * @param options The options for processing\n   * @returns {Promise<any>} The value returned by the processor.\n   */\n  ;\n\n  _proto.transform = function transform(rule, options) {\n    return this._run(rule, options).then(function (result) {\n      return result.transform;\n    });\n  }\n  /**\n   * Process a selector into a transformed value synchronously.\n   *\n   * @param rule {postcss.Rule | string} The css selector to be processed\n   * @param options The options for processing\n   * @returns {any} The value returned by the processor.\n   */\n  ;\n\n  _proto.transformSync = function transformSync(rule, options) {\n    return this._runSync(rule, options).transform;\n  }\n  /**\n   * Process a selector into a new selector string asynchronously.\n   *\n   * @param rule {postcss.Rule | string} The css selector to be processed\n   * @param options The options for processing\n   * @returns {string} the selector after processing.\n   */\n  ;\n\n  _proto.process = function process(rule, options) {\n    return this._run(rule, options).then(function (result) {\n      return result.string || result.root.toString();\n    });\n  }\n  /**\n   * Process a selector into a new selector string synchronously.\n   *\n   * @param rule {postcss.Rule | string} The css selector to be processed\n   * @param options The options for processing\n   * @returns {string} the selector after processing.\n   */\n  ;\n\n  _proto.processSync = function processSync(rule, options) {\n    var result = this._runSync(rule, options);\n\n    return result.string || result.root.toString();\n  };\n\n  return Processor;\n}();\n\nexports[\"default\"] = Processor;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports.universal = exports.tag = exports.string = exports.selector = exports.root = exports.pseudo = exports.nesting = exports.id = exports.comment = exports.combinator = exports.className = exports.attribute = void 0;\n\nvar _attribute = _interopRequireDefault(require(\"./attribute\"));\n\nvar _className = _interopRequireDefault(require(\"./className\"));\n\nvar _combinator = _interopRequireDefault(require(\"./combinator\"));\n\nvar _comment = _interopRequireDefault(require(\"./comment\"));\n\nvar _id = _interopRequireDefault(require(\"./id\"));\n\nvar _nesting = _interopRequireDefault(require(\"./nesting\"));\n\nvar _pseudo = _interopRequireDefault(require(\"./pseudo\"));\n\nvar _root = _interopRequireDefault(require(\"./root\"));\n\nvar _selector = _interopRequireDefault(require(\"./selector\"));\n\nvar _string = _interopRequireDefault(require(\"./string\"));\n\nvar _tag = _interopRequireDefault(require(\"./tag\"));\n\nvar _universal = _interopRequireDefault(require(\"./universal\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar attribute = function attribute(opts) {\n  return new _attribute[\"default\"](opts);\n};\n\nexports.attribute = attribute;\n\nvar className = function className(opts) {\n  return new _className[\"default\"](opts);\n};\n\nexports.className = className;\n\nvar combinator = function combinator(opts) {\n  return new _combinator[\"default\"](opts);\n};\n\nexports.combinator = combinator;\n\nvar comment = function comment(opts) {\n  return new _comment[\"default\"](opts);\n};\n\nexports.comment = comment;\n\nvar id = function id(opts) {\n  return new _id[\"default\"](opts);\n};\n\nexports.id = id;\n\nvar nesting = function nesting(opts) {\n  return new _nesting[\"default\"](opts);\n};\n\nexports.nesting = nesting;\n\nvar pseudo = function pseudo(opts) {\n  return new _pseudo[\"default\"](opts);\n};\n\nexports.pseudo = pseudo;\n\nvar root = function root(opts) {\n  return new _root[\"default\"](opts);\n};\n\nexports.root = root;\n\nvar selector = function selector(opts) {\n  return new _selector[\"default\"](opts);\n};\n\nexports.selector = selector;\n\nvar string = function string(opts) {\n  return new _string[\"default\"](opts);\n};\n\nexports.string = string;\n\nvar tag = function tag(opts) {\n  return new _tag[\"default\"](opts);\n};\n\nexports.tag = tag;\n\nvar universal = function universal(opts) {\n  return new _universal[\"default\"](opts);\n};\n\nexports.universal = universal;","\"use strict\";\n\nexports.__esModule = true;\nexports.isNode = isNode;\nexports.isPseudoElement = isPseudoElement;\nexports.isPseudoClass = isPseudoClass;\nexports.isContainer = isContainer;\nexports.isNamespace = isNamespace;\nexports.isUniversal = exports.isTag = exports.isString = exports.isSelector = exports.isRoot = exports.isPseudo = exports.isNesting = exports.isIdentifier = exports.isComment = exports.isCombinator = exports.isClassName = exports.isAttribute = void 0;\n\nvar _types = require(\"./types\");\n\nvar _IS_TYPE;\n\nvar IS_TYPE = (_IS_TYPE = {}, _IS_TYPE[_types.ATTRIBUTE] = true, _IS_TYPE[_types.CLASS] = true, _IS_TYPE[_types.COMBINATOR] = true, _IS_TYPE[_types.COMMENT] = true, _IS_TYPE[_types.ID] = true, _IS_TYPE[_types.NESTING] = true, _IS_TYPE[_types.PSEUDO] = true, _IS_TYPE[_types.ROOT] = true, _IS_TYPE[_types.SELECTOR] = true, _IS_TYPE[_types.STRING] = true, _IS_TYPE[_types.TAG] = true, _IS_TYPE[_types.UNIVERSAL] = true, _IS_TYPE);\n\nfunction isNode(node) {\n  return typeof node === \"object\" && IS_TYPE[node.type];\n}\n\nfunction isNodeType(type, node) {\n  return isNode(node) && node.type === type;\n}\n\nvar isAttribute = isNodeType.bind(null, _types.ATTRIBUTE);\nexports.isAttribute = isAttribute;\nvar isClassName = isNodeType.bind(null, _types.CLASS);\nexports.isClassName = isClassName;\nvar isCombinator = isNodeType.bind(null, _types.COMBINATOR);\nexports.isCombinator = isCombinator;\nvar isComment = isNodeType.bind(null, _types.COMMENT);\nexports.isComment = isComment;\nvar isIdentifier = isNodeType.bind(null, _types.ID);\nexports.isIdentifier = isIdentifier;\nvar isNesting = isNodeType.bind(null, _types.NESTING);\nexports.isNesting = isNesting;\nvar isPseudo = isNodeType.bind(null, _types.PSEUDO);\nexports.isPseudo = isPseudo;\nvar isRoot = isNodeType.bind(null, _types.ROOT);\nexports.isRoot = isRoot;\nvar isSelector = isNodeType.bind(null, _types.SELECTOR);\nexports.isSelector = isSelector;\nvar isString = isNodeType.bind(null, _types.STRING);\nexports.isString = isString;\nvar isTag = isNodeType.bind(null, _types.TAG);\nexports.isTag = isTag;\nvar isUniversal = isNodeType.bind(null, _types.UNIVERSAL);\nexports.isUniversal = isUniversal;\n\nfunction isPseudoElement(node) {\n  return isPseudo(node) && node.value && (node.value.startsWith(\"::\") || node.value.toLowerCase() === \":before\" || node.value.toLowerCase() === \":after\" || node.value.toLowerCase() === \":first-letter\" || node.value.toLowerCase() === \":first-line\");\n}\n\nfunction isPseudoClass(node) {\n  return isPseudo(node) && !isPseudoElement(node);\n}\n\nfunction isContainer(node) {\n  return !!(isNode(node) && node.walk);\n}\n\nfunction isNamespace(node) {\n  return isAttribute(node) || isTag(node);\n}","\"use strict\";\n\nexports.__esModule = true;\n\nvar _types = require(\"./types\");\n\nObject.keys(_types).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (key in exports && exports[key] === _types[key]) return;\n  exports[key] = _types[key];\n});\n\nvar _constructors = require(\"./constructors\");\n\nObject.keys(_constructors).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (key in exports && exports[key] === _constructors[key]) return;\n  exports[key] = _constructors[key];\n});\n\nvar _guards = require(\"./guards\");\n\nObject.keys(_guards).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  if (key in exports && exports[key] === _guards[key]) return;\n  exports[key] = _guards[key];\n});","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _processor = _interopRequireDefault(require(\"./processor\"));\n\nvar selectors = _interopRequireWildcard(require(\"./selectors\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar parser = function parser(processor) {\n  return new _processor[\"default\"](processor);\n};\n\nObject.assign(parser, selectors);\ndelete parser.__esModule;\nvar _default = parser;\nexports[\"default\"] = _default;\nmodule.exports = exports.default;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>escapeCommas\n});\nfunction escapeCommas(className) {\n    return className.replace(/\\\\,/g, \"\\\\2c \");\n}\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    parseColor: ()=>parseColor,\n    formatColor: ()=>formatColor\n});\nconst _colorName = /*#__PURE__*/ _interopRequireDefault(require(\"color-name\"));\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nlet HEX = /^#([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i;\nlet SHORT_HEX = /^#([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])?$/i;\nlet VALUE = /(?:\\d+|\\d*\\.\\d+)%?/;\nlet SEP = /(?:\\s*,\\s*|\\s+)/;\nlet ALPHA_SEP = /\\s*[,/]\\s*/;\nlet CUSTOM_PROPERTY = /var\\(--(?:[^ )]*?)\\)/;\nlet RGB = new RegExp(`^(rgb)a?\\\\(\\\\s*(${VALUE.source}|${CUSTOM_PROPERTY.source})(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${ALPHA_SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?\\\\s*\\\\)$`);\nlet HSL = new RegExp(`^(hsl)a?\\\\(\\\\s*((?:${VALUE.source})(?:deg|rad|grad|turn)?|${CUSTOM_PROPERTY.source})(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${ALPHA_SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?\\\\s*\\\\)$`);\nfunction parseColor(value, { loose =false  } = {}) {\n    var ref, ref1;\n    if (typeof value !== \"string\") {\n        return null;\n    }\n    value = value.trim();\n    if (value === \"transparent\") {\n        return {\n            mode: \"rgb\",\n            color: [\n                \"0\",\n                \"0\",\n                \"0\"\n            ],\n            alpha: \"0\"\n        };\n    }\n    if (value in _colorName.default) {\n        return {\n            mode: \"rgb\",\n            color: _colorName.default[value].map((v)=>v.toString())\n        };\n    }\n    let hex = value.replace(SHORT_HEX, (_, r, g, b, a)=>[\n            \"#\",\n            r,\n            r,\n            g,\n            g,\n            b,\n            b,\n            a ? a + a : \"\"\n        ].join(\"\")).match(HEX);\n    if (hex !== null) {\n        return {\n            mode: \"rgb\",\n            color: [\n                parseInt(hex[1], 16),\n                parseInt(hex[2], 16),\n                parseInt(hex[3], 16)\n            ].map((v)=>v.toString()),\n            alpha: hex[4] ? (parseInt(hex[4], 16) / 255).toString() : undefined\n        };\n    }\n    var ref2;\n    let match = (ref2 = value.match(RGB)) !== null && ref2 !== void 0 ? ref2 : value.match(HSL);\n    if (match === null) {\n        return null;\n    }\n    let color = [\n        match[2],\n        match[3],\n        match[4]\n    ].filter(Boolean).map((v)=>v.toString());\n    if (!loose && color.length !== 3) {\n        return null;\n    }\n    if (color.length < 3 && !color.some((part)=>/^var\\(.*?\\)$/.test(part))) {\n        return null;\n    }\n    return {\n        mode: match[1],\n        color,\n        alpha: (ref = match[5]) === null || ref === void 0 ? void 0 : (ref1 = ref.toString) === null || ref1 === void 0 ? void 0 : ref1.call(ref)\n    };\n}\nfunction formatColor({ mode , color , alpha  }) {\n    let hasAlpha = alpha !== undefined;\n    return `${mode}(${color.join(\" \")}${hasAlpha ? ` / ${alpha}` : \"\"})`;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    withAlphaValue: ()=>withAlphaValue,\n    default: ()=>withAlphaVariable\n});\nconst _color = require(\"./color\");\nfunction withAlphaValue(color, alphaValue, defaultValue) {\n    if (typeof color === \"function\") {\n        return color({\n            opacityValue: alphaValue\n        });\n    }\n    let parsed = (0, _color.parseColor)(color, {\n        loose: true\n    });\n    if (parsed === null) {\n        return defaultValue;\n    }\n    return (0, _color.formatColor)({\n        ...parsed,\n        alpha: alphaValue\n    });\n}\nfunction withAlphaVariable({ color , property , variable  }) {\n    let properties = [].concat(property);\n    if (typeof color === \"function\") {\n        return {\n            [variable]: \"1\",\n            ...Object.fromEntries(properties.map((p)=>{\n                return [\n                    p,\n                    color({\n                        opacityVariable: variable,\n                        opacityValue: `var(${variable})`\n                    })\n                ];\n            }))\n        };\n    }\n    const parsed = (0, _color.parseColor)(color);\n    if (parsed === null) {\n        return Object.fromEntries(properties.map((p)=>[\n                p,\n                color\n            ]));\n    }\n    if (parsed.alpha !== undefined) {\n        // Has an alpha value, return color as-is\n        return Object.fromEntries(properties.map((p)=>[\n                p,\n                color\n            ]));\n    }\n    return {\n        [variable]: \"1\",\n        ...Object.fromEntries(properties.map((p)=>{\n            return [\n                p,\n                (0, _color.formatColor)({\n                    ...parsed,\n                    alpha: `var(${variable})`\n                })\n            ];\n        }))\n    };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    pattern: ()=>pattern,\n    withoutCapturing: ()=>withoutCapturing,\n    any: ()=>any,\n    optional: ()=>optional,\n    zeroOrMore: ()=>zeroOrMore,\n    nestedBrackets: ()=>nestedBrackets,\n    escape: ()=>escape\n});\nconst REGEX_SPECIAL = /[\\\\^$.*+?()[\\]{}|]/g;\nconst REGEX_HAS_SPECIAL = RegExp(REGEX_SPECIAL.source);\n/**\n * @param {string|RegExp|Array<string|RegExp>} source\n */ function toSource(source) {\n    source = Array.isArray(source) ? source : [\n        source\n    ];\n    source = source.map((item)=>item instanceof RegExp ? item.source : item);\n    return source.join(\"\");\n}\nfunction pattern(source) {\n    return new RegExp(toSource(source), \"g\");\n}\nfunction withoutCapturing(source) {\n    return new RegExp(`(?:${toSource(source)})`, \"g\");\n}\nfunction any(sources) {\n    return `(?:${sources.map(toSource).join(\"|\")})`;\n}\nfunction optional(source) {\n    return `(?:${toSource(source)})?`;\n}\nfunction zeroOrMore(source) {\n    return `(?:${toSource(source)})*`;\n}\nfunction nestedBrackets(open, close, depth = 1) {\n    return withoutCapturing([\n        escape(open),\n        /[^\\s]*/,\n        depth === 1 ? `[^${escape(open)}${escape(close)}\\s]*` : any([\n            `[^${escape(open)}${escape(close)}\\s]*`,\n            nestedBrackets(open, close, depth - 1)\n        ]),\n        /[^\\s]*/,\n        escape(close), \n    ]);\n}\nfunction escape(string) {\n    return string && REGEX_HAS_SPECIAL.test(string) ? string.replace(REGEX_SPECIAL, \"\\\\$&\") : string || \"\";\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"splitAtTopLevelOnly\", {\n    enumerable: true,\n    get: ()=>splitAtTopLevelOnly\n});\nconst _regex = /*#__PURE__*/ _interopRequireWildcard(require(\"../lib/regex\"));\nfunction _getRequireWildcardCache(nodeInterop) {\n    if (typeof WeakMap !== \"function\") return null;\n    var cacheBabelInterop = new WeakMap();\n    var cacheNodeInterop = new WeakMap();\n    return (_getRequireWildcardCache = function(nodeInterop) {\n        return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n    })(nodeInterop);\n}\nfunction _interopRequireWildcard(obj, nodeInterop) {\n    if (!nodeInterop && obj && obj.__esModule) {\n        return obj;\n    }\n    if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n        return {\n            default: obj\n        };\n    }\n    var cache = _getRequireWildcardCache(nodeInterop);\n    if (cache && cache.has(obj)) {\n        return cache.get(obj);\n    }\n    var newObj = {};\n    var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n    for(var key in obj){\n        if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n            var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n            if (desc && (desc.get || desc.set)) {\n                Object.defineProperty(newObj, key, desc);\n            } else {\n                newObj[key] = obj[key];\n            }\n        }\n    }\n    newObj.default = obj;\n    if (cache) {\n        cache.set(obj, newObj);\n    }\n    return newObj;\n}\nfunction* splitAtTopLevelOnly(input, separator) {\n    let SPECIALS = new RegExp(`[(){}\\\\[\\\\]${_regex.escape(separator)}]`, \"g\");\n    let depth = 0;\n    let lastIndex = 0;\n    let found = false;\n    let separatorIndex = 0;\n    let separatorStart = 0;\n    let separatorLength = separator.length;\n    // Find all paren-like things & character\n    // And only split on commas if they're top-level\n    for (let match of input.matchAll(SPECIALS)){\n        let matchesSeparator = match[0] === separator[separatorIndex];\n        let atEndOfSeparator = separatorIndex === separatorLength - 1;\n        let matchesFullSeparator = matchesSeparator && atEndOfSeparator;\n        if (match[0] === \"(\") depth++;\n        if (match[0] === \")\") depth--;\n        if (match[0] === \"[\") depth++;\n        if (match[0] === \"]\") depth--;\n        if (match[0] === \"{\") depth++;\n        if (match[0] === \"}\") depth--;\n        if (matchesSeparator && depth === 0) {\n            if (separatorStart === 0) {\n                separatorStart = match.index;\n            }\n            separatorIndex++;\n        }\n        if (matchesFullSeparator && depth === 0) {\n            found = true;\n            yield input.substring(lastIndex, separatorStart);\n            lastIndex = separatorStart + separatorLength;\n        }\n        if (separatorIndex === separatorLength) {\n            separatorIndex = 0;\n            separatorStart = 0;\n        }\n    }\n    // Provide the last segment of the string if available\n    // Otherwise the whole string since no `char`s were found\n    // This mirrors the behavior of string.split()\n    if (found) {\n        yield input.substring(lastIndex);\n    } else {\n        yield input;\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    parseBoxShadowValue: ()=>parseBoxShadowValue,\n    formatBoxShadowValue: ()=>formatBoxShadowValue\n});\nconst _splitAtTopLevelOnly = require(\"./splitAtTopLevelOnly\");\nlet KEYWORDS = new Set([\n    \"inset\",\n    \"inherit\",\n    \"initial\",\n    \"revert\",\n    \"unset\"\n]);\nlet SPACE = /\\ +(?![^(]*\\))/g // Similar to the one above, but with spaces instead.\n;\nlet LENGTH = /^-?(\\d+|\\.\\d+)(.*?)$/g;\nfunction parseBoxShadowValue(input) {\n    let shadows = Array.from((0, _splitAtTopLevelOnly.splitAtTopLevelOnly)(input, \",\"));\n    return shadows.map((shadow)=>{\n        let value = shadow.trim();\n        let result = {\n            raw: value\n        };\n        let parts = value.split(SPACE);\n        let seen = new Set();\n        for (let part of parts){\n            // Reset index, since the regex is stateful.\n            LENGTH.lastIndex = 0;\n            // Keyword\n            if (!seen.has(\"KEYWORD\") && KEYWORDS.has(part)) {\n                result.keyword = part;\n                seen.add(\"KEYWORD\");\n            } else if (LENGTH.test(part)) {\n                if (!seen.has(\"X\")) {\n                    result.x = part;\n                    seen.add(\"X\");\n                } else if (!seen.has(\"Y\")) {\n                    result.y = part;\n                    seen.add(\"Y\");\n                } else if (!seen.has(\"BLUR\")) {\n                    result.blur = part;\n                    seen.add(\"BLUR\");\n                } else if (!seen.has(\"SPREAD\")) {\n                    result.spread = part;\n                    seen.add(\"SPREAD\");\n                }\n            } else {\n                if (!result.color) {\n                    result.color = part;\n                } else {\n                    if (!result.unknown) result.unknown = [];\n                    result.unknown.push(part);\n                }\n            }\n        }\n        // Check if valid\n        result.valid = result.x !== undefined && result.y !== undefined;\n        return result;\n    });\n}\nfunction formatBoxShadowValue(shadows) {\n    return shadows.map((shadow)=>{\n        if (!shadow.valid) {\n            return shadow.raw;\n        }\n        return [\n            shadow.keyword,\n            shadow.x,\n            shadow.y,\n            shadow.blur,\n            shadow.spread,\n            shadow.color\n        ].filter(Boolean).join(\" \");\n    }).join(\", \");\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    normalize: ()=>normalize,\n    url: ()=>url,\n    number: ()=>number,\n    percentage: ()=>percentage,\n    length: ()=>length,\n    lineWidth: ()=>lineWidth,\n    shadow: ()=>shadow,\n    color: ()=>color,\n    image: ()=>image,\n    gradient: ()=>gradient,\n    position: ()=>position,\n    familyName: ()=>familyName,\n    genericName: ()=>genericName,\n    absoluteSize: ()=>absoluteSize,\n    relativeSize: ()=>relativeSize\n});\nconst _color = require(\"./color\");\nconst _parseBoxShadowValue = require(\"./parseBoxShadowValue\");\nlet cssFunctions = [\n    \"min\",\n    \"max\",\n    \"clamp\",\n    \"calc\"\n];\n// Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Types\nlet COMMA = /,(?![^(]*\\))/g // Comma separator that is not located between brackets. E.g.: `cubiz-bezier(a, b, c)` these don't count.\n;\nlet UNDERSCORE = /_(?![^(]*\\))/g // Underscore separator that is not located between brackets. E.g.: `rgba(255,_255,_255)_black` these don't count.\n;\nfunction normalize(value, isRoot = true) {\n    // Keep raw strings if it starts with `url(`\n    if (value.includes(\"url(\")) {\n        return value.split(/(url\\(.*?\\))/g).filter(Boolean).map((part)=>{\n            if (/^url\\(.*?\\)$/.test(part)) {\n                return part;\n            }\n            return normalize(part, false);\n        }).join(\"\");\n    }\n    // Convert `_` to ` `, except for escaped underscores `\\_`\n    value = value.replace(/([^\\\\])_+/g, (fullMatch, characterBefore)=>characterBefore + \" \".repeat(fullMatch.length - 1)).replace(/^_/g, \" \").replace(/\\\\_/g, \"_\");\n    // Remove leftover whitespace\n    if (isRoot) {\n        value = value.trim();\n    }\n    // Add spaces around operators inside math functions like calc() that do not follow an operator\n    // or '('.\n    value = value.replace(/(calc|min|max|clamp)\\(.+\\)/g, (match)=>{\n        return match.replace(/(-?\\d*\\.?\\d(?!\\b-.+[,)](?![^+\\-/*])\\D)(?:%|[a-z]+)?|\\))([+\\-/*])/g, \"$1 $2 \");\n    });\n    return value;\n}\nfunction url(value) {\n    return value.startsWith(\"url(\");\n}\nfunction number(value) {\n    return !isNaN(Number(value)) || cssFunctions.some((fn)=>new RegExp(`^${fn}\\\\(.+?`).test(value));\n}\nfunction percentage(value) {\n    return value.split(UNDERSCORE).every((part)=>{\n        return /%$/g.test(part) || cssFunctions.some((fn)=>new RegExp(`^${fn}\\\\(.+?%`).test(part));\n    });\n}\nlet lengthUnits = [\n    \"cm\",\n    \"mm\",\n    \"Q\",\n    \"in\",\n    \"pc\",\n    \"pt\",\n    \"px\",\n    \"em\",\n    \"ex\",\n    \"ch\",\n    \"rem\",\n    \"lh\",\n    \"vw\",\n    \"vh\",\n    \"vmin\",\n    \"vmax\", \n];\nlet lengthUnitsPattern = `(?:${lengthUnits.join(\"|\")})`;\nfunction length(value) {\n    return value.split(UNDERSCORE).every((part)=>{\n        return part === \"0\" || new RegExp(`${lengthUnitsPattern}$`).test(part) || cssFunctions.some((fn)=>new RegExp(`^${fn}\\\\(.+?${lengthUnitsPattern}`).test(part));\n    });\n}\nlet lineWidths = new Set([\n    \"thin\",\n    \"medium\",\n    \"thick\"\n]);\nfunction lineWidth(value) {\n    return lineWidths.has(value);\n}\nfunction shadow(value) {\n    let parsedShadows = (0, _parseBoxShadowValue.parseBoxShadowValue)(normalize(value));\n    for (let parsedShadow of parsedShadows){\n        if (!parsedShadow.valid) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction color(value) {\n    let colors = 0;\n    let result = value.split(UNDERSCORE).every((part)=>{\n        part = normalize(part);\n        if (part.startsWith(\"var(\")) return true;\n        if ((0, _color.parseColor)(part, {\n            loose: true\n        }) !== null) return colors++, true;\n        return false;\n    });\n    if (!result) return false;\n    return colors > 0;\n}\nfunction image(value) {\n    let images = 0;\n    let result = value.split(COMMA).every((part)=>{\n        part = normalize(part);\n        if (part.startsWith(\"var(\")) return true;\n        if (url(part) || gradient(part) || [\n            \"element(\",\n            \"image(\",\n            \"cross-fade(\",\n            \"image-set(\"\n        ].some((fn)=>part.startsWith(fn))) {\n            images++;\n            return true;\n        }\n        return false;\n    });\n    if (!result) return false;\n    return images > 0;\n}\nlet gradientTypes = new Set([\n    \"linear-gradient\",\n    \"radial-gradient\",\n    \"repeating-linear-gradient\",\n    \"repeating-radial-gradient\",\n    \"conic-gradient\", \n]);\nfunction gradient(value) {\n    value = normalize(value);\n    for (let type of gradientTypes){\n        if (value.startsWith(`${type}(`)) {\n            return true;\n        }\n    }\n    return false;\n}\nlet validPositions = new Set([\n    \"center\",\n    \"top\",\n    \"right\",\n    \"bottom\",\n    \"left\"\n]);\nfunction position(value) {\n    let positions = 0;\n    let result = value.split(UNDERSCORE).every((part)=>{\n        part = normalize(part);\n        if (part.startsWith(\"var(\")) return true;\n        if (validPositions.has(part) || length(part) || percentage(part)) {\n            positions++;\n            return true;\n        }\n        return false;\n    });\n    if (!result) return false;\n    return positions > 0;\n}\nfunction familyName(value) {\n    let fonts = 0;\n    let result = value.split(COMMA).every((part)=>{\n        part = normalize(part);\n        if (part.startsWith(\"var(\")) return true;\n        // If it contains spaces, then it should be quoted\n        if (part.includes(\" \")) {\n            if (!/(['\"])([^\"']+)\\1/g.test(part)) {\n                return false;\n            }\n        }\n        // If it starts with a number, it's invalid\n        if (/^\\d/g.test(part)) {\n            return false;\n        }\n        fonts++;\n        return true;\n    });\n    if (!result) return false;\n    return fonts > 0;\n}\nlet genericNames = new Set([\n    \"serif\",\n    \"sans-serif\",\n    \"monospace\",\n    \"cursive\",\n    \"fantasy\",\n    \"system-ui\",\n    \"ui-serif\",\n    \"ui-sans-serif\",\n    \"ui-monospace\",\n    \"ui-rounded\",\n    \"math\",\n    \"emoji\",\n    \"fangsong\", \n]);\nfunction genericName(value) {\n    return genericNames.has(value);\n}\nlet absoluteSizes = new Set([\n    \"xx-small\",\n    \"x-small\",\n    \"small\",\n    \"medium\",\n    \"large\",\n    \"x-large\",\n    \"x-large\",\n    \"xxx-large\", \n]);\nfunction absoluteSize(value) {\n    return absoluteSizes.has(value);\n}\nlet relativeSizes = new Set([\n    \"larger\",\n    \"smaller\"\n]);\nfunction relativeSize(value) {\n    return relativeSizes.has(value);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    updateAllClasses: ()=>updateAllClasses,\n    asValue: ()=>asValue,\n    parseColorFormat: ()=>parseColorFormat,\n    asColor: ()=>asColor,\n    asLookupValue: ()=>asLookupValue,\n    coerceValue: ()=>coerceValue\n});\nconst _postcssSelectorParser = /*#__PURE__*/ _interopRequireDefault(require(\"postcss-selector-parser\"));\nconst _escapeCommas = /*#__PURE__*/ _interopRequireDefault(require(\"./escapeCommas\"));\nconst _withAlphaVariable = require(\"./withAlphaVariable\");\nconst _dataTypes = require(\"./dataTypes\");\nconst _negateValue = /*#__PURE__*/ _interopRequireDefault(require(\"./negateValue\"));\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction updateAllClasses(selectors, updateClass) {\n    let parser = (0, _postcssSelectorParser.default)((selectors)=>{\n        selectors.walkClasses((sel)=>{\n            let updatedClass = updateClass(sel.value);\n            sel.value = updatedClass;\n            if (sel.raws && sel.raws.value) {\n                sel.raws.value = (0, _escapeCommas.default)(sel.raws.value);\n            }\n        });\n    });\n    let result = parser.processSync(selectors);\n    return result;\n}\nfunction resolveArbitraryValue(modifier, validate) {\n    if (!isArbitraryValue(modifier)) {\n        return undefined;\n    }\n    let value = modifier.slice(1, -1);\n    if (!validate(value)) {\n        return undefined;\n    }\n    return (0, _dataTypes.normalize)(value);\n}\nfunction asNegativeValue(modifier, lookup = {}, validate) {\n    let positiveValue = lookup[modifier];\n    if (positiveValue !== undefined) {\n        return (0, _negateValue.default)(positiveValue);\n    }\n    if (isArbitraryValue(modifier)) {\n        let resolved = resolveArbitraryValue(modifier, validate);\n        if (resolved === undefined) {\n            return undefined;\n        }\n        return (0, _negateValue.default)(resolved);\n    }\n}\nfunction asValue(modifier, options = {}, { validate =()=>true  } = {}) {\n    var ref;\n    let value = (ref = options.values) === null || ref === void 0 ? void 0 : ref[modifier];\n    if (value !== undefined) {\n        return value;\n    }\n    if (options.supportsNegativeValues && modifier.startsWith(\"-\")) {\n        return asNegativeValue(modifier.slice(1), options.values, validate);\n    }\n    return resolveArbitraryValue(modifier, validate);\n}\nfunction isArbitraryValue(input) {\n    return input.startsWith(\"[\") && input.endsWith(\"]\");\n}\nfunction splitAlpha(modifier) {\n    let slashIdx = modifier.lastIndexOf(\"/\");\n    if (slashIdx === -1 || slashIdx === modifier.length - 1) {\n        return [\n            modifier\n        ];\n    }\n    return [\n        modifier.slice(0, slashIdx),\n        modifier.slice(slashIdx + 1)\n    ];\n}\nfunction parseColorFormat(value) {\n    if (typeof value === \"string\" && value.includes(\"<alpha-value>\")) {\n        let oldValue = value;\n        return ({ opacityValue =1  })=>oldValue.replace(\"<alpha-value>\", opacityValue);\n    }\n    return value;\n}\nfunction asColor(modifier, options = {}, { tailwindConfig ={}  } = {}) {\n    var ref;\n    if (((ref = options.values) === null || ref === void 0 ? void 0 : ref[modifier]) !== undefined) {\n        var ref1;\n        return parseColorFormat((ref1 = options.values) === null || ref1 === void 0 ? void 0 : ref1[modifier]);\n    }\n    let [color, alpha] = splitAlpha(modifier);\n    if (alpha !== undefined) {\n        var ref2, ref3, ref4;\n        var ref5;\n        let normalizedColor = (ref5 = (ref2 = options.values) === null || ref2 === void 0 ? void 0 : ref2[color]) !== null && ref5 !== void 0 ? ref5 : isArbitraryValue(color) ? color.slice(1, -1) : undefined;\n        if (normalizedColor === undefined) {\n            return undefined;\n        }\n        normalizedColor = parseColorFormat(normalizedColor);\n        if (isArbitraryValue(alpha)) {\n            return (0, _withAlphaVariable.withAlphaValue)(normalizedColor, alpha.slice(1, -1));\n        }\n        if (((ref3 = tailwindConfig.theme) === null || ref3 === void 0 ? void 0 : (ref4 = ref3.opacity) === null || ref4 === void 0 ? void 0 : ref4[alpha]) === undefined) {\n            return undefined;\n        }\n        return (0, _withAlphaVariable.withAlphaValue)(normalizedColor, tailwindConfig.theme.opacity[alpha]);\n    }\n    return asValue(modifier, options, {\n        validate: _dataTypes.color\n    });\n}\nfunction asLookupValue(modifier, options = {}) {\n    var ref;\n    return (ref = options.values) === null || ref === void 0 ? void 0 : ref[modifier];\n}\nfunction guess(validate) {\n    return (modifier, options)=>{\n        return asValue(modifier, options, {\n            validate\n        });\n    };\n}\nlet typeMap = {\n    any: asValue,\n    color: asColor,\n    url: guess(_dataTypes.url),\n    image: guess(_dataTypes.image),\n    length: guess(_dataTypes.length),\n    percentage: guess(_dataTypes.percentage),\n    position: guess(_dataTypes.position),\n    lookup: asLookupValue,\n    \"generic-name\": guess(_dataTypes.genericName),\n    \"family-name\": guess(_dataTypes.familyName),\n    number: guess(_dataTypes.number),\n    \"line-width\": guess(_dataTypes.lineWidth),\n    \"absolute-size\": guess(_dataTypes.absoluteSize),\n    \"relative-size\": guess(_dataTypes.relativeSize),\n    shadow: guess(_dataTypes.shadow)\n};\nlet supportedTypes = Object.keys(typeMap);\nfunction splitAtFirst(input, delim) {\n    let idx = input.indexOf(delim);\n    if (idx === -1) return [\n        undefined,\n        input\n    ];\n    return [\n        input.slice(0, idx),\n        input.slice(idx + 1)\n    ];\n}\nfunction coerceValue(types, modifier, options, tailwindConfig) {\n    if (isArbitraryValue(modifier)) {\n        let arbitraryValue = modifier.slice(1, -1);\n        let [explicitType, value] = splitAtFirst(arbitraryValue, \":\");\n        // It could be that this resolves to `url(https` which is not a valid\n        // identifier. We currently only support \"simple\" words with dashes or\n        // underscores. E.g.: family-name\n        if (!/^[\\w-_]+$/g.test(explicitType)) {\n            value = arbitraryValue;\n        } else if (explicitType !== undefined && !supportedTypes.includes(explicitType)) {\n            return [];\n        }\n        if (value.length > 0 && supportedTypes.includes(explicitType)) {\n            return [\n                asValue(`[${value}]`, options),\n                explicitType\n            ];\n        }\n    }\n    // Find first matching type\n    for (let type of [].concat(types)){\n        let result = typeMap[type](modifier, options, {\n            tailwindConfig\n        });\n        if (result !== undefined) return [\n            result,\n            type\n        ];\n    }\n    return [];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>toColorValue\n});\nfunction toColorValue(maybeFunction) {\n    return typeof maybeFunction === \"function\" ? maybeFunction({}) : maybeFunction;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>resolveConfig\n});\nconst _negateValue = /*#__PURE__*/ _interopRequireDefault(require(\"./negateValue\"));\nconst _corePluginList = /*#__PURE__*/ _interopRequireDefault(require(\"../corePluginList\"));\nconst _configurePlugins = /*#__PURE__*/ _interopRequireDefault(require(\"./configurePlugins\"));\nconst _defaultConfigStub = /*#__PURE__*/ _interopRequireDefault(require(\"../../stubs/defaultConfig.stub\"));\nconst _colors = /*#__PURE__*/ _interopRequireDefault(require(\"../public/colors\"));\nconst _defaults = require(\"./defaults\");\nconst _toPath = require(\"./toPath\");\nconst _normalizeConfig = require(\"./normalizeConfig\");\nconst _isPlainObject = /*#__PURE__*/ _interopRequireDefault(require(\"./isPlainObject\"));\nconst _cloneDeep = require(\"./cloneDeep\");\nconst _pluginUtils = require(\"./pluginUtils\");\nconst _withAlphaVariable = require(\"./withAlphaVariable\");\nconst _toColorValue = /*#__PURE__*/ _interopRequireDefault(require(\"./toColorValue\"));\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction isFunction(input) {\n    return typeof input === \"function\";\n}\nfunction isObject(input) {\n    return typeof input === \"object\" && input !== null;\n}\nfunction mergeWith(target, ...sources) {\n    let customizer = sources.pop();\n    for (let source of sources){\n        for(let k in source){\n            let merged = customizer(target[k], source[k]);\n            if (merged === undefined) {\n                if (isObject(target[k]) && isObject(source[k])) {\n                    target[k] = mergeWith(target[k], source[k], customizer);\n                } else {\n                    target[k] = source[k];\n                }\n            } else {\n                target[k] = merged;\n            }\n        }\n    }\n    return target;\n}\nconst configUtils = {\n    colors: _colors.default,\n    negative (scale) {\n        // TODO: Log that this function isn't really needed anymore?\n        return Object.keys(scale).filter((key)=>scale[key] !== \"0\").reduce((negativeScale, key)=>{\n            let negativeValue = (0, _negateValue.default)(scale[key]);\n            if (negativeValue !== undefined) {\n                negativeScale[`-${key}`] = negativeValue;\n            }\n            return negativeScale;\n        }, {});\n    },\n    breakpoints (screens) {\n        return Object.keys(screens).filter((key)=>typeof screens[key] === \"string\").reduce((breakpoints, key)=>({\n                ...breakpoints,\n                [`screen-${key}`]: screens[key]\n            }), {});\n    }\n};\nfunction value(valueToResolve, ...args) {\n    return isFunction(valueToResolve) ? valueToResolve(...args) : valueToResolve;\n}\nfunction collectExtends(items) {\n    return items.reduce((merged, { extend  })=>{\n        return mergeWith(merged, extend, (mergedValue, extendValue)=>{\n            if (mergedValue === undefined) {\n                return [\n                    extendValue\n                ];\n            }\n            if (Array.isArray(mergedValue)) {\n                return [\n                    extendValue,\n                    ...mergedValue\n                ];\n            }\n            return [\n                extendValue,\n                mergedValue\n            ];\n        });\n    }, {});\n}\nfunction mergeThemes(themes) {\n    return {\n        ...themes.reduce((merged, theme)=>(0, _defaults.defaults)(merged, theme), {}),\n        // In order to resolve n config objects, we combine all of their `extend` properties\n        // into arrays instead of objects so they aren't overridden.\n        extend: collectExtends(themes)\n    };\n}\nfunction mergeExtensionCustomizer(merged, value) {\n    // When we have an array of objects, we do want to merge it\n    if (Array.isArray(merged) && isObject(merged[0])) {\n        return merged.concat(value);\n    }\n    // When the incoming value is an array, and the existing config is an object, prepend the existing object\n    if (Array.isArray(value) && isObject(value[0]) && isObject(merged)) {\n        return [\n            merged,\n            ...value\n        ];\n    }\n    // Override arrays (for example for font-families, box-shadows, ...)\n    if (Array.isArray(value)) {\n        return value;\n    }\n    // Execute default behaviour\n    return undefined;\n}\nfunction mergeExtensions({ extend , ...theme }) {\n    return mergeWith(theme, extend, (themeValue, extensions)=>{\n        // The `extend` property is an array, so we need to check if it contains any functions\n        if (!isFunction(themeValue) && !extensions.some(isFunction)) {\n            return mergeWith({}, themeValue, ...extensions, mergeExtensionCustomizer);\n        }\n        return (resolveThemePath, utils)=>mergeWith({}, ...[\n                themeValue,\n                ...extensions\n            ].map((e)=>value(e, resolveThemePath, utils)), mergeExtensionCustomizer);\n    });\n}\n/**\n *\n * @param {string} key\n * @return {Iterable<string[] & {alpha: string | undefined}>}\n */ function* toPaths(key) {\n    let path = (0, _toPath.toPath)(key);\n    if (path.length === 0) {\n        return;\n    }\n    yield path;\n    if (Array.isArray(key)) {\n        return;\n    }\n    let pattern = /^(.*?)\\s*\\/\\s*([^/]+)$/;\n    let matches = key.match(pattern);\n    if (matches !== null) {\n        let [, prefix, alpha] = matches;\n        let newPath = (0, _toPath.toPath)(prefix);\n        newPath.alpha = alpha;\n        yield newPath;\n    }\n}\nfunction resolveFunctionKeys(object) {\n    // theme('colors.red.500 / 0.5') -> ['colors', 'red', '500 / 0', '5]\n    const resolvePath = (key, defaultValue)=>{\n        for (const path of toPaths(key)){\n            let index = 0;\n            let val = object;\n            while(val !== undefined && val !== null && index < path.length){\n                val = val[path[index++]];\n                let shouldResolveAsFn = isFunction(val) && (path.alpha === undefined || index <= path.length - 1);\n                val = shouldResolveAsFn ? val(resolvePath, configUtils) : val;\n            }\n            if (val !== undefined) {\n                if (path.alpha !== undefined) {\n                    let normalized = (0, _pluginUtils.parseColorFormat)(val);\n                    return (0, _withAlphaVariable.withAlphaValue)(normalized, path.alpha, (0, _toColorValue.default)(normalized));\n                }\n                if ((0, _isPlainObject.default)(val)) {\n                    return (0, _cloneDeep.cloneDeep)(val);\n                }\n                return val;\n            }\n        }\n        return defaultValue;\n    };\n    Object.assign(resolvePath, {\n        theme: resolvePath,\n        ...configUtils\n    });\n    return Object.keys(object).reduce((resolved, key)=>{\n        resolved[key] = isFunction(object[key]) ? object[key](resolvePath, configUtils) : object[key];\n        return resolved;\n    }, {});\n}\nfunction extractPluginConfigs(configs) {\n    let allConfigs = [];\n    configs.forEach((config)=>{\n        allConfigs = [\n            ...allConfigs,\n            config\n        ];\n        var ref;\n        const plugins = (ref = config === null || config === void 0 ? void 0 : config.plugins) !== null && ref !== void 0 ? ref : [];\n        if (plugins.length === 0) {\n            return;\n        }\n        plugins.forEach((plugin)=>{\n            if (plugin.__isOptionsFunction) {\n                plugin = plugin();\n            }\n            var ref;\n            allConfigs = [\n                ...allConfigs,\n                ...extractPluginConfigs([\n                    (ref = plugin === null || plugin === void 0 ? void 0 : plugin.config) !== null && ref !== void 0 ? ref : {}\n                ])\n            ];\n        });\n    });\n    return allConfigs;\n}\nfunction resolveCorePlugins(corePluginConfigs) {\n    const result = [\n        ...corePluginConfigs\n    ].reduceRight((resolved, corePluginConfig)=>{\n        if (isFunction(corePluginConfig)) {\n            return corePluginConfig({\n                corePlugins: resolved\n            });\n        }\n        return (0, _configurePlugins.default)(corePluginConfig, resolved);\n    }, _corePluginList.default);\n    return result;\n}\nfunction resolvePluginLists(pluginLists) {\n    const result = [\n        ...pluginLists\n    ].reduceRight((resolved, pluginList)=>{\n        return [\n            ...resolved,\n            ...pluginList\n        ];\n    }, []);\n    return result;\n}\nfunction resolveConfig(configs) {\n    let allConfigs = [\n        ...extractPluginConfigs(configs),\n        {\n            prefix: \"\",\n            important: false,\n            separator: \":\",\n            variantOrder: _defaultConfigStub.default.variantOrder\n        }, \n    ];\n    var ref, ref1;\n    return (0, _normalizeConfig.normalizeConfig)((0, _defaults.defaults)({\n        theme: resolveFunctionKeys(mergeExtensions(mergeThemes(allConfigs.map((t)=>{\n            return (ref = t === null || t === void 0 ? void 0 : t.theme) !== null && ref !== void 0 ? ref : {};\n        })))),\n        corePlugins: resolveCorePlugins(allConfigs.map((c)=>c.corePlugins)),\n        plugins: resolvePluginLists(configs.map((c)=>{\n            return (ref1 = c === null || c === void 0 ? void 0 : c.plugins) !== null && ref1 !== void 0 ? ref1 : [];\n        }))\n    }, ...allConfigs));\n}\n","export default {\n  yellow: (s) => s,\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    flagEnabled: ()=>flagEnabled,\n    issueFlagNotices: ()=>issueFlagNotices,\n    default: ()=>_default\n});\nconst _picocolors = /*#__PURE__*/ _interopRequireDefault(require(\"picocolors\"));\nconst _log = /*#__PURE__*/ _interopRequireDefault(require(\"./util/log\"));\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nlet defaults = {\n    optimizeUniversalDefaults: false\n};\nlet featureFlags = {\n    future: [\n        \"hoverOnlyWhenSupported\",\n        \"respectDefaultRingColorOpacity\"\n    ],\n    experimental: [\n        \"optimizeUniversalDefaults\",\n        \"matchVariant\" /* , 'variantGrouping' */ \n    ]\n};\nfunction flagEnabled(config, flag) {\n    if (featureFlags.future.includes(flag)) {\n        var ref;\n        var ref1, ref2;\n        return config.future === \"all\" || ((ref2 = (ref1 = config === null || config === void 0 ? void 0 : (ref = config.future) === null || ref === void 0 ? void 0 : ref[flag]) !== null && ref1 !== void 0 ? ref1 : defaults[flag]) !== null && ref2 !== void 0 ? ref2 : false);\n    }\n    if (featureFlags.experimental.includes(flag)) {\n        var ref3;\n        var ref4, ref5;\n        return config.experimental === \"all\" || ((ref5 = (ref4 = config === null || config === void 0 ? void 0 : (ref3 = config.experimental) === null || ref3 === void 0 ? void 0 : ref3[flag]) !== null && ref4 !== void 0 ? ref4 : defaults[flag]) !== null && ref5 !== void 0 ? ref5 : false);\n    }\n    return false;\n}\nfunction experimentalFlagsEnabled(config) {\n    if (config.experimental === \"all\") {\n        return featureFlags.experimental;\n    }\n    var ref;\n    return Object.keys((ref = config === null || config === void 0 ? void 0 : config.experimental) !== null && ref !== void 0 ? ref : {}).filter((flag)=>featureFlags.experimental.includes(flag) && config.experimental[flag]);\n}\nfunction issueFlagNotices(config) {\n    if (process.env.JEST_WORKER_ID !== undefined) {\n        return;\n    }\n    if (experimentalFlagsEnabled(config).length > 0) {\n        let changes = experimentalFlagsEnabled(config).map((s)=>_picocolors.default.yellow(s)).join(\", \");\n        _log.default.warn(\"experimental-flags-enabled\", [\n            `You have enabled experimental features: ${changes}`,\n            \"Experimental features in Tailwind CSS are not covered by semver, may introduce breaking changes, and can change at any time.\", \n        ]);\n    }\n}\nconst _default = featureFlags;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>getAllConfigs\n});\nconst _defaultConfigStubJs = /*#__PURE__*/ _interopRequireDefault(require(\"../../stubs/defaultConfig.stub.js\"));\nconst _featureFlags = require(\"../featureFlags\");\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction getAllConfigs(config) {\n    var ref;\n    const configs = ((ref = config === null || config === void 0 ? void 0 : config.presets) !== null && ref !== void 0 ? ref : [\n        _defaultConfigStubJs.default\n    ]).slice().reverse().flatMap((preset)=>getAllConfigs(typeof preset === \"function\" ? preset() : preset));\n    const features = {\n        // Add experimental configs here...\n        respectDefaultRingColorOpacity: {\n            theme: {\n                ringColor: {\n                    DEFAULT: \"#3b82f67f\"\n                }\n            }\n        }\n    };\n    const experimentals = Object.keys(features).filter((feature)=>(0, _featureFlags.flagEnabled)(config, feature)).map((feature)=>features[feature]);\n    return [\n        config,\n        ...experimentals,\n        ...configs\n    ];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nObject.defineProperty(exports, \"default\", {\n    enumerable: true,\n    get: ()=>resolveConfig\n});\nconst _resolveConfig = /*#__PURE__*/ _interopRequireDefault(require(\"../util/resolveConfig\"));\nconst _getAllConfigs = /*#__PURE__*/ _interopRequireDefault(require(\"../util/getAllConfigs\"));\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction resolveConfig(...configs) {\n    let [, ...defaultConfigs] = (0, _getAllConfigs.default)(configs[0]);\n    return (0, _resolveConfig.default)([\n        ...configs,\n        ...defaultConfigs\n    ]);\n}\n","let resolveConfig = require('./lib/public/resolve-config')\nmodule.exports = (resolveConfig.__esModule ? resolveConfig : { default: resolveConfig }).default\n","export type {\n  FontOptions as Font,\n  Weight as FontWeight,\n  FontStyle,\n} from './font.js'\nexport type { Locale } from './language.js'\n\nexport type { SatoriOptions, SatoriNode } from './satori.js'\nexport { default } from './satori.js'\nexport { init } from './layout-engine/wasm.js'\n","/**\n * Pre-defined styles for elements. Here we hand pick some from Chromium's\n * default styles:\n * https://chromium.googlesource.com/chromium/blink/+/master/Source/core/css/html.css\n *\n * Elements are inline by default, the initial value of `display`.\n */\n\nconst DEFAULT_DISPLAY = 'block'\n\nconst block = { display: DEFAULT_DISPLAY }\nconst hidden = { display: 'none' }\nconst inlineBlock = { display: 'inline-block' }\n\nexport default {\n  // Elements that aren't rendered.\n  area: hidden,\n  base: hidden,\n  basefont: hidden,\n  datalist: hidden,\n  head: hidden,\n  link: hidden,\n  meta: hidden,\n  noembed: hidden,\n  noframes: hidden,\n  param: hidden,\n  rp: hidden,\n  script: hidden,\n  style: hidden,\n  template: hidden,\n  title: hidden,\n\n  // The document, as when a page is rendered.\n  html: block,\n  body: { display: DEFAULT_DISPLAY, margin: 8 },\n\n  // Generic block-level elements\n  address: block,\n  article: block,\n  aside: block,\n  details: block,\n  // An open dialog that isn't modal. Closed ones are hidden, see\n  // `getHiddenPreset()`.\n  dialog: {\n    display: DEFAULT_DISPLAY,\n    position: 'absolute',\n    left: 0,\n    right: 0,\n    width: 'fit-content',\n    height: 'fit-content',\n    margin: 'auto',\n    borderWidth: 3,\n    borderStyle: 'solid',\n    padding: '1em',\n    backgroundColor: 'white',\n    color: 'black',\n  },\n  figcaption: block,\n  footer: block,\n  form: block,\n  header: block,\n  hgroup: block,\n  main: block,\n  nav: block,\n  search: block,\n  section: block,\n  summary: block,\n  figure: {\n    display: DEFAULT_DISPLAY,\n    marginTop: '1em',\n    marginBottom: '1em',\n    marginLeft: 40,\n    marginRight: 40,\n  },\n  p: {\n    display: DEFAULT_DISPLAY,\n    marginTop: '1em',\n    marginBottom: '1em',\n  },\n  div: {\n    display: DEFAULT_DISPLAY,\n  },\n  blockquote: {\n    display: DEFAULT_DISPLAY,\n    marginTop: '1em',\n    marginBottom: '1em',\n    marginLeft: 40,\n    marginRight: 40,\n  },\n  center: {\n    display: DEFAULT_DISPLAY,\n    textAlign: 'center',\n  },\n  hr: {\n    display: DEFAULT_DISPLAY,\n    color: 'gray',\n    marginTop: '0.5em',\n    marginBottom: '0.5em',\n    marginLeft: 'auto',\n    marginRight: 'auto',\n    borderWidth: 1,\n    borderStyle: 'inset',\n    overflow: 'hidden',\n  },\n  // Heading elements\n  h1: {\n    display: DEFAULT_DISPLAY,\n    fontSize: '2em',\n    marginTop: '0.67em',\n    marginBottom: '0.67em',\n    marginLeft: 0,\n    marginRight: 0,\n    fontWeight: 'bold',\n  },\n  h2: {\n    display: DEFAULT_DISPLAY,\n    fontSize: '1.5em',\n    marginTop: '0.83em',\n    marginBottom: '0.83em',\n    marginLeft: 0,\n    marginRight: 0,\n    fontWeight: 'bold',\n  },\n  h3: {\n    display: DEFAULT_DISPLAY,\n    fontSize: '1.17em',\n    marginTop: '1em',\n    marginBottom: '1em',\n    marginLeft: 0,\n    marginRight: 0,\n    fontWeight: 'bold',\n  },\n  h4: {\n    display: DEFAULT_DISPLAY,\n    marginTop: '1.33em',\n    marginBottom: '1.33em',\n    marginLeft: 0,\n    marginRight: 0,\n    fontWeight: 'bold',\n  },\n  h5: {\n    display: DEFAULT_DISPLAY,\n    fontSize: '0.83em',\n    marginTop: '1.67em',\n    marginBottom: '1.67em',\n    marginLeft: 0,\n    marginRight: 0,\n    fontWeight: 'bold',\n  },\n  h6: {\n    display: DEFAULT_DISPLAY,\n    fontSize: '0.67em',\n    marginTop: '2.33em',\n    marginBottom: '2.33em',\n    marginLeft: 0,\n    marginRight: 0,\n    fontWeight: 'bold',\n  },\n  // Tables\n  // Lists, see `getListPresets()` for their list styles\n  ul: {\n    display: DEFAULT_DISPLAY,\n    marginTop: '1em',\n    marginBottom: '1em',\n    paddingLeft: 40,\n  },\n  ol: {\n    display: DEFAULT_DISPLAY,\n    marginTop: '1em',\n    marginBottom: '1em',\n    paddingLeft: 40,\n  },\n  menu: {\n    display: DEFAULT_DISPLAY,\n    marginTop: '1em',\n    marginBottom: '1em',\n    paddingLeft: 40,\n  },\n  dir: {\n    display: DEFAULT_DISPLAY,\n    marginTop: '1em',\n    marginBottom: '1em',\n    paddingLeft: 40,\n  },\n  li: { display: 'list-item' },\n  dl: {\n    display: DEFAULT_DISPLAY,\n    marginTop: '1em',\n    marginBottom: '1em',\n  },\n  dt: block,\n  dd: {\n    display: DEFAULT_DISPLAY,\n    marginLeft: 40,\n  },\n  // Form elements\n  // Inline elements\n  u: {\n    textDecoration: 'underline',\n  },\n  strong: {\n    fontWeight: 'bold',\n  },\n  b: {\n    fontWeight: 'bold',\n  },\n  i: {\n    fontStyle: 'italic',\n  },\n  em: {\n    fontStyle: 'italic',\n  },\n  code: {\n    fontFamily: 'monospace',\n  },\n  kbd: {\n    fontFamily: 'monospace',\n  },\n  pre: {\n    display: DEFAULT_DISPLAY,\n    fontFamily: 'monospace',\n    whiteSpace: 'pre',\n    marginTop: '1em',\n    marginBottom: '1em',\n  },\n  mark: {\n    backgroundColor: 'yellow',\n    color: 'black',\n  },\n  big: {\n    fontSize: 'larger',\n  },\n  small: {\n    fontSize: 'smaller',\n  },\n  s: {\n    textDecoration: 'line-through',\n  },\n\n  // Form controls\n  input: inlineBlock,\n  button: inlineBlock,\n  // The default styles of Chrome. List boxes have rounded corners, see\n  // `getSelectPreset()`.\n  select: {\n    display: 'inline-block',\n    boxSizing: 'border-box',\n    borderWidth: 1,\n    borderStyle: 'solid',\n    borderColor: '#767676',\n    backgroundColor: 'white',\n    color: 'black',\n    fontSize: '13.333333px',\n    fontWeight: 'normal',\n    fontStyle: 'normal',\n    lineHeight: 'normal',\n    letterSpacing: 'normal',\n    textTransform: 'none',\n    textIndent: 0,\n    textAlign: 'start',\n    whiteSpace: 'pre',\n  },\n  textarea: inlineBlock,\n}\n","/**\n * The predefined counter styles of CSS Counter Styles, used by list markers.\n *\n * @see https://www.w3.org/TR/css-counter-styles-3/#predefined-counters\n */\n\ninterface CounterStyle {\n  system: 'cyclic' | 'numeric' | 'alphabetic' | 'additive'\n  symbols?: string[]\n  additiveSymbols?: [weight: number, symbol: string][]\n  range?: [min: number, max: number]\n  suffix?: string\n  /** The minimum length, padded with the first symbol. */\n  pad?: number\n}\n\nconst chars = (value: string) => Array.from(value)\n\nconst numeric = (digits: string, suffix?: string): CounterStyle => ({\n  system: 'numeric',\n  symbols: chars(digits),\n  suffix,\n})\n\nconst alphabetic = (letters: string, suffix?: string): CounterStyle => ({\n  system: 'alphabetic',\n  symbols: chars(letters),\n  suffix,\n})\n\n/** Additive symbols from a list of `weight symbol` pairs. */\nconst additive = (range: [number, number], pairs: string): CounterStyle => {\n  const tokens = pairs.trim().split(/\\s+/)\n  const additiveSymbols: [number, string][] = []\n  for (let i = 0; i < tokens.length; i += 2) {\n    additiveSymbols.push([Number(tokens[i]), tokens[i + 1]])\n  }\n  return { system: 'additive', additiveSymbols, range }\n}\n\nconst ROMAN =\n  '1000 M 900 CM 500 D 400 CD 100 C 90 XC 50 L 40 XL 10 X 9 IX 5 V 4 IV 1 I'\n\nconst UPPER_ARMENIAN =\n  '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 Ա'\n\nconst LOWER_ARMENIAN =\n  '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 ա'\n\nconst GEORGIAN =\n  '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 ა'\n\nconst HEBREW =\n  '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 א'\n\nconst CJK_SUFFIX = '、'\n\nconst COUNTER_STYLES: Record<string, CounterStyle> = {\n  disc: { system: 'cyclic', symbols: ['•'], suffix: ' ' },\n  circle: { system: 'cyclic', symbols: ['◦'], suffix: ' ' },\n  square: { system: 'cyclic', symbols: ['▪'], suffix: ' ' },\n  'disclosure-open': { system: 'cyclic', symbols: ['▾'], suffix: ' ' },\n  'disclosure-closed': { system: 'cyclic', symbols: ['▸'], suffix: ' ' },\n\n  decimal: numeric('0123456789'),\n  'decimal-leading-zero': { ...numeric('0123456789'), pad: 2 },\n  'arabic-indic': numeric('٠١٢٣٤٥٦٧٨٩'),\n  bengali: numeric('০১২৩৪৫৬৭৮৯'),\n  cambodian: numeric('០១២៣៤៥៦៧៨៩'),\n  khmer: numeric('០១២៣៤៥៦៧៨៩'),\n  'cjk-decimal': numeric('〇一二三四五六七八九', CJK_SUFFIX),\n  devanagari: numeric('०१२३४५६७८९'),\n  gujarati: numeric('૦૧૨૩૪૫૬૭૮૯'),\n  gurmukhi: numeric('੦੧੨੩੪੫੬੭੮੯'),\n  kannada: numeric('೦೧೨೩೪೫೬೭೮೯'),\n  lao: numeric('໐໑໒໓໔໕໖໗໘໙'),\n  malayalam: numeric('൦൧൨൩൪൫൬൭൮൯'),\n  mongolian: numeric('᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙'),\n  myanmar: numeric('၀၁၂၃၄၅၆၇၈၉'),\n  oriya: numeric('୦୧୨୩୪୫୬୭୮୯'),\n  persian: numeric('۰۱۲۳۴۵۶۷۸۹'),\n  tamil: numeric('௦௧௨௩௪௫௬௭௮௯'),\n  telugu: numeric('౦౧౨౩౪౫౬౭౮౯'),\n  thai: numeric('๐๑๒๓๔๕๖๗๘๙'),\n  tibetan: numeric('༠༡༢༣༤༥༦༧༨༩'),\n\n  'lower-alpha': alphabetic('abcdefghijklmnopqrstuvwxyz'),\n  'lower-latin': alphabetic('abcdefghijklmnopqrstuvwxyz'),\n  'upper-alpha': alphabetic('ABCDEFGHIJKLMNOPQRSTUVWXYZ'),\n  'upper-latin': alphabetic('ABCDEFGHIJKLMNOPQRSTUVWXYZ'),\n  'lower-greek': alphabetic('αβγδεζηθικλμνξοπρστυφχψω'),\n  hiragana: alphabetic(\n    'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん',\n    CJK_SUFFIX\n  ),\n  'hiragana-iroha': alphabetic(\n    'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす',\n    CJK_SUFFIX\n  ),\n  katakana: alphabetic(\n    'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン',\n    CJK_SUFFIX\n  ),\n  'katakana-iroha': alphabetic(\n    'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス',\n    CJK_SUFFIX\n  ),\n  'cjk-earthly-branch': alphabetic('子丑寅卯辰巳午未申酉戌亥', CJK_SUFFIX),\n  'cjk-heavenly-stem': alphabetic('甲乙丙丁戊己庚辛壬癸', CJK_SUFFIX),\n\n  'lower-roman': additive([1, 3999], ROMAN.toLowerCase()),\n  'upper-roman': additive([1, 3999], ROMAN),\n  armenian: additive([1, 9999], UPPER_ARMENIAN),\n  'upper-armenian': additive([1, 9999], UPPER_ARMENIAN),\n  'lower-armenian': additive([1, 9999], LOWER_ARMENIAN),\n  georgian: additive([1, 19999], GEORGIAN),\n  hebrew: additive([1, 10999], HEBREW),\n}\n\n/** Markers that are drawn as shapes, like in browsers. */\nexport const SYMBOL_MARKERS = new Set([\n  'disc',\n  'circle',\n  'square',\n  'disclosure-open',\n  'disclosure-closed',\n])\n\nfunction represent(value: number, style: CounterStyle): string | undefined {\n  const { symbols = [], additiveSymbols = [] } = style\n  const [min, max] = style.range ?? [-Infinity, Infinity]\n  if (value < min || value > max) return\n  switch (style.system) {\n    case 'cyclic': {\n      const n = symbols.length\n      return symbols[(((value - 1) % n) + n) % n]\n    }\n    case 'numeric': {\n      const n = symbols.length\n      let rest = Math.abs(value)\n      let result = rest === 0 ? symbols[0] : ''\n      while (rest > 0) {\n        result = symbols[rest % n] + result\n        rest = Math.floor(rest / n)\n      }\n      return result\n    }\n    case 'alphabetic': {\n      if (value < 1) return\n      const n = symbols.length\n      let rest = value\n      let result = ''\n      while (rest > 0) {\n        rest--\n        result = symbols[rest % n] + result\n        rest = Math.floor(rest / n)\n      }\n      return result\n    }\n    case 'additive': {\n      if (value < 0) return\n      if (value === 0) {\n        return additiveSymbols.find(([weight]) => weight === 0)?.[1]\n      }\n      let rest = value\n      let result = ''\n      for (const [weight, symbol] of additiveSymbols) {\n        if (weight === 0) continue\n        while (rest >= weight) {\n          result += symbol\n          rest -= weight\n        }\n      }\n      return rest === 0 ? result : undefined\n    }\n  }\n}\n\n/**\n * The text of a list marker: the counter value in a counter style with its\n * suffix, or a string. Unknown counter styles are `decimal`.\n */\nexport function getMarkerText(value: number, listStyleType: string) {\n  const string = /^([\"'])(.*)\\1$/s.exec(listStyleType)\n  if (string) return string[2]\n  const style =\n    COUNTER_STYLES[listStyleType.toLowerCase()] ?? COUNTER_STYLES.decimal\n  return formatCounter(value, listStyleType) + (style.suffix ?? '. ')\n}\n\n/**\n * A counter value in a counter style, without the suffix of markers, e.g. for\n * `counter()`. Unknown counter styles are `decimal`, and `none` is empty.\n */\nexport function formatCounter(value: number, counterStyle: string) {\n  const name = counterStyle.toLowerCase()\n  if (name === 'none') return ''\n  const style = COUNTER_STYLES[name] ?? COUNTER_STYLES.decimal\n  let text = represent(value, style)\n  let { pad = 0 } = style\n  let symbols = style.symbols\n  if (text === undefined) {\n    // Values out of the range of a counter style fall back to `decimal`.\n    text = represent(value, COUNTER_STYLES.decimal)\n    pad = 0\n    symbols = COUNTER_STYLES.decimal.symbols\n  }\n  if (\n    style.system === 'numeric' ||\n    symbols === COUNTER_STYLES.decimal.symbols\n  ) {\n    const length = Array.from(text).length\n    if (length < pad) text = symbols[0].repeat(pad - length) + text\n    if (value < 0) text = '-' + text\n  }\n  return text\n}\n","/**\n * Counters and the markers of list items.\n *\n * @see https://www.w3.org/TR/css-lists-3/\n */\nimport type { ReactElement } from 'react'\n\nimport type { CounterChange, SerializedStyle } from './handler/expand.js'\nimport presets from './handler/presets.js'\nimport {\n  formatCounter,\n  getMarkerText,\n  SYMBOL_MARKERS,\n} from './counter-styles.js'\n\ninterface CounterInstance {\n  value: number\n  /** The parent of the element that created it, which ends its scope. */\n  scope: string\n  reversed: boolean\n}\n\n/**\n * The counters in scope while elements are laid out in tree order. A counter\n * created by an element is in scope for its descendants, its following\n * siblings and their descendants.\n */\nexport class Counters {\n  private stacks = new Map<string, CounterInstance[]>()\n\n  private stack(name: string) {\n    let stack = this.stacks.get(name)\n    if (!stack) this.stacks.set(name, (stack = []))\n    return stack\n  }\n\n  /** Ends the scope of the counters created by the children of an element. */\n  closeScope(parent: string) {\n    for (const stack of this.stacks.values()) {\n      while (stack.length && stack[stack.length - 1].scope === parent) {\n        stack.pop()\n      }\n    }\n  }\n\n  reset(name: string, value: number, scope: string, reversed = false) {\n    const stack = this.stack(name)\n    // It replaces a counter created by a preceding sibling.\n    if (stack.length && stack[stack.length - 1].scope === scope) stack.pop()\n    stack.push({ value, scope, reversed })\n  }\n\n  private innermost(name: string, scope: string) {\n    const stack = this.stack(name)\n    if (!stack.length) this.reset(name, 0, scope)\n    return stack[stack.length - 1]\n  }\n\n  increment(name: string, by: number, scope: string) {\n    this.innermost(name, scope).value += by\n  }\n\n  set(name: string, value: number, scope: string) {\n    this.innermost(name, scope).value = value\n  }\n\n  isReversed(name: string) {\n    const stack = this.stack(name)\n    return !!stack[stack.length - 1]?.reversed\n  }\n\n  value(name: string) {\n    const stack = this.stack(name)\n    return stack[stack.length - 1]?.value ?? 0\n  }\n\n  /** The values of the counters with a name, from the outermost one. */\n  values(name: string) {\n    const stack = this.stack(name)\n    return stack.length ? stack.map((counter) => counter.value) : [0]\n  }\n}\n\n/**\n * The text of `counter()`, or `counters()` with a separator, in generated\n * content.\n */\nexport function getCounterText(\n  counters: Counters,\n  name: string,\n  separator: string | null,\n  counterStyle: string\n) {\n  if (separator === null) {\n    return formatCounter(counters.value(name), counterStyle)\n  }\n  return counters\n    .values(name)\n    .map((value) => formatCounter(value, counterStyle))\n    .join(separator)\n}\n\ntype Child = ReactElement | string\n\nconst isElement = (child: unknown): child is ReactElement =>\n  !!child && typeof child === 'object' && 'type' in (child as object)\n\n/** The `display` of an element from its style and preset. */\nfunction getDisplay(element: ReactElement): string {\n  const style = element.props?.style\n  const display =\n    style?.display ??\n    (typeof element.type === 'string'\n      ? presets[element.type]?.display\n      : undefined)\n  return String(display ?? 'inline').trim()\n}\n\nconst parseList = (value: unknown) =>\n  typeof value === 'string' ? value.trim().split(/\\s+/) : []\n\n/** How an element changes a counter, from its style and attributes. */\nfunction getChanges(element: ReactElement, name: string) {\n  const { style, value } = element.props || {}\n  const increments = parseList(style?.counterIncrement)\n  const sets = parseList(style?.counterSet)\n  const resets = parseList(style?.counterReset)\n  const amount = (tokens: string[], fallback: number) => {\n    const index = tokens.findIndex(\n      (token) => token === name || token === `reversed(${name})`\n    )\n    if (index === -1) return\n    const next = parseInt(tokens[index + 1], 10)\n    return Number.isNaN(next) ? fallback : next\n  }\n  let increment = amount(increments, 1)\n  let set = amount(sets, 0)\n  const isListItem = getDisplay(element) === 'list-item' && name === 'list-item'\n  if (isListItem && increment === undefined) increment = -1\n  if (\n    isListItem &&\n    set === undefined &&\n    element.type === 'li' &&\n    value !== undefined &&\n    !Number.isNaN(parseInt(value, 10))\n  ) {\n    set = parseInt(value, 10)\n  }\n  const resetsCounter =\n    amount(resets, 0) !== undefined ||\n    (name === 'list-item' &&\n      typeof element.type === 'string' &&\n      ['ol', 'ul', 'menu', 'dir'].includes(element.type))\n  return { increment, set, resetsCounter }\n}\n\n/**\n * The initial value of a `reversed()` counter without a value, from the\n * elements in its scope that change it: the number of list items in a\n * reversed list.\n *\n * @see https://www.w3.org/TR/css-lists-3/#instantiating-counters\n */\nexport function getReversedStart(children: Child[], name: string) {\n  let num = 0\n  let first = true\n  let done = false\n  const visit = (nodes: unknown[]) => {\n    for (const node of nodes) {\n      if (done || !isElement(node)) continue\n      if (getDisplay(node) === 'none') continue\n      const { increment, set, resetsCounter } = getChanges(node, name)\n      if (increment !== undefined || set !== undefined) {\n        const negated = -(increment ?? 0)\n        if (first) {\n          num += negated\n          first = false\n        }\n        if (set !== undefined) {\n          num += set\n          done = true\n          return\n        }\n        num += negated\n      }\n      // Descendants of a nested counter are in its scope.\n      if (!resetsCounter) visit([].concat(node.props?.children ?? []).flat())\n    }\n  }\n  visit(children)\n  return num\n}\n\n/** Applies `counter-reset`, `counter-increment` and `counter-set`, in order. */\nexport function applyCounters(\n  counters: Counters,\n  style: SerializedStyle,\n  scope: string,\n  children: Child[]\n) {\n  const resets = (style.counterReset as unknown as CounterChange[]) || []\n  const increments =\n    (style.counterIncrement as unknown as CounterChange[]) || []\n  const sets = (style.counterSet as unknown as CounterChange[]) || []\n  for (const { name, value, reversed } of resets) {\n    counters.reset(\n      name,\n      value ?? (reversed ? getReversedStart(children, name) : 0),\n      scope,\n      reversed\n    )\n  }\n  for (const { name, value } of increments) {\n    counters.increment(name, value ?? 1, scope)\n  }\n  // List items increment `list-item`, unless it's incremented explicitly.\n  if (style.__listItem && !increments.some((c) => c.name === 'list-item')) {\n    counters.increment(\n      'list-item',\n      counters.isReversed('list-item') ? -1 : 1,\n      scope\n    )\n  }\n  for (const { name, value } of sets) {\n    counters.set(name, value ?? 0, scope)\n  }\n}\n\nconst span = (\n  style: Record<string, string | number>,\n  children?: Child | Child[]\n): ReactElement =>\n  ({\n    type: 'span',\n    key: null,\n    props: { style, children, __marker: true },\n  } as unknown as ReactElement)\n\n/** The styles of the marker that it inherits from its list item. */\nfunction markerFont(style: SerializedStyle) {\n  const font = {\n    color: style.color,\n    fontFamily: style.fontFamily,\n    fontSize: style.fontSize,\n    fontWeight: style.fontWeight,\n    fontStyle: style.fontStyle,\n    lineHeight: style.lineHeight,\n    letterSpacing: style.letterSpacing,\n    wordSpacing: style.wordSpacing,\n    textTransform: 'none',\n    textDecoration: 'none',\n    whiteSpace: 'pre',\n    // Like `font-variant-numeric: tabular-nums` of `::marker`.\n    fontFeatureSettings: '\"tnum\"',\n  } as Record<string, string | number>\n  for (const key in font) if (font[key] === undefined) delete font[key]\n  return font\n}\n\n/**\n * The spaces at the end of an inside marker. Like in browsers, the line can\n * break after them, as the `white-space` of the list item applies there.\n */\nconst trailingSpace = (font: Record<string, string | number>, spaces: string) =>\n  span({ ...font, whiteSpace: 'pre-wrap' }, spaces)\n\n/**\n * The elements of the marker of a list item, to be laid out at the start of\n * its first line. Outside markers take no space. `ascent` is the rounded\n * ascent of the list item's font.\n *\n * Symbols are drawn as shapes, sized and positioned like in Chrome.\n */\nexport function getListMarker(\n  style: SerializedStyle,\n  value: number,\n  ascent: number\n): ReactElement[] {\n  const type = String(style.listStyleType ?? 'disc')\n  const image = String(style.listStyleImage ?? 'none')\n  const outside = style.listStylePosition !== 'inside'\n  const font = markerFont(style)\n\n  const url = /^url\\((['\"]?)(.*)\\1\\)$/is.exec(image.trim())\n  if (url) {\n    // Images sit on the baseline, 7px from the content.\n    const img = {\n      type: 'img',\n      key: null,\n      props: {\n        src: url[2],\n        style: outside ? { marginRight: 7, flexShrink: 0 } : { marginRight: 7 },\n        __naturalSize: true,\n      },\n    } as unknown as ReactElement\n    return outside\n      ? [\n          span(\n            {\n              ...font,\n              display: 'inline-flex',\n              width: 0,\n              justifyContent: 'flex-end',\n              alignItems: 'baseline',\n            },\n            [img]\n          ),\n        ]\n      : [img]\n  }\n\n  if (type === 'none') return []\n\n  const name = type.toLowerCase()\n  if (SYMBOL_MARKERS.has(name)) {\n    const offset = Math.floor((ascent * 2) / 3)\n    const disclosure = name.startsWith('disclosure')\n    const size = disclosure\n      ? (style.fontSize as number) * 0.66\n      : Math.floor((offset + 1) / 2)\n    const top = disclosure\n      ? ascent - size\n      : Math.floor((3 * (ascent - offset)) / 2)\n    // Outside markers start before the content, and take no space.\n    const left = outside ? (disclosure ? -(size + 8) : -(offset + 7)) : 0\n    const shape: Record<string, string | number> = {\n      display: 'inline-block',\n      width: size,\n      height: size,\n      // Its baseline is the bottom of its margin box.\n      marginBottom: ascent - top - size,\n      marginLeft: left,\n      marginRight: outside\n        ? -left - size\n        : disclosure\n        ? '0.4em'\n        : `calc(1.1em - ${size}px)`,\n      backgroundColor: style.color,\n    }\n    if (name === 'disc') shape.borderRadius = '50%'\n    if (name === 'circle') {\n      // A 1px stroke centered on the edge of the circle.\n      Object.assign(shape, {\n        width: size + 1,\n        height: size + 1,\n        marginLeft: left - 0.5,\n        marginBottom: ascent - top - size - 0.5,\n        marginRight: outside\n          ? -left - size - 0.5\n          : `calc(1.1em - ${size + 0.5}px)`,\n        backgroundColor: 'transparent',\n        boxSizing: 'border-box',\n        border: `1px solid ${style.color}`,\n        borderRadius: '50%',\n      })\n    }\n    if (name === 'disclosure-open') {\n      shape.clipPath = 'polygon(0 0, 100% 0, 50% 86.6%)'\n    } else if (name === 'disclosure-closed') {\n      shape.clipPath = 'polygon(0 0, 86.6% 50%, 0 100%)'\n    }\n    // Inside disc, circle and square markers are followed by a space.\n    return outside || disclosure\n      ? [span({ ...font, ...shape })]\n      : [span({ ...font, ...shape }), trailingSpace(font, ' ')]\n  }\n\n  const text = getMarkerText(value, type)\n  if (!outside) {\n    const [, content, spaces] = /^(.*?)(\\s*)$/s.exec(text)\n    return spaces\n      ? [span(font, content), trailingSpace(font, spaces)]\n      : [span(font, text)]\n  }\n  // The text ends at the start of the content.\n  return [\n    span(\n      {\n        ...font,\n        display: 'inline-flex',\n        width: 0,\n        justifyContent: 'flex-end',\n      },\n      [span({ flexShrink: 0 }, text)]\n    ),\n  ]\n}\n\n/** Elements that pass markers to their first line, or their first item. */\nconst MARKER_CONTAINERS = new Set([\n  'block',\n  'list-item',\n  'flow-root',\n  'flex',\n  'grid',\n])\n\n/**\n * Where the markers of an element go. In a block container, they go into its\n * first in-flow child if it's a block-level container, to be in its first\n * line, or before the first in-flow child. In a flex or grid container, they\n * go into its first item.\n */\nexport function findMarkerTarget(\n  children: Child[],\n  isItemContainer: boolean\n): { index: number; nested: boolean; wrap?: boolean } {\n  for (let index = 0; index < children.length; index++) {\n    const child = children[index]\n    if (typeof child === 'string') {\n      if (!child.trim()) continue\n      // Text in a flex or grid container is wrapped in an item with them.\n      return { index, nested: false, wrap: isItemContainer }\n    }\n    if (!isElement(child)) continue\n    const style = child.props?.style || {}\n    const display = getDisplay(child)\n    if (\n      display === 'none' ||\n      style.position === 'absolute' ||\n      style.position === 'fixed' ||\n      (style.float && style.float !== 'none')\n    ) {\n      continue\n    }\n    const replaced = child.type === 'img' || child.type === 'svg'\n    return {\n      index,\n      nested:\n        !replaced &&\n        typeof child.type === 'string' &&\n        (isItemContainer || MARKER_CONTAINERS.has(display)),\n    }\n  }\n  return { index: children.length, nested: false }\n}\n","/**\n * The longhands of shorthand properties, in the camel case of inline styles.\n * Shorthands of shorthands, e.g. `border`, list both. Properties with the\n * same prefix aren't always longhands, e.g. `flexDirection` isn't one of\n * `flex`, and `borderRadius` isn't one of `border`.\n */\n\nconst SIDES = ['Top', 'Right', 'Bottom', 'Left']\nconst sides = (prefix: string, suffix = '') =>\n  SIDES.map((side) => prefix + side + suffix)\n\nconst LONGHANDS: Record<string, string[]> = {\n  margin: sides('margin'),\n  padding: sides('padding'),\n  inset: ['top', 'right', 'bottom', 'left'],\n  border: [\n    'borderWidth',\n    'borderStyle',\n    'borderColor',\n    ...sides('border'),\n    'borderImage',\n  ],\n  borderWidth: sides('border', 'Width'),\n  borderStyle: sides('border', 'Style'),\n  borderColor: sides('border', 'Color'),\n  ...Object.fromEntries(\n    SIDES.map((side) => [\n      'border' + side,\n      ['Width', 'Style', 'Color'].map((part) => 'border' + side + part),\n    ])\n  ),\n  borderRadius: [\n    'borderTopLeftRadius',\n    'borderTopRightRadius',\n    'borderBottomRightRadius',\n    'borderBottomLeftRadius',\n  ],\n  borderImage: [\n    'borderImageSource',\n    'borderImageSlice',\n    'borderImageWidth',\n    'borderImageOutset',\n    'borderImageRepeat',\n  ],\n  outline: ['outlineColor', 'outlineStyle', 'outlineWidth'],\n  background: [\n    'backgroundColor',\n    'backgroundImage',\n    'backgroundPosition',\n    'backgroundSize',\n    'backgroundRepeat',\n    'backgroundOrigin',\n    'backgroundClip',\n    'backgroundAttachment',\n  ],\n  backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],\n  font: [\n    'fontStyle',\n    'fontVariant',\n    'fontWeight',\n    'fontStretch',\n    'fontSize',\n    'lineHeight',\n    'fontFamily',\n    'fontKerning',\n    'fontSizeAdjust',\n  ],\n  fontVariant: [\n    'fontVariantCaps',\n    'fontVariantNumeric',\n    'fontVariantLigatures',\n    'fontVariantEastAsian',\n    'fontVariantPosition',\n    'fontVariantAlternates',\n    'fontVariantEmoji',\n  ],\n  fontSynthesis: [\n    'fontSynthesisWeight',\n    'fontSynthesisStyle',\n    'fontSynthesisSmallCaps',\n    'fontSynthesisPosition',\n  ],\n  textDecoration: [\n    'textDecorationLine',\n    'textDecorationStyle',\n    'textDecorationColor',\n    'textDecorationThickness',\n  ],\n  listStyle: ['listStyleType', 'listStylePosition', 'listStyleImage'],\n  flex: ['flexGrow', 'flexShrink', 'flexBasis'],\n  flexFlow: ['flexDirection', 'flexWrap'],\n  gap: ['rowGap', 'columnGap'],\n  grid: ['gridTemplate', 'gridAutoRows', 'gridAutoColumns', 'gridAutoFlow'],\n  gridTemplate: [\n    'gridTemplateRows',\n    'gridTemplateColumns',\n    'gridTemplateAreas',\n  ],\n  gridArea: ['gridRow', 'gridColumn'],\n  gridRow: ['gridRowStart', 'gridRowEnd'],\n  gridColumn: ['gridColumnStart', 'gridColumnEnd'],\n  placeContent: ['alignContent', 'justifyContent'],\n  placeItems: ['alignItems', 'justifyItems'],\n  placeSelf: ['alignSelf', 'justifySelf'],\n  overflow: ['overflowX', 'overflowY'],\n  mask: [\n    'maskImage',\n    'maskPosition',\n    'maskSize',\n    'maskRepeat',\n    'maskOrigin',\n    'maskClip',\n    'maskComposite',\n    'maskMode',\n  ],\n  // Satori stores these shorthands as its own longhands.\n  textShadow: ['textShadowOffset', 'textShadowColor', 'textShadowRadius'],\n  WebkitTextStroke: ['WebkitTextStrokeWidth', 'WebkitTextStrokeColor'],\n}\n\nconst cache = new Map<string, Set<string>>()\n\n/** The longhands of a property, recursively, if it's a shorthand. */\nexport function getLonghands(prop: string): Set<string> {\n  let longhands = cache.get(prop)\n  if (!longhands) {\n    longhands = new Set()\n    for (const longhand of LONGHANDS[prop] || []) {\n      longhands.add(longhand)\n      for (const nested of getLonghands(longhand)) longhands.add(nested)\n    }\n    cache.set(prop, longhands)\n  }\n  return longhands\n}\n\n/** Whether `key` is the property `prop` or one of its longhands. */\nexport function isLonghandOf(key: string, prop: string) {\n  return key === prop || getLonghands(prop).has(key)\n}\n","import { SerializedStyle } from './expand.js'\nimport { getLonghands } from './shorthands.js'\n\nconst list = new Set([\n  'color',\n  'font',\n  'fontFamily',\n  'fontSize',\n  'fontStyle',\n  'fontWeight',\n  'fontFeatureSettings',\n  'fontSynthesis',\n  'fontSynthesisWeight',\n  'fontSynthesisStyle',\n  'fontKerning',\n  'fontVariantLigatures',\n  'fontVariantCaps',\n  'fontVariantNumeric',\n  'fontVariantEastAsian',\n  'fontVariantPosition',\n  'fontVariantAlternates',\n  'letterSpacing',\n  'wordSpacing',\n  'listStyleType',\n  'listStylePosition',\n  'listStyleImage',\n  'lineHeight',\n  'textAlign',\n  'textIndent',\n  'textTransform',\n  'textShadowOffset',\n  'textShadowColor',\n  'textShadowRadius',\n  'WebkitTextStrokeWidth',\n  'WebkitTextStrokeColor',\n  'WebkitTextFillColor',\n  'paintOrder',\n  'textDecorationLine',\n  'textDecorationStyle',\n  'textDecorationColor',\n  'textDecorationSkipInk',\n  'textDecorationThickness',\n  'textUnderlineOffset',\n  'whiteSpace',\n  'textWrap',\n  'transform',\n  'wordBreak',\n  'overflowWrap',\n  'tabSize',\n  'visibility',\n  'direction',\n\n  // Special properties of Satori:\n  '_viewportWidth',\n  '_viewportHeight',\n  '_chRatio',\n  '_inheritedClipPathId',\n  '_inheritedMaskId',\n  '_inheritedBackgroundClipTextPath',\n  '_inheritedBackgroundClipTextHasBackground',\n  '_alwaysDrawn',\n  '_cullMargin',\n])\n\n/**\n * Whether a property, or the longhands of a shorthand, are inherited. Satori\n * passes `transform` down for its own use, but it isn't inherited.\n */\nexport function isInherited(prop: string) {\n  if (prop === 'transform') return false\n  if (list.has(prop)) return true\n  for (const longhand of getLonghands(prop)) {\n    if (list.has(longhand)) return true\n  }\n  return false\n}\n\nexport default function inheritable(style: SerializedStyle): SerializedStyle {\n  const inheritedStyle: SerializedStyle = {}\n  for (const prop in style) {\n    // CSS custom properties (--*) always inherit\n    if (list.has(prop) || prop.startsWith('--')) {\n      inheritedStyle[prop] = style[prop]\n    }\n  }\n  return inheritedStyle\n}\n","/**\n * Converts logical properties to physical ones, for the horizontal writing\n * mode of Satori: the inline axis is horizontal, and its start is the left\n * side, or the right side with `direction: rtl`.\n *\n * @see https://www.w3.org/TR/css-logical-1/\n */\n\nimport valueParser from 'postcss-value-parser'\n\ntype Style = Record<string, string | number>\n\nconst BOX_SIDE =\n  /^(margin|padding|inset|border)(Inline|Block)(Start|End)?(Width|Style|Color)?$/\nconst SIZE = /^(?:(min|max)(Inline|Block)|(inline|block))Size$/\nconst RADIUS = /^border(Start|End)(Start|End)Radius$/\n\nconst isLogical = (property: string) =>\n  BOX_SIDE.test(property) || SIZE.test(property) || RADIUS.test(property)\n\n/** The values of a declaration, separated by whitespace outside functions. */\nfunction splitValues(value: string | number) {\n  if (typeof value === 'number') return [value]\n  return valueParser(value)\n    .nodes.filter((node) => node.type !== 'space')\n    .map((node) => valueParser.stringify(node))\n}\n\n/**\n * The style with logical properties replaced by physical ones, in the same\n * position, so that later declarations still override earlier ones.\n */\nexport function toPhysicalProperties(style: Style, direction: string): Style {\n  let hasLogical = false\n  for (const property in style) {\n    if (isLogical(property)) {\n      hasLogical = true\n      break\n    }\n  }\n  if (!hasLogical) return style\n\n  const [inlineStart, inlineEnd] =\n    direction === 'rtl' ? ['Right', 'Left'] : ['Left', 'Right']\n  const sides = (axis: string) =>\n    axis === 'Inline' ? [inlineStart, inlineEnd] : ['Top', 'Bottom']\n\n  const result: Style = {}\n  const set = (property: string, value: string | number) => {\n    delete result[property]\n    result[property] = value\n  }\n\n  for (const property in style) {\n    const value = style[property]\n    const box = BOX_SIDE.exec(property)\n    const size = SIZE.exec(property)\n    const radius = RADIUS.exec(property)\n    if (box) {\n      const [, kind, axis, edge, part = ''] = box\n      const [start, end] = sides(axis)\n      const name = (side: string) =>\n        kind === 'inset' ? side.toLowerCase() : `${kind}${side}${part}`\n      if (edge) {\n        set(name(edge === 'Start' ? start : end), value)\n      } else if (kind === 'border' && !part) {\n        // `border-inline` sets both sides to the same border.\n        set(name(start), value)\n        set(name(end), value)\n      } else {\n        // Shorthands have the start value, and the end value if it differs.\n        const values = splitValues(value)\n        set(name(start), values[0])\n        set(name(end), values.length > 1 ? values[1] : values[0])\n      }\n    } else if (size) {\n      const [, limit, axis = size[3]] = size\n      const dimension = axis.toLowerCase() === 'inline' ? 'Width' : 'Height'\n      set(limit ? `${limit}${dimension}` : dimension.toLowerCase(), value)\n    } else if (radius) {\n      // The first edge is of the block axis, and the second of the inline axis.\n      const [, block, inline] = radius\n      set(\n        `border${block === 'Start' ? 'Top' : 'Bottom'}${\n          inline === 'Start' ? inlineStart : inlineEnd\n        }Radius`,\n        value\n      )\n    } else {\n      set(property, value)\n    }\n  }\n  return result\n}\n","/**\n * This module expands the CSS properties to get rid of shorthands, as well as\n * cleaning up some properties.\n */\n\nimport { getPropertyName, getStylesForProperty } from 'css-to-react-native'\nimport { parseFontShorthand } from '../parser/font.js'\nimport {\n  expandBorderRadius,\n  isRadius,\n  splitRadius,\n} from '../parser/border-radius.js'\nimport { parseElementStyle } from 'css-background-parser'\nimport { parse as parseBoxShadow } from 'css-box-shadow'\nimport cssColorParse from 'parse-css-color'\nimport {\n  convertColors as convertColorValues,\n  isColor,\n} from '../parser/color.js'\nimport valueParser from 'postcss-value-parser'\n\nimport parseTransformOrigin, {\n  ParsedTransformOrigin,\n} from '../transform-origin.js'\nimport { isString, lengthToNumber, v, splitEffects } from '../utils.js'\nimport {\n  expandFontVariant,\n  isFontVariantProperty,\n  parseFontVariant,\n} from '../text/font-features.js'\nimport { MaskProperty, expandMask, parseMask } from '../parser/mask.js'\nimport { splitCornerShapeValues } from '../parser/corner-shape.js'\nimport { parseBackdropFilter } from '../parser/backdrop-filter.js'\nimport {\n  expandGrid,\n  expandGridPlacement,\n  expandGridTemplate,\n} from '../parser/grid.js'\nimport { expandBackground } from '../parser/background.js'\nimport parseTransform, {\n  resolveTransform,\n  type TransformFunction,\n} from '../parser/transform.js'\nimport { FontWeight, FontStyle } from '../font.js'\nimport { MATH_FUNCTION, parseMath } from '../parser/math.js'\nimport {\n  extractCustomProperties,\n  mergeVariables,\n  resolveVariables,\n  CSSVariables,\n} from './variables.js'\n\n// https://react-cn.github.io/react/tips/style-props-value-px.html\nconst optOutPx = new Set([\n  'flex',\n  'flexGrow',\n  'flexShrink',\n  'flexBasis',\n  'fontWeight',\n  'lineHeight',\n  'opacity',\n  'scale',\n  'scaleX',\n  'scaleY',\n])\nconst keepNumber = new Set(['lineHeight'])\n\nfunction handleFallbackColor(\n  prop: string,\n  parsed: Record<string, string>,\n  rawInput: string,\n  currentColor: string\n) {\n  if (\n    prop === 'textDecoration' &&\n    !rawInput.includes(parsed.textDecorationColor)\n  ) {\n    parsed.textDecorationColor = currentColor\n  }\n  return parsed\n}\n\nconst TEXT_DECORATION_LINES = ['underline', 'overline', 'line-through', 'blink']\nconst TEXT_DECORATION_STYLES = ['solid', 'double', 'dotted', 'dashed', 'wavy']\n\n/** `none`, or any of the lines. `blink` is valid, but not drawn. */\nfunction parseTextDecorationLine(lines: string[]) {\n  if (lines.includes('none')) {\n    if (lines.length > 1) throw new Error('Invalid `textDecorationLine` value.')\n    return 'none'\n  }\n  if (\n    !lines.length ||\n    new Set(lines).size !== lines.length ||\n    lines.some((line) => !TEXT_DECORATION_LINES.includes(line))\n  ) {\n    throw new Error('Invalid `textDecorationLine` value.')\n  }\n  return lines.filter((line) => line !== 'blink').join(' ') || 'none'\n}\n\n/**\n * Values of `text-decoration-thickness` and `text-underline-offset`: `auto`,\n * `from-font` (only the thickness), a length or a percentage.\n */\nfunction isTextDecorationLength(value: string) {\n  return (\n    value === 'auto' ||\n    value === 'from-font' ||\n    /^[+-]?(\\d+(?:\\.\\d*)?|\\.\\d+)(px|em|rem|vw|vh|%)?$/.test(value)\n  )\n}\n\nconst LINE_WIDTH_KEYWORDS = { thin: '1px', medium: '3px', thick: '5px' }\n\n/** Parses a `<line-width>`, or returns `undefined` if it isn't one. */\nfunction parseLineWidth(value: string) {\n  const normalized = value.toLowerCase()\n  if (normalized in LINE_WIDTH_KEYWORDS) return LINE_WIDTH_KEYWORDS[normalized]\n  if (/^\\+?(\\d+(?:\\.\\d*)?|\\.\\d+)$/.test(normalized)) return normalized + 'px'\n  if (\n    /^\\+?(\\d+(?:\\.\\d*)?|\\.\\d+)(px|em|rem|vw|vh|vmin|vmax)$/.test(normalized)\n  ) {\n    return normalized\n  }\n}\n\nconst BORDER_STYLES = new Set([\n  'none',\n  'hidden',\n  'dotted',\n  'dashed',\n  'solid',\n  'double',\n  'groove',\n  'ridge',\n  'inset',\n  'outset',\n])\nconst OUTLINE_STYLES = new Set([\n  ...[...BORDER_STYLES].filter((style) => style !== 'hidden'),\n  'auto',\n])\n\nfunction checkLineWidth(value: string | number) {\n  if (typeof value === 'number') {\n    if (value < 0) throw new Error(`Invalid line width: \"${value}\".`)\n    return value + 'px'\n  }\n  const width = parseLineWidth(value) ?? (MATH_FUNCTION.test(value) && value)\n  if (!width) throw new Error(`Invalid line width: \"${value}\".`)\n  return width\n}\n\nfunction checkLineStyle(value: string | number, styles: Set<string>) {\n  const style = String(value).trim().toLowerCase()\n  if (!styles.has(style)) throw new Error(`Invalid line style: \"${value}\".`)\n  return style\n}\n\n/**\n * Parses `<line-width> || <line-style> || <color>`, the values of `border` and\n * `outline` in any order.\n */\nfunction parseLineShorthand(value: string | number, styles: Set<string>) {\n  if (typeof value === 'number') return { width: checkLineWidth(value) }\n  let width: string | undefined\n  let style: string | undefined\n  let color: string | undefined\n  for (const token of splitValues(value)) {\n    const lower = token.toLowerCase()\n    const lineWidth =\n      parseLineWidth(token) ?? (MATH_FUNCTION.test(token) && token)\n    if (width === undefined && lineWidth) {\n      width = lineWidth\n    } else if (style === undefined && styles.has(lower)) {\n      style = lower\n    } else if (color === undefined && isColor(token)) {\n      color = token\n    } else {\n      throw new Error(`Invalid value: \"${value}\".`)\n    }\n  }\n  return { width, style, color }\n}\n\nfunction purify(name: string, value?: string | number) {\n  const num = Number(value)\n  if (isNaN(num)) return value\n  if (!optOutPx.has(name)) return num + 'px'\n  if (keepNumber.has(name)) return num\n  return String(value)\n}\n\n/** Splits a value at the spaces that aren't in parentheses. */\n/** A counter of `counter-reset`, `counter-increment` or `counter-set`. */\nexport interface CounterChange {\n  name: string\n  /** Omitted for `reversed()` counters without a value. */\n  value?: number\n  reversed?: boolean\n}\n\n/**\n * Parses `none` or `[<counter-name> <integer>?]+`, where `counter-reset` also\n * accepts `reversed(<counter-name>)`.\n */\nfunction parseCounters(\n  name: 'counterReset' | 'counterIncrement' | 'counterSet',\n  value: string | number\n): CounterChange[] {\n  const tokens = String(value).trim().split(/\\s+/)\n  if (tokens.length === 1 && tokens[0].toLowerCase() === 'none') return []\n  const counters: CounterChange[] = []\n  const invalid = () => {\n    throw new Error(`Invalid \\`${name}\\` value: \"${value}\".`)\n  }\n  // Whether the last counter can be followed by its value.\n  let canTakeValue = false\n  for (const token of tokens) {\n    const reversed = /^reversed\\(\\s*([^()\\s]+)\\s*\\)$/i.exec(token)\n    if (/^[+-]?\\d+$/.test(token)) {\n      if (!canTakeValue) invalid()\n      counters[counters.length - 1].value = parseInt(token, 10)\n      canTakeValue = false\n    } else if (reversed && name === 'counterReset') {\n      counters.push({ name: reversed[1], reversed: true })\n      canTakeValue = true\n    } else if (/^-?[_a-zA-Z][\\w-]*$/.test(token) && token !== 'none') {\n      counters.push({\n        name: token,\n        value: name === 'counterIncrement' ? 1 : 0,\n      })\n      canTakeValue = true\n    } else {\n      invalid()\n    }\n  }\n  return counters\n}\n\n/**\n * Parses `list-style`: a position, an image and a type in any order. `none`\n * sets the type, and the image unless one is given.\n */\nfunction parseListStyle(value: string) {\n  let position: string | undefined\n  let image: string | undefined\n  let type: string | undefined\n  let nones = 0\n  for (const token of splitValues(value.trim())) {\n    const lower = token.toLowerCase()\n    if (lower === 'none') nones++\n    else if ((lower === 'inside' || lower === 'outside') && !position) {\n      position = lower\n    } else if (/^url\\(/i.test(token) && !image) image = token\n    else if (!type) type = token\n    else throw new Error(`Invalid \\`listStyle\\` value: \"${value}\".`)\n  }\n  if (nones > (image ? 0 : 1) + (type ? 0 : 1)) {\n    throw new Error(`Invalid \\`listStyle\\` value: \"${value}\".`)\n  }\n  if (nones && !type) type = 'none'\n  return {\n    listStylePosition: position ?? 'outside',\n    listStyleImage: image ?? 'none',\n    listStyleType: type ?? 'disc',\n  }\n}\n\nconst ANGLE = /^[+-]?(\\d+(?:\\.\\d*)?|\\.\\d+)(deg|rad|grad|turn)$|^0$/i\n\n/**\n * Parses `translate`, `rotate` and `scale` into transform functions.\n *\n * @see https://www.w3.org/TR/css-transforms-2/#individual-transforms\n */\nfunction parseIndividualTransform(\n  name: 'translate' | 'rotate' | 'scale',\n  value: string | number\n): TransformFunction[] {\n  const invalid = () => {\n    throw new Error(`Invalid \\`${name}\\` value: \"${value}\".`)\n  }\n  if (typeof value === 'number') {\n    if (name === 'rotate' && value !== 0) invalid()\n    value = name === 'translate' ? `${value}px` : String(value)\n  }\n  const parts = splitValues(value.trim())\n  if (parts.length === 1 && parts[0].toLowerCase() === 'none') return []\n  if (!parts.length) invalid()\n  if (name === 'translate' || name === 'scale') {\n    if (parts.length > 3) invalid()\n    const fn = parts.length === 3 ? `${name}3d` : name\n    return parseTransform(`${fn}(${parts.join(', ')})`)\n  }\n  // `[x | y | z | <number>{3}] && <angle>`\n  const angleIndex = parts.findIndex((part) => ANGLE.test(part))\n  if (angleIndex === -1) invalid()\n  const angle = parts[angleIndex]\n  const axis = parts.filter((_, i) => i !== angleIndex)\n  if (axis.length === 0) return parseTransform(`rotate(${angle})`)\n  if (angleIndex !== 0 && angleIndex !== parts.length - 1) invalid()\n  if (axis.length === 1 && /^[xyz]$/i.test(axis[0])) {\n    return parseTransform(`rotate${axis[0].toUpperCase()}(${angle})`)\n  }\n  if (axis.length !== 3) invalid()\n  return parseTransform(`rotate3d(${axis.join(', ')}, ${angle})`)\n}\n\n/**\n * A line height as a multiple of the font size. Lengths and percentages are\n * of the font size, also in math functions, where unitless values are\n * multiples, e.g. Tailwind's `calc(1.25 / .875)`.\n */\nfunction resolveLineHeight(\n  value: string,\n  fontSize: number,\n  inheritedStyle: Record<string, string | number>\n) {\n  const math = MATH_FUNCTION.test(value)\n    ? parseMath(value, (length) =>\n        lengthToNumber(length, fontSize, 0, inheritedStyle)\n      )\n    : undefined\n  if (math) {\n    return math.type === 'number'\n      ? math.evaluate(0)\n      : math.evaluate(fontSize) / fontSize\n  }\n  return (\n    lengthToNumber(value, fontSize, fontSize, inheritedStyle, true) / fontSize\n  )\n}\n\nfunction splitValues(value: string) {\n  const values: string[] = []\n  let depth = 0\n  let current = ''\n  for (const char of value.trim()) {\n    if (char === '(') depth++\n    if (char === ')') depth--\n    if (/\\s/.test(char) && depth === 0) {\n      if (current) values.push(current)\n      current = ''\n    } else {\n      current += char\n    }\n  }\n  if (current) values.push(current)\n  return values\n}\n\n/** Expands 1 to 4 values to the top, right, bottom and left. */\nfunction expandEdges(\n  value: string | number,\n  [top, right, bottom, left]: string[]\n) {\n  const values = typeof value === 'number' ? [value] : splitValues(value)\n  if (!values.length || values.length > 4) {\n    throw new Error(`Invalid value: \"${value}\".`)\n  }\n  const [t, r = t, b = t, l = r] = values\n  return { [top]: t, [right]: r, [bottom]: b, [left]: l }\n}\n\n// Keywords that are combined with the next one in alignment values, e.g.\n// `first baseline` and `safe center`.\nconst ALIGNMENT_PREFIXES = new Set(['first', 'last', 'safe', 'unsafe'])\n\n/** Splits the values of a `place-*` shorthand. */\nfunction splitAlignmentValues(value: string) {\n  const tokens = value.trim().toLowerCase().split(/\\s+/)\n  const values: string[] = []\n  for (let i = 0; i < tokens.length; i++) {\n    if (ALIGNMENT_PREFIXES.has(tokens[i]) && i + 1 < tokens.length) {\n      values.push(tokens[i] + ' ' + tokens[++i])\n    } else {\n      values.push(tokens[i])\n    }\n  }\n  if (!values[0] || values.length > 2) {\n    throw new Error(`Invalid value: \"${value}\".`)\n  }\n  return values\n}\n\nconst RATIO =\n  /^((?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:e[+-]?\\d+)?)(?:\\s*\\/\\s*((?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:e[+-]?\\d+)?))?$/\n\n/**\n * Parses `aspect-ratio`: `auto`, a ratio, or both. A ratio with a zero is\n * degenerate and behaves as `auto`.\n * https://drafts.csswg.org/css-sizing-4/#aspect-ratio\n */\nfunction parseAspectRatio(value: string | number) {\n  if (typeof value === 'number') {\n    if (value < 0) throw new Error(`Invalid aspect ratio: \"${value}\".`)\n    return { aspectRatio: value > 0 ? value : 'auto' }\n  }\n  const tokens = value.trim().toLowerCase().split(/\\s+/)\n  const auto = tokens.includes('auto')\n  const ratio = tokens.filter((token) => token !== 'auto').join(' ')\n  if (!ratio && auto && tokens.length === 1) return { aspectRatio: 'auto' }\n  const match = RATIO.exec(ratio)\n  if (!match || tokens.length - (auto ? 1 : 0) > 3) {\n    throw new Error(`Invalid aspect ratio: \"${value}\".`)\n  }\n  const width = Number(match[1])\n  const height = match[2] === undefined ? 1 : Number(match[2])\n  return {\n    aspectRatio: width > 0 && height > 0 ? width / height : 'auto',\n    // With `auto`, elements with a natural ratio keep it, see `compute()`.\n    ...(auto ? { _aspectRatioAuto: true } : {}),\n  }\n}\n\nfunction handleSpecialCase(\n  name: string,\n  value: string | number,\n  currentColor: string,\n  inheritedStyle: SerializedStyle\n) {\n  if (name === 'inset') {\n    return expandEdges(value, ['top', 'right', 'bottom', 'left'])\n  }\n\n  // `normal` spacing is no extra spacing.\n  if (\n    (name === 'letterSpacing' || name === 'wordSpacing') &&\n    String(value).trim().toLowerCase() === 'normal'\n  ) {\n    return { [name]: 0 }\n  }\n\n  // The longhands of `font` are handled like when they're set by themselves.\n  if (name === 'font') {\n    const longhands: Record<string, unknown> = {}\n    for (const [longhand, longhandValue] of Object.entries(\n      parseFontShorthand(String(value))\n    )) {\n      Object.assign(\n        longhands,\n        handleSpecialCase(\n          longhand,\n          longhandValue,\n          currentColor,\n          inheritedStyle\n        ) ||\n          getStylesForProperty(longhand, purify(longhand, longhandValue), true)\n      )\n    }\n    return longhands\n  }\n\n  // `place-content`, `place-items` and `place-self` set the alignment on both\n  // axes. Without a second value, `justify-content` can't be `baseline`, so\n  // it's `start`.\n  // https://drafts.csswg.org/css-align-3/#place-content\n  if (\n    name === 'placeContent' ||\n    name === 'placeItems' ||\n    name === 'placeSelf'\n  ) {\n    const [align, justify] = splitAlignmentValues(String(value))\n    const subject = name.slice(5)\n    return {\n      [`align${subject}`]: align,\n      [`justify${subject}`]:\n        justify ??\n        (name === 'placeContent' && align.endsWith('baseline')\n          ? 'start'\n          : align),\n    }\n  }\n\n  if (name === 'aspectRatio') {\n    return parseAspectRatio(value)\n  }\n\n  // `overflow: <x> <y>`.\n  if (name === 'overflow') {\n    const values = splitValues(String(value))\n    const keywords = { visible: 1, hidden: 1, clip: 1, scroll: 1, auto: 1 }\n    if (values.length > 2) throw new Error(`Invalid value: \"${value}\".`)\n    for (const keyword of values) v(keyword, keywords, '', 'overflow')\n    const [x, y = x] = values\n    return { overflowX: x, overflowY: y }\n  }\n\n  // `overflow-clip-margin: <visual-box> || <length>`.\n  if (name === 'overflowClipMargin') {\n    let box: string | undefined\n    let margin: string | number | undefined\n    for (const token of typeof value === 'number'\n      ? [value]\n      : splitValues(value)) {\n      if (\n        box === undefined &&\n        ['content-box', 'padding-box', 'border-box'].includes(String(token))\n      ) {\n        box = String(token)\n      } else if (margin === undefined) {\n        margin = token\n      } else {\n        throw new Error(`Invalid value: \"${value}\".`)\n      }\n    }\n    return {\n      overflowClipMargin: margin ?? 0,\n      _overflowClipBox: box ?? 'padding-box',\n    }\n  }\n\n  // Shorthands with math functions, which aren't parsed by\n  // css-to-react-native.\n  if (typeof value === 'string' && value.includes('(')) {\n    if (name === 'margin' || name === 'padding') {\n      return expandEdges(value, [\n        `${name}Top`,\n        `${name}Right`,\n        `${name}Bottom`,\n        `${name}Left`,\n      ])\n    }\n    if (name === 'gap') {\n      const [rowGap, columnGap = rowGap] = splitValues(value)\n      return { rowGap, columnGap }\n    }\n  }\n\n  if (name === 'zIndex') {\n    const normalized = String(value).trim().toLowerCase()\n    if (normalized === 'auto') return { zIndex: 'auto' }\n    if (!/^[+-]?\\d+$/.test(normalized)) {\n      throw new Error(\n        'Invalid `zIndex` value: \"' +\n          value +\n          '\". Expected an integer or \"auto\".'\n      )\n    }\n    return { zIndex: Number(normalized) }\n  }\n\n  if (name === 'lineHeight') {\n    return { lineHeight: purify(name, value) }\n  }\n\n  // A length isn't converted to a number, which would be a number of spaces.\n  if (name === 'tabSize') {\n    return { tabSize: typeof value === 'number' ? value : String(value).trim() }\n  }\n\n  if (name === 'fontFamily') {\n    return {\n      fontFamily: (value as string).split(',').map((_v) => {\n        return _v\n          .trim()\n          .replace(/(^['\"])|(['\"]$)/g, '')\n          .toLocaleLowerCase()\n      }),\n    }\n  }\n\n  // Radii can have math functions, and different vertical radii, e.g.\n  // `border-radius: calc(1rem - 4px) / 8px`.\n  if (name === 'borderRadius' && typeof value === 'string') {\n    return expandBorderRadius(value)\n  }\n  if (\n    typeof value === 'string' &&\n    /^border(Top|Bottom)(Left|Right)Radius$/.test(name)\n  ) {\n    const radii = splitRadius(value)\n    if (!radii.length || radii.length > 2 || !radii.every(isRadius)) {\n      throw new Error(`Invalid value for CSS property \"${name}\": \"${value}\".`)\n    }\n    return { [name]: radii.join(' ') }\n  }\n\n  if (name === 'cornerShape') {\n    if (typeof value !== 'string') {\n      throw new Error('Invalid `cornerShape` value: \"' + value + '\".')\n    }\n    const values = splitCornerShapeValues(value)\n    const topLeft = values[0]\n    const topRight = values[1] || topLeft\n    const bottomRight = values[2] || topLeft\n    const bottomLeft = values[3] || topRight\n\n    return {\n      cornerTopLeftShape: topLeft,\n      cornerTopRightShape: topRight,\n      cornerBottomRightShape: bottomRight,\n      cornerBottomLeftShape: bottomLeft,\n    }\n  }\n\n  if (/^corner(TopLeft|TopRight|BottomRight|BottomLeft)Shape$/.test(name)) {\n    if (\n      typeof value !== 'string' ||\n      splitCornerShapeValues(value, 1).length !== 1\n    ) {\n      throw new Error('Invalid `' + name + '` value: \"' + value + '\".')\n    }\n    return { [name]: value }\n  }\n\n  const cornerSide = name.match(/^corner(Top|Right|Bottom|Left)Shape$/)\n  if (cornerSide) {\n    if (typeof value !== 'string') {\n      throw new Error('Invalid `' + name + '` value: \"' + value + '\".')\n    }\n    const values = splitCornerShapeValues(value, 2)\n    const first = values[0]\n    const second = values[1] || first\n    const properties = {\n      Top: ['cornerTopLeftShape', 'cornerTopRightShape'],\n      Right: ['cornerTopRightShape', 'cornerBottomRightShape'],\n      Bottom: ['cornerBottomLeftShape', 'cornerBottomRightShape'],\n      Left: ['cornerTopLeftShape', 'cornerBottomLeftShape'],\n    }[cornerSide[1]]\n\n    return { [properties[0]]: first, [properties[1]]: second }\n  }\n\n  // `border`, `borderTop`, ... and `outline`.\n  // https://drafts.csswg.org/css-backgrounds-3/#border-shorthands\n  const shorthand = /^(border(Top|Right|Bottom|Left)?|outline)$/.exec(name)\n  if (shorthand) {\n    const isOutline = name === 'outline'\n    const { width, style, color } = parseLineShorthand(\n      value,\n      isOutline ? OUTLINE_STYLES : BORDER_STYLES\n    )\n    // The initial values: a `medium` width, no style and the current color.\n    const purified = {\n      Width: width ?? LINE_WIDTH_KEYWORDS.medium,\n      Style: style ?? 'none',\n      Color: color ?? currentColor,\n    }\n    const full = {}\n    const sides = isOutline\n      ? ['outline']\n      : name === 'border'\n      ? ['borderTop', 'borderRight', 'borderBottom', 'borderLeft']\n      : [name]\n    for (const side of sides) {\n      for (const p in purified) full[side + p] = purified[p]\n    }\n    return full\n  }\n\n  if (name === 'borderWidth' || name === 'borderStyle') {\n    const property = name.slice(6)\n    const sides = expandEdges(\n      value,\n      ['Top', 'Right', 'Bottom', 'Left'].map(\n        (side) => `border${side}${property}`\n      )\n    )\n    for (const side in sides) {\n      sides[side] =\n        property === 'Width'\n          ? checkLineWidth(sides[side])\n          : checkLineStyle(sides[side], BORDER_STYLES)\n    }\n    return sides\n  }\n\n  if (/^(border(Top|Right|Bottom|Left)|outline)Width$/.test(name)) {\n    return { [name]: checkLineWidth(value) }\n  }\n\n  if (/^border(Top|Right|Bottom|Left)Style$/.test(name)) {\n    return { [name]: checkLineStyle(value, BORDER_STYLES) }\n  }\n\n  if (name === 'outlineStyle') {\n    return { [name]: checkLineStyle(value, OUTLINE_STYLES) }\n  }\n\n  if (name === 'boxShadow') {\n    if (!value) {\n      throw new Error('Invalid `boxShadow` value: \"' + value + '\".')\n    }\n    return {\n      [name]: typeof value === 'string' ? parseBoxShadow(value) : value,\n    }\n  }\n\n  if (name === 'filter') {\n    return {\n      filter: value,\n      _filters: parseBackdropFilter(\n        value,\n        inheritedStyle,\n        currentColor,\n        'filter'\n      ),\n    }\n  }\n\n  if (name === 'backdropFilter' || name === 'WebkitBackdropFilter') {\n    return {\n      _backdropFilters: parseBackdropFilter(\n        value,\n        inheritedStyle,\n        currentColor\n      ),\n    }\n  }\n\n  if (name === 'grid' || name === 'gridTemplate') {\n    if (typeof value !== 'string') throw new Error(`Invalid \\`${name}\\` value.`)\n    return name === 'grid' ? expandGrid(value) : expandGridTemplate(value)\n  }\n\n  if (name === 'listStyle') {\n    return parseListStyle(String(value))\n  }\n\n  if (name === 'listStylePosition') {\n    const position = String(value).trim().toLowerCase()\n    if (position !== 'inside' && position !== 'outside') {\n      throw new Error(`Invalid \\`listStylePosition\\` value: \"${value}\".`)\n    }\n    return { listStylePosition: position }\n  }\n\n  if (\n    name === 'counterReset' ||\n    name === 'counterIncrement' ||\n    name === 'counterSet'\n  ) {\n    return { [name]: parseCounters(name, value) }\n  }\n\n  if (name === 'translate' || name === 'rotate' || name === 'scale') {\n    return { [name]: parseIndividualTransform(name, value) }\n  }\n\n  if (name === 'transform') {\n    if (typeof value !== 'string') throw new Error('Invalid `transform` value.')\n    // Lengths are resolved later, once the font size is known.\n    return { transform: parseTransform(value) }\n  }\n\n  if (name === 'background') {\n    return expandBackground(String(value).trim())\n  }\n\n  if (name === 'mask' || name === 'WebkitMask') {\n    return expandMask(String(value).trim())\n  }\n\n  // Parsed by `css-background-parser` as lists of strings.\n  if (\n    name === 'backgroundPosition' ||\n    name === 'backgroundSize' ||\n    name === 'backgroundRepeat' ||\n    name === 'backgroundOrigin'\n  ) {\n    return { [name]: typeof value === 'number' ? `${value}px` : String(value) }\n  }\n\n  if (name === 'textShadow') {\n    // Handle multiple text shadows if provided.\n    value = value.toString().trim()\n    const result = {}\n\n    const shadows = splitEffects(value)\n\n    for (const shadow of shadows) {\n      const styles = getStylesForProperty('textShadow', shadow, true)\n      for (const k in styles) {\n        if (!result[k]) {\n          result[k] = [styles[k]]\n        } else {\n          result[k].push(styles[k])\n        }\n      }\n    }\n\n    return result\n  }\n\n  if (name === 'WebkitTextStroke') {\n    // `<line-width> || <color>` in any order. Like other shorthands, omitted\n    // values are reset to their initial values.\n    const parts = valueParser(String(value))\n      .nodes.filter((node) => node.type !== 'space')\n      .map((node) => valueParser.stringify(node))\n    let width: string | undefined\n    let color: string | undefined\n    for (const part of parts) {\n      const lineWidth = parseLineWidth(part)\n      if (lineWidth !== undefined && width === undefined) {\n        width = lineWidth\n      } else if (lineWidth === undefined && color === undefined) {\n        color = part\n      } else {\n        throw new Error('Invalid `WebkitTextStroke` value.')\n      }\n    }\n    if (!parts.length) throw new Error('Invalid `WebkitTextStroke` value.')\n\n    return {\n      WebkitTextStrokeWidth: width ?? 0,\n      WebkitTextStrokeColor: color ?? currentColor,\n    }\n  }\n\n  if (name === 'WebkitTextStrokeWidth') {\n    const width = parseLineWidth(String(value).trim())\n    if (width === undefined) {\n      throw new Error('Invalid `WebkitTextStrokeWidth` value.')\n    }\n    return { WebkitTextStrokeWidth: width }\n  }\n\n  if (name === 'WebkitBackgroundClip') {\n    return { backgroundClip: value }\n  }\n\n  if (name === 'fontVariant') {\n    return expandFontVariant(value)\n  }\n  if (isFontVariantProperty(name)) {\n    return { [name]: parseFontVariant(name, value) }\n  }\n\n  // `wordWrap` is a legacy name of `overflowWrap`.\n  if (name === 'overflowWrap' || name === 'wordWrap') {\n    const normalized = String(value).trim().toLowerCase()\n    if (!['normal', 'break-word', 'anywhere'].includes(normalized)) {\n      throw new Error(`Invalid \\`${name}\\` value.`)\n    }\n    return { overflowWrap: normalized }\n  }\n\n  if (name === 'paintOrder') {\n    // `normal | [ fill || stroke || markers ]`\n    const normalized = String(value).trim().toLowerCase()\n    const keywords = normalized.split(/\\s+/)\n    if (\n      normalized !== 'normal' &&\n      (keywords.length > 3 ||\n        new Set(keywords).size !== keywords.length ||\n        keywords.some((k) => !['fill', 'stroke', 'markers'].includes(k)))\n    ) {\n      throw new Error('Invalid `paintOrder` value.')\n    }\n    // Omitted keywords are painted after the others, in the default order.\n    const order = [...keywords, 'fill', 'stroke', 'markers'].filter(\n      (k, i, all) => all.indexOf(k) === i\n    )\n    const isNormal =\n      normalized === 'normal' || order.join(' ') === 'fill stroke markers'\n    return { paintOrder: isNormal ? 'normal' : keywords.join(' ') }\n  }\n\n  if (name === 'mixBlendMode') {\n    return {\n      mixBlendMode: v(\n        String(value).trim(),\n        { ...BLEND_MODES, 'plus-lighter': 'plus-lighter' },\n        'normal',\n        'mixBlendMode'\n      ),\n    }\n  }\n\n  // A blend mode for each background layer.\n  if (name === 'backgroundBlendMode') {\n    const modes = String(value)\n      .split(',')\n      .map((mode) => mode.trim().toLowerCase())\n    if (modes.some((mode) => !(mode in BLEND_MODES))) {\n      throw new Error('Invalid `backgroundBlendMode` value.')\n    }\n    return { backgroundBlendMode: modes.join(',') }\n  }\n\n  if (name === 'isolation') {\n    return {\n      isolation: v(\n        String(value).trim(),\n        { auto: 'auto', isolate: 'isolate' },\n        'auto',\n        'isolation'\n      ),\n    }\n  }\n\n  if (name === 'gap') {\n    // `<row-gap> <column-gap>?`\n    const [rowGap, columnGap = rowGap, ...rest] = String(value)\n      .trim()\n      .split(/\\s+/)\n    if (rest.length) throw new Error('Invalid `gap` value.')\n    return {\n      rowGap: purify('rowGap', rowGap),\n      columnGap: purify('columnGap', columnGap),\n    }\n  }\n\n  if (name === 'gridRow' || name === 'gridColumn' || name === 'gridArea') {\n    return expandGridPlacement(name, value)\n  }\n\n  // Parsed by `compute()`, which resolves lengths in track lists.\n  if (\n    [\n      'gridTemplateColumns',\n      'gridTemplateRows',\n      'gridTemplateAreas',\n      'gridAutoColumns',\n      'gridAutoRows',\n      'gridAutoFlow',\n      'gridRowStart',\n      'gridRowEnd',\n      'gridColumnStart',\n      'gridColumnEnd',\n    ].includes(name)\n  ) {\n    return { [name]: value }\n  }\n\n  if (name === 'textDecoration') {\n    // `<line> || <style> || <color> || <thickness>`. Like other shorthands,\n    // omitted values are reset to their initial values.\n    const lines: string[] = []\n    let decorationStyle: string | undefined\n    let color: string | undefined\n    let thickness: string | undefined\n    const parts = valueParser(String(value))\n      .nodes.filter((node) => node.type !== 'space')\n      .map((node) => valueParser.stringify(node))\n    for (const part of parts) {\n      const keyword = part.toLowerCase()\n      if (\n        [...TEXT_DECORATION_LINES, 'none'].includes(keyword) &&\n        !lines.includes(keyword)\n      ) {\n        lines.push(keyword)\n      } else if (\n        TEXT_DECORATION_STYLES.includes(keyword) &&\n        decorationStyle === undefined\n      ) {\n        decorationStyle = keyword\n      } else if (isTextDecorationLength(keyword) && thickness === undefined) {\n        thickness = keyword\n      } else if (color === undefined && isColor(part)) {\n        color = part\n      } else {\n        throw new Error('Invalid `textDecoration` value.')\n      }\n    }\n    return {\n      // Without a line, e.g. `red` or `wavy blue`, it's reset to `none`.\n      textDecorationLine: lines.length\n        ? parseTextDecorationLine(lines)\n        : 'none',\n      textDecorationStyle: decorationStyle ?? 'solid',\n      textDecorationColor: color ?? currentColor,\n      textDecorationThickness: thickness ?? 'auto',\n    }\n  }\n\n  if (name === 'textDecorationLine') {\n    return {\n      textDecorationLine: parseTextDecorationLine(\n        String(value).trim().toLowerCase().split(/\\s+/)\n      ),\n    }\n  }\n\n  if (name === 'textDecorationStyle') {\n    return {\n      textDecorationStyle: v(\n        String(value).trim().toLowerCase(),\n        Object.fromEntries(TEXT_DECORATION_STYLES.map((s) => [s, s])),\n        'solid',\n        'textDecorationStyle'\n      ),\n    }\n  }\n\n  if (name === 'textDecorationThickness' || name === 'textUnderlineOffset') {\n    const normalized = purify(name, String(value).trim().toLowerCase())\n    if (\n      !isTextDecorationLength(String(normalized)) ||\n      (name === 'textUnderlineOffset' && normalized === 'from-font')\n    ) {\n      throw new Error(`Invalid \\`${name}\\` value.`)\n    }\n    return { [name]: normalized }\n  }\n\n  if (name === 'textDecorationSkipInk') {\n    const normalized = value.toString().trim().toLowerCase()\n    if (!['auto', 'none', 'all'].includes(normalized)) {\n      throw new Error('Invalid `textDecorationSkipInk` value.')\n    }\n\n    return { textDecorationSkipInk: normalized }\n  }\n\n  return\n}\n\nconst RGB_SLASH = /rgb\\((\\d+)\\s+(\\d+)\\s+(\\d+)\\s*\\/\\s*([\\.\\d]+)\\)/\nfunction normalizeColor(value: string | object) {\n  if (typeof value === 'string') {\n    if (RGB_SLASH.test(value.trim())) {\n      // rgb(255 122 127 / .2) -> rgba(255, 122, 127, .2)\n      return value.trim().replace(RGB_SLASH, (_, r, g, b, a) => {\n        return `rgba(${r}, ${g}, ${b}, ${a})`\n      })\n    }\n  }\n\n  // Recursively normalize colors in arrays and objects.\n  if (typeof value === 'object' && value !== null) {\n    for (const k in value) {\n      value[k] = normalizeColor(value[k])\n    }\n    return value\n  }\n\n  return value\n}\n\ntype MainStyle = {\n  color: string\n  fontSize: number\n  transformOrigin: ParsedTransformOrigin\n  maskImage: MaskProperty[]\n  opacity: number\n  textTransform: string\n  whiteSpace: string\n  wordBreak: string\n  textAlign: string\n  textIndent: number | string\n  lineHeight: number | string\n  letterSpacing: number\n\n  fontFamily: string | string[]\n  fontWeight: FontWeight\n  fontStyle: FontStyle\n  fontFeatureSettings: string\n\n  borderTopWidth: number\n  borderLeftWidth: number\n  borderRightWidth: number\n  borderBottomWidth: number\n\n  paddingTop: number\n  paddingLeft: number\n  paddingRight: number\n  paddingBottom: number\n\n  flexGrow: number\n  flexShrink: number\n\n  gap: number\n  rowGap: number\n  columnGap: number\n\n  textShadowOffset: {\n    width: number\n    height: number\n  }[]\n  textShadowColor: string[]\n  textShadowRadius: number[]\n  WebkitTextStrokeWidth: number\n  WebkitTextStrokeColor: string\n  WebkitTextFillColor: string\n  paintOrder: string\n  textDecorationSkipInk: 'auto' | 'none' | 'all'\n}\n\ntype OtherStyle = Exclude<Record<PropertyKey, string | number>, keyof MainStyle>\n\nexport type SerializedStyle = Partial<MainStyle & OtherStyle>\n\nconst BLEND_MODES = {\n  normal: 'normal',\n  multiply: 'multiply',\n  screen: 'screen',\n  overlay: 'overlay',\n  darken: 'darken',\n  lighten: 'lighten',\n  'color-dodge': 'color-dodge',\n  'color-burn': 'color-burn',\n  'hard-light': 'hard-light',\n  'soft-light': 'soft-light',\n  difference: 'difference',\n  exclusion: 'exclusion',\n  hue: 'hue',\n  saturation: 'saturation',\n  color: 'color',\n  luminosity: 'luminosity',\n}\n\n// Sizes, which can be sizing keywords and `fit-content()`.\nconst SIZES = new Set([\n  'width',\n  'height',\n  'minWidth',\n  'minHeight',\n  'maxWidth',\n  'maxHeight',\n  'flexBasis',\n])\n\n// Lengths that can have percentages in `calc()`.\nconst CALC_LENGTHS = new Set([\n  'width',\n  'height',\n  'minWidth',\n  'minHeight',\n  'maxWidth',\n  'maxHeight',\n  'marginTop',\n  'marginRight',\n  'marginBottom',\n  'marginLeft',\n  'paddingTop',\n  'paddingRight',\n  'paddingBottom',\n  'paddingLeft',\n  'top',\n  'right',\n  'bottom',\n  'left',\n  'flexBasis',\n  'gap',\n  'rowGap',\n  'columnGap',\n])\n\nconst VALID_IMAGE =\n  /^(none|url\\(.*\\)|(repeating-)?(linear|radial|conic)-gradient\\(.*\\))$/is\n\nexport default function expand(\n  style: Record<string, string | number> | undefined,\n  inheritedStyle: SerializedStyle,\n  onStyleError?: (error: Error) => void,\n  convertColors = true\n): SerializedStyle {\n  const serializedStyle: SerializedStyle = {}\n\n  // Extract inherited CSS variables\n  const inheritedVariables: CSSVariables = {}\n  for (const prop in inheritedStyle) {\n    if (prop.startsWith('--')) {\n      inheritedVariables[prop] = String(inheritedStyle[prop])\n    }\n  }\n\n  // Extract and resolve CSS variables from current style\n  let currentVariables: CSSVariables = {}\n  let processableStyle = style\n\n  if (style) {\n    const { variables, remainingStyle } = extractCustomProperties(style)\n    currentVariables = variables\n    processableStyle = remainingStyle\n  }\n\n  // Merge variables (current overrides inherited)\n  const mergedVariables = mergeVariables(inheritedVariables, currentVariables)\n\n  // Store merged variables in the serialized style for inheritance\n  for (const varName in mergedVariables) {\n    serializedStyle[varName] = mergedVariables[varName]\n  }\n\n  if (processableStyle) {\n    // Resolve CSS variables in color property before processing. A color that\n    // is invalid at computed-value time is inherited.\n    const color = processableStyle.color\n      ? resolveVariables(processableStyle.color, mergedVariables)\n      : undefined\n    let resolvedColor =\n      color !== undefined && String(color).trim() ? String(color) : undefined\n    // `currentColor` in `color` is the inherited color.\n    if (resolvedColor && resolvedColor.toLowerCase() !== 'currentcolor') {\n      resolvedColor = convertColors\n        ? convertColorValues(resolvedColor, String(inheritedStyle.color))\n        : convertCurrentColorToActualValue(\n            resolvedColor,\n            String(inheritedStyle.color)\n          )\n    }\n\n    const currentColor = getCurrentColor(resolvedColor, inheritedStyle.color)\n\n    serializedStyle.color = currentColor\n\n    for (const prop in processableStyle) {\n      if (prop.startsWith('_')) {\n        const error = new Error(\n          `Invalid style property: ${JSON.stringify(prop)}`\n        )\n        if (!onStyleError) throw error\n        onStyleError(error)\n        continue\n      }\n\n      // Like in React, `undefined` and `null` values are ignored.\n      if (prop === 'color' || processableStyle[prop] == null) {\n        continue\n      }\n\n      const name = getPropertyName(prop)\n      // Resolve CSS variables before preprocessing\n      const resolvedValue = resolveVariables(\n        processableStyle[prop],\n        mergedVariables\n      )\n      // Like in browsers, a declaration that is invalid at computed-value\n      // time, or empty after var() is resolved, behaves as `unset`: inherited\n      // properties keep the inherited value, and others their initial value.\n      if (\n        resolvedValue === undefined ||\n        (typeof resolvedValue === 'string' &&\n          !resolvedValue.trim() &&\n          resolvedValue !== processableStyle[prop])\n      ) {\n        continue\n      }\n      // Colors are converted to be parsed. When they're kept, the converted\n      // ones are replaced by the original ones afterwards.\n      const kept = convertColors ? undefined : new Map<string, string>()\n      const value = normalizeColorKeywords(\n        name,\n        preprocess(resolvedValue, currentColor, kept),\n        convertColors\n      )\n\n      try {\n        const resolvedStyle =\n          handleSpecialCase(name, value, currentColor, inheritedStyle) ||\n          handleFallbackColor(\n            name,\n            getStylesForProperty(name, purify(name, value), true),\n            value as string,\n            currentColor\n          )\n\n        Object.assign(\n          serializedStyle,\n          kept?.size ? restoreColors(resolvedStyle, kept) : resolvedStyle\n        )\n      } catch (err) {\n        // Attach the rule itself if it's not included in the error message.\n        const error = new Error(\n          err.message.includes(value)\n            ? err.message\n            : `${err.message}\\n  in CSS rule \\`${name}: ${value}\\`.`\n        )\n        if (!onStyleError) throw error\n        onStyleError(error)\n      }\n    }\n  }\n\n  // Parse background images. A declaration with an invalid image is ignored\n  // with `onStyleError`.\n  const checkImages = (property: string, layers: { image: string }[]) => {\n    const invalid = layers.find(({ image }) => !VALID_IMAGE.test(image.trim()))\n    if (!invalid) return true\n    const error = new Error(`Invalid background image: \"${invalid.image}\"`)\n    if (!onStyleError) throw error\n    onStyleError(error)\n    delete serializedStyle[property]\n    return false\n  }\n  if (serializedStyle.backgroundImage) {\n    const { backgrounds } = parseElementStyle(serializedStyle)\n    if (checkImages('backgroundImage', backgrounds)) {\n      // Blend modes are repeated for the layers, like other lists.\n      const modes = serializedStyle.backgroundBlendMode\n        ? String(serializedStyle.backgroundBlendMode).split(',')\n        : []\n      backgrounds.forEach((background, index) => {\n        if (modes.length) {\n          ;(background as any).blendMode = modes[index % modes.length]\n        }\n      })\n      serializedStyle.backgroundImage = backgrounds\n    }\n  }\n\n  if (serializedStyle.maskImage || serializedStyle['WebkitMaskImage']) {\n    const masks = parseMask(serializedStyle)\n    if (checkImages('maskImage', masks)) {\n      serializedStyle.maskImage = masks\n    } else {\n      delete serializedStyle['WebkitMaskImage']\n    }\n  }\n\n  // Calculate the base font size.\n  const baseFontSize = calcBaseFontSize(\n    serializedStyle.fontSize,\n    inheritedStyle.fontSize as number,\n    inheritedStyle\n  )\n  if (typeof serializedStyle.fontSize !== 'undefined') {\n    serializedStyle.fontSize = baseFontSize\n  }\n\n  if (serializedStyle.transformOrigin) {\n    serializedStyle.transformOrigin = parseTransformOrigin(\n      serializedStyle.transformOrigin as any,\n      baseFontSize\n    )\n  }\n\n  // `translate`, `rotate` and `scale` are applied before `transform`, in this\n  // order.\n  const individualTransforms = (\n    ['translate', 'rotate', 'scale'] as const\n  ).flatMap((prop) => {\n    const functions = serializedStyle[prop]\n    delete serializedStyle[prop]\n    return Array.isArray(functions) ? functions : []\n  })\n  if (individualTransforms.length) {\n    serializedStyle.transform = [\n      ...individualTransforms,\n      ...((serializedStyle.transform as unknown as TransformFunction[]) || []),\n    ] as any\n  }\n\n  if (serializedStyle.perspectiveOrigin) {\n    serializedStyle.perspectiveOrigin = parseTransformOrigin(\n      serializedStyle.perspectiveOrigin as any,\n      baseFontSize\n    ) as any\n  }\n\n  for (const prop in serializedStyle) {\n    // Custom properties are kept as they are, to be resolved where var()\n    // uses them.\n    if (prop.startsWith('--')) continue\n\n    let value = serializedStyle[prop]\n\n    // Line height needs to be relative.\n    if (prop === 'lineHeight') {\n      if (typeof value === 'string' && value !== 'normal') {\n        value = serializedStyle[prop] = resolveLineHeight(\n          value,\n          baseFontSize,\n          inheritedStyle\n        )\n      }\n    } else {\n      // Math functions are resolved, except for percentages of lengths that\n      // are only known in the layout.\n      const math =\n        typeof value === 'string' && MATH_FUNCTION.test(value)\n          ? parseMath(value, (length) =>\n              lengthToNumber(length, baseFontSize, 0, inheritedStyle)\n            )\n          : undefined\n      if (math && !math.percentage) {\n        value = serializedStyle[prop] = math.evaluate(0)\n      } else if (math && CALC_LENGTHS.has(prop)) {\n        value = serializedStyle[prop] = { calc: math.evaluate } as any\n      }\n\n      // The limit of `fit-content()` sizes is converted to px.\n      const fitContent =\n        typeof value === 'string' && SIZES.has(prop)\n          ? /^fit-content\\((.+)\\)$/i.exec(value.trim())\n          : null\n      if (fitContent && !fitContent[1].trim().endsWith('%')) {\n        const limit = lengthToNumber(\n          fitContent[1].trim(),\n          baseFontSize,\n          baseFontSize,\n          inheritedStyle\n        )\n        if (typeof limit === 'number') {\n          value = serializedStyle[prop] = `fit-content(${limit}px)` as any\n        }\n      }\n\n      // `tabSize` is a number of spaces, or a length that is kept in px.\n      if (prop === 'tabSize' && typeof value === 'string') {\n        const spaces = Number(value)\n        const len = Number.isNaN(spaces)\n          ? lengthToNumber(value, baseFontSize, baseFontSize, inheritedStyle)\n          : undefined\n        value = serializedStyle[prop] = (\n          !Number.isNaN(spaces)\n            ? spaces\n            : typeof len === 'number'\n            ? `${len}px`\n            : value\n        ) as any\n      } else if (typeof value === 'string') {\n        // Convert em and rem values to px (number).\n        const len = lengthToNumber(\n          value,\n          baseFontSize,\n          baseFontSize,\n          inheritedStyle\n        )\n        if (typeof len !== 'undefined') serializedStyle[prop] = len\n        value = serializedStyle[prop]\n      }\n\n      if (typeof value === 'string' || typeof value === 'object') {\n        const color = normalizeColor(value)\n        if (color) {\n          serializedStyle[prop] = color as any\n        }\n        value = serializedStyle[prop]\n      }\n    }\n\n    if (prop === 'opacity' && typeof value === 'number') {\n      serializedStyle.opacity = Math.min(Math.max(value, 0), 1)\n    }\n\n    if (prop === 'transform') {\n      // Convert em, rem, vw, vh values to px (number), but keep % values. An\n      // invalid argument is reported like other invalid values.\n      try {\n        serializedStyle.transform = resolveTransform(\n          value as unknown as TransformFunction[],\n          (length) =>\n            lengthToNumber(length, baseFontSize, baseFontSize, inheritedStyle)\n        ) as any\n      } catch (error) {\n        if (!onStyleError) throw error\n        onStyleError(error)\n        delete serializedStyle.transform\n      }\n    }\n\n    if (prop === 'textShadowRadius') {\n      const textShadowRadius = value as unknown as Array<number | string>\n\n      serializedStyle.textShadowRadius = textShadowRadius.map((_v) =>\n        lengthToNumber(_v, baseFontSize, 0, inheritedStyle, false)\n      )\n    }\n\n    if (prop === 'textShadowOffset') {\n      const textShadowOffset = value as unknown as Array<{\n        width: number | string\n        height: number | string\n      }>\n\n      serializedStyle.textShadowOffset = textShadowOffset.map(\n        ({ height, width }) => ({\n          height: lengthToNumber(\n            height,\n            baseFontSize,\n            0,\n            inheritedStyle,\n            false\n          ),\n          width: lengthToNumber(width, baseFontSize, 0, inheritedStyle, false),\n        })\n      )\n    }\n  }\n\n  return serializedStyle\n}\n\n// https://www.w3.org/TR/css-fonts-4/#absolute-size-mapping\nconst ABSOLUTE_FONT_SIZES: Record<string, number> = {\n  'xx-small': 9,\n  'x-small': 10,\n  small: 13,\n  medium: 16,\n  large: 18,\n  'x-large': 24,\n  'xx-large': 32,\n  'xxx-large': 48,\n}\n\nfunction calcBaseFontSize(\n  size: number | string | undefined,\n  inheritedSize: number,\n  inheritedStyle: Record<string, string | number>\n): number {\n  if (typeof size === 'number') return size\n  if (typeof size !== 'string') return inheritedSize\n\n  const keyword = size.trim().toLowerCase()\n  if (keyword in ABSOLUTE_FONT_SIZES) return ABSOLUTE_FONT_SIZES[keyword]\n  // Relative sizes scale by 1.2: https://www.w3.org/TR/css-fonts-4/#relative-size-value\n  if (keyword === 'larger') return inheritedSize * 1.2\n  if (keyword === 'smaller') return inheritedSize / 1.2\n\n  // `em` and percentages are relative to the inherited font size.\n  const math = parseMath(size, (length) =>\n    lengthToNumber(length, inheritedSize, 0, inheritedStyle)\n  )\n  if (math?.type === 'length') return math.evaluate(inheritedSize)\n  return (\n    lengthToNumber(size, inheritedSize, inheritedSize, inheritedStyle, true) ??\n    inheritedSize\n  )\n}\n\n/**\n * @see https://github.com/RazrFalcon/resvg/issues/579\n */\nfunction refineHSL(color: string) {\n  if (color.startsWith('hsl')) {\n    const t = cssColorParse(color)\n    const [h, s, l] = t.values\n\n    return `hsl(${[h, `${s}%`, `${l}%`]\n      .concat(t.alpha === 1 ? [] : [t.alpha])\n      .join(',')})`\n  }\n\n  return color\n}\n\nfunction getCurrentColor(\n  color: string | undefined,\n  inheritedColor: string\n): string {\n  if (color && color.toLowerCase() !== 'currentcolor') {\n    return refineHSL(color)\n  }\n\n  return refineHSL(inheritedColor)\n}\n\nfunction convertCurrentColorToActualValue(\n  value: string,\n  currentColor: string\n): string {\n  return value.replace(/currentcolor/gi, currentColor)\n}\n\nconst COLOR_PROPERTY =\n  /^(color|background|textShadow|boxShadow|textDecoration|WebkitTextStroke|border(Top|Right|Bottom|Left)?|outline)$|Color$/\nconst COLOR_ALIASES = { cyan: 'aqua', magenta: 'fuchsia' }\n\n/**\n * Color keywords are case-insensitive, and some aren't supported by\n * `css-to-react-native`, so they're lowercased and aliased in values with\n * colors.\n */\nfunction normalizeColorKeywords(\n  name: string,\n  value: string | number,\n  convertColors: boolean\n) {\n  if (typeof value !== 'string' || !COLOR_PROPERTY.test(name)) return value\n  const parsed = valueParser(value)\n  let changed = false\n  parsed.walk((node) => {\n    if (node.type === 'function' && node.value.toLowerCase() === 'url') {\n      return false\n    }\n    if (node.type !== 'word' || !/^[a-z]+$/i.test(node.value)) return\n    const lower = node.value.toLowerCase()\n    // `rebeccapurple` was added in CSS Color 4.\n    const keyword =\n      convertColors && lower === 'rebeccapurple'\n        ? '#663399'\n        : COLOR_ALIASES[lower] ?? lower\n    if (keyword !== node.value && (COLOR_ALIASES[lower] || isColor(lower))) {\n      node.value = keyword\n      changed = true\n    }\n  })\n  return changed ? parsed.toString() : value\n}\n\nfunction preprocess(\n  value: string | number,\n  currentColor: string,\n  kept?: Map<string, string>\n): string | number {\n  if (isString(value)) {\n    value = convertCurrentColorToActualValue(value, currentColor)\n    value = convertColorValues(\n      value,\n      currentColor,\n      kept && ((converted, original) => kept.set(converted, original))\n    )\n  }\n\n  return value\n}\n\n/** Replaces converted colors in parsed styles by their original values. */\nfunction restoreColors<T>(value: T, kept: Map<string, string>): T {\n  if (typeof value === 'string') {\n    let restored: string = value\n    for (const [converted, original] of kept) {\n      restored = restored.split(converted).join(original)\n    }\n    return restored as T\n  }\n  if (Array.isArray(value)) {\n    return value.map((item) => restoreColors(item, kept)) as T\n  }\n  if (value && typeof value === 'object') {\n    const restored = {} as T\n    for (const key in value) restored[key] = restoreColors(value[key], kept)\n    return restored\n  }\n  return value\n}\n","/**\n * Parses the `font` shorthand into the longhands it sets. Like in browsers,\n * the longhands that aren't given are reset.\n * https://drafts.csswg.org/css-fonts-4/#font-prop\n */\n\nconst STRETCH = new Set([\n  'ultra-condensed',\n  'extra-condensed',\n  'condensed',\n  'semi-condensed',\n  'semi-expanded',\n  'expanded',\n  'extra-expanded',\n  'ultra-expanded',\n])\n\nconst SIZE_KEYWORDS = new Set([\n  'xx-small',\n  'x-small',\n  'small',\n  'medium',\n  'large',\n  'x-large',\n  'xx-large',\n  'xxx-large',\n  'larger',\n  'smaller',\n  'math',\n])\n\nconst NUMBER = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i\nconst LENGTH = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?(?:[a-z]+|%)$/i\nconst MATH = /^(?:calc|min|max|clamp)\\(/i\nconst ANGLE = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:deg|grad|rad|turn)$/i\n\n/**\n * Reads a component of the value from `start`, until whitespace or `/`\n * outside of functions and strings. Returns where it ends.\n */\nfunction readComponent(value: string, start: number) {\n  let depth = 0\n  let quote = ''\n  let i = start\n  for (; i < value.length; i++) {\n    const char = value[i]\n    if (quote) {\n      if (char === '\\\\') i++\n      else if (char === quote) quote = ''\n    } else if (char === '\"' || char === \"'\") {\n      quote = char\n    } else if (char === '(') {\n      depth++\n    } else if (char === ')') {\n      depth = Math.max(depth - 1, 0)\n    } else if (!depth && (char === '/' || /\\s/.test(char))) {\n      break\n    }\n  }\n  return i\n}\n\nfunction skipWhitespace(value: string, start: number) {\n  let i = start\n  while (i < value.length && /\\s/.test(value[i])) i++\n  return i\n}\n\nfunction isSize(component: string) {\n  const lower = component.toLowerCase()\n  return (\n    SIZE_KEYWORDS.has(lower) ||\n    LENGTH.test(component) ||\n    component === '0' ||\n    MATH.test(component)\n  )\n}\n\nexport function parseFontShorthand(value: string): Record<string, string> {\n  const invalid = () =>\n    new Error(`Invalid value for CSS property \"font\": \"${value}\".`)\n  let style: string | undefined\n  let variant: string | undefined\n  let weight: string | undefined\n  let stretch: string | undefined\n\n  let i = skipWhitespace(value, 0)\n  let size: string | undefined\n  // Up to four keywords of the style, variant, weight and width come first,\n  // in any order, and `normal` for any of them.\n  for (let count = 0; i < value.length; ) {\n    const end = readComponent(value, i)\n    const component = value.slice(i, end)\n    const lower = component.toLowerCase()\n    if (count < 4 && !isSize(component) && value[end] !== '/') {\n      let next = skipWhitespace(value, end)\n      if (lower === 'normal') {\n        // Sets nothing that isn't reset.\n      } else if (!style && (lower === 'italic' || lower === 'oblique')) {\n        style = lower\n        // `oblique` can be followed by an angle.\n        const angleEnd = readComponent(value, next)\n        const angle = value.slice(next, angleEnd)\n        if (lower === 'oblique' && ANGLE.test(angle)) {\n          style += ' ' + angle\n          next = skipWhitespace(value, angleEnd)\n        }\n      } else if (!variant && lower === 'small-caps') {\n        variant = lower\n      } else if (\n        !weight &&\n        (lower === 'bold' ||\n          lower === 'bolder' ||\n          lower === 'lighter' ||\n          (NUMBER.test(component) &&\n            Number(component) >= 1 &&\n            Number(component) <= 1000))\n      ) {\n        weight = lower\n      } else if (!stretch && STRETCH.has(lower)) {\n        stretch = lower\n      } else {\n        throw invalid()\n      }\n      count++\n      i = next\n      continue\n    }\n    if (!isSize(component)) throw invalid()\n    size = component\n    i = end\n    break\n  }\n  if (size === undefined) throw invalid()\n\n  // The line height comes after a slash.\n  let lineHeight = 'normal'\n  i = skipWhitespace(value, i)\n  if (value[i] === '/') {\n    i = skipWhitespace(value, i + 1)\n    const end = readComponent(value, i)\n    lineHeight = value.slice(i, end)\n    if (!lineHeight) throw invalid()\n    i = end\n  }\n\n  // The families are the rest.\n  const family = value.slice(i).trim()\n  if (!family || family.startsWith('/')) throw invalid()\n\n  return {\n    fontStyle: style || 'normal',\n    fontVariant: variant || 'normal',\n    fontWeight: weight || 'normal',\n    fontStretch: stretch || 'normal',\n    fontSize: size,\n    lineHeight,\n    fontFamily: family,\n  }\n}\n","/**\n * Parses the `border-radius` shorthand into the radii of the corners, with\n * math functions, which css-to-react-native doesn't support.\n * https://drafts.csswg.org/css-backgrounds-3/#border-radius\n */\n\nimport valueParser from 'postcss-value-parser'\nimport { MATH_FUNCTION } from './math.js'\n\nconst RADIUS = /^(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?(?:[a-z]+|%)?$/i\n\nconst CORNERS = [\n  'borderTopLeftRadius',\n  'borderTopRightRadius',\n  'borderBottomRightRadius',\n  'borderBottomLeftRadius',\n] as const\n\n/** The components of a value, split at whitespace outside of functions. */\nexport function splitRadius(value: string): string[] {\n  return valueParser(value)\n    .nodes.filter((node) => node.type !== 'space' && node.type !== 'comment')\n    .map((node) => valueParser.stringify(node))\n}\n\n/** Whether a component is a non-negative length or percentage. */\nexport function isRadius(component: string) {\n  return RADIUS.test(component) || MATH_FUNCTION.test(component)\n}\n\n/**\n * The radii of the corners, from the top left one. A corner with different\n * horizontal and vertical radii has both, separated by a space.\n */\nexport function expandBorderRadius(value: string) {\n  const invalid = () =>\n    new Error(`Invalid value for CSS property \"borderRadius\": \"${value}\".`)\n  // The vertical radii come after a slash.\n  const parts: string[][] = [[]]\n  for (const node of valueParser(value).nodes) {\n    if (node.type === 'div' && node.value === '/') parts.push([])\n    else if (node.type === 'div') throw invalid()\n    else if (node.type !== 'space' && node.type !== 'comment') {\n      parts[parts.length - 1].push(valueParser.stringify(node))\n    }\n  }\n  if (\n    parts.length > 2 ||\n    parts.some((radii) => !radii.length || radii.length > 4) ||\n    !parts.flat().every(isRadius)\n  ) {\n    throw invalid()\n  }\n  const corners = (radii: string[]) => [\n    radii[0],\n    radii[1] ?? radii[0],\n    radii[2] ?? radii[0],\n    radii[3] ?? radii[1] ?? radii[0],\n  ]\n  const horizontal = corners(parts[0])\n  const vertical = parts[1] ? corners(parts[1]) : undefined\n  const result: Record<string, string> = {}\n  CORNERS.forEach((corner, i) => {\n    result[corner] = vertical\n      ? `${horizontal[i]} ${vertical[i]}`\n      : horizontal[i]\n  })\n  return result\n}\n","/**\n * Parses `calc()`, `min()`, `max()` and `clamp()`.\n * https://drafts.csswg.org/css-values-4/#math\n */\n\nexport interface MathValue {\n  /** Evaluates the expression, with percentages of `basis`. */\n  evaluate: (basis: number) => number\n  /** Whether the result depends on `basis`. */\n  percentage: boolean\n  /** Lengths and percentages are lengths, unitless values numbers. */\n  type: 'length' | 'number'\n}\n\nexport const MATH_FUNCTION = /^(calc|min|max|clamp)\\(/i\n\ntype Token =\n  | { kind: 'value'; value: number; unit: string }\n  | { kind: 'function'; name: string }\n  | { kind: '(' | ')' | ',' | '+' | '-' | '*' | '/' }\n\nconst NUMBER = /^([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)([a-z]+|%)?/i\n\nfunction tokenize(input: string): Token[] {\n  const tokens: Token[] = []\n  let i = 0\n  while (i < input.length) {\n    const char = input[i]\n    if (/\\s/.test(char)) {\n      i++\n      continue\n    }\n    const previous = tokens[tokens.length - 1]\n    // A sign is part of a number at the start of an operand.\n    const operandStart =\n      !previous || (previous.kind !== 'value' && previous.kind !== ')')\n    const number =\n      operandStart || !/[+-]/.test(char) ? NUMBER.exec(input.slice(i)) : null\n    if (number) {\n      tokens.push({\n        kind: 'value',\n        value: parseFloat(number[1]),\n        unit: (number[2] || '').toLowerCase(),\n      })\n      i += number[0].length\n      continue\n    }\n    const name = /^([a-z-]+)\\(/i.exec(input.slice(i))\n    if (name) {\n      tokens.push({ kind: 'function', name: name[1].toLowerCase() })\n      i += name[0].length\n      continue\n    }\n    if ('(),+-*/'.includes(char)) {\n      tokens.push({ kind: char as '(' })\n      i++\n      continue\n    }\n    throw new Error(`Invalid character \"${char}\" in \"${input}\".`)\n  }\n  return tokens\n}\n\ntype Node = Omit<MathValue, 'percentage'> & { percentage: boolean }\n\n/**\n * Returns `undefined` if the value isn't a valid math function. Lengths are\n * resolved to px with `resolveLength`.\n */\nexport function parseMath(\n  input: string,\n  resolveLength: (length: string) => number | undefined\n): MathValue | undefined {\n  if (!MATH_FUNCTION.test(input.trim())) return\n  let tokens: Token[]\n  try {\n    tokens = tokenize(input.trim())\n  } catch {\n    return\n  }\n  let index = 0\n  const peek = () => tokens[index]\n  const expect = (kind: Token['kind']) => {\n    if (tokens[index]?.kind !== kind) throw new Error(`Expected ${kind}.`)\n    index++\n  }\n\n  const sum = (): Node => {\n    let node = product()\n    while (peek()?.kind === '+' || peek()?.kind === '-') {\n      const operator = tokens[index++].kind\n      const right = product()\n      if (right.type !== node.type) throw new Error('Mismatched types.')\n      const left = node\n      node = {\n        type: left.type,\n        percentage: left.percentage || right.percentage,\n        evaluate:\n          operator === '+'\n            ? (basis) => left.evaluate(basis) + right.evaluate(basis)\n            : (basis) => left.evaluate(basis) - right.evaluate(basis),\n      }\n    }\n    return node\n  }\n\n  const product = (): Node => {\n    let node = value()\n    while (peek()?.kind === '*' || peek()?.kind === '/') {\n      const operator = tokens[index++].kind\n      const right = value()\n      const left = node\n      if (operator === '*') {\n        if (left.type === 'length' && right.type === 'length') {\n          throw new Error('Lengths cannot be multiplied.')\n        }\n        node = {\n          type: left.type === 'length' ? 'length' : right.type,\n          percentage: left.percentage || right.percentage,\n          evaluate: (basis) => left.evaluate(basis) * right.evaluate(basis),\n        }\n      } else {\n        if (right.type !== 'number') {\n          throw new Error('Values can only be divided by numbers.')\n        }\n        node = {\n          type: left.type,\n          percentage: left.percentage || right.percentage,\n          evaluate: (basis) => left.evaluate(basis) / right.evaluate(basis),\n        }\n      }\n    }\n    return node\n  }\n\n  const list = (): Node[] => {\n    const nodes = [sum()]\n    while (peek()?.kind === ',') {\n      index++\n      nodes.push(sum())\n    }\n    expect(')')\n    if (nodes.some((node) => node.type !== nodes[0].type)) {\n      throw new Error('Mismatched types.')\n    }\n    return nodes\n  }\n\n  const value = (): Node => {\n    const token = tokens[index++]\n    if (!token) throw new Error('Unexpected end.')\n    if (token.kind === 'value') {\n      const { value: number, unit } = token\n      if (!unit) {\n        return { type: 'number', percentage: false, evaluate: () => number }\n      }\n      if (unit === '%') {\n        return {\n          type: 'length',\n          percentage: true,\n          evaluate: (basis) => (basis * number) / 100,\n        }\n      }\n      const px = resolveLength(`${number}${unit}`)\n      if (typeof px !== 'number') throw new Error(`Invalid length.`)\n      return { type: 'length', percentage: false, evaluate: () => px }\n    }\n    if (token.kind === '(') {\n      const node = sum()\n      expect(')')\n      return node\n    }\n    if (token.kind === 'function') {\n      if (token.name === 'calc') {\n        const node = sum()\n        expect(')')\n        return node\n      }\n      if (token.name === 'min' || token.name === 'max') {\n        const nodes = list()\n        const pick = token.name === 'min' ? Math.min : Math.max\n        return {\n          type: nodes[0].type,\n          percentage: nodes.some((node) => node.percentage),\n          evaluate: (basis) =>\n            pick(...nodes.map((node) => node.evaluate(basis))),\n        }\n      }\n      if (token.name === 'clamp') {\n        const nodes = list()\n        if (nodes.length !== 3) throw new Error('Expected 3 values.')\n        const [min, preferred, max] = nodes\n        return {\n          type: preferred.type,\n          percentage: nodes.some((node) => node.percentage),\n          evaluate: (basis) =>\n            Math.max(\n              min.evaluate(basis),\n              Math.min(preferred.evaluate(basis), max.evaluate(basis))\n            ),\n        }\n      }\n    }\n    throw new Error('Unexpected token.')\n  }\n\n  try {\n    const node = value()\n    if (index !== tokens.length) return\n    return node\n  } catch {\n    return\n  }\n}\n","/**\n * Parses colors of CSS Color 4 and 5, and converts them to sRGB.\n *\n * @see https://www.w3.org/TR/css-color-4/\n * @see https://www.w3.org/TR/css-color-5/\n */\nimport valueParser, { type Node, type FunctionNode } from 'postcss-value-parser'\nimport cssColorParse from 'parse-css-color'\n\n/** Red, green and blue from 0 to 255, and alpha from 0 to 1. */\nexport type RGBA = [r: number, g: number, b: number, alpha: number]\n\ntype Space =\n  | 'srgb'\n  | 'srgb-linear'\n  | 'display-p3'\n  | 'a98-rgb'\n  | 'prophoto-rgb'\n  | 'rec2020'\n  | 'xyz-d65'\n  | 'xyz-d50'\n  | 'lab'\n  | 'lch'\n  | 'oklab'\n  | 'oklch'\n  | 'hsl'\n  | 'hwb'\n\n/** A missing component (`none`) is `null`. */\ntype Coord = number | null\ntype Coords = [Coord, Coord, Coord]\n\n/** A parsed color, which may be out of the sRGB gamut. */\nexport interface Color {\n  space: Space\n  coords: Coords\n  alpha: Coord\n}\n\n// Conversions, from the sample code of CSS Color 4.\n\ntype Matrix = number[][]\n\nconst multiply = (m: Matrix, [a, b, c]: number[]) =>\n  m.map((row) => row[0] * a + row[1] * b + row[2] * c)\n\nfunction invert(m: Matrix): Matrix {\n  const [[a, b, c], [d, e, f], [g, h, i]] = m\n  const A = e * i - f * h\n  const B = f * g - d * i\n  const C = d * h - e * g\n  const det = a * A + b * B + c * C\n  return [\n    [A / det, (c * h - b * i) / det, (b * f - c * e) / det],\n    [B / det, (a * i - c * g) / det, (c * d - a * f) / det],\n    [C / det, (b * g - a * h) / det, (a * e - b * d) / det],\n  ]\n}\n\nconst D50 = [0.3457 / 0.3585, 1, (1 - 0.3457 - 0.3585) / 0.3585]\n\nconst D65_TO_D50: Matrix = [\n  [1.0479297925449969, 0.022946870601609652, -0.05019226628920524],\n  [0.02962780877005599, 0.9904344267538799, -0.017073799063418826],\n  [-0.009243040646204504, 0.015055191490298152, 0.7518742814281371],\n]\nconst D50_TO_D65 = invert(D65_TO_D50)\n\ninterface RGBSpace {\n  toXYZ: Matrix\n  fromXYZ: Matrix\n  toLinear: (c: number) => number\n  fromLinear: (c: number) => number\n  /** The white point of `toXYZ`. */\n  d50?: boolean\n}\n\nconst signed =\n  (f: (c: number) => number) =>\n  (c: number): number =>\n    c < 0 ? -f(-c) : f(c)\n\nconst srgbToLinear = signed((c) =>\n  c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4\n)\nconst srgbFromLinear = signed((c) =>\n  c > 0.0031308 ? 1.055 * c ** (1 / 2.4) - 0.055 : 12.92 * c\n)\n\nconst REC2020_ALPHA = 1.09929682680944\nconst REC2020_BETA = 0.018053968510807\n\nfunction rgbSpace(\n  matrix: Matrix,\n  toLinear: (c: number) => number,\n  fromLinear: (c: number) => number,\n  d50?: boolean\n): RGBSpace {\n  return { toXYZ: matrix, fromXYZ: invert(matrix), toLinear, fromLinear, d50 }\n}\n\nconst RGB_SPACES: Partial<Record<Space, RGBSpace>> = {\n  srgb: rgbSpace(\n    [\n      [506752 / 1228815, 87881 / 245763, 12673 / 70218],\n      [87098 / 409605, 175762 / 245763, 12673 / 175545],\n      [7918 / 409605, 87881 / 737289, 1001167 / 1053270],\n    ],\n    srgbToLinear,\n    srgbFromLinear\n  ),\n  'display-p3': rgbSpace(\n    [\n      [608311 / 1250200, 189793 / 714400, 198249 / 1000160],\n      [35783 / 156275, 247089 / 357200, 198249 / 2500400],\n      [0, 32229 / 714400, 5220557 / 5000800],\n    ],\n    srgbToLinear,\n    srgbFromLinear\n  ),\n  'a98-rgb': rgbSpace(\n    [\n      [573536 / 994567, 263643 / 1420810, 187206 / 994567],\n      [591459 / 1989134, 6239551 / 9945670, 374412 / 4972835],\n      [53769 / 1989134, 351524 / 4972835, 4929758 / 4972835],\n    ],\n    signed((c) => c ** (563 / 256)),\n    signed((c) => c ** (256 / 563))\n  ),\n  'prophoto-rgb': rgbSpace(\n    [\n      [0.7977666449006423, 0.13518129740053308, 0.0313477341283922],\n      [0.2880748288194013, 0.711835234241873, 0.00008993693872564],\n      [0, 0, 0.8251046025104602],\n    ],\n    signed((c) => (c <= 16 / 512 ? c / 16 : c ** 1.8)),\n    signed((c) => (c >= 1 / 512 ? c ** (1 / 1.8) : 16 * c)),\n    true\n  ),\n  rec2020: rgbSpace(\n    [\n      [63426534 / 99577255, 20160776 / 139408157, 47086771 / 278816314],\n      [26158966 / 99577255, 472592308 / 697040785, 8267143 / 139408157],\n      [0, 19567812 / 697040785, 295819943 / 278816314],\n    ],\n    signed((c) =>\n      c < REC2020_BETA * 4.5\n        ? c / 4.5\n        : ((c + REC2020_ALPHA - 1) / REC2020_ALPHA) ** (1 / 0.45)\n    ),\n    signed((c) =>\n      c > REC2020_BETA\n        ? REC2020_ALPHA * c ** 0.45 - (REC2020_ALPHA - 1)\n        : 4.5 * c\n    )\n  ),\n}\nRGB_SPACES['srgb-linear'] = {\n  ...RGB_SPACES.srgb,\n  toLinear: (c) => c,\n  fromLinear: (c) => c,\n}\n\nconst XYZ_TO_LMS: Matrix = [\n  [0.819022437996703, 0.3619062600528904, -0.1288737815209879],\n  [0.0329836539323885, 0.9292868615863434, 0.0361446663506424],\n  [0.0481771893596242, 0.2642395317527308, 0.6335478284694309],\n]\nconst LMS_TO_OKLAB: Matrix = [\n  [0.210454268309314, 0.7936177747023054, -0.0040720430116193],\n  [1.9779985324311684, -2.42859224204858, 0.450593709617411],\n  [0.0259040424655478, 0.7827717124575296, -0.8086757548780773],\n]\nconst LMS_TO_XYZ = invert(XYZ_TO_LMS)\nconst OKLAB_TO_LMS = invert(LMS_TO_OKLAB)\n\nconst LAB_EPSILON = 216 / 24389\nconst LAB_KAPPA = 24389 / 27\n\nfunction labToXYZD50([l, a, b]: number[]) {\n  const f1 = (l + 16) / 116\n  const f0 = a / 500 + f1\n  const f2 = f1 - b / 200\n  const cube = (f: number) =>\n    f ** 3 > LAB_EPSILON ? f ** 3 : (116 * f - 16) / LAB_KAPPA\n  return [\n    cube(f0) * D50[0],\n    (l > LAB_KAPPA * LAB_EPSILON ? f1 ** 3 : l / LAB_KAPPA) * D50[1],\n    cube(f2) * D50[2],\n  ]\n}\n\nfunction xyzD50ToLab(xyz: number[]) {\n  const [f0, f1, f2] = xyz.map((v, i) => {\n    v /= D50[i]\n    return v > LAB_EPSILON ? Math.cbrt(v) : (LAB_KAPPA * v + 16) / 116\n  })\n  return [116 * f1 - 16, 500 * (f0 - f1), 200 * (f1 - f2)]\n}\n\nconst toPolar = ([l, a, b]: number[]) => [\n  l,\n  Math.hypot(a, b),\n  normalizeHue((Math.atan2(b, a) * 180) / Math.PI),\n]\nconst fromPolar = ([l, c, h]: number[]) => [\n  l,\n  c * Math.cos((h * Math.PI) / 180),\n  c * Math.sin((h * Math.PI) / 180),\n]\n\nconst normalizeHue = (h: number) => ((h % 360) + 360) % 360\n\n/** `s` and `l` are from 0 to 100, and the result is from 0 to 1. */\nfunction hslToSRGB([h, s, l]: number[]) {\n  s /= 100\n  l /= 100\n  const f = (n: number) => {\n    const k = (n + h / 30) % 12\n    const a = s * Math.min(l, 1 - l)\n    return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1))\n  }\n  return [f(0), f(8), f(4)]\n}\n\n/** The hue is `NaN` when it's powerless. */\nfunction srgbToHSL([r, g, b]: number[]) {\n  const max = Math.max(r, g, b)\n  const min = Math.min(r, g, b)\n  const l = (min + max) / 2\n  const d = max - min\n  let h = NaN\n  let s = 0\n  if (d !== 0) {\n    s = l === 0 || l === 1 ? 0 : (max - l) / Math.min(l, 1 - l)\n    if (max === r) h = (g - b) / d + (g < b ? 6 : 0)\n    else if (max === g) h = (b - r) / d + 2\n    else h = (r - g) / d + 4\n    h *= 60\n  }\n  // A negative saturation means the hue is opposite.\n  if (s < 0) {\n    h += 180\n    s = -s\n  }\n  return [normalizeHue(h), s * 100, l * 100]\n}\n\nfunction hwbToSRGB([h, w, b]: number[]) {\n  w /= 100\n  b /= 100\n  if (w + b >= 1) {\n    const gray = w / (w + b)\n    return [gray, gray, gray]\n  }\n  return hslToSRGB([h, 100, 50]).map((c) => c * (1 - w - b) + w)\n}\n\nfunction srgbToHWB(rgb: number[]) {\n  const [h] = srgbToHSL(rgb)\n  const w = Math.min(...rgb)\n  const b = 1 - Math.max(...rgb)\n  return [w + b >= 1 ? NaN : h, w * 100, b * 100]\n}\n\n/** Converts known coordinates to XYZ with a D65 white point. */\nfunction toXYZ(space: Space, coords: number[]): number[] {\n  const rgb = RGB_SPACES[space]\n  if (rgb) {\n    const xyz = multiply(rgb.toXYZ, coords.map(rgb.toLinear))\n    return rgb.d50 ? multiply(D50_TO_D65, xyz) : xyz\n  }\n  switch (space) {\n    case 'xyz-d65':\n      return coords\n    case 'xyz-d50':\n      return multiply(D50_TO_D65, coords)\n    case 'lab':\n      return multiply(D50_TO_D65, labToXYZD50(coords))\n    case 'lch':\n      return toXYZ('lab', fromPolar(coords))\n    case 'oklab':\n      return multiply(\n        LMS_TO_XYZ,\n        multiply(OKLAB_TO_LMS, coords).map((c) => c ** 3)\n      )\n    case 'oklch':\n      return toXYZ('oklab', fromPolar(coords))\n    case 'hsl':\n      return toXYZ('srgb', hslToSRGB(coords))\n    case 'hwb':\n      return toXYZ('srgb', hwbToSRGB(coords))\n  }\n}\n\n/** Converts XYZ with a D65 white point. A powerless hue is `NaN`. */\nfunction fromXYZ(space: Space, xyz: number[]): number[] {\n  const rgb = RGB_SPACES[space]\n  if (rgb) {\n    return multiply(rgb.fromXYZ, rgb.d50 ? multiply(D65_TO_D50, xyz) : xyz).map(\n      rgb.fromLinear\n    )\n  }\n  switch (space) {\n    case 'xyz-d65':\n      return xyz\n    case 'xyz-d50':\n      return multiply(D65_TO_D50, xyz)\n    case 'lab':\n      return xyzD50ToLab(multiply(D65_TO_D50, xyz))\n    case 'lch': {\n      const lch = toPolar(fromXYZ('lab', xyz))\n      if (lch[1] < 0.0015) lch[2] = NaN\n      return lch\n    }\n    case 'oklab':\n      return multiply(\n        LMS_TO_OKLAB,\n        multiply(XYZ_TO_LMS, xyz).map((c) => Math.cbrt(c))\n      )\n    case 'oklch': {\n      const oklch = toPolar(fromXYZ('oklab', xyz))\n      if (oklch[1] < 0.000004) oklch[2] = NaN\n      return oklch\n    }\n    case 'hsl':\n      return srgbToHSL(fromXYZ('srgb', xyz))\n    case 'hwb':\n      return srgbToHWB(fromXYZ('srgb', xyz))\n  }\n}\n\nconst POLAR: Partial<Record<Space, boolean>> = {\n  lch: true,\n  oklch: true,\n  hsl: true,\n  hwb: true,\n}\n\n/**\n * Components that are analogous across color spaces, so missing ones are\n * carried forward to them.\n */\nfunction analogous(space: Space): (string | undefined)[] {\n  if (RGB_SPACES[space]) return ['red', 'green', 'blue']\n  switch (space) {\n    case 'xyz-d65':\n    case 'xyz-d50':\n      return ['red', 'green', 'blue']\n    case 'lab':\n    case 'oklab':\n      return ['lightness', 'a', 'b']\n    case 'lch':\n    case 'oklch':\n      return ['lightness', 'colorfulness', 'hue']\n    case 'hsl':\n      return ['hue', 'colorfulness', 'lightness']\n    case 'hwb':\n      return ['hue', undefined, undefined]\n  }\n}\n\n/**\n * Converts a color to another space. Missing components become 0, unless\n * they're carried forward to an analogous component.\n */\nfunction convert(color: Color, space: Space): Color {\n  if (color.space === space) return color\n  const coords = fromXYZ(\n    space,\n    toXYZ(\n      color.space,\n      color.coords.map((c) => c ?? 0)\n    )\n  ).map((c) => (Number.isNaN(c) ? null : c)) as Coords\n  const from = analogous(color.space)\n  const to = analogous(space)\n  color.coords.forEach((c, i) => {\n    if (c === null && from[i]) {\n      const j = to.indexOf(from[i])\n      if (j !== -1) coords[j] = null\n    }\n  })\n  return { space, coords, alpha: color.alpha }\n}\n\n/** Converts a color to sRGB, clipped to its gamut. */\nexport function toRGBA(color: Color): RGBA {\n  const { coords, alpha } = convert(color, 'srgb')\n  const clip = (c: Coord) => Math.min(Math.max(c ?? 0, 0), 1) * 255\n  return [\n    clip(coords[0]),\n    clip(coords[1]),\n    clip(coords[2]),\n    Math.min(Math.max(alpha ?? 0, 0), 1),\n  ]\n}\n\n// Parsing.\n\nconst significant = (nodes: Node[]) =>\n  nodes.filter((node) => node.type !== 'space' && node.type !== 'comment')\n\nconst isComma = (node: Node) => node.type === 'div' && node.value === ','\nconst isSlash = (node: Node) => node.type === 'div' && node.value === '/'\n\n/** Splits the arguments of a function at commas. */\nfunction splitArguments(node: FunctionNode): Node[][] {\n  const args: Node[][] = [[]]\n  for (const child of significant(node.nodes)) {\n    if (isComma(child)) args.push([])\n    else args[args.length - 1].push(child)\n  }\n  return args\n}\n\ninterface Channel {\n  /** The value of `100%`, or `0` if percentages aren't allowed. */\n  percent: number\n  hue?: boolean\n}\n\nconst ANGLE_UNITS = {\n  '': 1,\n  deg: 1,\n  grad: 0.9,\n  rad: 180 / Math.PI,\n  turn: 360,\n}\n\n/**\n * Parses a number, percentage or angle. Returns `undefined` if it's invalid.\n */\nfunction parseNumber(value: string, channel: Channel): number | undefined {\n  const parsed = valueParser.unit(value)\n  if (!parsed) return\n  const number = Number(parsed.number)\n  if (!Number.isFinite(number)) return\n  const unit = parsed.unit.toLowerCase()\n  if (unit === '%')\n    return channel.percent ? (number / 100) * channel.percent : undefined\n  if (channel.hue && unit in ANGLE_UNITS) return number * ANGLE_UNITS[unit]\n  return unit === '' ? number : undefined\n}\n\n/**\n * Evaluates `calc()` and other math functions in channels, with the channel\n * keywords of relative colors.\n */\nfunction evaluate(\n  node: Node,\n  channel: Channel,\n  keywords: Record<string, number>\n): number | undefined {\n  if (node.type === 'word') {\n    const lower = node.value.toLowerCase()\n    if (lower in keywords) return keywords[lower]\n    if (lower === 'pi') return Math.PI\n    if (lower === 'e') return Math.E\n    return parseNumber(node.value, channel)\n  }\n  if (node.type !== 'function') return\n  const name = node.value.toLowerCase()\n  const args = splitArguments(node).map((tokens) =>\n    evaluateSum(tokens, channel, keywords)\n  )\n  if (args.some((arg) => arg === undefined)) return\n  switch (name) {\n    case '':\n    case 'calc':\n      return args.length === 1 ? args[0] : undefined\n    case 'min':\n      return Math.min(...args)\n    case 'max':\n      return Math.max(...args)\n    case 'clamp':\n      return args.length === 3\n        ? Math.max(args[0], Math.min(args[1], args[2]))\n        : undefined\n  }\n}\n\n/** Evaluates `a + b - c * d / e`, with the usual precedence. */\nfunction evaluateSum(\n  tokens: Node[],\n  channel: Channel,\n  keywords: Record<string, number>\n): number | undefined {\n  // `postcss-value-parser` keeps `/` as a division, and `*`, `+` and `-` as\n  // words, either on their own or attached to numbers like `-1`.\n  const items: (number | string)[] = []\n  for (const token of tokens) {\n    if (isSlash(token)) items.push('/')\n    else if (token.type === 'word' && /^[*+-]$/.test(token.value)) {\n      items.push(token.value)\n    } else {\n      const value = evaluate(token, channel, keywords)\n      if (value === undefined) return\n      items.push(value)\n    }\n  }\n  let sum = 0\n  let sign = 1\n  let product: number | undefined\n  let operator = '*'\n  for (const item of items) {\n    if (typeof item === 'number') {\n      if (product === undefined) product = item\n      else if (operator === '*') product *= item\n      else if (operator === '/') product /= item\n      else return\n      operator = ''\n    } else if (item === '*' || item === '/') {\n      if (product === undefined || operator) return\n      operator = item\n    } else {\n      if (product === undefined || operator) return\n      sum += sign * product\n      sign = item === '-' ? -1 : 1\n      product = undefined\n      operator = '*'\n    }\n  }\n  if (product === undefined || operator) return\n  return sum + sign * product\n}\n\n/** Parses a channel. Returns `null` for `none`, `undefined` if invalid. */\nfunction parseChannel(\n  node: Node,\n  channel: Channel,\n  keywords: Record<string, number> | undefined,\n  legacy: boolean\n): Coord | undefined {\n  if (node.type === 'word' && node.value.toLowerCase() === 'none') {\n    return legacy ? undefined : null\n  }\n  if (node.type === 'function' && node.value === '') return\n  const value = evaluate(node, channel, keywords || {})\n  return Number.isFinite(value) ? value : undefined\n}\n\nconst ALPHA: Channel = { percent: 1 }\n\ninterface ChannelLayout {\n  space: Space\n  channels: [Channel, Channel, Channel]\n  /** The channel keywords of relative colors. */\n  names: [string, string, string]\n  /** Converts parsed channel values to the coordinates of the space. */\n  scale?: number\n  allowLegacy?: boolean\n  clamp?: (coords: Coords) => Coords\n}\n\nconst clampLightness =\n  (max: number) =>\n  ([l, a, b]: Coords): Coords =>\n    [l === null ? l : Math.min(Math.max(l, 0), max), a, b]\n\nconst clampChroma = (coords: Coords): Coords => [\n  coords[0],\n  coords[1] === null ? null : Math.max(coords[1], 0),\n  coords[2] === null ? null : normalizeHue(coords[2]),\n]\n\nconst HUE: Channel = { percent: 0, hue: true }\n\nconst LAYOUTS: Record<string, ChannelLayout> = {\n  rgb: {\n    space: 'srgb',\n    channels: [{ percent: 255 }, { percent: 255 }, { percent: 255 }],\n    names: ['r', 'g', 'b'],\n    scale: 255,\n    allowLegacy: true,\n  },\n  hsl: {\n    space: 'hsl',\n    channels: [HUE, { percent: 100 }, { percent: 100 }],\n    names: ['h', 's', 'l'],\n    allowLegacy: true,\n    clamp: ([h, s, l]) => [h === null ? h : normalizeHue(h), s, l],\n  },\n  hwb: {\n    space: 'hwb',\n    channels: [HUE, { percent: 100 }, { percent: 100 }],\n    names: ['h', 'w', 'b'],\n    clamp: ([h, w, b]) => [h === null ? h : normalizeHue(h), w, b],\n  },\n  lab: {\n    space: 'lab',\n    channels: [{ percent: 100 }, { percent: 125 }, { percent: 125 }],\n    names: ['l', 'a', 'b'],\n    clamp: clampLightness(100),\n  },\n  lch: {\n    space: 'lch',\n    channels: [{ percent: 100 }, { percent: 150 }, HUE],\n    names: ['l', 'c', 'h'],\n    clamp: (coords) => clampChroma(clampLightness(100)(coords)),\n  },\n  oklab: {\n    space: 'oklab',\n    channels: [{ percent: 1 }, { percent: 0.4 }, { percent: 0.4 }],\n    names: ['l', 'a', 'b'],\n    clamp: clampLightness(1),\n  },\n  oklch: {\n    space: 'oklch',\n    channels: [{ percent: 1 }, { percent: 0.4 }, HUE],\n    names: ['l', 'c', 'h'],\n    clamp: (coords) => clampChroma(clampLightness(1)(coords)),\n  },\n}\nLAYOUTS.rgba = LAYOUTS.rgb\nLAYOUTS.hsla = LAYOUTS.hsl\n\nconst PREDEFINED_SPACES: Record<string, Space> = {\n  srgb: 'srgb',\n  'srgb-linear': 'srgb-linear',\n  'display-p3': 'display-p3',\n  'a98-rgb': 'a98-rgb',\n  'prophoto-rgb': 'prophoto-rgb',\n  rec2020: 'rec2020',\n  xyz: 'xyz-d65',\n  'xyz-d65': 'xyz-d65',\n  'xyz-d50': 'xyz-d50',\n}\n\n/** Splits `[from <color>] channels... [/ alpha]` of a color function. */\nfunction parseRelative(\n  node: FunctionNode,\n  currentColor: string | undefined\n): { origin?: Color; tokens: Node[]; legacy: boolean } | undefined {\n  let tokens = significant(node.nodes)\n  let origin: Color | undefined\n  if (tokens[0]?.type === 'word' && tokens[0].value.toLowerCase() === 'from') {\n    origin = parseColorNode(tokens[1], currentColor)\n    if (!origin) return\n    tokens = tokens.slice(2)\n  }\n  const legacy = !origin && tokens.some(isComma)\n  if (legacy) {\n    // The legacy syntax separates all channels with commas.\n    const values = tokens.filter((_, i) => i % 2 === 0)\n    if (!tokens.every((token, i) => i % 2 === 0 || isComma(token))) return\n    return { tokens: values, legacy }\n  }\n  return { origin, tokens, legacy }\n}\n\nfunction parseChannels(\n  tokens: Node[],\n  layout: ChannelLayout,\n  origin: Color | undefined,\n  legacy: boolean\n): Color | undefined {\n  let keywords: Record<string, number> | undefined\n  if (origin) {\n    const converted = convert(origin, layout.space)\n    keywords = {}\n    layout.names.forEach((name, i) => {\n      keywords[name] = (converted.coords[i] ?? 0) * (layout.scale ?? 1)\n    })\n    keywords.alpha = converted.alpha ?? 0\n  }\n\n  let channels: Node[]\n  let alphaToken: Node | undefined\n  if (legacy) {\n    if (tokens.length !== 3 && tokens.length !== 4) return\n    channels = tokens.slice(0, 3)\n    alphaToken = tokens[3]\n  } else {\n    const slash = tokens.findIndex(isSlash)\n    channels = slash === -1 ? tokens : tokens.slice(0, slash)\n    if (slash !== -1) {\n      if (slash !== tokens.length - 2) return\n      alphaToken = tokens[slash + 1]\n    }\n    if (channels.length !== 3) return\n  }\n\n  const coords: Coord[] = []\n  for (const [i, token] of channels.entries()) {\n    const value = parseChannel(token, layout.channels[i], keywords, legacy)\n    if (value === undefined) return\n    coords.push(value === null ? null : value / (layout.scale ?? 1))\n  }\n  let alpha: Coord = keywords ? keywords.alpha : 1\n  if (alphaToken) {\n    alpha = parseChannel(alphaToken, ALPHA, keywords, legacy)\n    if (alpha === undefined) return\n  }\n  if (alpha !== null) alpha = Math.min(Math.max(alpha, 0), 1)\n  let result = coords as Coords\n  if (layout.clamp) result = layout.clamp(result)\n  if (layout.space === 'srgb') {\n    result = result.map((c) =>\n      c === null ? c : Math.min(Math.max(c, 0), 1)\n    ) as Coords\n  }\n  return { space: layout.space, coords: result, alpha }\n}\n\n/** Parses `color([from <color>] <space> channels... [/ alpha])`. */\nfunction parseColorFunction(\n  node: FunctionNode,\n  currentColor: string | undefined\n): Color | undefined {\n  const relative = parseRelative(node, currentColor)\n  if (!relative || relative.legacy) return\n  const [spaceToken, ...tokens] = relative.tokens\n  if (spaceToken?.type !== 'word') return\n  const space = PREDEFINED_SPACES[spaceToken.value.toLowerCase()]\n  if (!space) return\n  const xyz = space.startsWith('xyz')\n  const channel = { percent: 1 }\n  return parseChannels(\n    tokens,\n    {\n      space,\n      channels: [channel, channel, channel],\n      names: xyz ? ['x', 'y', 'z'] : ['r', 'g', 'b'],\n    },\n    relative.origin,\n    false\n  )\n}\n\nconst HUE_METHODS = new Set(['shorter', 'longer', 'increasing', 'decreasing'])\n\n/** Parses and computes `color-mix()`. */\nfunction parseColorMix(\n  node: FunctionNode,\n  currentColor: string | undefined\n): Color | undefined {\n  const args = splitArguments(node)\n  let space: Space = 'oklab'\n  let hueMethod = 'shorter'\n  const first = args[0]\n  if (first[0]?.type === 'word' && first[0].value.toLowerCase() === 'in') {\n    args.shift()\n    const method = parseInterpolationMethod(\n      first.map((token) => (token.type === 'word' ? token.value : ''))\n    )\n    if (!method) return\n    space = method.space\n    hueMethod = method.hue\n  }\n  if (args.length !== 2) return\n\n  const items: { color: Color; percent?: number }[] = []\n  for (const tokens of args) {\n    if (tokens.length !== 1 && tokens.length !== 2) return\n    let color: Color | undefined\n    let percent: number | undefined\n    for (const token of tokens) {\n      const value =\n        token.type === 'word' && token.value.endsWith('%')\n          ? parseNumber(token.value, { percent: 100 })\n          : undefined\n      const math =\n        value === undefined &&\n        token.type === 'function' &&\n        /^(calc|min|max|clamp)$/i.test(token.value)\n          ? evaluate(token, { percent: 100 }, {})\n          : undefined\n      if (value !== undefined || math !== undefined) {\n        if (percent !== undefined) return\n        percent = value ?? math\n      } else {\n        if (color) return\n        color = parseColorNode(token, currentColor)\n        if (!color) return\n      }\n    }\n    if (!color) return\n    if (percent !== undefined && (percent < 0 || percent > 100)) return\n    items.push({ color, percent })\n  }\n\n  let [p1, p2] = items.map((item) => item.percent)\n  if (p1 === undefined && p2 === undefined) p1 = p2 = 50\n  else if (p1 === undefined) p1 = 100 - p2\n  else if (p2 === undefined) p2 = 100 - p1\n  const sum = p1 + p2\n  if (sum === 0) return\n  const mixed = interpolate(items[0].color, items[1].color, p2 / sum, {\n    space,\n    hue: hueMethod,\n  })\n  // Percentages that add up to less than 100% make the result transparent.\n  if (sum < 100 && mixed.alpha !== null) mixed.alpha *= sum / 100\n  return mixed\n}\n\nexport interface InterpolationMethod {\n  space: Space\n  hue: string\n}\n\n/**\n * Interpolates two colors with premultiplied alpha, `t` from 0 to 1.\n *\n * @see https://www.w3.org/TR/css-color-4/#interpolation\n */\nfunction interpolate(\n  colorA: Color,\n  colorB: Color,\n  t: number,\n  { space, hue: hueMethod }: InterpolationMethod\n): Color {\n  const [a, b] = [colorA, colorB].map((color) => convert(color, space))\n  const hueIndex = POLAR[space]\n    ? space === 'hsl' || space === 'hwb'\n      ? 0\n      : 2\n    : -1\n\n  // Missing components take the value of the other color.\n  const fill = (x: Coord, y: Coord) => (x === null ? y : x)\n  const alphaA = fill(a.alpha, b.alpha)\n  const alphaB = fill(b.alpha, a.alpha)\n  const coordsA = a.coords.map((c, i) => fill(c, b.coords[i]))\n  const coordsB = b.coords.map((c, i) => fill(c, a.coords[i]))\n\n  if (hueIndex !== -1 && coordsA[hueIndex] !== null) {\n    let h1 = coordsA[hueIndex]\n    let h2 = coordsB[hueIndex]\n    const diff = h2 - h1\n    if (hueMethod === 'shorter') {\n      if (diff > 180) h1 += 360\n      else if (diff < -180) h2 += 360\n    } else if (hueMethod === 'longer') {\n      if (diff > 0 && diff < 180) h1 += 360\n      else if (diff > -180 && diff <= 0) h2 += 360\n    } else if (hueMethod === 'increasing') {\n      if (diff < 0) h2 += 360\n    } else if (diff > 0) {\n      h1 += 360\n    }\n    coordsA[hueIndex] = h1\n    coordsB[hueIndex] = h2\n  }\n\n  const alpha =\n    alphaA === null ? null : alphaA + ((alphaB as number) - alphaA) * t\n  const coords = coordsA.map((c, i) => {\n    if (c === null) return null\n    if (i === hueIndex || alpha === null) return c + (coordsB[i] - c) * t\n    const mixed = c * alphaA + (coordsB[i] * alphaB - c * alphaA) * t\n    return alpha === 0 ? mixed : mixed / alpha\n  }) as Coords\n  if (hueIndex !== -1 && coords[hueIndex] !== null) {\n    coords[hueIndex] = normalizeHue(coords[hueIndex])\n  }\n  return { space, coords, alpha }\n}\n\n/**\n * Interpolates two colors, `t` from 0 to 1. Colors out of the sRGB gamut are\n * clipped after they're interpolated.\n */\nexport function mixColors(\n  a: Color,\n  b: Color,\n  t: number,\n  method: InterpolationMethod = { space: 'srgb', hue: 'shorter' }\n): RGBA {\n  return toRGBA(interpolate(a, b, t, method))\n}\n\n/**\n * Parses `in <space> [<hue-method> hue]`, the tokens of a color interpolation\n * method.\n */\nexport function parseInterpolationMethod(\n  tokens: string[]\n): InterpolationMethod | undefined {\n  const [keyword, name, method, hue] = tokens.map((token) =>\n    token.toLowerCase()\n  )\n  if (keyword !== 'in') return\n  const space = (LAYOUTS[name]?.space || PREDEFINED_SPACES[name]) as Space\n  if (!space) return\n  if (tokens.length === 2) return { space, hue: 'shorter' }\n  if (\n    tokens.length === 4 &&\n    POLAR[space] &&\n    HUE_METHODS.has(method) &&\n    hue === 'hue'\n  ) {\n    return { space, hue: method }\n  }\n}\n\nfunction parseColorNode(\n  node: Node | undefined,\n  currentColor: string | undefined\n): Color | undefined {\n  if (!node) return\n  if (node.type === 'word') {\n    const lower = node.value.toLowerCase()\n    if (lower === 'transparent') {\n      return { space: 'srgb', coords: [0, 0, 0], alpha: 0 }\n    }\n    if (lower === 'currentcolor') {\n      return currentColor && currentColor.toLowerCase() !== 'currentcolor'\n        ? parseColorString(currentColor)\n        : undefined\n    }\n    if (!/^#?[a-z0-9]+$/i.test(lower)) return\n    const parsed = cssColorParse(lower)\n    if (!parsed || parsed.type !== 'rgb') return\n    return {\n      space: 'srgb',\n      coords: parsed.values.map((c) => c / 255) as Coords,\n      alpha: parsed.alpha,\n    }\n  }\n  if (node.type !== 'function') return\n  const name = node.value.toLowerCase()\n  if (name === 'color') return parseColorFunction(node, currentColor)\n  if (name === 'color-mix') return parseColorMix(node, currentColor)\n  if (name === 'light-dark') {\n    // Without `color-scheme`, the light color is used.\n    const args = splitArguments(node)\n    if (args.length !== 2 || args.some((arg) => arg.length !== 1)) return\n    return parseColorNode(args[0][0], currentColor)\n  }\n  const layout = LAYOUTS[name]\n  if (!layout) return\n  const relative = parseRelative(node, currentColor)\n  if (!relative || (relative.legacy && !layout.allowLegacy)) return\n  return parseChannels(\n    relative.tokens,\n    layout,\n    relative.origin,\n    relative.legacy\n  )\n}\n\nfunction parseColorString(value: string, currentColor?: string) {\n  const nodes = significant(valueParser(value.trim()).nodes)\n  if (nodes.length !== 1) return\n  return parseColorNode(nodes[0], currentColor)\n}\n\nconst cache = new Map<string, Color | null>()\n\n/** Parses a color. Returns `null` if the value isn't a color. */\nexport function parseCSSColor(\n  value: string,\n  currentColor?: string\n): Color | null {\n  if (typeof value !== 'string') return null\n  const key = currentColor ? value + '\\n' + currentColor : value\n  let color = cache.get(key)\n  if (color === undefined) {\n    color = parseColorString(value, currentColor) || null\n    if (cache.size > 1000) cache.clear()\n    cache.set(key, color)\n  }\n  return color\n}\n\n/**\n * Parses a color to sRGB. Out of gamut colors are clipped. Returns `null` if\n * the value isn't a color.\n */\nexport function parseColor(value: string, currentColor?: string): RGBA | null {\n  const color = parseCSSColor(value, currentColor)\n  return color && toRGBA(color)\n}\n\nexport function isColor(value: string): boolean {\n  return parseColor(value, '#000') !== null\n}\n\nconst round = (n: number) => Math.round(n * 1000) / 1000\n\nexport function serializeColor([r, g, b, a]: RGBA): string {\n  const channels = [r, g, b].map(Math.round).join(',')\n  return a === 1 ? `rgb(${channels})` : `rgba(${channels},${round(a)})`\n}\n\nconst CONVERTED_FUNCTION =\n  /^(hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)$/\n\n/**\n * Whether SVG renderers may not support a color function. Of `rgb()` and\n * `hsl()`, only the comma separated syntax of CSS Color 3 is kept.\n */\nfunction needsConversion(node: FunctionNode) {\n  const name = node.value.toLowerCase()\n  if (CONVERTED_FUNCTION.test(name)) return true\n  if (!/^(rgba?|hsla?)$/.test(name)) return false\n  const tokens = significant(node.nodes)\n  return !(\n    (tokens.length === 5 || tokens.length === 7) &&\n    tokens.every((token, i) =>\n      i % 2\n        ? isComma(token)\n        : token.type === 'word' &&\n          /^[+-]?(\\d*\\.)?\\d+(e[+-]?\\d+)?%?$/i.test(token.value)\n    )\n  )\n}\n\nconst GRADIENT = /^(repeating-)?(linear|radial|conic)-gradient$/i\n\n/**\n * Whether a gradient has a color that isn't in a legacy syntax (hex colors,\n * named colors, `rgb()`, `hsl()` and `hwb()`), so it's interpolated in Oklab.\n */\nfunction hasNonLegacyColor(node: FunctionNode) {\n  let found = false\n  valueParser.walk(node.nodes, (child) => {\n    if (found || child.type !== 'function') return !found && undefined\n    const name = child.value.toLowerCase()\n    if (name === 'url') return false\n    if (/^(lab|lch|oklab|oklch|color|color-mix)$/.test(name)) {\n      found = true\n    } else if (/^(rgba?|hsla?|hwb)$/.test(name)) {\n      const [first] = significant(child.nodes)\n      found = first?.type === 'word' && first.value.toLowerCase() === 'from'\n      return false\n    }\n  })\n  return found\n}\n\n/**\n * Adds `in oklab` to a gradient with colors that aren't in a legacy syntax and\n * without an interpolation method, because they're converted to `rgb()`.\n *\n * @see https://www.w3.org/TR/css-images-4/#linear-gradient-syntax\n */\nfunction addInterpolationMethod(node: FunctionNode) {\n  const comma = node.nodes.findIndex(isComma)\n  if (comma === -1) return\n  const first = significant(node.nodes.slice(0, comma))\n  if (\n    first.some(\n      (token) => token.type === 'word' && token.value.toLowerCase() === 'in'\n    ) ||\n    !hasNonLegacyColor(node)\n  ) {\n    return\n  }\n  const method = { type: 'word', value: 'in oklab' } as Node\n  if (parseColorNode(first[0], '#000')) {\n    // The first argument is a color stop.\n    node.nodes.unshift(method, {\n      type: 'div',\n      value: ',',\n      before: '',\n      after: ' ',\n    } as Node)\n  } else {\n    node.nodes.splice(comma, 0, { type: 'space', value: ' ' } as Node, method)\n  }\n}\n\nconst MAYBE_CONVERTED =\n  /(hwb|lab|lch|oklab|oklch|color|color-mix|light-dark|rgba?|hsla?)\\(/i\n\n/**\n * Converts the colors in a CSS value that SVG renderers may not support, like\n * `oklch()` and `color-mix()`, to `rgb()` and `rgba()`. `onConvert` receives\n * each converted color with its original value.\n */\nexport function convertColors(\n  value: string,\n  currentColor?: string,\n  onConvert?: (converted: string, original: string) => void\n): string {\n  if (!MAYBE_CONVERTED.test(value)) return value\n  const parsed = valueParser(value)\n  let changed = false\n  parsed.walk((node) => {\n    if (node.type !== 'function') return\n    if (node.value.toLowerCase() === 'url') return false\n    // Colors in gradients are converted when the gradient is drawn, with the\n    // colors out of the sRGB gamut interpolated before they're clipped.\n    if (GRADIENT.test(node.value)) {\n      const before = valueParser.stringify(node)\n      addInterpolationMethod(node)\n      changed ||= valueParser.stringify(node) !== before\n      return false\n    }\n    if (!needsConversion(node)) return\n    const color = parseColorNode(node, currentColor)\n    if (!color) return false\n    const original = valueParser.stringify(node)\n    const converted = serializeColor(toRGBA(color))\n    onConvert?.(converted, original)\n    const word = node as unknown as Node\n    word.type = 'word'\n    word.value = converted\n    delete (word as Partial<FunctionNode>).nodes\n    changed = true\n    return false\n  })\n  return changed ? parsed.toString() : value\n}\n","import valueParser from 'postcss-value-parser'\n\nimport CssDimension from './vendor/parse-css-dimension/index.js'\n\n/**\n * If key for each direction is missing, assume default (50%)\n */\nexport interface ParsedTransformOrigin {\n  /** Relative horizontal transform origin in % */\n  xRelative?: number\n  /** Relative vertical transform origin in % */\n  yRelative?: number\n  /** Absolute horizontal transform origin in pixels */\n  xAbsolute?: number\n  /** Absolute horizontal transform origin in pixels */\n  yAbsolute?: number\n  /** Depth of the transform origin in pixels, 0 by default */\n  zAbsolute?: number\n}\n\ninterface ParsedUnit {\n  /** Relative unit in % */\n  relative?: number\n  /** Absolute unit in pixels */\n  absolute?: number\n}\n\nfunction parseUnit(word: string, baseFontSize: number): ParsedUnit {\n  // Zero doesn't need a unit.\n  if (/^[+-]?0*\\.?0+$/.test(word)) return { absolute: 0 }\n  try {\n    const parsed = new CssDimension(word)\n    switch (parsed.unit) {\n      case 'px':\n        return { absolute: parsed.value }\n      case 'em':\n        return { absolute: parsed.value * baseFontSize }\n      case 'rem':\n        return { absolute: parsed.value * 16 }\n      case '%':\n        return { relative: parsed.value }\n      default:\n        return {}\n    }\n  } catch (e) {\n    return {}\n  }\n}\n\nfunction handleWord(\n  word: string,\n  baseFontSize: number,\n  unitIsHorizontal: boolean\n) {\n  switch (word) {\n    case 'top':\n      return { yRelative: 0 }\n    case 'left':\n      return { xRelative: 0 }\n    case 'right':\n      return { xRelative: 100 }\n    case 'bottom':\n      return { yRelative: 100 }\n    case 'center':\n      return {}\n    default: {\n      const parsedUnit = parseUnit(word, baseFontSize)\n      return parsedUnit.absolute !== undefined\n        ? {\n            [unitIsHorizontal ? 'xAbsolute' : 'yAbsolute']: parsedUnit.absolute,\n          }\n        : parsedUnit.relative !== undefined\n        ? {\n            [unitIsHorizontal ? 'xRelative' : 'yRelative']: parsedUnit.relative,\n          }\n        : {}\n    }\n  }\n}\n\nexport default function parseTransformOrigin(\n  value: string | number,\n  baseFontSize: number\n): ParsedTransformOrigin {\n  // If it's a single value and a number, then it's horizontal\n  if (typeof value === 'number') {\n    return { xAbsolute: value }\n  }\n  let words: string[]\n  try {\n    words = valueParser(value)\n      .nodes.filter((node) => node.type === 'word')\n      .map((node) => node.value)\n  } catch (e) {\n    return {}\n  }\n\n  if (words.length === 1) {\n    // If it's a single value and a number, then it's horizontal, so\n    // pass `true` to `unitIsHorizontal`\n    return handleWord(words[0], baseFontSize, true)\n  } else if (words.length === 2 || words.length === 3) {\n    // The optional third value is the depth, which must be a length.\n    const z = words.length === 3 ? parseUnit(words.pop(), baseFontSize) : {}\n    if (z.relative !== undefined) return {}\n    const depth = z.absolute ? { zAbsolute: z.absolute } : {}\n\n    // Make words to be [horizontal, vertical]\n    if (\n      words[0] === 'top' ||\n      words[0] === 'bottom' ||\n      words[1] === 'left' ||\n      words[1] === 'right'\n    ) {\n      words.reverse()\n    }\n\n    return {\n      ...handleWord(words[0], baseFontSize, true),\n      ...handleWord(words[1], baseFontSize, false),\n      ...depth,\n    }\n  } else {\n    return {}\n  }\n}\n","var e=(t,r)=>()=>(r||t((r={exports:{}}).exports,r),r.exports);var u=e((k,g)=>{g.exports=[\"em\",\"ex\",\"ch\",\"rem\",\"vh\",\"vw\",\"vmin\",\"vmax\",\"px\",\"mm\",\"cm\",\"in\",\"pt\",\"pc\",\"mozmm\"]});var a=e((z,v)=>{v.exports=[\"deg\",\"grad\",\"rad\",\"turn\"]});var c=e((L,w)=>{w.exports=[\"dpi\",\"dpcm\",\"dppx\"]});var h=e(($,y)=>{y.exports=[\"Hz\",\"kHz\"]});var m=e((j,b)=>{b.exports=[\"s\",\"ms\"]});var q=u(),f=a(),p=c(),l=h(),d=m();function s(t){if(/\\.\\D?$/.test(t))throw new Error(\"The dot should be followed by a number\");if(/^[+-]{2}/.test(t))throw new Error(\"Only one leading +/- is allowed\");if(x(t)>1)throw new Error(\"Only one dot is allowed\");if(/%$/.test(t)){this.type=\"percentage\",this.value=o(t),this.unit=\"%\";return}var r=O(t);if(!r){this.type=\"number\",this.value=o(t);return}this.type=F(r),this.value=o(t.substr(0,t.length-r.length)),this.unit=r}s.prototype.valueOf=function(){return this.value};s.prototype.toString=function(){return this.value+(this.unit||\"\")};function U(t){return new s(t)}function x(t){var r=t.match(/\\./g);return r?r.length:0}function o(t){var r=parseFloat(t);if(isNaN(r))throw new Error(\"Invalid number: \"+t);return r}var E=[].concat(f,l,q,p,d);function O(t){var r=t.match(/\\D+$/),n=r&&r[0];if(n&&E.indexOf(n)===-1)throw new Error(\"Invalid unit: \"+n);return n}var D=Object.assign(i(f,\"angle\"),i(l,\"frequency\"),i(p,\"resolution\"),i(d,\"time\"));function i(t,r){return Object.fromEntries(t.map(n=>[n,r]))}function F(t){return D[t]||\"length\"}export{U as default};\n","import type { ReactNode, ReactElement } from 'react'\nimport escapeHTML from 'escape-html'\nimport LineBreaker from 'linebreak'\n\nimport CssDimension from './vendor/parse-css-dimension/index.js'\nimport type { CalcLength, Size } from './layout-engine/node.js'\n\nexport function isReactElement(node: ReactNode): node is ReactElement {\n  const type = typeof node\n  if (\n    type === 'number' ||\n    type === 'bigint' ||\n    type === 'string' ||\n    type === 'boolean'\n  ) {\n    return false\n  }\n  return true\n}\n\nexport function isClass(f: Function) {\n  return /^class\\s/.test(f.toString())\n}\n\nexport function isForwardRefComponent(type: any) {\n  return type && type.$$typeof === Symbol.for('react.forward_ref')\n}\n\nexport function isReactComponent(type: any) {\n  return typeof type === 'function' || isForwardRefComponent(type)\n}\n\nexport function hasDangerouslySetInnerHTMLProp(props: any) {\n  return 'dangerouslySetInnerHTML' in props\n}\n\nconst REACT_FRAGMENT = Symbol.for('react.fragment')\n\nexport function normalizeChildren(children: any) {\n  const flattend =\n    typeof children === 'undefined' ? [] : [].concat(children).flat(Infinity)\n\n  const res = []\n  for (let i = 0; i < flattend.length; i++) {\n    let value = flattend[i]\n    if (\n      typeof value === 'undefined' ||\n      typeof value === 'boolean' ||\n      value === null\n    ) {\n      continue\n    }\n    if (typeof value === 'number') {\n      value = String(value)\n    }\n    // Fragments are replaced by their children.\n    if (value?.type === REACT_FRAGMENT) {\n      flattend.splice(i + 1, 0, ...normalizeChildren(value.props?.children))\n      continue\n    }\n    if (\n      typeof value === 'string' &&\n      res.length &&\n      typeof res[res.length - 1] === 'string'\n    ) {\n      res[res.length - 1] += value\n    } else {\n      res.push(value)\n    }\n  }\n  return res\n}\n\n// A number with an optional unit, e.g. `10px`, `-.5em` or `50%`.\nconst DIMENSION = /^([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)([a-z]*|%)$/i\n\n// Absolute lengths in px: https://www.w3.org/TR/css-values-4/#absolute-lengths\nconst ABSOLUTE_LENGTHS: Record<string, number> = {\n  px: 1,\n  in: 96,\n  cm: 96 / 2.54,\n  mm: 96 / 25.4,\n  q: 96 / 101.6,\n  pt: 96 / 72,\n  pc: 16,\n}\n\nconst ANGLES = new Set(['deg', 'rad', 'turn', 'grad'])\n\n/**\n * Converts a length to px, or an angle to degrees. Percentages are of\n * `baseLength` if `percentage` is set. Returns `undefined` for other values.\n */\nexport function lengthToNumber(\n  length: string | number,\n  baseFontSize: number,\n  baseLength: number,\n  inheritedStyle: Record<string, string | number>,\n  percentage = false\n): number | undefined {\n  if (typeof length === 'number') return length\n  if (typeof length !== 'string') return\n\n  const match = DIMENSION.exec(length.trim())\n  if (!match) return\n\n  const value = parseFloat(match[1])\n  const unit = match[2].toLowerCase()\n  if (!unit) return value\n  if (unit in ABSOLUTE_LENGTHS) return value * ABSOLUTE_LENGTHS[unit]\n\n  const viewportWidth = inheritedStyle._viewportWidth as number\n  const viewportHeight = inheritedStyle._viewportHeight as number\n  switch (unit) {\n    case 'em':\n      return value * baseFontSize\n    case 'rem':\n      return value * 16\n    // The width of `0` in the font, see `FontLoader.getChRatio()`. The x-height\n    // is about half the font size.\n    case 'ch':\n      return value * baseFontSize * ((inheritedStyle._chRatio as number) || 0.5)\n    case 'ex':\n      return value * baseFontSize * 0.5\n    // The small, large and dynamic viewports of an image are the same.\n    // Container units are of the viewport without a query container, see\n    // `resolveContainerUnits()` for stylesheets.\n    case 'vw':\n    case 'cqw':\n    case 'cqi':\n    case 'svw':\n    case 'lvw':\n    case 'dvw':\n    case 'vi':\n    case 'svi':\n    case 'lvi':\n    case 'dvi':\n      return ~~((value * viewportWidth) / 100)\n    case 'vh':\n    case 'cqh':\n    case 'cqb':\n    case 'svh':\n    case 'lvh':\n    case 'dvh':\n    case 'vb':\n    case 'svb':\n    case 'lvb':\n    case 'dvb':\n      return ~~((value * viewportHeight) / 100)\n    case 'vmin':\n    case 'cqmin':\n    case 'svmin':\n    case 'lvmin':\n    case 'dvmin':\n      return ~~((value * Math.min(viewportWidth, viewportHeight)) / 100)\n    case 'vmax':\n    case 'cqmax':\n    case 'svmax':\n    case 'lvmax':\n    case 'dvmax':\n      return ~~((value * Math.max(viewportWidth, viewportHeight)) / 100)\n    // The line height of the element, as it's inherited, and of the root.\n    // `normal` is about 1.2 times the font size.\n    case 'lh': {\n      const lineHeight = inheritedStyle.lineHeight\n      return (\n        value *\n        (typeof lineHeight === 'number' ? lineHeight : 1.2) *\n        baseFontSize\n      )\n    }\n    case 'rlh':\n      return value * 1.2 * 16\n    case '%':\n      return percentage ? (value / 100) * baseLength : undefined\n  }\n  if (ANGLES.has(unit)) return calcDegree(value + unit)\n}\n\nexport function calcDegree(deg: string) {\n  const parsed = new CssDimension(deg)\n\n  switch (parsed.unit) {\n    case 'deg':\n      return parsed.value\n    case 'rad':\n      return (parsed.value * 180) / Math.PI\n    case 'turn':\n      return parsed.value * 360\n    case 'grad':\n      return 0.9 * parsed.value\n  }\n}\n\nexport function v(\n  field: string | number | undefined,\n  map: Record<string, any>,\n  fallback: any,\n  errorIfNotAllowedForProperty?: string\n) {\n  let value = map[field]\n  if (typeof value === 'undefined') {\n    if (errorIfNotAllowedForProperty && typeof field !== 'undefined') {\n      throw new Error(\n        `Invalid value for CSS property \"${errorIfNotAllowedForProperty}\". Allowed values: ${Object.keys(\n          map\n        )\n          .map((_v) => `\"${_v}\"`)\n          .join(' | ')}. Received: \"${field}\".`\n      )\n    }\n    value = fallback\n  }\n  return value\n}\n\n// Implementation modified from\n// https://github.com/niklasvh/html2canvas/blob/6521a487d78172f7179f7c973c1a3af40eb92009/src/css/layout/text.ts\n// https://drafts.csswg.org/css-text/#word-separator\nexport const wordSeparators = [\n  0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091, 0xa,\n].map((point) => String.fromCodePoint(point))\n\nconst segmenters = new Map<string, Intl.Segmenter>()\n\nfunction getSegmenter(granularity: 'word' | 'grapheme', locale?: string) {\n  const key = `${granularity}:${locale || ''}`\n  let segmenter = segmenters.get(key)\n  if (!segmenter) {\n    if (!(typeof Intl !== 'undefined' && 'Segmenter' in Intl)) {\n      // https://caniuse.com/mdn-javascript_builtins_intl_segments\n      throw new Error(\n        'Intl.Segmenter does not exist, please use import a polyfill.'\n      )\n    }\n    try {\n      segmenter = new Intl.Segmenter(locale, { granularity })\n    } catch {\n      // An invalid locale.\n      segmenter = new Intl.Segmenter(undefined, { granularity })\n    }\n    segmenters.set(key, segmenter)\n  }\n  return segmenter\n}\n\n// Segments by granularity and locale, then by content. Looking up the content\n// directly avoids building a key from it.\nconst segmentCaches = new Map<string, Map<string, string[]>>()\nconst MAX_SEGMENT_CACHE_SIZE = 500\n\nexport function segment(\n  content: string,\n  granularity: 'word' | 'grapheme',\n  locale?: string\n): string[] {\n  const cacheKey = `${granularity}:${locale || ''}`\n  let cache = segmentCaches.get(cacheKey)\n  if (!cache) {\n    cache = new Map()\n    segmentCaches.set(cacheKey, cache)\n  }\n  const cached = cache.get(content)\n  if (cached) return cached\n\n  let result: string[]\n\n  if (granularity === 'grapheme') {\n    result = [...getSegmenter('grapheme', locale).segment(content)].map(\n      (seg) => seg.segment\n    )\n  } else {\n    const segmented = [...getSegmenter('word', locale).segment(content)].map(\n      (seg) => seg.segment\n    ) as string[]\n\n    const output = []\n\n    let i = 0\n    // When there is a non-breaking space, join the previous and next words together.\n    // This change causes them to be treated as a single segment.\n    while (i < segmented.length) {\n      const s = segmented[i]\n\n      if (s == '\\u00a0') {\n        const previousWord = i === 0 ? '' : output.pop()\n        const nextWord = i === segmented.length - 1 ? '' : segmented[i + 1]\n\n        output.push(previousWord + '\\u00a0' + nextWord)\n        i += 2\n      } else {\n        output.push(s)\n        i++\n      }\n    }\n\n    result = output\n  }\n\n  if (cache.size >= MAX_SEGMENT_CACHE_SIZE) {\n    cache.delete(cache.keys().next().value)\n  }\n  cache.set(content, result)\n  return result\n}\n\n/**\n * Splits the graphemes that are drawn as images, like emojis, from the text\n * around them. Words can have them, e.g. consecutive keycaps are one word.\n */\nexport function splitImages(\n  text: string,\n  isImage: (grapheme: string) => boolean\n): string[] {\n  const graphemes = segment(text, 'grapheme')\n  if (!graphemes.some(isImage)) return [text]\n\n  const parts: string[] = []\n  let afterImage = true\n  for (const grapheme of graphemes) {\n    const image = isImage(grapheme)\n    if (image || afterImage) {\n      parts.push(grapheme)\n    } else {\n      parts[parts.length - 1] += grapheme\n    }\n    afterImage = image\n  }\n  return parts\n}\n\n/** Build safe SVG markup from element names, attributes, and serialized children. */\nexport function buildXMLString(\n  type: string,\n  attrs: Record<string, unknown>,\n  children?: string\n) {\n  assertValidXMLName(type, 'element')\n  let attrString = ''\n\n  for (const [k, _v] of Object.entries(attrs)) {\n    if (typeof _v !== 'undefined') {\n      assertValidXMLName(k, 'attribute')\n      attrString += ` ${k}=\"${escapeXMLAttribute(_v)}\"`\n    }\n  }\n\n  if (children) {\n    return `<${type}${attrString}>${children}</${type}>`\n  }\n  return `<${type}${attrString}/>`\n}\n\n// Mirrors React's XML-compatible attribute-name validation. Names cannot be\n// escaped, so validate them before interpolating them into markup.\nconst XML_NAME_START_CHAR =\n  ':A-Z_a-z\\\\u00C0-\\\\u00D6' +\n  '\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF' +\n  '\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF' +\n  '\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F' +\n  '\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF' +\n  '\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD'\nconst XML_NAME_CHAR =\n  XML_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040'\n// Combining marks are valid in XML names after the first character.\n// eslint-disable-next-line no-misleading-character-class\nconst VALID_XML_NAME = new RegExp(\n  '^[' + XML_NAME_START_CHAR + '][' + XML_NAME_CHAR + ']*$',\n  'u'\n)\nconst validatedXMLNames = new Set<string>()\n\nexport function assertValidXMLName(\n  name: string,\n  kind: 'element' | 'attribute'\n) {\n  if (validatedXMLNames.has(name)) return\n  if (!VALID_XML_NAME.test(name)) {\n    throw new Error(`Invalid XML ${kind} name: ${JSON.stringify(name)}`)\n  }\n  validatedXMLNames.add(name)\n}\n\nexport function escapeXMLAttribute(value: unknown): string {\n  if (\n    typeof value === 'number' ||\n    typeof value === 'bigint' ||\n    typeof value === 'boolean'\n  ) {\n    return '' + value\n  }\n  return escapeHTML(String(value))\n}\n\nexport function escapeXMLText(value: unknown): string {\n  return escapeHTML(String(value))\n}\n\nexport function createLRU<T>(max = 20) {\n  const store: Map<string, T> = new Map()\n  function get(key: string): T | undefined {\n    const value = store.get(key)\n    if (value === undefined) return undefined\n\n    // Move to end (most recently used)\n    store.delete(key)\n    store.set(key, value)\n    return value\n  }\n  function set(key: string, value: T) {\n    if (store.has(key)) {\n      store.delete(key)\n    } else if (store.size >= max) {\n      const firstKey = store.keys().next().value\n      store.delete(firstKey)\n    }\n\n    store.set(key, value)\n  }\n  function clear() {\n    store.clear()\n  }\n\n  return {\n    set,\n    get,\n    clear,\n  }\n}\n\nexport function parseViewBox(viewBox?: string | null | undefined) {\n  return viewBox ? viewBox.split(/[, ]/).filter(Boolean).map(Number) : null\n}\n\nexport function toString(x: unknown): string {\n  return Object.prototype.toString.call(x)\n}\n\nexport function isString(x: unknown): x is string {\n  return typeof x === 'string'\n}\n\nexport function isNumber(x: unknown): x is number {\n  return typeof x === 'number'\n}\n\nexport function isUndefined(x: unknown): x is undefined {\n  return typeof x === 'undefined'\n}\n\n/**\n * Reports an invalid value: to `onError` if there is one, so it's handled like\n * other invalid values, e.g. dropped in stylesheets, or else as a warning.\n */\nfunction reportInvalidValue(\n  message: string,\n  onError: ((error: Error) => void) | undefined\n) {\n  if (onError) onError(new Error(message))\n  else console.warn(message)\n}\n\nconst forProperty = (propertyName: string | undefined) =>\n  typeof propertyName === 'string' ? ` for \"${propertyName}\"` : ''\n\nexport function asPointPercentageLength(\n  x: string | number | CalcLength,\n  propertyName?: string,\n  onError?: (error: Error) => void\n): number | `${number}%` | CalcLength | undefined {\n  if (typeof x === 'number' || typeof x === 'object') {\n    return x\n  }\n  if (x.endsWith('%')) {\n    const percentageValue = parseFloat(x.slice(0, -1))\n    if (isNaN(percentageValue)) {\n      reportInvalidValue(\n        `Invalid value \"${x}\"${forProperty(\n          propertyName\n        )}. Expected a percentage value (e.g., \"50%\").`,\n        onError\n      )\n      return undefined\n    }\n    return `${percentageValue}%`\n  }\n\n  reportInvalidValue(\n    `Invalid value \"${x}\"${forProperty(\n      propertyName\n    )}. Expected a number or a percentage value (e.g., \"50%\").`,\n    onError\n  )\n  return undefined\n}\n\nconst SIZING_KEYWORDS = {\n  'min-content': 'min-content',\n  'max-content': 'max-content',\n  'fit-content': 'fit-content',\n  stretch: 'stretch',\n  // Prefixed aliases, like in Chrome.\n  '-webkit-min-content': 'min-content',\n  '-webkit-max-content': 'max-content',\n  '-webkit-fit-content': 'fit-content',\n  '-webkit-fill-available': 'stretch',\n} as const\n\n/**\n * A size of `width`, `height`, their minimums and maximums, or `flexBasis`: a\n * length, or a sizing keyword. `content` is only a flex basis, and `auto`\n * isn't a minimum or maximum.\n */\nexport function asSize(\n  x: string | number | CalcLength,\n  propertyName: string,\n  onError?: (error: Error) => void\n): Size | undefined {\n  if (typeof x === 'string') {\n    const value = x.trim().toLowerCase()\n    if (value in SIZING_KEYWORDS) return SIZING_KEYWORDS[value]\n    if (value === 'content' && propertyName === 'flexBasis') return 'content'\n    const fitContent = /^fit-content\\(\\s*([\\d.]+)(px|%)\\s*\\)$/.exec(value)\n    if (fitContent) {\n      const limit = parseFloat(fitContent[1])\n      return { fitContent: fitContent[2] === '%' ? `${limit}%` : limit }\n    }\n    // Maximums without a limit.\n    if (value === 'none' && /^max/.test(propertyName)) return undefined\n    // `auto` is the initial minimum, which is left unset. It isn't a maximum.\n    if (value === 'auto' && /^min/.test(propertyName)) return undefined\n  }\n  return /^(min|max)/.test(propertyName)\n    ? asPointPercentageLength(x, propertyName, onError)\n    : asPointAutoPercentageLength(x, propertyName, onError)\n}\n\nexport function asPointAutoPercentageLength(\n  x: string | number | CalcLength,\n  propertyName?: string,\n  onError?: (error: Error) => void\n): number | 'auto' | `${number}%` | CalcLength | undefined {\n  if (typeof x === 'number' || typeof x === 'object') {\n    return x\n  }\n  // Keywords are case-insensitive.\n  if (x.trim().toLowerCase() === 'auto') {\n    return 'auto'\n  }\n  if (x.endsWith('%')) {\n    const percentageValue = parseFloat(x.slice(0, -1))\n    if (isNaN(percentageValue)) {\n      reportInvalidValue(\n        `Invalid value \"${x}\"${forProperty(\n          propertyName\n        )}. Expected a percentage value (e.g., \"50%\").`,\n        onError\n      )\n      return undefined\n    }\n    return `${percentageValue}%`\n  }\n\n  reportInvalidValue(\n    `Invalid value \"${x}\"${forProperty(\n      propertyName\n    )}. Expected a number, \"auto\", or a percentage value (e.g., \"50%\").`,\n    onError\n  )\n  return undefined\n}\n\nexport function splitByBreakOpportunities(\n  content: string,\n  wordBreak: string\n): {\n  words: string[]\n  requiredBreaks: boolean[]\n} {\n  if (wordBreak === 'break-all') {\n    return { words: segment(content, 'grapheme'), requiredBreaks: [] }\n  }\n\n  if (wordBreak === 'keep-all') {\n    return { words: segment(content, 'word'), requiredBreaks: [] }\n  }\n\n  const breaker = new LineBreaker(content)\n  let last = 0\n  let bk = breaker.nextBreak()\n  const words = []\n  const requiredBreaks = [false]\n\n  while (bk) {\n    const word = content.slice(last, bk.position)\n    words.push(word)\n\n    if (bk.required) {\n      requiredBreaks.push(true)\n    } else {\n      requiredBreaks.push(false)\n    }\n\n    last = bk.position\n    bk = breaker.nextBreak()\n  }\n\n  return { words, requiredBreaks }\n}\n\nexport const midline = (s: string) => {\n  return s.replaceAll(\n    /([A-Z])/g,\n    (_, letter: string) => `-${letter.toLowerCase()}`\n  )\n}\n\nexport function splitEffects(\n  input: string,\n  separator: string | RegExp = ','\n): string[] {\n  const result = []\n  let l = 0\n  let parenCount = 0\n  separator = new RegExp(separator)\n\n  for (let i = 0; i < input.length; i++) {\n    if (input[i] === '(') {\n      parenCount++\n    } else if (input[i] === ')') {\n      parenCount--\n    }\n\n    if (parenCount === 0 && separator.test(input[i])) {\n      result.push(input.slice(l, i).trim())\n      l = i + 1\n    }\n  }\n\n  result.push(input.slice(l).trim())\n\n  return result\n}\n\n/**\n * Rounds a size up to a multiple of `1 / pointScaleFactor`, so that rounding\n * the layout to it doesn't make text wrap. Layouts that aren't rounded, with\n * `0`, are computed with 32-bit floats, so a small margin keeps them from\n * making it smaller. `epsilon` absorbs floating point errors.\n */\nexport function roundUpToLayout(\n  value: number,\n  pointScaleFactor = 1,\n  epsilon = 0\n) {\n  if (!pointScaleFactor) return value + 1e-3\n  return Math.ceil(value * pointScaleFactor - epsilon) / pointScaleFactor\n}\n","/**\n * The OpenType features of `fontKerning` and the `fontVariant` longhands.\n *\n * @see https://www.w3.org/TR/css-fonts-4/#font-feature-resolution\n */\nimport type { SerializedStyle } from '../handler/expand.js'\n\n/** The features of each keyword of the `fontVariant` longhands. */\nconst VARIANT_FEATURES: Record<string, Record<string, string>> = {\n  fontVariantLigatures: {\n    none: '\"liga\" 0, \"clig\" 0, \"dlig\" 0, \"hlig\" 0, \"calt\" 0',\n    'common-ligatures': '\"liga\" 1, \"clig\" 1',\n    'no-common-ligatures': '\"liga\" 0, \"clig\" 0',\n    'discretionary-ligatures': '\"dlig\" 1',\n    'no-discretionary-ligatures': '\"dlig\" 0',\n    'historical-ligatures': '\"hlig\" 1',\n    'no-historical-ligatures': '\"hlig\" 0',\n    contextual: '\"calt\" 1',\n    'no-contextual': '\"calt\" 0',\n  },\n  fontVariantCaps: {\n    'small-caps': '\"smcp\"',\n    'all-small-caps': '\"c2sc\", \"smcp\"',\n    'petite-caps': '\"pcap\"',\n    'all-petite-caps': '\"c2pc\", \"pcap\"',\n    unicase: '\"unic\"',\n    'titling-caps': '\"titl\"',\n  },\n  fontVariantNumeric: {\n    'lining-nums': '\"lnum\"',\n    'oldstyle-nums': '\"onum\"',\n    'proportional-nums': '\"pnum\"',\n    'tabular-nums': '\"tnum\"',\n    'diagonal-fractions': '\"frac\"',\n    'stacked-fractions': '\"afrc\"',\n    ordinal: '\"ordn\"',\n    'slashed-zero': '\"zero\"',\n  },\n  fontVariantEastAsian: {\n    jis78: '\"jp78\"',\n    jis83: '\"jp83\"',\n    jis90: '\"jp90\"',\n    jis04: '\"jp04\"',\n    simplified: '\"smpl\"',\n    traditional: '\"trad\"',\n    'full-width': '\"fwid\"',\n    'proportional-width': '\"pwid\"',\n    ruby: '\"ruby\"',\n  },\n  fontVariantPosition: {\n    sub: '\"subs\"',\n    super: '\"sups\"',\n  },\n  fontVariantAlternates: {\n    'historical-forms': '\"hist\"',\n  },\n  // Valid, but without features, since the presentation of emoji isn't\n  // chosen.\n  fontVariantEmoji: {\n    text: '',\n    emoji: '',\n    unicode: '',\n  },\n}\n\n/** Whether a property is `fontKerning` or a `fontVariant` longhand. */\nexport function isFontVariantProperty(name: string) {\n  return name === 'fontKerning' || name in VARIANT_FEATURES\n}\n\n/** Keywords that can't be combined with others in each longhand. */\nconst EXCLUSIVE = new Set(['normal', 'none'])\n\n/**\n * Validates a `fontVariant` longhand, or `fontKerning`, and returns its\n * keywords, lowercased.\n */\nexport function parseFontVariant(name: string, value: unknown): string {\n  const keywords = String(value).trim().toLowerCase().split(/\\s+/)\n  const valid =\n    name === 'fontKerning'\n      ? keywords.length === 1 &&\n        ['auto', 'normal', 'none'].includes(keywords[0])\n      : keywords.every(\n          (keyword) =>\n            (EXCLUSIVE.has(keyword) &&\n              keywords.length === 1 &&\n              (keyword === 'normal' || name === 'fontVariantLigatures')) ||\n            keyword in VARIANT_FEATURES[name]\n        )\n  if (!valid) throw new Error(`Invalid \\`${name}\\` value.`)\n  return keywords.join(' ')\n}\n\n/**\n * Splits the `fontVariant` shorthand into its longhands, which it resets.\n */\nexport function expandFontVariant(value: unknown): Record<string, string> {\n  const keywords = String(value).trim().toLowerCase().split(/\\s+/)\n  const longhands: Record<string, string[]> = {}\n  for (const name in VARIANT_FEATURES) longhands[name] = []\n  if (keywords.length === 1 && EXCLUSIVE.has(keywords[0])) {\n    if (keywords[0] === 'none') longhands.fontVariantLigatures.push('none')\n  } else {\n    for (const keyword of keywords) {\n      const name = Object.keys(VARIANT_FEATURES).find(\n        (longhand) => keyword in VARIANT_FEATURES[longhand]\n      )\n      if (!name) throw new Error('Invalid `fontVariant` value.')\n      longhands[name].push(keyword)\n    }\n  }\n  const result: Record<string, string> = {}\n  for (const name in longhands) {\n    result[name] = longhands[name].join(' ') || 'normal'\n  }\n  return result\n}\n\n/**\n * The features of `fontKerning` and the `fontVariant` longhands, followed by\n * `fontFeatureSettings`, which takes precedence, as a `fontFeatureSettings`\n * value.\n */\nexport function getFontFeatureSettings(\n  style: SerializedStyle\n): string | undefined {\n  const features: string[] = []\n  if (style.fontKerning === 'none') features.push('\"kern\" 0')\n  for (const name in VARIANT_FEATURES) {\n    const value = style[name] as string | undefined\n    if (!value) continue\n    for (const keyword of value.split(' ')) {\n      const feature = VARIANT_FEATURES[name][keyword]\n      if (feature) features.push(feature)\n    }\n  }\n  // Like in browsers, optional ligatures aren't used with letter spacing,\n  // unless `fontFeatureSettings` turns them on.\n  // https://www.w3.org/TR/css-text-3/#letter-spacing-property\n  if (typeof style.letterSpacing === 'number' && style.letterSpacing !== 0) {\n    features.push('\"liga\" 0, \"clig\" 0')\n  }\n  const settings = style.fontFeatureSettings as string | undefined\n  if (settings && settings !== 'normal') features.push(settings)\n  return features.length ? features.join(', ') : undefined\n}\n","import { getPropertyName } from 'css-to-react-native'\nimport valueParser from 'postcss-value-parser'\nimport { splitEffects } from '../utils.js'\n\nfunction getMaskProperty(style: Record<string, string | number>, name: string) {\n  const key = getPropertyName(`mask-${name}`)\n  return (style[key] || style[`WebkitM${key.substring(1)}`]) as string\n}\n\nexport interface MaskProperty {\n  image: string\n  position: string\n  size: string\n  repeat: string\n  origin: string\n  clip: string\n  /** How the layer is composited with the layers below it. */\n  composite: string\n  /** Whether the alpha or the luminance of the image masks. */\n  mode: string\n}\n\nconst IMAGE_FUNCTION = /^(url|(repeating-)?(linear|radial|conic)-gradient)$/i\nconst REPEAT_KEYWORDS = ['repeat', 'space', 'round', 'no-repeat']\nconst BOXES = [\n  'border-box',\n  'padding-box',\n  'content-box',\n  'margin-box',\n  'fill-box',\n  'stroke-box',\n  'view-box',\n]\nconst COMPOSITE_OPERATORS = ['add', 'subtract', 'intersect', 'exclude']\nconst MODES = ['alpha', 'luminance', 'match-source']\n/** The operators of `-webkit-mask-composite` that have standard ones. */\nconst WEBKIT_COMPOSITE_OPERATORS: Record<string, string> = {\n  'source-over': 'add',\n  'source-in': 'intersect',\n  'source-out': 'subtract',\n  xor: 'exclude',\n}\nconst POSITION_KEYWORDS = ['left', 'right', 'top', 'bottom', 'center']\nconst SIZE_KEYWORDS = ['auto', 'cover', 'contain']\n\nconst isLengthPercentage = (word: string) =>\n  /^[+-]?(\\d+(?:\\.\\d*)?|\\.\\d+)(px|em|rem|vw|vh|vmin|vmax|%)?$/i.test(word)\n\nfunction invalid(value: string): never {\n  throw new Error(`Invalid \\`mask\\` value: \"${value}\".`)\n}\n\n/**\n * `<mask-reference> || <position> [ / <bg-size> ]? || <repeat-style> ||\n * <geometry-box> || [ <geometry-box> | no-clip ] || <compositing-operator> ||\n * <masking-mode>`\n */\nfunction parseLayer(nodes: valueParser.Node[], value: string) {\n  let image: string | undefined\n  let position: string | undefined\n  let size: string | undefined\n  let repeat: string | undefined\n  let composite: string | undefined\n  let mode: string | undefined\n  const boxes: string[] = []\n\n  // The keyword at an index, or an empty string.\n  const wordAt = (i: number) =>\n    nodes[i]?.type === 'word' ? nodes[i].value.toLowerCase() : ''\n\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i]\n    const word = wordAt(i)\n\n    if (\n      image === undefined &&\n      ((node.type === 'function' && IMAGE_FUNCTION.test(node.value)) ||\n        word === 'none')\n    ) {\n      image = valueParser.stringify(node)\n    } else if (\n      repeat === undefined &&\n      (word === 'repeat-x' || word === 'repeat-y')\n    ) {\n      repeat = word\n    } else if (repeat === undefined && REPEAT_KEYWORDS.includes(word)) {\n      repeat = word\n      if (REPEAT_KEYWORDS.includes(wordAt(i + 1))) repeat += ' ' + wordAt(++i)\n    } else if (\n      boxes.length < 2 &&\n      (BOXES.includes(word) || (boxes.length === 1 && word === 'no-clip'))\n    ) {\n      boxes.push(word)\n    } else if (composite === undefined && COMPOSITE_OPERATORS.includes(word)) {\n      composite = word\n    } else if (mode === undefined && MODES.includes(word)) {\n      mode = word\n    } else if (\n      position === undefined &&\n      (POSITION_KEYWORDS.includes(word) || isLengthPercentage(word))\n    ) {\n      const tokens = [word]\n      while (\n        tokens.length < 4 &&\n        (POSITION_KEYWORDS.includes(wordAt(i + 1)) ||\n          isLengthPercentage(wordAt(i + 1)))\n      ) {\n        tokens.push(wordAt(++i))\n      }\n      position = tokens.join(' ')\n\n      if (nodes[i + 1]?.type === 'div' && nodes[i + 1].value === '/') {\n        i++\n        const sizeTokens: string[] = []\n        while (\n          sizeTokens.length < 2 &&\n          (SIZE_KEYWORDS.includes(wordAt(i + 1)) ||\n            isLengthPercentage(wordAt(i + 1)))\n        ) {\n          sizeTokens.push(wordAt(++i))\n        }\n        if (!sizeTokens.length) invalid(value)\n        size = sizeTokens.join(' ')\n      }\n    } else {\n      invalid(value)\n    }\n  }\n\n  return {\n    image: image ?? 'none',\n    position: position ?? '0% 0%',\n    size: size ?? 'auto',\n    repeat: repeat ?? 'repeat',\n    origin: boxes[0] ?? 'border-box',\n    clip: boxes[1] ?? boxes[0] ?? 'border-box',\n    composite: composite ?? 'add',\n    mode: mode ?? 'match-source',\n  }\n}\n\n/**\n * Expands the `mask` shorthand into its longhands, as lists of the values of\n * each layer: https://drafts.fxtf.org/css-masking/#the-mask\n */\nexport function expandMask(value: string) {\n  const layerNodes: valueParser.Node[][] = [[]]\n  for (const node of valueParser(value).nodes) {\n    if (node.type === 'div' && node.value === ',') layerNodes.push([])\n    else if (node.type !== 'space' && node.type !== 'comment') {\n      layerNodes[layerNodes.length - 1].push(node)\n    }\n  }\n  if (layerNodes.some((nodes) => !nodes.length)) invalid(value)\n\n  const layers = layerNodes.map((nodes) => parseLayer(nodes, value))\n  const list = (key: keyof typeof layers[number]) =>\n    layers.map((layer) => layer[key]).join(', ')\n\n  return {\n    maskImage: list('image'),\n    maskPosition: list('position'),\n    maskSize: list('size'),\n    maskRepeat: list('repeat'),\n    maskOrigin: list('origin'),\n    maskClip: list('clip'),\n    maskComposite: list('composite'),\n    maskMode: list('mode'),\n  }\n}\n\n/**\n * The layers of a mask, from the bottom one. Like in CSS, lists of values are\n * repeated for layers that they're too short for.\n */\nexport function parseMask(\n  style: Record<string, string | number>\n): MaskProperty[] {\n  const maskImage = (style.maskImage || style.WebkitMaskImage) as string\n\n  const values = (name: string, initial: string) => {\n    const value = getMaskProperty(style, name)\n    const list = value ? splitEffects(String(value)) : []\n    return (i: number) => (list.length ? list[i % list.length].trim() : initial)\n  }\n  const position = values('position', '0% 0%')\n  const size = values('size', 'auto')\n  const repeat = values('repeat', 'repeat')\n  const origin = values('origin', 'border-box')\n  const clip = values('clip', 'border-box')\n  const composite = values('composite', 'add')\n  const mode = values('mode', 'match-source')\n\n  return splitEffects(maskImage || '')\n    .map((image, i) => ({\n      image,\n      position: position(i),\n      size: size(i),\n      repeat: repeat(i),\n      origin: origin(i),\n      clip: clip(i),\n      composite:\n        WEBKIT_COMPOSITE_OPERATORS[composite(i).toLowerCase()] ??\n        composite(i).toLowerCase(),\n      mode: mode(i).toLowerCase(),\n    }))\n    .filter(({ image }) => image && image !== 'none')\n    .reverse()\n}\n","export const cornerShapeKeywords = {\n  round: 1,\n  squircle: 2,\n  square: Infinity,\n  bevel: 0,\n  scoop: -1,\n  notch: -Infinity,\n} as const\n\nexport function parseCornerShapeValue(value: string) {\n  const normalized = value.trim().toLowerCase()\n  const keyword = cornerShapeKeywords[normalized]\n  if (typeof keyword !== 'undefined') return keyword\n\n  const match = normalized.match(\n    /^superellipse\\(\\s*(-?infinity|[-+]?(?:\\d*\\.)?\\d+(?:e[-+]?\\d+)?)\\s*\\)$/\n  )\n  if (!match) throw new Error('Invalid corner shape value: \"' + value + '\".')\n  if (match[1] === 'infinity') return Infinity\n  if (match[1] === '-infinity') return -Infinity\n\n  const shape = Number(match[1])\n  if (!Number.isFinite(shape)) {\n    throw new Error('Invalid corner shape value: \"' + value + '\".')\n  }\n  return shape\n}\n\nexport function splitCornerShapeValues(value: string, maxValues = 4) {\n  const values = value.match(/superellipse\\([^)]*\\)|[^\\s]+/gi) || []\n\n  if (values.length < 1 || values.length > maxValues) {\n    throw new Error('Invalid corner shape value: \"' + value + '\".')\n  }\n\n  for (const shape of values) parseCornerShapeValue(shape)\n  return values\n}\n","import cssColorParse from 'parse-css-color'\n\nimport { calcDegree, lengthToNumber, splitEffects } from '../utils.js'\n\nexport type BackdropFilter =\n  | { type: 'blur'; value: number }\n  | {\n      type:\n        | 'brightness'\n        | 'contrast'\n        | 'grayscale'\n        | 'invert'\n        | 'opacity'\n        | 'saturate'\n        | 'sepia'\n      value: number\n    }\n  | { type: 'hue-rotate'; value: number }\n  | {\n      type: 'drop-shadow'\n      offsetX: number\n      offsetY: number\n      blurRadius: number\n      color: string\n    }\n\n/** A reference to an SVG `<filter>` of the document, by its `id`. */\nexport type URLFilter = { type: 'url'; id: string }\n\nconst amountDefaults = {\n  brightness: 1,\n  contrast: 1,\n  grayscale: 1,\n  invert: 1,\n  opacity: 1,\n  saturate: 1,\n  sepia: 1,\n}\n\n/**\n * Parses the filter functions of `filter` or `backdropFilter`.\n */\nexport function parseBackdropFilter(\n  value: string | number,\n  inheritedStyle: Record<string, string | number>,\n  currentColor = 'black',\n  property = 'backdropFilter'\n): (BackdropFilter | URLFilter)[] {\n  if (value === 'none') return []\n  if (typeof value !== 'string') {\n    throw new Error(`Invalid \\`${property}\\` value: \"${value}\".`)\n  }\n\n  const filters = splitEffects(value, /\\s/).filter(Boolean)\n  if (!filters.length) {\n    throw new Error(`Invalid \\`${property}\\` value: \"${value}\".`)\n  }\n\n  return filters.map((filter) => {\n    const match = filter.match(/^([a-z-]+)\\((.*)\\)$/i)\n    if (!match) {\n      throw new Error(`Invalid filter function in \\`${property}\\`.`)\n    }\n\n    const name = match[1].toLowerCase()\n    const argument = match[2].trim()\n\n    if (name === 'blur') {\n      const radius = argument\n        ? resolveLength(argument, inheritedStyle, 'blur()', property)\n        : 0\n      if (radius < 0) {\n        throw new Error(`Invalid \\`blur()\\` radius in \\`${property}\\`.`)\n      }\n      return { type: 'blur', value: radius }\n    }\n\n    if (name === 'hue-rotate') {\n      const angle = argument === '0' || !argument ? 0 : calcDegree(argument)\n      if (typeof angle === 'undefined') {\n        throw new Error(`Invalid \\`hue-rotate()\\` angle in \\`${property}\\`.`)\n      }\n      return { type: 'hue-rotate', value: angle }\n    }\n\n    if (name === 'drop-shadow') {\n      return parseDropShadow(argument, inheritedStyle, currentColor, property)\n    }\n\n    // `filter` can reference SVG filters of the document.\n    if (name === 'url' && property === 'filter') {\n      const url = argument.replace(/^([\"'])(.*)\\1$/, '$2').trim()\n      if (!url.startsWith('#') || url.length < 2) {\n        throw new Error(\n          `Unsupported \\`url()\\` in \\`${property}\\`, only references to SVG filters of the document, e.g. \\`url(#filter)\\`, are supported.`\n        )\n      }\n      return { type: 'url', id: url.slice(1) }\n    }\n\n    if (name in amountDefaults) {\n      const type = name as keyof typeof amountDefaults\n      const amount = argument\n        ? resolveAmount(argument, `${type}()`, property)\n        : amountDefaults[type]\n      const normalizedAmount = [\n        'grayscale',\n        'invert',\n        'opacity',\n        'sepia',\n      ].includes(type)\n        ? Math.min(amount, 1)\n        : amount\n      return { type, value: normalizedAmount } as BackdropFilter\n    }\n\n    throw new Error(`Unsupported \\`${name}()\\` in \\`${property}\\`.`)\n  })\n}\n\nfunction parseDropShadow(\n  value: string,\n  inheritedStyle: Record<string, string | number>,\n  currentColor: string,\n  property: string\n): BackdropFilter {\n  const parts = splitEffects(value, /\\s/).filter(Boolean)\n  let color = currentColor\n  const lengths: string[] = []\n\n  for (const part of parts) {\n    if (cssColorParse(part)) {\n      color = part\n    } else {\n      lengths.push(part)\n    }\n  }\n\n  if (lengths.length < 2 || lengths.length > 3) {\n    throw new Error(`Invalid \\`drop-shadow()\\` value in \\`${property}\\`.`)\n  }\n\n  const offsetX = resolveLength(\n    lengths[0],\n    inheritedStyle,\n    'drop-shadow()',\n    property\n  )\n  const offsetY = resolveLength(\n    lengths[1],\n    inheritedStyle,\n    'drop-shadow()',\n    property\n  )\n  const blurRadius = lengths[2]\n    ? resolveLength(lengths[2], inheritedStyle, 'drop-shadow()', property)\n    : 0\n\n  if (blurRadius < 0) {\n    throw new Error(`Invalid \\`drop-shadow()\\` blur radius in \\`${property}\\`.`)\n  }\n\n  return {\n    type: 'drop-shadow',\n    offsetX,\n    offsetY,\n    blurRadius,\n    color,\n  }\n}\n\nfunction resolveLength(\n  value: string,\n  inheritedStyle: Record<string, string | number>,\n  functionName: string,\n  property: string\n) {\n  const resolved = lengthToNumber(\n    value,\n    inheritedStyle.fontSize as number,\n    0,\n    inheritedStyle\n  )\n  if (typeof resolved === 'undefined') {\n    throw new Error(\n      `Invalid length \\`${value}\\` in \\`${functionName}\\` for \\`${property}\\`.`\n    )\n  }\n  return resolved\n}\n\nfunction resolveAmount(value: string, functionName: string, property: string) {\n  const percentage = value.match(/^([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+))%$/)\n  const amount = percentage ? Number(percentage[1]) / 100 : Number(value)\n  if (!Number.isFinite(amount) || amount < 0) {\n    throw new Error(\n      `Invalid amount \\`${value}\\` in \\`${functionName}\\` for \\`${property}\\`.`\n    )\n  }\n  return amount\n}\n","/**\n * Parses the CSS Grid properties for the layout engine:\n * https://www.w3.org/TR/css-grid-1/\n */\n\nimport type {\n  GridLine,\n  GridRepeat,\n  GridTemplateAreas,\n  GridTrackBreadth,\n  GridTrackList,\n  GridTrackSize,\n} from '../layout-engine/node.js'\nimport { MATH_FUNCTION, parseMath } from './math.js'\n\n/** Resolves a length to px, or returns `undefined` if it isn't one. */\nexport type ResolveLength = (value: string) => number | undefined\n\ntype Token =\n  | { type: 'names'; names: string[] }\n  | { type: 'value'; value: string }\n  | { type: 'function'; name: string; args: string }\n\nfunction invalid(property: string, value: unknown): never {\n  throw new Error(`Invalid value for CSS property \"${property}\": \"${value}\".`)\n}\n\n/** Splits a value into line names (`[a b]`), functions and other values. */\nfunction tokenize(value: string, property: string): Token[] {\n  const tokens: Token[] = []\n  let i = 0\n  while (i < value.length) {\n    if (/\\s/.test(value[i])) {\n      i++\n    } else if (value[i] === '[') {\n      const end = value.indexOf(']', i)\n      if (end === -1) invalid(property, value)\n      const names = value\n        .slice(i + 1, end)\n        .trim()\n        .split(/\\s+/)\n        .filter(Boolean)\n      tokens.push({ type: 'names', names })\n      i = end + 1\n    } else {\n      let j = i\n      while (j < value.length && !/[\\s[()]/.test(value[j])) j++\n      if (value[j] === '(') {\n        let depth = 0\n        let end = j\n        for (; end < value.length; end++) {\n          if (value[end] === '(') depth++\n          else if (value[end] === ')' && --depth === 0) break\n        }\n        if (end === value.length) invalid(property, value)\n        const name = value.slice(i, j).toLowerCase()\n        tokens.push({ type: 'function', name, args: value.slice(j + 1, end) })\n        i = end + 1\n      } else {\n        if (j === i) invalid(property, value)\n        tokens.push({ type: 'value', value: value.slice(i, j) })\n        i = j\n      }\n    }\n  }\n  return tokens\n}\n\n/** Splits function arguments by top-level commas. */\nfunction splitArguments(args: string) {\n  const result: string[] = []\n  let depth = 0\n  let start = 0\n  for (let i = 0; i < args.length; i++) {\n    if (args[i] === '(') depth++\n    else if (args[i] === ')') depth--\n    else if (args[i] === ',' && depth === 0) {\n      result.push(args.slice(start, i).trim())\n      start = i + 1\n    }\n  }\n  result.push(args.slice(start).trim())\n  return result\n}\n\nconst NUMBER = String.raw`\\+?(?:\\d+(?:\\.\\d*)?|\\.\\d+)`\n\nfunction parseBreadth(\n  value: string,\n  resolveLength: ResolveLength\n): GridTrackBreadth | undefined {\n  const normalized = value.trim().toLowerCase()\n  if (\n    normalized === 'auto' ||\n    normalized === 'min-content' ||\n    normalized === 'max-content'\n  ) {\n    return normalized\n  }\n  if (new RegExp(`^${NUMBER}fr$`).test(normalized)) {\n    return `${parseFloat(normalized)}fr`\n  }\n  if (new RegExp(`^${NUMBER}%$`).test(normalized)) {\n    return `${parseFloat(normalized)}%`\n  }\n  // Math functions with percentages are resolved in the layout, with the size\n  // of the grid container.\n  const math = parseMath(normalized, resolveLength)\n  if (math) {\n    if (math.type !== 'length') return\n    if (math.percentage) return { calc: math.evaluate }\n    const length = math.evaluate(0)\n    return length >= 0 ? length : undefined\n  }\n  const length = resolveLength(normalized)\n  if (length !== undefined && length >= 0) return length\n}\n\nconst isFlex = (breadth: GridTrackBreadth) =>\n  typeof breadth === 'string' && breadth.endsWith('fr')\n\nfunction parseTrackSize(\n  token: Token,\n  resolveLength: ResolveLength\n): GridTrackSize | undefined {\n  if (token.type === 'value') {\n    const breadth = parseBreadth(token.value, resolveLength)\n    if (breadth === undefined) return\n    // A flex fraction is `minmax(auto, <flex>)`.\n    return { min: isFlex(breadth) ? 'auto' : breadth, max: breadth }\n  }\n  if (token.type !== 'function') return\n  if (MATH_FUNCTION.test(`${token.name}(`)) {\n    const breadth = parseBreadth(`${token.name}(${token.args})`, resolveLength)\n    return breadth === undefined ? undefined : { min: breadth, max: breadth }\n  }\n\n  const args = splitArguments(token.args)\n  if (token.name === 'minmax' && args.length === 2) {\n    const min = parseBreadth(args[0], resolveLength)\n    const max = parseBreadth(args[1], resolveLength)\n    if (min === undefined || max === undefined || isFlex(min)) return\n    return { min, max }\n  }\n  if (token.name === 'fit-content' && args.length === 1) {\n    const limit = parseBreadth(args[0], resolveLength)\n    if (\n      typeof limit === 'number' ||\n      (typeof limit === 'string' && limit.endsWith('%'))\n    ) {\n      return {\n        min: 'auto',\n        max: { fitContent: limit as number | `${number}%` },\n      }\n    }\n  }\n}\n\n/** Parses tracks and the names of the lines between them. */\nfunction parseTracks(\n  tokens: Token[],\n  resolveLength: ResolveLength,\n  parseRepeat: ((args: string) => GridRepeat) | null,\n  property: string,\n  value: string\n) {\n  const tracks: (GridTrackSize | GridRepeat)[] = []\n  const lineNames: string[][] = []\n  let names: string[] = []\n  let hasNames = false\n  for (const token of tokens) {\n    if (token.type === 'names') {\n      names.push(...token.names)\n      hasNames ||= token.names.length > 0\n      continue\n    }\n    lineNames.push(names)\n    names = []\n    if (token.type === 'function' && token.name === 'repeat') {\n      if (!parseRepeat) invalid(property, value)\n      tracks.push(parseRepeat(token.args))\n    } else {\n      tracks.push(\n        parseTrackSize(token, resolveLength) ?? invalid(property, value)\n      )\n    }\n  }\n  lineNames.push(names)\n  if (!tracks.length) invalid(property, value)\n  return { tracks, lineNames: hasNames ? lineNames : [] }\n}\n\n/**\n * `grid-template-columns` and `grid-template-rows`: `none`, or tracks with\n * line names.\n */\nexport function parseGridTrackList(\n  value: string | number | undefined,\n  resolveLength: ResolveLength,\n  property: string\n): GridTrackList | undefined {\n  if (value === undefined) return\n  if (typeof value === 'number') {\n    if (value < 0) invalid(property, value)\n    return { tracks: [{ min: value, max: value }], lineNames: [] }\n  }\n  const normalized = value.trim()\n  if (normalized === 'none') return\n\n  let autoRepeats = 0\n  const parseRepeat = (args: string): GridRepeat => {\n    const [count, ...rest] = splitArguments(args)\n    const tracks = rest.join(',')\n    const normalizedCount = count.toLowerCase()\n    let repeatCount: GridRepeat['count']\n    if (normalizedCount === 'auto-fill' || normalizedCount === 'auto-fit') {\n      repeatCount = normalizedCount\n      if (++autoRepeats > 1) invalid(property, value)\n    } else if (/^\\d+$/.test(normalizedCount) && +normalizedCount > 0) {\n      repeatCount = +normalizedCount\n    } else {\n      invalid(property, value)\n    }\n    const repeated = parseTracks(\n      tokenize(tracks, property),\n      resolveLength,\n      null,\n      property,\n      value\n    )\n    return {\n      count: repeatCount,\n      tracks: repeated.tracks as GridTrackSize[],\n      lineNames: repeated.lineNames,\n    }\n  }\n\n  return parseTracks(\n    tokenize(normalized, property),\n    resolveLength,\n    parseRepeat,\n    property,\n    value\n  )\n}\n\n/** `grid-auto-columns` and `grid-auto-rows`: track sizes. */\nexport function parseGridAutoTracks(\n  value: string | number | undefined,\n  resolveLength: ResolveLength,\n  property: string\n): GridTrackSize[] | undefined {\n  if (value === undefined) return\n  if (typeof value === 'number') {\n    if (value < 0) invalid(property, value)\n    return [{ min: value, max: value }]\n  }\n  return tokenize(value, property).map(\n    (token) => parseTrackSize(token, resolveLength) ?? invalid(property, value)\n  )\n}\n\n/** `grid-auto-flow`: `row` or `column`, and `dense`. */\nexport function parseGridAutoFlow(\n  value: string | undefined\n): 'row' | 'column' | 'row dense' | 'column dense' | undefined {\n  if (value === undefined) return\n  const words = value.trim().toLowerCase().split(/\\s+/)\n  const direction = words.filter((word) => word === 'row' || word === 'column')\n  const dense = words.filter((word) => word === 'dense')\n  if (\n    direction.length > 1 ||\n    dense.length > 1 ||\n    direction.length + dense.length !== words.length\n  ) {\n    invalid('gridAutoFlow', value)\n  }\n  const axis = (direction[0] ?? 'row') as 'row' | 'column'\n  return dense.length ? `${axis} dense` : axis\n}\n\nconst isCustomIdent = (word: string) =>\n  /^-?[_a-zA-Z][\\w-]*$/.test(word) && word !== 'auto' && word !== 'span'\n\n/**\n * `grid-row-start`, `grid-row-end`, `grid-column-start` and\n * `grid-column-end`: `auto`, `<integer> && <custom-ident>?` or\n * `span && [<integer> || <custom-ident>]`.\n */\nexport function parseGridLine(\n  value: string | number | undefined,\n  property: string\n): GridLine | undefined {\n  if (value === undefined) return\n  if (typeof value === 'number') {\n    if (!Number.isInteger(value) || value === 0) invalid(property, value)\n    return { line: value }\n  }\n  const words = value.trim().split(/\\s+/)\n  if (words.length === 1 && words[0] === 'auto') return 'auto'\n\n  let span = false\n  let integer: number | undefined\n  let name: string | undefined\n  for (const word of words) {\n    if (word === 'span' && !span) span = true\n    else if (/^[+-]?\\d+$/.test(word) && integer === undefined) {\n      integer = parseInt(word, 10)\n    } else if (isCustomIdent(word) && name === undefined) name = word\n    else invalid(property, value)\n  }\n  if (span) {\n    if (integer === undefined ? !name : integer <= 0) invalid(property, value)\n    return { span: integer ?? 1, ...(name ? { name } : {}) }\n  }\n  if (integer === 0 || (integer === undefined && !name)) {\n    invalid(property, value)\n  }\n  return { line: integer ?? 0, ...(name ? { name } : {}) }\n}\n\n/**\n * Expands `grid-row`, `grid-column` and `grid-area` into lines. Omitted end\n * lines are the start line if it's a name, and `auto` otherwise.\n */\nexport function expandGridPlacement(\n  property: 'gridRow' | 'gridColumn' | 'gridArea',\n  value: string | number\n): Record<string, string | number> {\n  const parts =\n    typeof value === 'number' ? [value] : value.split('/').map((s) => s.trim())\n  const maxParts = property === 'gridArea' ? 4 : 2\n  if (parts.length > maxParts || parts.some((part) => part === '')) {\n    invalid(property, value)\n  }\n  const fallback = (part: string | number | undefined) =>\n    typeof part === 'string' && isCustomIdent(part) ? part : 'auto'\n\n  if (property === 'gridArea') {\n    const [rowStart, columnStart = fallback(rowStart)] = parts\n    const [, , rowEnd = fallback(rowStart), columnEnd = fallback(columnStart)] =\n      parts\n    return {\n      gridRowStart: rowStart,\n      gridColumnStart: columnStart,\n      gridRowEnd: rowEnd,\n      gridColumnEnd: columnEnd,\n    }\n  }\n  const [start, end = fallback(start)] = parts\n  return { [`${property}Start`]: start, [`${property}End`]: end }\n}\n\n/** `grid-template-areas`: `none`, or a string for each row. */\nexport function parseGridTemplateAreas(\n  value: string | undefined\n): GridTemplateAreas | undefined {\n  if (value === undefined || value.trim() === 'none') return\n  const rows: string[][] = []\n  const rest = value.replace(/\"([^\"]*)\"|'([^']*)'/g, (_, double, single) => {\n    rows.push((double ?? single).trim().split(/\\s+/))\n    return ''\n  })\n  const columnCount = rows[0]?.length ?? 0\n  if (\n    rest.trim() ||\n    !columnCount ||\n    rows.some((row) => row.length !== columnCount || row[0] === '')\n  ) {\n    invalid('gridTemplateAreas', value)\n  }\n\n  // The bounds of each named area, which must be filled rectangles.\n  const bounds = new Map<string, number[]>()\n  rows.forEach((row, r) =>\n    row.forEach((cell, c) => {\n      if (/^\\.+$/.test(cell)) return\n      if (!isCustomIdent(cell)) invalid('gridTemplateAreas', value)\n      const area = bounds.get(cell)\n      if (!area) bounds.set(cell, [r, r, c, c])\n      else {\n        area[0] = Math.min(area[0], r)\n        area[1] = Math.max(area[1], r)\n        area[2] = Math.min(area[2], c)\n        area[3] = Math.max(area[3], c)\n      }\n    })\n  )\n  for (const [name, [r0, r1, c0, c1]] of bounds) {\n    for (let r = r0; r <= r1; r++) {\n      for (let c = c0; c <= c1; c++) {\n        if (rows[r][c] !== name) invalid('gridTemplateAreas', value)\n      }\n    }\n  }\n\n  return {\n    rowCount: rows.length,\n    columnCount,\n    areas: [...bounds].map(([name, [r0, r1, c0, c1]]) => ({\n      name,\n      rowStart: r0 + 1,\n      rowEnd: r1 + 2,\n      columnStart: c0 + 1,\n      columnEnd: c1 + 2,\n    })),\n  }\n}\n\ntype ShorthandToken =\n  | { type: 'string'; value: string }\n  | { type: 'slash' }\n  | { type: 'value'; value: string }\n\n/** Splits a value into strings, slashes and other values with line names. */\nfunction tokenizeShorthand(value: string, property: string) {\n  const tokens: ShorthandToken[] = []\n  let i = 0\n  while (i < value.length) {\n    const char = value[i]\n    if (/\\s/.test(char)) {\n      i++\n    } else if (char === '\"' || char === \"'\") {\n      const end = value.indexOf(char, i + 1)\n      if (end === -1) invalid(property, value)\n      tokens.push({ type: 'string', value: value.slice(i + 1, end) })\n      i = end + 1\n    } else if (char === '/') {\n      tokens.push({ type: 'slash' })\n      i++\n    } else {\n      let j = i\n      let depth = 0\n      while (j < value.length) {\n        if (value[j] === '(' || value[j] === '[') depth++\n        else if (value[j] === ')' || value[j] === ']') depth--\n        else if (depth === 0 && /[\\s/\"']/.test(value[j])) break\n        j++\n      }\n      tokens.push({ type: 'value', value: value.slice(i, j) })\n      i = j\n    }\n  }\n  return tokens\n}\n\nconst joinValues = (tokens: ShorthandToken[]) =>\n  tokens.map((token) => (token as { value: string }).value).join(' ')\n\nconst isLineNames = (token: ShorthandToken | undefined) =>\n  token?.type === 'value' && token.value.startsWith('[')\n\n/**\n * Expands `grid-template`: `none`, `<rows> / <columns>`, or rows with the\n * strings of `grid-template-areas`, optionally followed by `/ <columns>`.\n */\nexport function expandGridTemplate(\n  value: string,\n  property = 'gridTemplate'\n): Record<string, string> {\n  const tokens = tokenizeShorthand(value.trim(), property)\n  if (tokens.length === 1 && joinValues(tokens).toLowerCase() === 'none') {\n    return {\n      gridTemplateRows: 'none',\n      gridTemplateColumns: 'none',\n      gridTemplateAreas: 'none',\n    }\n  }\n  const slash = tokens.findIndex((token) => token.type === 'slash')\n  if (tokens.filter((token) => token.type === 'slash').length > 1) {\n    invalid(property, value)\n  }\n  const before = slash === -1 ? tokens : tokens.slice(0, slash)\n  const after = slash === -1 ? [] : tokens.slice(slash + 1)\n  if (after.some((token) => token.type === 'string')) invalid(property, value)\n\n  if (!before.some((token) => token.type === 'string')) {\n    if (slash === -1 || !before.length || !after.length) {\n      invalid(property, value)\n    }\n    return {\n      gridTemplateRows: joinValues(before),\n      gridTemplateColumns: joinValues(after),\n      gridTemplateAreas: 'none',\n    }\n  }\n\n  // `[<line-names>? <string> <track-size>? <line-names>?]+`\n  const rows: string[] = []\n  const areas: string[] = []\n  let i = 0\n  while (i < before.length) {\n    if (isLineNames(before[i])) rows.push(joinValues([before[i++]]))\n    const area = before[i++]\n    if (area?.type !== 'string') invalid(property, value)\n    areas.push(JSON.stringify((area as { value: string }).value))\n    const size = before[i]\n    if (size?.type === 'value' && !isLineNames(size)) {\n      rows.push(size.value)\n      i++\n    } else {\n      rows.push('auto')\n    }\n    if (isLineNames(before[i])) rows.push(joinValues([before[i++]]))\n  }\n  if (slash !== -1 && !after.length) invalid(property, value)\n  return {\n    gridTemplateRows: rows.join(' '),\n    gridTemplateColumns: after.length ? joinValues(after) : 'none',\n    gridTemplateAreas: areas.join(' '),\n  }\n}\n\n/**\n * Expands `grid`: a `grid-template`, or `auto-flow` with implicit tracks on\n * one side of the slash and explicit tracks on the other.\n */\nexport function expandGrid(value: string): Record<string, string> {\n  const tokens = tokenizeShorthand(value.trim(), 'grid')\n  const slash = tokens.findIndex((token) => token.type === 'slash')\n  const isAutoFlow = (token: ShorthandToken) =>\n    token.type === 'value' && token.value.toLowerCase() === 'auto-flow'\n  const autoFlowIndex = tokens.findIndex(isAutoFlow)\n  const reset = { gridAutoRows: 'auto', gridAutoColumns: 'auto' }\n  if (autoFlowIndex === -1) {\n    return {\n      ...expandGridTemplate(value, 'grid'),\n      ...reset,\n      gridAutoFlow: 'row',\n    }\n  }\n  if (slash === -1 || tokens.filter((t) => t.type === 'slash').length > 1) {\n    invalid('grid', value)\n  }\n  const rowFlow = autoFlowIndex < slash\n  const side = rowFlow ? tokens.slice(0, slash) : tokens.slice(slash + 1)\n  const other = rowFlow ? tokens.slice(slash + 1) : tokens.slice(0, slash)\n  // `[auto-flow && dense?] <track-size>*`\n  let dense = false\n  let flowCount = 0\n  let start = 0\n  while (start < side.length && start < 2) {\n    const token = side[start]\n    if (isAutoFlow(token)) flowCount++\n    else if (token.type === 'value' && token.value.toLowerCase() === 'dense') {\n      dense = true\n    } else break\n    start++\n  }\n  const sizes = side.slice(start)\n  if (\n    flowCount !== 1 ||\n    !other.length ||\n    side.some((token) => token.type === 'string') ||\n    sizes.some(isAutoFlow) ||\n    other.some((token) => token.type === 'string' || isAutoFlow(token))\n  ) {\n    invalid('grid', value)\n  }\n  const implicit = sizes.length ? joinValues(sizes) : 'auto'\n  return {\n    gridTemplateRows: rowFlow ? 'none' : joinValues(other),\n    gridTemplateColumns: rowFlow ? joinValues(other) : 'none',\n    gridTemplateAreas: 'none',\n    gridAutoFlow: (rowFlow ? 'row' : 'column') + (dense ? ' dense' : ''),\n    gridAutoRows: rowFlow ? implicit : 'auto',\n    gridAutoColumns: rowFlow ? 'auto' : implicit,\n  }\n}\n","/**\n * Expands the `background` shorthand into its longhands:\n * https://www.w3.org/TR/css-backgrounds-3/#background\n */\n\nimport valueParser from 'postcss-value-parser'\nimport cssColorParse from 'parse-css-color'\n\nconst IMAGE_FUNCTION = /^(url|(repeating-)?(linear|radial|conic)-gradient)$/i\nconst REPEAT_KEYWORDS = ['repeat', 'space', 'round', 'no-repeat']\nconst ATTACHMENTS = ['scroll', 'fixed', 'local']\nconst BOXES = ['border-box', 'padding-box', 'content-box']\nconst POSITION_KEYWORDS = ['left', 'right', 'top', 'bottom', 'center']\nconst SIZE_KEYWORDS = ['auto', 'cover', 'contain']\n\nconst isLengthPercentage = (word: string) =>\n  /^[+-]?(\\d+(?:\\.\\d*)?|\\.\\d+)(px|em|rem|vw|vh|vmin|vmax|%)?$/i.test(word)\n\ninterface Layer {\n  image: string\n  position: string\n  size: string\n  repeat: string\n  origin: string\n  clip: string\n  color?: string\n}\n\nfunction invalid(value: string): never {\n  throw new Error(`Invalid \\`background\\` value: \"${value}\".`)\n}\n\n/**\n * `<bg-image> || <bg-position> [ / <bg-size> ]? || <repeat-style> ||\n * <attachment> || <box> || <box>`, and a color in the final layer.\n */\nfunction parseLayer(\n  nodes: valueParser.Node[],\n  isFinal: boolean,\n  value: string\n): Layer {\n  let image: string | undefined\n  let position: string | undefined\n  let size: string | undefined\n  let repeat: string | undefined\n  let attachment: string | undefined\n  let color: string | undefined\n  const boxes: string[] = []\n\n  // The keyword at an index, or an empty string.\n  const wordAt = (i: number) =>\n    nodes[i]?.type === 'word' ? nodes[i].value.toLowerCase() : ''\n\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i]\n    const word = wordAt(i)\n\n    if (\n      image === undefined &&\n      ((node.type === 'function' && IMAGE_FUNCTION.test(node.value)) ||\n        word === 'none')\n    ) {\n      image = valueParser.stringify(node)\n    } else if (\n      repeat === undefined &&\n      (word === 'repeat-x' || word === 'repeat-y')\n    ) {\n      repeat = word\n    } else if (repeat === undefined && REPEAT_KEYWORDS.includes(word)) {\n      repeat = word\n      if (REPEAT_KEYWORDS.includes(wordAt(i + 1))) repeat += ' ' + wordAt(++i)\n    } else if (attachment === undefined && ATTACHMENTS.includes(word)) {\n      attachment = word\n    } else if (\n      boxes.length < 2 &&\n      (BOXES.includes(word) || (isFinal && word === 'text'))\n    ) {\n      boxes.push(word)\n    } else if (\n      position === undefined &&\n      (POSITION_KEYWORDS.includes(word) || isLengthPercentage(word))\n    ) {\n      const tokens = [word]\n      while (\n        tokens.length < 4 &&\n        (POSITION_KEYWORDS.includes(wordAt(i + 1)) ||\n          isLengthPercentage(wordAt(i + 1)))\n      ) {\n        tokens.push(wordAt(++i))\n      }\n      position = tokens.join(' ')\n\n      if (nodes[i + 1]?.type === 'div' && nodes[i + 1].value === '/') {\n        i++\n        const sizeTokens: string[] = []\n        while (\n          sizeTokens.length < 2 &&\n          (SIZE_KEYWORDS.includes(wordAt(i + 1)) ||\n            isLengthPercentage(wordAt(i + 1)))\n        ) {\n          sizeTokens.push(wordAt(++i))\n        }\n        if (!sizeTokens.length) invalid(value)\n        size = sizeTokens.join(' ')\n      }\n    } else if (\n      isFinal &&\n      color === undefined &&\n      (node.type === 'word' || node.type === 'function') &&\n      (word === 'transparent' || cssColorParse(valueParser.stringify(node)))\n    ) {\n      color = valueParser.stringify(node)\n    } else {\n      invalid(value)\n    }\n  }\n\n  return {\n    image: image ?? 'none',\n    position: position ?? '0% 0%',\n    size: size ?? 'auto',\n    repeat: repeat ?? 'repeat',\n    origin: boxes[0] ?? 'padding-box',\n    clip: boxes[1] ?? boxes[0] ?? 'border-box',\n    color,\n  }\n}\n\n/**\n * Like other shorthands, omitted longhands are reset, which leaves them\n * `undefined` here.\n */\nexport function expandBackground(value: string) {\n  const layerNodes: valueParser.Node[][] = [[]]\n  for (const node of valueParser(value).nodes) {\n    if (node.type === 'div' && node.value === ',') layerNodes.push([])\n    else if (node.type !== 'space' && node.type !== 'comment') {\n      layerNodes[layerNodes.length - 1].push(node)\n    }\n  }\n  if (layerNodes.some((nodes) => !nodes.length)) invalid(value)\n\n  const layers = layerNodes.map((nodes, i) =>\n    parseLayer(nodes, i === layerNodes.length - 1, value)\n  )\n  const finalLayer = layers[layers.length - 1]\n  const hasImage = layers.some((layer) => layer.image !== 'none')\n  const list = (key: keyof Layer) =>\n    hasImage ? layers.map((layer) => layer[key]).join(', ') : undefined\n\n  return {\n    backgroundColor: finalLayer.color,\n    backgroundImage: list('image'),\n    backgroundPosition: list('position'),\n    backgroundSize: list('size'),\n    backgroundRepeat: list('repeat'),\n    backgroundOrigin: list('origin'),\n    backgroundClip:\n      finalLayer.clip === 'border-box' ? undefined : finalLayer.clip,\n  }\n}\n","/**\n * Parser for the CSS `transform` property, including 3D transform functions.\n * https://drafts.csswg.org/css-transforms-2/#transform-functions\n */\n\nimport valueParser from 'postcss-value-parser'\nimport CssDimension from '../vendor/parse-css-dimension/index.js'\nimport { calcDegree } from '../utils.js'\nimport type { CalcLength } from '../layout-engine/node.js'\nimport { MATH_FUNCTION, parseMath } from './math.js'\n\nexport interface TransformFunction {\n  name: string\n  /**\n   * After `resolveTransform`: lengths in px, angles in degrees, and plain\n   * numbers. Percentages of the element's size, only allowed for the X and Y\n   * translations, are kept as strings such as `'50%'`, or as `calc()`\n   * expressions.\n   */\n  args: (number | string | CalcLength)[]\n}\n\ntype ArgumentKind =\n  | 'length'\n  | 'lengthOrPercentage'\n  | 'number'\n  | 'scale'\n  | 'angle'\n\nconst L: ArgumentKind = 'length'\nconst LP: ArgumentKind = 'lengthOrPercentage'\nconst N: ArgumentKind = 'number'\nconst S: ArgumentKind = 'scale'\nconst A: ArgumentKind = 'angle'\n\n// The argument kinds of each function. Optional arguments are listed after\n// `minArgs`.\nconst FUNCTIONS: Record<\n  string,\n  [name: string, minArgs: number, kinds: ArgumentKind[]]\n> = {}\nfor (const [name, minArgs, kinds] of [\n  ['matrix', 6, [N, N, N, N, N, N]],\n  ['matrix3d', 16, Array(16).fill(N)],\n  ['translate', 1, [LP, LP]],\n  ['translateX', 1, [LP]],\n  ['translateY', 1, [LP]],\n  ['translateZ', 1, [L]],\n  ['translate3d', 3, [LP, LP, L]],\n  ['scale', 1, [S, S]],\n  ['scaleX', 1, [S]],\n  ['scaleY', 1, [S]],\n  ['scaleZ', 1, [S]],\n  ['scale3d', 3, [S, S, S]],\n  ['rotate', 1, [A]],\n  ['rotateX', 1, [A]],\n  ['rotateY', 1, [A]],\n  ['rotateZ', 1, [A]],\n  ['rotate3d', 4, [N, N, N, A]],\n  ['skew', 1, [A, A]],\n  ['skewX', 1, [A]],\n  ['skewY', 1, [A]],\n  ['perspective', 1, [L]],\n] as [string, number, ArgumentKind[]][]) {\n  // Function names are case-insensitive.\n  FUNCTIONS[name.toLowerCase()] = [name, minArgs, kinds]\n}\n\n/**\n * Split a `transform` value into functions with their raw arguments.\n */\nexport default function parseTransform(value: string): TransformFunction[] {\n  const functions: TransformFunction[] = []\n  const nodes = valueParser(value).nodes.filter(\n    (node) => node.type !== 'space' && node.type !== 'comment'\n  )\n\n  if (\n    nodes.length === 1 &&\n    nodes[0].type === 'word' &&\n    nodes[0].value.toLowerCase() === 'none'\n  ) {\n    return functions\n  }\n\n  for (const node of nodes) {\n    const definition =\n      node.type === 'function' ? FUNCTIONS[node.value.toLowerCase()] : undefined\n    if (!definition) {\n      throw new Error(\n        `Invalid transform function: \"${valueParser.stringify(node)}\".`\n      )\n    }\n\n    const [name, minArgs, kinds] = definition\n    const args: string[] = []\n    let expectsArgument = true\n    for (const arg of (node as valueParser.FunctionNode).nodes) {\n      if (arg.type === 'space' || arg.type === 'comment') continue\n      if (arg.type === 'div' && arg.value === ',' && !expectsArgument) {\n        expectsArgument = true\n      } else if (\n        expectsArgument &&\n        (arg.type === 'word' ||\n          (arg.type === 'function' &&\n            MATH_FUNCTION.test(valueParser.stringify(arg))))\n      ) {\n        args.push(valueParser.stringify(arg))\n        expectsArgument = false\n      } else {\n        throw new Error(\n          `Invalid arguments in transform function \"${valueParser.stringify(\n            node\n          )}\".`\n        )\n      }\n    }\n\n    if (args.length < minArgs || args.length > kinds.length) {\n      throw new Error(\n        `Invalid number of arguments in transform function \"${valueParser.stringify(\n          node\n        )}\".`\n      )\n    }\n    functions.push({ name, args })\n  }\n\n  return functions\n}\n\nfunction resolveArgument(\n  arg: string,\n  kind: ArgumentKind,\n  toPixels: (length: string) => number | undefined\n): number | string | CalcLength | undefined {\n  if (MATH_FUNCTION.test(arg)) {\n    const math = parseMath(arg, toPixels)\n    if (!math) return\n    // Percentages are of the element's size.\n    if (math.percentage) {\n      return kind === 'lengthOrPercentage' ? { calc: math.evaluate } : undefined\n    }\n    const expected = kind === 'number' || kind === 'scale' ? 'number' : 'length'\n    return math.type === expected || kind === 'angle'\n      ? math.evaluate(0)\n      : undefined\n  }\n\n  let dimension: { type: string; value: number; unit?: string }\n  try {\n    dimension = new CssDimension(arg)\n  } catch {\n    return\n  }\n\n  switch (kind) {\n    case 'number':\n      return dimension.type === 'number' ? dimension.value : undefined\n    case 'scale':\n      return dimension.type === 'number'\n        ? dimension.value\n        : dimension.type === 'percentage'\n        ? dimension.value / 100\n        : undefined\n    case 'angle':\n      return dimension.type === 'angle'\n        ? calcDegree(arg)\n        : dimension.type === 'number' && dimension.value === 0\n        ? 0\n        : undefined\n    case 'lengthOrPercentage':\n      if (dimension.type === 'percentage') return arg\n    // Fall through.\n    case 'length':\n      return dimension.type === 'length'\n        ? toPixels(arg)\n        : dimension.type === 'number' && dimension.value === 0\n        ? 0\n        : undefined\n  }\n}\n\n/**\n * Resolve the arguments of parsed transform functions to numbers. Lengths are\n * converted to px with `toPixels`.\n */\nexport function resolveTransform(\n  functions: TransformFunction[],\n  toPixels: (length: string) => number | undefined\n): TransformFunction[] {\n  return functions.map(({ name, args }) => {\n    const [, , kinds] = FUNCTIONS[name.toLowerCase()]\n    return {\n      name,\n      args: args.map((arg, i) => {\n        if (typeof arg !== 'string') return arg\n        // `perspective(none)` is the identity transform.\n        if (name === 'perspective' && arg.toLowerCase() === 'none') {\n          return Infinity\n        }\n        // Units are case-insensitive.\n        const resolved = resolveArgument(arg.toLowerCase(), kinds[i], toPixels)\n        if (resolved === undefined) {\n          throw new Error(\n            `Invalid value \"${arg}\" in transform function ${name}().`\n          )\n        }\n        return resolved\n      }),\n    }\n  })\n}\n","/**\n * This module handles CSS custom properties (CSS variables) including:\n * - Extracting custom properties from styles (--property-name)\n * - Resolving var() references\n * - Handling fallback values\n * - Detecting circular references\n */\n\nimport valueParser from 'postcss-value-parser'\n\nexport type CSSVariables = Record<string, string>\n\n/**\n * Extracts custom properties (--*) from a style object\n * Returns both the variables and the remaining style properties\n */\nexport function extractCustomProperties(\n  style: Record<string, string | number>\n): {\n  variables: CSSVariables\n  remainingStyle: Record<string, string | number>\n} {\n  const variables: CSSVariables = {}\n  const remainingStyle: Record<string, string | number> = {}\n\n  for (const prop in style) {\n    if (prop.startsWith('--')) {\n      // Custom property\n      variables[prop] = String(style[prop])\n    } else {\n      remainingStyle[prop] = style[prop]\n    }\n  }\n\n  return { variables, remainingStyle }\n}\n\n/**\n * CSS-wide keywords that keep the inherited value of custom properties, which\n * are inherited. `initial` is the guaranteed-invalid value instead.\n */\nconst INHERITING_KEYWORDS = new Set([\n  'inherit',\n  'unset',\n  'revert',\n  'revert-layer',\n])\n\n/**\n * Whether the value of a custom property is its initial value, the\n * guaranteed-invalid value, so that `var()` uses its fallback.\n */\nconst isGuaranteedInvalid = (value: string) =>\n  value.trim().toLowerCase() === 'initial'\n\n/**\n * Merges inherited variables with current variables\n * Current variables override inherited ones (cascading)\n */\nexport function mergeVariables(\n  inherited: CSSVariables,\n  current: CSSVariables\n): CSSVariables {\n  const merged = { ...inherited }\n  for (const name in current) {\n    if (INHERITING_KEYWORDS.has(current[name].trim().toLowerCase())) continue\n    merged[name] = current[name]\n  }\n  return merged\n}\n\n/**\n * Resolves var() references in a CSS value\n * Supports fallback values: var(--name, fallback)\n * Handles nested var() calls\n *\n * Returns `undefined` if the value is invalid at computed-value time, like in\n * browsers: a variable without a value (or with the guaranteed-invalid value\n * `initial`, or in a cycle) is used without a fallback. The declaration then\n * behaves as `unset`.\n */\n/**\n * The environment variables of `env()`, as in browsers on desktops, where no\n * area is unsafe and there's no virtual keyboard. Others, e.g. the title bar\n * areas of installed apps, use their fallbacks.\n */\nconst ENVIRONMENT = new Map<string, string>([\n  ['keyboard-inset-width', '0px'],\n  ['keyboard-inset-height', '0px'],\n])\nfor (const side of ['top', 'right', 'bottom', 'left']) {\n  ENVIRONMENT.set(`safe-area-inset-${side}`, '0px')\n  ENVIRONMENT.set(`safe-area-max-inset-${side}`, '0px')\n  ENVIRONMENT.set(`keyboard-inset-${side}`, '0px')\n}\n\n/** Resolves `var()` and `env()` in a value. */\nexport function resolveVariables(\n  value: string | number,\n  variables: CSSVariables,\n  visitedVars = new Set<string>()\n): string | number | undefined {\n  // Only process strings\n  if (typeof value !== 'string') {\n    return value\n  }\n\n  // Quick check: does this value contain var() or env()?\n  if (!value.includes('var(') && !value.includes('env(')) {\n    return value\n  }\n\n  try {\n    const parsed = valueParser(value)\n    let invalid = false\n\n    parsed.walk((node, index, siblings) => {\n      const name = node.type === 'function' && node.value.toLowerCase()\n      if (invalid || (name !== 'var' && name !== 'env')) {\n        return\n      }\n\n      // Extract variable name and optional fallback\n      const args = extractVarArgs(node as valueParser.FunctionNode)\n      if (!args) {\n        invalid = true\n        return false\n      }\n      const { varName, fallback } = args\n\n      let resolved: string | number | undefined\n      if (name === 'env') {\n        resolved = ENVIRONMENT.get(varName)\n      } else if (visitedVars.has(varName)) {\n        console.warn(`Circular reference detected for CSS variable: ${varName}`)\n      } else {\n        const variableValue = variables[varName]\n        if (\n          variableValue !== undefined &&\n          !isGuaranteedInvalid(variableValue)\n        ) {\n          // Mark this variable as being resolved to detect circular references,\n          // and resolve var() in its value.\n          resolved = resolveVariables(\n            variableValue,\n            variables,\n            new Set(visitedVars).add(varName)\n          )\n        }\n      }\n      // Without a valid value, the fallback is used, which may be empty and\n      // contain var() too.\n      if (resolved === undefined && fallback !== undefined) {\n        resolved = resolveVariables(fallback, variables, visitedVars)\n      }\n      if (resolved === undefined) {\n        invalid = true\n        return false\n      }\n\n      // Like in browsers, which substitute tokens, the value stays apart from\n      // what's next to it, e.g. in `var(--width)10px` from minifiers, which\n      // leave out spaces after functions.\n      const joins = (sibling: valueParser.Node | undefined) =>\n        sibling?.type === 'word' ||\n        sibling?.type === 'string' ||\n        sibling?.type === 'function'\n      replaceNode(\n        node,\n        (joins(siblings[index - 1]) ? ' ' : '') +\n          String(resolved) +\n          (joins(siblings[index + 1]) ? ' ' : '')\n      )\n      return false\n    })\n\n    return invalid ? undefined : parsed.toString()\n  } catch (err) {\n    // If parsing fails, return the original value\n    console.warn(`Failed to parse CSS value for variable resolution: ${value}`)\n  }\n\n  return value\n}\n\n/**\n * Extracts variable name and fallback from var() function arguments\n * Handles: var(--name) and var(--name, fallback)\n */\nfunction extractVarArgs(\n  node: valueParser.FunctionNode\n): { varName: string; fallback?: string } | null {\n  if (!node.nodes || node.nodes.length === 0) {\n    return null\n  }\n\n  // Find the variable name (first word node)\n  let varNameNode: valueParser.Node | undefined\n  let commaIndex = -1\n\n  for (let i = 0; i < node.nodes.length; i++) {\n    const child = node.nodes[i]\n    if (child.type === 'word' && !varNameNode) {\n      varNameNode = child\n    } else if (child.type === 'div' && child.value === ',') {\n      commaIndex = i\n      break\n    }\n  }\n\n  if (!varNameNode || varNameNode.type !== 'word') {\n    return null\n  }\n\n  const varName = varNameNode.value.trim()\n\n  // Check if there's a fallback value after the comma, which may be empty, as\n  // in `var(--name,)`.\n  if (commaIndex !== -1) {\n    // Collect all nodes after the comma as the fallback\n    const fallbackNodes = node.nodes.slice(commaIndex + 1)\n    const fallback = valueParser.stringify(fallbackNodes).trim()\n    return { varName, fallback }\n  }\n\n  return { varName }\n}\n\n/**\n * Replaces a function node with a raw string value\n */\nfunction replaceNode(node: valueParser.Node, value: string) {\n  // Replace the function node with a word node\n  node.type = 'word'\n  node.value = value\n  // Remove function-specific properties\n  delete (node as any).nodes\n}\n\n/**\n * Resolves all variables in a style object\n * Returns a new style object with var() references resolved\n */\nexport function resolveStyleVariables(\n  style: Record<string, string | number>,\n  variables: CSSVariables\n): Record<string, string | number> {\n  const resolved: Record<string, string | number> = {}\n\n  for (const prop in style) {\n    // Properties that are invalid at computed-value time are left out.\n    const value = resolveVariables(style[prop], variables)\n    if (value !== undefined) resolved[prop] = value\n  }\n\n  return resolved\n}\n","/**\n * Handler to update the layout node style with the given element type and\n * style. Each supported element has its own preset styles, so this function\n * also returns the inherited style for children of the element.\n */\n\nimport presets from './presets.js'\nimport inheritable, { isInherited } from './inheritable.js'\nimport { toPhysicalProperties } from './logical.js'\nimport { isLonghandOf } from './shorthands.js'\nimport expand, { SerializedStyle } from './expand.js'\nimport {\n  asPointAutoPercentageLength,\n  asPointPercentageLength,\n  asSize,\n  lengthToNumber,\n  parseViewBox,\n  v as checkValue,\n} from '../utils.js'\nimport {\n  LayoutNode,\n  type LayoutStyle,\n  type Length,\n} from '../layout-engine/index.js'\nimport { resolveImageData } from './image.js'\nimport { isListBox } from '../form-control.js'\nimport {\n  parseGridAutoFlow,\n  parseGridAutoTracks,\n  parseGridLine,\n  parseGridTemplateAreas,\n  parseGridTrackList,\n} from '../parser/grid.js'\n\ntype SatoriElement = keyof typeof presets\n\n/**\n * Handles a replaced element provided by an extension, such as `<canvas>` in\n * `satori/experimental`: it sizes the node through `style`, and can set\n * `style.__src` to embed its content as an image. Its children aren't\n * rendered.\n */\nexport type ReplacedElementHandler = (\n  node: LayoutNode,\n  style: SerializedStyle,\n  props: Record<string, any>\n) => Promise<void>\n\nexport type ReplacedElementHandlers = Record<string, ReplacedElementHandler>\n\n/**\n * Size a replaced element from its CSS size, falling back to its\n * `width`/`height` attributes and natural aspect ratio.\n */\nexport function setReplacedElementSize(\n  node: LayoutNode,\n  style: SerializedStyle,\n  naturalWidth: number,\n  naturalHeight: number,\n  attributeWidth: number | string | undefined,\n  attributeHeight: number | string | undefined\n) {\n  const r = naturalHeight / naturalWidth\n\n  // Without one of the sizes, the content box has the natural ratio. The\n  // sizes are of the border box with `box-sizing: border-box`.\n  const isBorderBox = style.boxSizing === 'border-box'\n  const extraHorizontal = isBorderBox\n    ? (style.borderLeftWidth || 0) +\n      (style.borderRightWidth || 0) +\n      (style.paddingLeft || 0) +\n      (style.paddingRight || 0)\n    : 0\n  const extraVertical = isBorderBox\n    ? (style.borderTopWidth || 0) +\n      (style.borderBottomWidth || 0) +\n      (style.paddingTop || 0) +\n      (style.paddingBottom || 0)\n    : 0\n\n  // Attributes are lengths in px.\n  const toLength = (value: number | string | undefined) =>\n    typeof value === 'string' && /^(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/.test(value.trim())\n      ? Number(value)\n      : value\n  // Like in browsers, styles override the attributes, also with `auto`, which\n  // then has the natural ratio, e.g. `height: auto` with a width attribute.\n  const size = (\n    value: number | string | undefined,\n    attribute: number | string | undefined\n  ) =>\n    value === undefined\n      ? toLength(attribute)\n      : value === 'auto'\n      ? undefined\n      : value\n  let width = size(style.width, attributeWidth)\n  let height = size(style.height, attributeHeight)\n\n  if (width === undefined && height === undefined) {\n    width = '100%'\n    node.style.aspectRatio = 1 / r\n  } else if (height === undefined) {\n    if (typeof width === 'number') {\n      height = (width - extraHorizontal) * r + extraVertical\n    } else {\n      node.style.aspectRatio = 1 / r\n    }\n  } else if (width === undefined) {\n    if (typeof height === 'number') {\n      width = (height - extraVertical) / r + extraHorizontal\n    } else {\n      node.style.aspectRatio = 1 / r\n    }\n  }\n\n  style.width = width\n  style.height = height\n  style.__naturalWidth = naturalWidth\n  style.__naturalHeight = naturalHeight\n}\n\n// Values of `align-items`, `align-self`, `justify-items` and `justify-self`.\nconst ITEM_ALIGNMENT = {\n  stretch: 'stretch',\n  center: 'center',\n  start: 'start',\n  end: 'end',\n  'self-start': 'start',\n  'self-end': 'end',\n  'flex-start': 'flex-start',\n  'flex-end': 'flex-end',\n  baseline: 'baseline',\n} as const\n\nexport type OuterDisplay = 'block' | 'inline' | 'contents' | 'none'\n\n/** The outer and inner display types of each value of `display`. */\nconst DISPLAY_TYPES: Record<\n  string,\n  [OuterDisplay, LayoutStyle['display'] | 'inline']\n> = {\n  block: ['block', 'block'],\n  'flow-root': ['block', 'flow-root'],\n  // With a marker, see `getListMarkers()`.\n  'list-item': ['block', 'block'],\n  flex: ['block', 'flex'],\n  // Prefixed aliases, like in browsers.\n  '-webkit-flex': ['block', 'flex'],\n  '-webkit-box': ['block', 'flex'],\n  grid: ['block', 'grid'],\n  inline: ['inline', 'inline'],\n  'inline-block': ['inline', 'flow-root'],\n  'inline-flex': ['inline', 'flex'],\n  '-webkit-inline-flex': ['inline', 'flex'],\n  'inline-grid': ['inline', 'grid'],\n  contents: ['contents', 'contents'],\n  none: ['none', 'none'],\n}\n\nconst LIST_ELEMENTS = new Set(['ul', 'ol', 'menu', 'dir'])\nconst LIST_TYPES: Record<string, string> = {\n  '1': 'decimal',\n  a: 'lower-alpha',\n  A: 'upper-alpha',\n  i: 'lower-roman',\n  I: 'upper-roman',\n  disc: 'disc',\n  circle: 'circle',\n  square: 'square',\n}\n\n/**\n * The list styles of the user agent stylesheet, and the `type`, `start`,\n * `reversed` and `value` attributes of lists. `listDepth` is the number of\n * lists the element is in.\n */\nfunction getListPresets(\n  type: string,\n  props: Record<string, any>,\n  listDepth: number\n) {\n  const preset: Record<string, string | number> = {}\n  if (LIST_ELEMENTS.has(type)) {\n    preset.listStyleType =\n      type === 'ol'\n        ? 'decimal'\n        : listDepth === 0\n        ? 'disc'\n        : listDepth === 1\n        ? 'circle'\n        : 'square'\n    // Nested lists have no vertical margins.\n    if (listDepth > 0) preset.marginTop = preset.marginBottom = 0\n    preset.counterReset = 'list-item'\n  }\n  if (\n    (type === 'ol' || type === 'ul' || type === 'li') &&\n    typeof props?.type === 'string' &&\n    LIST_TYPES[props.type]\n  ) {\n    preset.listStyleType = LIST_TYPES[props.type]\n  }\n  if (type === 'ol') {\n    const start = parseInt(props?.start, 10)\n    const reversed = props?.reversed !== undefined && props.reversed !== false\n    if (reversed) {\n      preset.counterReset = Number.isNaN(start)\n        ? 'reversed(list-item)'\n        : `reversed(list-item) ${start + 1}`\n    } else if (!Number.isNaN(start)) {\n      preset.counterReset = `list-item ${start - 1}`\n    }\n  }\n  if (type === 'li' && props?.value !== undefined) {\n    const value = parseInt(props.value, 10)\n    if (!Number.isNaN(value)) preset.counterSet = `list-item ${value}`\n  }\n  return preset\n}\n\n/**\n * The `dir` attribute sets `direction` like the user agent stylesheet, so the\n * `direction` property overrides it.\n */\n/** The inherited style of the root, the initial values of these properties. */\nexport const ROOT_STYLE: Record<string, string | number> = {\n  fontSize: 16,\n  fontWeight: 'normal',\n  fontFamily: 'serif',\n  fontStyle: 'normal',\n  lineHeight: 'normal',\n  color: 'black',\n  whiteSpace: 'normal',\n}\n\nconst CSS_WIDE_KEYWORDS = new Set([\n  'inherit',\n  'initial',\n  'unset',\n  'revert',\n  'revert-layer',\n])\n\n/**\n * Resolves the CSS-wide keywords of a style, which override earlier\n * declarations and the preset. Returns the other declarations, and the\n * properties that get their initial value: with `initial`, and `unset` and\n * `inherit` for properties that aren't inherited, as the values of the parent\n * aren't known here. Other inherited properties keep the inherited value.\n */\nfunction resolveKeywords(\n  style: Record<string, string | number>,\n  preset: Record<string, string | number>\n) {\n  const defined: Record<string, string | number> = {}\n  const initial = new Set<string>()\n  for (const prop in style) {\n    const value = style[prop]\n    const keyword =\n      typeof value === 'string' && !prop.startsWith('--')\n        ? value.trim().toLowerCase()\n        : ''\n    if (!CSS_WIDE_KEYWORDS.has(keyword)) {\n      // `all` only accepts CSS-wide keywords.\n      if (prop !== 'all') defined[prop] = value\n      continue\n    }\n\n    // `all` is every property but custom properties and `direction`.\n    const affects = (key: string) =>\n      prop === 'all'\n        ? !key.startsWith('--') && key !== 'direction'\n        : isLonghandOf(key, prop)\n    for (const key in defined) if (affects(key)) delete defined[key]\n    if (keyword === 'revert' || keyword === 'revert-layer') continue\n\n    for (const key in preset) if (affects(key)) delete preset[key]\n    if (keyword === 'initial' || (prop !== 'all' && !isInherited(prop))) {\n      initial.add(prop)\n    } else {\n      initial.delete(prop)\n    }\n  }\n  return { defined, initial }\n}\n\n/**\n * Elements that browsers hide: with the `hidden` attribute, unless it's\n * `until-found`, hidden inputs, and dialogs that aren't open.\n */\nfunction getHiddenPreset(type: string, props: Record<string, any>) {\n  const { hidden, type: inputType } = props ?? {}\n  const hasHidden =\n    hidden != null &&\n    hidden !== false &&\n    String(hidden).toLowerCase() !== 'until-found'\n  const isHiddenInput =\n    type === 'input' && String(inputType).toLowerCase() === 'hidden'\n  const isClosedDialog =\n    type === 'dialog' && (props?.open == null || props.open === false)\n  return hasHidden || isHiddenInput || isClosedDialog ? { display: 'none' } : {}\n}\n\n/** List boxes of Chrome have rounded corners. */\nfunction getSelectPreset(type: string, props: Record<string, any>) {\n  return type === 'select' && isListBox(props) ? { borderRadius: 2 } : {}\n}\n\nfunction getDirPreset(props: Record<string, any>) {\n  const dir = typeof props?.dir === 'string' ? props.dir.toLowerCase() : ''\n  return dir === 'ltr' || dir === 'rtl' ? { direction: dir } : {}\n}\n\n/**\n * Snaps a border or outline width to device pixels: widths between 0 and 1\n * device pixel are rounded up, and wider ones down. Layouts that aren't\n * rounded, with a `pointScaleFactor` of 0, aren't snapped either.\n *\n * @see https://www.w3.org/TR/css-values-4/#snap-a-length-as-a-border-width\n */\nfunction snapLineWidth(width: number, pointScaleFactor = 1) {\n  if (!pointScaleFactor || width <= 0) return width\n  const pixels = width * pointScaleFactor\n  if (Math.abs(pixels - Math.round(pixels)) < 1e-6) return width\n  return Math.max(1, Math.floor(pixels)) / pointScaleFactor\n}\n\n/**\n * The first error of a style, if it has an invalid or unsupported value, from\n * computing it for an element without context. Stylesheets drop these\n * declarations, like browsers.\n */\nexport async function getStyleError(\n  style: Record<string, string | number>,\n  convertColors = true\n): Promise<Error | undefined> {\n  let firstError: Error | undefined\n  try {\n    await compute(\n      new LayoutNode(),\n      'div',\n      ROOT_STYLE,\n      style,\n      {},\n      undefined,\n      (error) => {\n        firstError ??= error\n      },\n      convertColors\n    )\n  } catch (error) {\n    firstError ??= error as Error\n  }\n  return firstError\n}\n\nexport default async function compute(\n  node: LayoutNode,\n  type: SatoriElement | string,\n  inheritedStyle: SerializedStyle,\n  definedStyle: Record<string, string | number>,\n  props: Record<string, any>,\n  replacedElements?: ReplacedElementHandlers,\n  onStyleError?: (error: Error) => void,\n  convertColors = true,\n  pointScaleFactor?: number,\n  listDepth = 0\n): Promise<[SerializedStyle, SerializedStyle]> {\n  // With `onStyleError`, invalid values are reported and replaced by the\n  // fallback, as if the declaration wasn't there.\n  const lenient = <T>(resolve: () => T, fallback: T): T => {\n    if (!onStyleError) return resolve()\n    try {\n      return resolve()\n    } catch (error) {\n      onStyleError(error)\n      return fallback\n    }\n  }\n  const v: typeof checkValue = (field, map, fallback, property) =>\n    lenient(() => checkValue(field, map, fallback, property), fallback)\n\n  // Extend the default style with defined and inherited styles. Like the user\n  // agent stylesheet, the preset is computed together with the defined style,\n  // e.g. `em` margins use the defined font size. Defined properties come after\n  // the remaining preset ones, so they override them in order.\n  const presetStyle = {\n    ...presets[type],\n    ...getListPresets(type, props, listDepth),\n    ...getSelectPreset(type, props),\n    ...getDirPreset(props),\n    ...getHiddenPreset(type, props),\n  }\n  // Logical properties are physical ones of the element's direction.\n  const ownDirection = String(definedStyle?.direction ?? '')\n    .trim()\n    .toLowerCase()\n  const logicalDirection =\n    ownDirection === 'ltr' || ownDirection === 'rtl'\n      ? ownDirection\n      : String(presetStyle.direction ?? inheritedStyle?.direction ?? 'ltr')\n  const { defined, initial } = resolveKeywords(\n    toPhysicalProperties(definedStyle, logicalDirection),\n    presetStyle\n  )\n  for (const prop in defined) delete presetStyle[prop]\n\n  // Properties without a value have their initial value, except the root\n  // ones. Satori's own properties are kept.\n  const base: SerializedStyle = { ...inheritedStyle }\n  for (const prop of initial) {\n    const resets = (key: string) =>\n      prop === 'all'\n        ? !key.startsWith('_') && !key.startsWith('--') && key !== 'direction'\n        : isLonghandOf(key, prop)\n    for (const key in base) if (resets(key)) delete base[key]\n    for (const key in ROOT_STYLE) if (resets(key)) base[key] = ROOT_STYLE[key]\n  }\n  const style: SerializedStyle = Object.assign(\n    base,\n    expand({ ...presetStyle, ...defined }, base, onStyleError, convertColors)\n  )\n\n  // An `aspect-ratio` replaces the natural ratio of replaced elements, unless\n  // it's `auto <ratio>`.\n  const aspectRatio =\n    typeof style.aspectRatio === 'number' ? style.aspectRatio : undefined\n  const replacesNaturalRatio =\n    aspectRatio !== undefined && !style._aspectRatioAuto\n\n  if (type === 'img') {\n    let [resolvedSrc, imageWidth, imageHeight] = await resolveImageData(\n      props.src\n    )\n\n    // Cannot parse the image size (e.g. base64 data URI).\n    if (imageWidth === undefined && imageHeight === undefined) {\n      if (props.width === undefined || props.height === undefined) {\n        throw new Error(\n          'Image size cannot be determined. Please provide the width and height of the image.'\n        )\n      }\n      imageWidth = parseInt(props.width)\n      imageHeight = parseInt(props.height)\n    }\n    if (replacesNaturalRatio) imageHeight = imageWidth / aspectRatio\n\n    setReplacedElementSize(\n      node,\n      style,\n      imageWidth,\n      imageHeight,\n      // Images of list markers and generated content have their natural size.\n      props.width ?? (props.__naturalSize ? imageWidth : undefined),\n      props.height\n    )\n    style.__src = resolvedSrc\n  }\n\n  await replacedElements?.[type]?.(node, style, props)\n\n  let svgAspectRatio: number | undefined\n  if (type === 'svg') {\n    const viewBox = props.viewBox || props.viewbox\n    const viewBoxSize = parseViewBox(viewBox)\n    const ratio = replacesNaturalRatio\n      ? 1 / aspectRatio\n      : viewBoxSize\n      ? viewBoxSize[3] / viewBoxSize[2]\n      : null\n\n    let { width, height } = props\n    if (typeof width === 'undefined' && height) {\n      if (ratio == null) {\n        width = 0\n      } else if (typeof height === 'string' && height.endsWith('%')) {\n        width = parseInt(height) / ratio + '%'\n      } else {\n        height = lengthToNumber(\n          height,\n          inheritedStyle.fontSize,\n          1,\n          inheritedStyle\n        )\n        width = height / ratio\n      }\n    } else if (typeof height === 'undefined' && width) {\n      if (ratio == null) {\n        width = 0\n      } else if (typeof width === 'string' && width.endsWith('%')) {\n        height = parseInt(width) * ratio + '%'\n      } else {\n        width = lengthToNumber(\n          width,\n          inheritedStyle.fontSize,\n          1,\n          inheritedStyle\n        )\n        height = width * ratio\n      }\n    } else {\n      if (typeof width !== 'undefined') {\n        // `0` is a size too.\n        width =\n          lengthToNumber(width, inheritedStyle.fontSize, 1, inheritedStyle) ??\n          width\n      }\n      if (typeof height !== 'undefined') {\n        height =\n          lengthToNumber(height, inheritedStyle.fontSize, 1, inheritedStyle) ??\n          height\n      }\n    }\n\n    // Like in browsers, an SVG without a size has none, only the natural ratio\n    // of its viewBox, so it's as wide as its container, or 300 by 150 without\n    // a viewBox.\n    const isAuto = (size: unknown) => size === undefined || size === 'auto'\n    if (\n      width === undefined &&\n      height === undefined &&\n      isAuto(style.width) &&\n      isAuto(style.height)\n    ) {\n      if (ratio) {\n        width = '100%'\n      } else {\n        width = 300\n        height = 150\n      }\n    }\n\n    if (isAuto(style.width) && width !== undefined && !style.width) {\n      style.width = width\n    }\n    if (isAuto(style.height) && height !== undefined && !style.height) {\n      style.height = height\n    }\n\n    // The natural ratio of the SVG, for a size that's `auto`, e.g. with\n    // `width: auto` and the `height` attribute.\n    const naturalRatio =\n      ratio ??\n      (typeof props.width === 'number' &&\n      typeof props.height === 'number' &&\n      props.width > 0\n        ? props.height / props.width\n        : null)\n    if (aspectRatio === undefined && naturalRatio) {\n      svgAspectRatio = 1 / naturalRatio\n    }\n  }\n\n  // Set the layout style.\n  const layout: LayoutStyle = node.style\n\n  if (aspectRatio !== undefined && type !== 'img') {\n    layout.aspectRatio = aspectRatio\n  } else if (svgAspectRatio) {\n    layout.aspectRatio = svgAspectRatio\n  }\n\n  if (style.order !== undefined) {\n    layout.order = lenient(() => {\n      const order = Number(style.order)\n      if (!Number.isInteger(order)) {\n        throw new Error(\n          `Invalid value for CSS property \"order\": ${style.order}`\n        )\n      }\n      return order\n    }, undefined)\n  }\n\n  // `visibility` is inherited, so only the element's own value is checked.\n  if (style.visibility !== inheritedStyle.visibility) {\n    style.visibility = v(\n      style.visibility,\n      { visible: 'visible', hidden: 'hidden', collapse: 'hidden' },\n      inheritedStyle.visibility ?? 'visible',\n      'visibility'\n    )\n  }\n\n  // The outer display type, how the element takes part in the layout of its\n  // parent, and the inner one, how its children are laid out. Elements are\n  // inline by default, and blockified in flex and grid containers, see\n  // `layout()`.\n  const [outerDisplay, boxInnerDisplay] = v(\n    style.display,\n    DISPLAY_TYPES,\n    DISPLAY_TYPES.inline,\n    'display'\n  ) as [OuterDisplay, LayoutStyle['display'] | 'inline']\n  // Like in browsers, a vertical `-webkit-box` with a line clamp is a block\n  // container, whose lines are clamped. Otherwise, it's laid out like flex.\n  // https://drafts.csswg.org/css-overflow-4/#webkit-line-clamp\n  const innerDisplay =\n    style.display === '-webkit-box' &&\n    style.WebkitBoxOrient === 'vertical' &&\n    Number(style.WebkitLineClamp) > 0\n      ? 'flow-root'\n      : boxInnerDisplay\n  style.__outerDisplay = outerDisplay\n  style.__innerDisplay = innerDisplay\n  style.__listItem = (style.display === 'list-item') as any\n  layout.display = innerDisplay === 'inline' ? 'block' : innerDisplay\n\n  // The inline base direction, which is inherited. Flex rows, grid columns\n  // and lines of text start at the right with `rtl`.\n  const direction = v(\n    style.direction,\n    { ltr: 'ltr', rtl: 'rtl' },\n    inheritedStyle.direction === 'rtl' ? 'rtl' : 'ltr',\n    'direction'\n  ) as 'ltr' | 'rtl'\n  style.direction = direction\n  layout.direction = direction\n  const isRTL = direction === 'rtl'\n\n  // `align-content` defaults to `normal`. In block containers, other values\n  // prevent margins from collapsing.\n  layout.alignContent =\n    v(\n      style.alignContent,\n      {\n        stretch: 'stretch',\n        center: 'center',\n        start: 'start',\n        end: 'end',\n        'flex-start': 'flex-start',\n        'flex-end': 'flex-end',\n        'space-between': 'space-between',\n        'space-around': 'space-around',\n        'space-evenly': 'space-evenly',\n        baseline: 'flex-start',\n        normal: null,\n      },\n      null,\n      'alignContent'\n    ) ?? undefined\n\n  layout.alignItems =\n    v(\n      style.alignItems,\n      {\n        ...ITEM_ALIGNMENT,\n        normal: null,\n      },\n      'stretch',\n      'alignItems'\n    ) ?? undefined\n  layout.alignSelf =\n    v(\n      style.alignSelf,\n      {\n        ...ITEM_ALIGNMENT,\n        normal: null,\n        auto: null,\n      },\n      undefined,\n      'alignSelf'\n    ) ?? undefined\n  // Unlike CSS, `justify-content` defaults to `flex-start` in flex containers.\n  layout.justifyContent =\n    v(\n      style.justifyContent,\n      {\n        center: 'center',\n        start: 'start',\n        end: 'end',\n        left: 'start',\n        right: 'end',\n        'flex-start': 'flex-start',\n        'flex-end': 'flex-end',\n        stretch: 'stretch',\n        'space-between': 'space-between',\n        'space-around': 'space-around',\n        'space-evenly': 'space-evenly',\n        normal: null,\n      },\n      layout.display === 'flex' ? 'flex-start' : null,\n      'justifyContent'\n    ) ?? undefined\n  layout.justifyItems =\n    v(\n      style.justifyItems,\n      {\n        ...ITEM_ALIGNMENT,\n        left: 'start',\n        right: 'end',\n        normal: null,\n        legacy: null,\n      },\n      undefined,\n      'justifyItems'\n    ) ?? undefined\n  layout.justifySelf =\n    v(\n      style.justifySelf,\n      {\n        ...ITEM_ALIGNMENT,\n        left: 'start',\n        right: 'end',\n        normal: null,\n        auto: null,\n      },\n      undefined,\n      'justifySelf'\n    ) ?? undefined\n\n  if (layout.display === 'grid') {\n    const fontSize = (style.fontSize ?? inheritedStyle.fontSize) as number\n    const resolveLength = (length: string) =>\n      lengthToNumber(length, fontSize, 0, inheritedStyle)\n    layout.gridTemplateColumns = lenient(\n      () =>\n        parseGridTrackList(\n          style.gridTemplateColumns,\n          resolveLength,\n          'gridTemplateColumns'\n        ),\n      undefined\n    )\n    layout.gridTemplateRows = lenient(\n      () =>\n        parseGridTrackList(\n          style.gridTemplateRows,\n          resolveLength,\n          'gridTemplateRows'\n        ),\n      undefined\n    )\n    layout.gridAutoColumns = lenient(\n      () =>\n        parseGridAutoTracks(\n          style.gridAutoColumns,\n          resolveLength,\n          'gridAutoColumns'\n        ),\n      undefined\n    )\n    layout.gridAutoRows = lenient(\n      () =>\n        parseGridAutoTracks(style.gridAutoRows, resolveLength, 'gridAutoRows'),\n      undefined\n    )\n    layout.gridAutoFlow = lenient(\n      () => parseGridAutoFlow(style.gridAutoFlow as string),\n      undefined\n    )\n    layout.gridTemplateAreas = lenient(\n      () => parseGridTemplateAreas(style.gridTemplateAreas as string),\n      undefined\n    )\n  }\n  for (const line of [\n    'gridRowStart',\n    'gridRowEnd',\n    'gridColumnStart',\n    'gridColumnEnd',\n  ] as const) {\n    layout[line] = lenient(() => parseGridLine(style[line], line), undefined)\n  }\n\n  layout.flexDirection = v(\n    style.flexDirection,\n    {\n      row: 'row',\n      column: 'column',\n      'row-reverse': 'row-reverse',\n      'column-reverse': 'column-reverse',\n    },\n    'row',\n    'flexDirection'\n  )\n  layout.flexWrap = v(\n    style.flexWrap,\n    {\n      wrap: 'wrap',\n      nowrap: 'nowrap',\n      'wrap-reverse': 'wrap-reverse',\n    },\n    'nowrap',\n    'flexWrap'\n  )\n\n  // `left` and `right` are physical. On the inline axis, they're the end and\n  // the start with `rtl`, and otherwise they're the start.\n  if (isRTL) {\n    const PHYSICAL = { left: 'end', right: 'start' } as const\n    const isInlineAxis =\n      layout.display === 'grid' ||\n      (layout.display === 'flex' &&\n        (layout.flexDirection === 'row' ||\n          layout.flexDirection === 'row-reverse'))\n    if (isInlineAxis && PHYSICAL[style.justifyContent as string]) {\n      layout.justifyContent = PHYSICAL[style.justifyContent as string]\n    }\n    for (const prop of ['justifyItems', 'justifySelf'] as const) {\n      if (PHYSICAL[style[prop] as string]) {\n        layout[prop] = PHYSICAL[style[prop] as string]\n      }\n    }\n  }\n\n  if (typeof style.gap !== 'undefined') {\n    layout.rowGap = layout.columnGap = style.gap as number\n  }\n  if (typeof style.rowGap !== 'undefined') {\n    layout.rowGap = style.rowGap as number\n  }\n  if (typeof style.columnGap !== 'undefined') {\n    layout.columnGap = style.columnGap as number\n  }\n\n  if (typeof style.flexBasis !== 'undefined') {\n    layout.flexBasis = asSize(style.flexBasis, 'flexBasis', onStyleError)\n  }\n  layout.flexGrow = typeof style.flexGrow === 'undefined' ? 0 : style.flexGrow\n  layout.flexShrink =\n    typeof style.flexShrink === 'undefined' ? 1 : style.flexShrink\n\n  if (typeof style.maxHeight !== 'undefined') {\n    layout.maxHeight = asSize(style.maxHeight, 'maxHeight', onStyleError)\n  }\n  if (typeof style.maxWidth !== 'undefined') {\n    layout.maxWidth = asSize(style.maxWidth, 'maxWidth', onStyleError)\n  }\n  if (typeof style.minHeight !== 'undefined') {\n    layout.minHeight = asSize(style.minHeight, 'minHeight', onStyleError)\n  }\n  if (typeof style.minWidth !== 'undefined') {\n    layout.minWidth = asSize(style.minWidth, 'minWidth', onStyleError)\n  }\n\n  // `visible` and `clip` don't make the box a scroll container, so with a\n  // value that does on the other axis, they're `auto` and `hidden`.\n  // https://drafts.csswg.org/css-overflow-3/#overflow-control\n  const OVERFLOW = {\n    visible: 'visible',\n    hidden: 'hidden',\n    clip: 'clip',\n    scroll: 'scroll',\n    auto: 'auto',\n  } as const\n  let overflowX = v(style.overflowX, OVERFLOW, 'visible', 'overflowX')\n  let overflowY = v(style.overflowY, OVERFLOW, 'visible', 'overflowY')\n  const isScrolling = (value: string) => value !== 'visible' && value !== 'clip'\n  if (isScrolling(overflowX) !== isScrolling(overflowY)) {\n    const toScrolling = (value: string) =>\n      value === 'visible' ? 'auto' : value === 'clip' ? 'hidden' : value\n    overflowX = toScrolling(overflowX)\n    overflowY = toScrolling(overflowY)\n  }\n  style.overflowX = overflowX\n  style.overflowY = overflowY\n  // Whether the content is clipped on any axis.\n  style.overflow =\n    overflowX === 'visible' && overflowY === 'visible' ? 'visible' : 'hidden'\n  const LAYOUT_OVERFLOW = {\n    visible: 'visible',\n    clip: 'clip',\n    hidden: 'hidden',\n    auto: 'hidden',\n    scroll: 'scroll',\n  } as const\n  layout.overflowX = LAYOUT_OVERFLOW[overflowX]\n  layout.overflowY = LAYOUT_OVERFLOW[overflowY]\n\n  layout.marginTop = asPointAutoPercentageLength(\n    style.marginTop || 0,\n    'marginTop',\n    onStyleError\n  )\n  layout.marginBottom = asPointAutoPercentageLength(\n    style.marginBottom || 0,\n    'marginBottom',\n    onStyleError\n  )\n  layout.marginLeft = asPointAutoPercentageLength(\n    style.marginLeft || 0,\n    'marginLeft',\n    onStyleError\n  )\n  layout.marginRight = asPointAutoPercentageLength(\n    style.marginRight || 0,\n    'marginRight',\n    onStyleError\n  )\n\n  // A side without a border style has no width. The width defaults to\n  // `medium`, and the color to the current color.\n  for (const side of ['Top', 'Right', 'Bottom', 'Left']) {\n    const lineStyle = style[`border${side}Style`]\n    if (!lineStyle || lineStyle === 'none' || lineStyle === 'hidden') {\n      style[`border${side}Width`] = 0\n    } else {\n      if (style[`border${side}Width`] === undefined) {\n        style[`border${side}Width`] = 3\n      }\n      if (style[`border${side}Color`] === undefined) {\n        style[`border${side}Color`] = style.color\n      }\n    }\n  }\n\n  // Border and outline widths are snapped to device pixels.\n  for (const prop of [\n    'borderTopWidth',\n    'borderRightWidth',\n    'borderBottomWidth',\n    'borderLeftWidth',\n    'outlineWidth',\n  ]) {\n    if (typeof style[prop] === 'number') {\n      style[prop] = snapLineWidth(style[prop] as number, pointScaleFactor)\n    }\n  }\n\n  layout.borderTopWidth = (style.borderTopWidth as number) || 0\n  layout.borderBottomWidth = (style.borderBottomWidth as number) || 0\n  layout.borderLeftWidth = (style.borderLeftWidth as number) || 0\n  layout.borderRightWidth = (style.borderRightWidth as number) || 0\n\n  layout.paddingTop = (style.paddingTop as Length) || 0\n  layout.paddingBottom = (style.paddingBottom as Length) || 0\n  layout.paddingLeft = (style.paddingLeft as Length) || 0\n  layout.paddingRight = (style.paddingRight as Length) || 0\n\n  layout.boxSizing = v(\n    style.boxSizing,\n    {\n      'border-box': 'border-box',\n      'content-box': 'content-box',\n    },\n    'content-box',\n    'boxSizing'\n  )\n\n  const position = v(\n    style.position,\n    {\n      absolute: 'absolute',\n      relative: 'relative',\n      static: 'static',\n      // Laid out in its containing block, see `fixed-position.ts`.\n      fixed: 'fixed',\n      // Moved after the layout, see `getStickyOffset()`.\n      sticky: 'sticky',\n    },\n    'static',\n    'position'\n  )\n  style.position = position\n  layout.position =\n    position === 'absolute' || position === 'fixed' ? 'absolute' : 'relative'\n\n  // Floats only apply in block containers, see `layout()`.\n  const inlineStart = isRTL ? 'right' : 'left'\n  const inlineEnd = isRTL ? 'left' : 'right'\n  const float = v(\n    style.float,\n    {\n      none: 'none',\n      left: 'left',\n      right: 'right',\n      'inline-start': inlineStart,\n      'inline-end': inlineEnd,\n    },\n    'none',\n    'float'\n  )\n  layout.float =\n    float === 'none' || layout.position === 'absolute' ? undefined : float\n  layout.clear = v(\n    style.clear,\n    {\n      none: 'none',\n      left: 'left',\n      right: 'right',\n      both: 'both',\n      'inline-start': inlineStart,\n      'inline-end': inlineEnd,\n    },\n    'none',\n    'clear'\n  )\n\n  // Static elements ignore insets, and sticky elements are moved after the\n  // layout.\n  if (position !== 'static' && position !== 'sticky') {\n    for (const edge of ['top', 'bottom', 'left', 'right'] as const) {\n      const inset = style[edge]\n      // `auto`, the initial value, leaves the inset unset.\n      if (\n        typeof inset !== 'undefined' &&\n        String(inset).trim().toLowerCase() !== 'auto'\n      ) {\n        layout[edge] = asPointPercentageLength(inset, edge, onStyleError)\n      }\n    }\n  }\n\n  layout.height =\n    typeof style.height !== 'undefined'\n      ? asSize(style.height, 'height', onStyleError)\n      : 'auto'\n  layout.width =\n    typeof style.width !== 'undefined'\n      ? asSize(style.width, 'width', onStyleError)\n      : 'auto'\n\n  layout.replaced =\n    type === 'img' || type === 'svg' || !!replacedElements?.[type]\n\n  return [style, inheritable(style)]\n}\n","/**\n * SSRF guard for server-side image fetches.\n *\n * Satori resolves `<img src>`, SVG `<image href>` and CSS `background-image`\n * URLs by calling `fetch()` on the server. Without a guard, an attacker who\n * controls that URL can point it at internal addresses (`127.0.0.1`,\n * `169.254.169.254` cloud metadata, RFC-1918 ranges) and — because Satori\n * base64-inlines `image/svg+xml` responses into its output — read the body\n * back in-band.\n *\n * Layers:\n *  1. Literal-host classification (all runtimes) — blocks private IPs,\n *     localhost, `.local` / `.internal`, and embedded-IPv4 IPv6 forms.\n *  2. Per-hop redirect validation — `fetch` is called with `redirect:\n *     'manual'` so a public URL cannot bounce to an internal Location.\n *  3. DNS resolution when `node:dns` is available — rejects hostnames that\n *     resolve to a private address. Residual DNS-rebinding (IP flips between\n *     lookup and connect) still needs a connect-time-pinning fetcher\n *     (e.g. `@vercel/safe-fetch`) or egress controls.\n *\n * WHATWG `URL` normalizes obfuscated IPv4 (`http://0x7f.1`, `http://2130706433`)\n * to dotted-decimal for us.\n */\n\nconst IPV4_RE = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/\nconst MAX_REDIRECTS = 10\nconst REDIRECT_STATUS = new Set([301, 302, 303, 307, 308])\n\n/**\n * IPv4 ranges unsafe for server-side outbound fetches: `0.0.0.0/8`,\n * `10/8`, `100.64/10` (CGNAT), `127/8` (loopback), `169.254/16` (link-local,\n * incl. cloud metadata), `172.16/12`, `192.0.0/24` (IETF), `192.168/16`,\n * `198.18/15` (benchmark), and `224/4`–`255/4` (multicast/reserved/broadcast).\n */\nfunction isUnsafeIpv4(v4: string): boolean {\n  const octets = v4.split('.').map((p) => Number.parseInt(p, 10))\n  if (\n    octets.length !== 4 ||\n    octets.some((n) => !Number.isInteger(n) || n < 0 || n > 255)\n  ) {\n    return true // malformed — fail closed\n  }\n  const [a, b, c] = octets as [number, number, number, number]\n  if (a === 0) return true\n  if (a === 10) return true\n  if (a === 100 && b >= 64 && b <= 127) return true\n  if (a === 127) return true\n  if (a === 169 && b === 254) return true\n  if (a === 172 && b >= 16 && b <= 31) return true\n  if (a === 192 && b === 0 && c === 0) return true\n  if (a === 192 && b === 168) return true\n  if (a === 198 && (b === 18 || b === 19)) return true\n  if (a >= 224) return true\n  return false\n}\n\n/**\n * Expands an IPv6 literal into 8 16-bit groups, handling `::` compression and\n * an optional dotted-decimal IPv4 tail. Returns null if unparseable.\n */\nfunction parseIpv6(ip: string): number[] | null {\n  let address = ip\n  const zone = address.indexOf('%')\n  if (zone !== -1) address = address.slice(0, zone)\n\n  const halves = address.split('::')\n  if (halves.length > 2) return null\n\n  const toGroups = (segment: string): number[] | null => {\n    if (segment === '') return []\n    const groups: number[] = []\n    const parts = segment.split(':')\n    for (let i = 0; i < parts.length; i++) {\n      const part = parts[i]\n      if (part.includes('.')) {\n        if (i !== parts.length - 1 || !IPV4_RE.test(part)) return null\n        const [a, b, c, d] = part.split('.').map((p) => Number.parseInt(p, 10))\n        if (\n          [a, b, c, d].some((n) => !Number.isInteger(n) || n < 0 || n > 255)\n        ) {\n          return null\n        }\n        groups.push((a << 8) | b, (c << 8) | d)\n        continue\n      }\n      if (!/^[0-9a-f]{1,4}$/.test(part)) return null\n      groups.push(Number.parseInt(part, 16))\n    }\n    return groups\n  }\n\n  const head = toGroups(halves[0])\n  if (head === null) return null\n\n  if (halves.length === 2) {\n    const tail = toGroups(halves[1])\n    if (tail === null) return null\n    const fill = 8 - head.length - tail.length\n    if (fill < 0) return null\n    return [...head, ...new Array(fill).fill(0), ...tail]\n  }\n\n  return head.length === 8 ? head : null\n}\n\n/**\n * Decodes the IPv4 destination embedded in an IPv6 literal, or null if none.\n * Covers every form whose low 32 bits route to an IPv4 address:\n *   `::ffff:a.b.c.d` / `::ffff:HI:LO`           IPv4-mapped\n *   `::ffff:0:a.b.c.d` / `::ffff:0:HI:LO`       IPv4-translated (SIIT)\n *   `64:ff9b::a.b.c.d` / `64:ff9b::HI:LO`       NAT64 well-known prefix\n *   `64:ff9b:1::…`                              NAT64 local-use prefix\n *   `::a.b.c.d` / `::HI:LO`                     IPv4-compatible (deprecated)\n */\nfunction embeddedIpv4(groups: number[]): string | null {\n  const topZero = (n: number) => groups.slice(0, n).every((g) => g === 0)\n  const embeds =\n    topZero(6) || // ::/96 IPv4-compatible\n    (topZero(5) && groups[5] === 0xffff) || // ::ffff:0:0/96 mapped\n    (topZero(4) && groups[4] === 0xffff && groups[5] === 0) || // translated\n    (groups[0] === 0x64 &&\n      groups[1] === 0xff9b &&\n      groups[2] === 0 &&\n      groups[3] === 0 &&\n      groups[4] === 0 &&\n      groups[5] === 0) || // 64:ff9b::/96\n    (groups[0] === 0x64 && groups[1] === 0xff9b && groups[2] === 1) // 64:ff9b:1::/48\n\n  if (!embeds) return null\n  const a = (groups[6] >> 8) & 0xff\n  const b = groups[6] & 0xff\n  const c = (groups[7] >> 8) & 0xff\n  const d = groups[7] & 0xff\n  return `${a}.${b}.${c}.${d}`\n}\n\n/**\n * IPv6 ranges unsafe for server-side fetches. Embedded-IPv4 forms (mapped,\n * translated, NAT64, compatible) are decoded and classified as IPv4. Host is\n * already lowercased with brackets stripped.\n */\nfunction isUnsafeIpv6(host: string): boolean {\n  const groups = parseIpv6(host)\n  if (groups === null) return true // unparseable — fail closed\n\n  const v4 = embeddedIpv4(groups)\n  if (v4) return isUnsafeIpv4(v4)\n\n  if (groups.every((g) => g === 0)) return true // ::\n  if (groups.slice(0, 7).every((g) => g === 0) && groups[7] === 1) return true // ::1\n  if ((groups[0] & 0xfe00) === 0xfc00) return true // fc00::/7 ULA\n  if ((groups[0] & 0xffc0) === 0xfe80) return true // fe80::/10 link-local\n  if ((groups[0] & 0xffc0) === 0xfec0) return true // fec0::/10 site-local\n  if ((groups[0] & 0xff00) === 0xff00) return true // ff00::/8 multicast\n  if (groups[0] === 0x2001 && groups[1] === 0xdb8) return true // 2001:db8::/32\n  return false\n}\n\n/** Classify a raw IPv4/IPv6 address string (e.g. from `dns.lookup`). */\nexport function isUnsafeIpAddress(address: string): boolean {\n  const host = address.toLowerCase().replace(/^\\[|\\]$/g, '')\n  if (IPV4_RE.test(host)) return isUnsafeIpv4(host)\n  if (host.includes(':')) return isUnsafeIpv6(host)\n  return true // not an IP — fail closed\n}\n\nfunction normalizeHostname(rawUrl: string): {\n  url: URL\n  host: string\n} | null {\n  let url: URL\n  try {\n    url = new URL(rawUrl)\n  } catch {\n    return null\n  }\n  if (url.protocol !== 'http:' && url.protocol !== 'https:') return null\n\n  // Strip trailing dots so FQDNs like `localhost.` (WHATWG hostname stays\n  // `localhost.`) cannot bypass the hostname blocklist.\n  let host = url.hostname.toLowerCase().replace(/\\.+$/, '')\n  if (host.startsWith('[') && host.endsWith(']')) host = host.slice(1, -1)\n  if (!host) return null\n  return { url, host }\n}\n\n/**\n * Returns `true` if Satori must refuse to `fetch()` this URL server-side based\n * on the literal hostname / IP. Does not resolve DNS.\n */\nexport function isUnsafeServerFetchUrl(rawUrl: string): boolean {\n  const parsed = normalizeHostname(rawUrl)\n  if (!parsed) return true\n  const { host } = parsed\n\n  if (host === 'localhost' || host.endsWith('.localhost')) return true\n  if (host === 'local' || host.endsWith('.local')) return true\n  // Cloud / corp DNS special-use: GCP metadata is `metadata.google.internal`.\n  if (host === 'internal' || host.endsWith('.internal')) return true\n\n  if (IPV4_RE.test(host)) return isUnsafeIpv4(host)\n  if (host.includes(':')) return isUnsafeIpv6(host)\n\n  return false\n}\n\nfunction ssrfError(rawUrl: string): Error {\n  return new Error(\n    `Image source resolves to a blocked address (SSRF protection): ${rawUrl}`\n  )\n}\n\n/** Throws if `rawUrl` is unsafe for a server-side image fetch (literal host). */\nexport function assertSafeServerFetchUrl(rawUrl: string): void {\n  if (isUnsafeServerFetchUrl(rawUrl)) throw ssrfError(rawUrl)\n}\n\ntype DnsLookup = (\n  hostname: string,\n  options: { all: true }\n) => Promise<Array<{ address: string; family: number }>>\n\ntype SafeFetchOptions = {\n  /** Override DNS lookup (tests). `null` skips DNS. Default: node:dns when available. */\n  lookup?: DnsLookup | null\n  /** Override fetch (tests). Default: globalThis.fetch. */\n  fetch?: typeof globalThis.fetch\n}\n\nlet dnsLookup: DnsLookup | null | undefined\n\n/** Lazy-load `node:dns/promises` when available; null in browser / edge. */\nasync function getDnsLookup(): Promise<DnsLookup | null> {\n  if (dnsLookup !== undefined) return dnsLookup\n  if (typeof window !== 'undefined') {\n    dnsLookup = null\n    return null\n  }\n  try {\n    // Indirect import so Webpack/Next (playground) cannot statically resolve\n    // the `node:` builtin when bundling dist/ for the browser. esbuild also\n    // strips `/* webpackIgnore: true */`, so a literal import() is unsafe.\n    const load = new Function('s', 'return import(s)') as (\n      s: string\n    ) => Promise<typeof import('node:dns/promises')>\n    const dns = await load('node:dns/promises')\n    dnsLookup = (hostname, options) => dns.lookup(hostname, options)\n    return dnsLookup\n  } catch {\n    dnsLookup = null\n    return null\n  }\n}\n\n/**\n * Literal-host check, then (on Node) DNS-resolve and reject private answers.\n * IP literals skip DNS. When `node:dns` is unavailable, falls back to literal\n * checks only.\n */\nexport async function assertSafeServerFetchTarget(\n  rawUrl: string,\n  options?: SafeFetchOptions\n): Promise<void> {\n  assertSafeServerFetchUrl(rawUrl)\n\n  const parsed = normalizeHostname(rawUrl)\n  if (!parsed) throw ssrfError(rawUrl)\n  const { host } = parsed\n\n  // Already classified as a literal address above.\n  if (IPV4_RE.test(host) || host.includes(':')) return\n\n  const lookup =\n    options && 'lookup' in options ? options.lookup : await getDnsLookup()\n  if (!lookup) return\n\n  let records: Array<{ address: string; family: number }>\n  try {\n    records = await lookup(host, { all: true })\n  } catch {\n    // Resolver failure — do not fetch an unverified host.\n    throw new Error(`Can't resolve image host: ${rawUrl}`)\n  }\n\n  if (records.length === 0) {\n    throw new Error(`Can't resolve image host: ${rawUrl}`)\n  }\n\n  for (const { address } of records) {\n    if (isUnsafeIpAddress(address)) throw ssrfError(rawUrl)\n  }\n}\n\n/**\n * Drain a response body so the underlying socket is released (important for\n * redirect hops we are about to abandon or reject).\n */\nasync function cancelBody(res: Response): Promise<void> {\n  try {\n    if (res.body && typeof res.body.cancel === 'function') {\n      await res.body.cancel()\n    } else if (typeof res.arrayBuffer === 'function') {\n      await res.arrayBuffer()\n    }\n  } catch {\n    // ignore — best-effort drain\n  }\n}\n\n/**\n * Server-side image `fetch` with SSRF controls: validates every hop (literal +\n * DNS) and never follows redirects blindly.\n */\nexport async function safeServerFetch(\n  rawUrl: string,\n  options?: SafeFetchOptions\n): Promise<Response> {\n  const doFetch = options?.fetch ?? globalThis.fetch\n  let currentUrl = rawUrl\n\n  for (let i = 0; i <= MAX_REDIRECTS; i++) {\n    await assertSafeServerFetchTarget(currentUrl, options)\n\n    const response = await doFetch(currentUrl, { redirect: 'manual' })\n\n    // Spec-compliant fetch yields an opaque-redirect in browsers; we never\n    // call this helper in the browser (see image.ts), so treat it as unsafe.\n    if (response.type === 'opaqueredirect') {\n      await cancelBody(response)\n      throw ssrfError(currentUrl)\n    }\n\n    const location = response.headers.get('location')\n    if (REDIRECT_STATUS.has(response.status) && location) {\n      await cancelBody(response)\n      currentUrl = new URL(location, currentUrl).href\n      continue\n    }\n\n    return response\n  }\n\n  throw new Error(\n    `Image source redirected too many times (SSRF protection): ${rawUrl}`\n  )\n}\n","/**\n * This module is used to fetch image from the given URL and resolve it as\n * base64 inlined data URI, so the toolchain can process it.\n * The image data will be cached in a LRU so we don't need to fetch it again\n * in new render processes. But to invalidate the cache the workaround is to\n * add a random query string to the URL.\n * TODO: We might want another option to disable image caching by default.\n */\n\nconst AVIF = 'image/avif'\nconst WEBP = 'image/webp'\nconst APNG = 'image/apng'\nconst PNG = 'image/png'\nconst JPEG = 'image/jpeg'\nconst GIF = 'image/gif'\nconst SVG = 'image/svg+xml'\n\nfunction parseJPEG(buf: ArrayBuffer) {\n  const view = new DataView(buf)\n\n  // Skip magic bytes\n  let offset = 4\n\n  const len = view.byteLength\n  while (offset < len) {\n    const i = view.getUint16(offset, false)\n\n    if (i > len) {\n      throw new TypeError('Invalid JPEG')\n    }\n\n    const next = view.getUint8(i + 1 + offset)\n    if (next === 0xc0 || next === 0xc1 || next === 0xc2) {\n      return [\n        view.getUint16(i + 7 + offset, false),\n        view.getUint16(i + 5 + offset, false),\n      ] as [number, number]\n    }\n\n    // TODO: Support orientations from EXIF.\n\n    offset += i + 2\n  }\n\n  throw new TypeError('Invalid JPEG')\n}\n\nfunction parseWebP(arrayBuffer: ArrayBuffer) {\n  const view = new DataView(arrayBuffer)\n  const bytes = new Uint8Array(arrayBuffer)\n\n  if (\n    view.byteLength < 20 ||\n    view.getUint32(0) !== 0x52494646 || // RIFF\n    view.getUint32(8) !== 0x57454250 // WEBP\n  ) {\n    throw new TypeError('Invalid WebP')\n  }\n\n  const containerEnd = view.getUint32(4, true) + 8\n  if (containerEnd < 20 || containerEnd > view.byteLength) {\n    throw new TypeError('Invalid WebP')\n  }\n\n  let offset = 12\n  while (offset + 8 <= containerEnd) {\n    const chunkType = view.getUint32(offset)\n    const chunkSize = view.getUint32(offset + 4, true)\n    const dataOffset = offset + 8\n    const dataEnd = dataOffset + chunkSize\n\n    if (dataEnd > containerEnd) {\n      throw new TypeError('Invalid WebP')\n    }\n\n    if (chunkType === 0x56503820) {\n      // VP8\n      if (\n        chunkSize < 10 ||\n        bytes[dataOffset + 3] !== 0x9d ||\n        bytes[dataOffset + 4] !== 0x01 ||\n        bytes[dataOffset + 5] !== 0x2a\n      ) {\n        throw new TypeError('Invalid WebP')\n      }\n      const width = view.getUint16(dataOffset + 6, true) & 0x3fff\n      const height = view.getUint16(dataOffset + 8, true) & 0x3fff\n      if (!width || !height) {\n        throw new TypeError('Invalid WebP')\n      }\n      return [width, height] as [number, number]\n    }\n\n    if (chunkType === 0x5650384c) {\n      // VP8L\n      if (chunkSize < 5 || bytes[dataOffset] !== 0x2f) {\n        throw new TypeError('Invalid WebP')\n      }\n      const bits = view.getUint32(dataOffset + 1, true)\n      return [(bits & 0x3fff) + 1, ((bits >>> 14) & 0x3fff) + 1] as [\n        number,\n        number\n      ]\n    }\n\n    if (chunkType === 0x56503858) {\n      // VP8X\n      if (chunkSize < 10) {\n        throw new TypeError('Invalid WebP')\n      }\n      return [\n        bytes[dataOffset + 4] +\n          (bytes[dataOffset + 5] << 8) +\n          (bytes[dataOffset + 6] << 16) +\n          1,\n        bytes[dataOffset + 7] +\n          (bytes[dataOffset + 8] << 8) +\n          (bytes[dataOffset + 9] << 16) +\n          1,\n      ] as [number, number]\n    }\n\n    offset = dataEnd + (chunkSize % 2)\n  }\n\n  throw new TypeError('Invalid WebP')\n}\n\nfunction parseGIF(buf: ArrayBuffer) {\n  const view = new Uint8Array(buf.slice(6, 10))\n  return [view[0] | (view[1] << 8), view[2] | (view[3] << 8)] as [\n    number,\n    number\n  ]\n}\n\nfunction parsePNG(buf: ArrayBuffer) {\n  const v = new DataView(buf)\n  return [v.getUint16(18, false), v.getUint16(22, false)] as [number, number]\n}\n\nimport { createLRU, parseViewBox } from '../utils.js'\nimport { safeServerFetch } from './url-safety.js'\n\ntype ResolvedImageData = [string, number?, number?] | readonly []\nexport const cache = createLRU<ResolvedImageData>(500)\nexport const inflightRequests = new Map<string, Promise<ResolvedImageData>>()\n\nconst ALLOWED_IMAGE_TYPES = [PNG, APNG, JPEG, GIF, SVG, WEBP]\n\n// Pre-compiled regex patterns for SVG parsing\nconst SVG_ATTRS_REGEX = /<svg[^>]*>/i\nconst VIEWBOX_REGEX = /viewBox=['\"]([^'\"]+)['\"]/\nconst WIDTH_REGEX = /\\swidth=['\"]((?:\\d+(?:\\.\\d+)?|\\.\\d+))(?:px)?['\"]/\nconst HEIGHT_REGEX = /\\sheight=['\"]((?:\\d+(?:\\.\\d+)?|\\.\\d+))(?:px)?['\"]/\n\n/**\n * Whether an image has a size. An SVG without `width` and `height` only has\n * a ratio from its `viewBox`, so CSS sizes it to fit backgrounds.\n */\nexport function hasIntrinsicSize(src: string) {\n  if (!src.startsWith('data:image/svg+xml')) return true\n  const comma = src.indexOf(',')\n  let data = src.slice(comma + 1)\n  try {\n    data = src.slice(0, comma).endsWith(';base64')\n      ? atob(data)\n      : decodeURIComponent(data)\n  } catch {\n    return true\n  }\n  const tag = data.match(SVG_ATTRS_REGEX)?.[0]\n  return !tag || WIDTH_REGEX.test(tag) || HEIGHT_REGEX.test(tag)\n}\n\nexport function arrayBufferToBase64(buffer: ArrayBuffer | Uint8Array) {\n  const bytes = new Uint8Array(buffer)\n  const CHUNK_SIZE = 0x8000 // 32KB chunks\n  let binary = ''\n\n  for (let i = 0; i < bytes.length; i += CHUNK_SIZE) {\n    const chunk = bytes.subarray(i, Math.min(i + CHUNK_SIZE, bytes.length))\n    binary += String.fromCharCode(...chunk)\n  }\n\n  return btoa(binary)\n}\n\nfunction base64ToArrayBuffer(base64: string): ArrayBuffer {\n  let binaryString = atob(base64)\n  let len = binaryString.length\n  let bytes = new Uint8Array(len)\n  for (let i = 0; i < len; i++) {\n    bytes[i] = binaryString.charCodeAt(i)\n  }\n  return bytes.buffer\n}\n\nfunction parseSvgImageSize(src: string, data: string) {\n  // Parse the SVG image size\n  const svgMatch = data.match(SVG_ATTRS_REGEX)\n  if (!svgMatch) throw new Error(`Failed to parse SVG from ${src}`)\n\n  const svgTag = svgMatch[0]\n  const viewBoxMatch = VIEWBOX_REGEX.exec(svgTag)\n  const widthMatch = WIDTH_REGEX.exec(svgTag)\n  const heightMatch = HEIGHT_REGEX.exec(svgTag)\n\n  let viewBox = viewBoxMatch ? parseViewBox(viewBoxMatch[1]) : null\n\n  if (!viewBox && (!widthMatch || !heightMatch)) {\n    throw new Error(`Failed to parse SVG from ${src}: missing \"viewBox\"`)\n  }\n\n  const size = viewBox\n    ? [viewBox[2], viewBox[3]]\n    : [+widthMatch[1], +heightMatch[1]]\n\n  const ratio = size[0] / size[1]\n  const imageSize: [number, number] =\n    widthMatch && heightMatch\n      ? [+widthMatch[1], +heightMatch[1]]\n      : widthMatch\n      ? [+widthMatch[1], +widthMatch[1] / ratio]\n      : heightMatch\n      ? [+heightMatch[1] * ratio, +heightMatch[1]]\n      : [size[0], size[1]]\n\n  return imageSize\n}\n\nfunction arrayBufferToDataUri(data: ArrayBuffer, responseType?: string) {\n  let imageSize: [number, number]\n\n  const imageType = detectContentType(new Uint8Array(data))\n\n  switch (imageType) {\n    case PNG:\n    case APNG:\n      imageSize = parsePNG(data)\n      break\n    case GIF:\n      imageSize = parseGIF(data)\n      break\n    case JPEG:\n      imageSize = parseJPEG(data)\n      break\n    case WEBP:\n      imageSize = parseWebP(data)\n      break\n  }\n\n  if (!ALLOWED_IMAGE_TYPES.includes(imageType)) {\n    const detail =\n      !imageType && responseType\n        ? `. The server sent Content-Type \"${responseType}\", which is not an image format Satori can decode.`\n        : ''\n    throw new Error(\n      `Unsupported image type: ${imageType || 'unknown'}${detail}`\n    )\n  }\n  return [\n    `data:${imageType};base64,${arrayBufferToBase64(data)}`,\n    imageSize,\n  ] as const\n}\n\nexport async function resolveImageData(\n  src: string | ArrayBuffer\n): Promise<ResolvedImageData> {\n  if (!src) {\n    throw new Error('Image source is not provided.')\n  }\n\n  // ArrayBuffer\n  if (typeof src === 'object') {\n    const [newSrc, imageSize] = arrayBufferToDataUri(src)\n    return [newSrc, ...imageSize] as ResolvedImageData\n  }\n\n  if (\n    (src.startsWith('\"') && src.endsWith('\"')) ||\n    (src.startsWith(\"'\") && src.endsWith(\"'\"))\n  ) {\n    src = src.slice(1, -1)\n  }\n\n  // Throw error if the image source is not an absolute URL in server environment\n  // Should be after slicing quotes to avoid throwing error too early\n  if (typeof window === 'undefined') {\n    if (!src.startsWith('http') && !src.startsWith('data:')) {\n      throw new Error(`Image source must be an absolute URL: ${src}`)\n    }\n  }\n\n  if (src.startsWith('data:')) {\n    let decodedURI: { imageType; encodingType; dataString }\n\n    try {\n      decodedURI =\n        /data:(?<imageType>[a-z/+]+)(;[^;=]+=[^;=]+)*?(;(?<encodingType>[^;,]+))?,(?<dataString>.*)/g.exec(\n          src\n        ).groups as typeof decodedURI\n    } catch (err) {\n      console.warn('Image data URI resolved without size:' + src)\n      return [src]\n    }\n\n    const { imageType, encodingType, dataString } = decodedURI\n    if (imageType === SVG) {\n      const utf8Src =\n        encodingType === 'base64'\n          ? atob(dataString)\n          : decodeURIComponent(dataString.replace(/ /g, '%20'))\n      const base64Src =\n        encodingType === 'base64'\n          ? src\n          : `data:image/svg+xml;base64,${btoa(utf8Src)}`\n      let imageSize = parseSvgImageSize(src, utf8Src)\n      cache.set(src, [base64Src, ...imageSize])\n      return [base64Src, ...imageSize]\n    } else if (encodingType === 'base64') {\n      let imageSize: [number, number]\n      const data = base64ToArrayBuffer(dataString)\n      switch (imageType) {\n        case PNG:\n        case APNG:\n          imageSize = parsePNG(data)\n          break\n        case GIF:\n          imageSize = parseGIF(data)\n          break\n        case JPEG:\n          imageSize = parseJPEG(data)\n          break\n        case WEBP:\n          imageSize = parseWebP(data)\n          break\n      }\n      cache.set(src, [src, ...imageSize])\n      return [src, ...imageSize]\n    } else {\n      console.warn('Image data URI resolved without size:' + src)\n      cache.set(src, [src])\n      return [src]\n    }\n  }\n\n  if (!globalThis.fetch) {\n    throw new Error('`fetch` is required to be polyfilled to load images.')\n  }\n\n  if (inflightRequests.has(src)) {\n    return inflightRequests.get(src)\n  }\n  const cached = cache.get(src)\n  if (cached) {\n    return cached\n  }\n\n  const url = src\n  // Server-only SSRF guard: literal host + DNS (when node:dns exists) +\n  // per-hop redirect validation. In the browser, fetching localhost is the\n  // user's own machine — not a server-side request-forgery surface.\n  const doFetch =\n    typeof window === 'undefined'\n      ? () => safeServerFetch(url)\n      : () => fetch(url)\n  let responseType: string | null = null\n  const promise = doFetch()\n    .then((res): Promise<string | ArrayBuffer> => {\n      const type = res.headers.get('content-type')\n      responseType = type\n\n      if (res.ok === false) {\n        throw new Error(\n          `the server responded with ${res.status}${\n            res.statusText ? ` ${res.statusText}` : ''\n          }${type ? ` (Content-Type: \"${type}\")` : ''}`\n        )\n      }\n\n      // Handle SVG specially\n      if (type === 'image/svg+xml' || type === 'application/svg+xml') {\n        return res.text()\n      }\n\n      return res.arrayBuffer()\n    })\n    .then((data) => {\n      if (typeof data === 'string') {\n        try {\n          const newSrc = `data:image/svg+xml;base64,${btoa(data)}`\n          // Parse the SVG image size\n          const imageSize = parseSvgImageSize(url, data)\n          return [newSrc, ...imageSize] as ResolvedImageData\n        } catch (e) {\n          throw new Error(`Failed to parse SVG image: ${e.message}`)\n        }\n      }\n\n      const [newSrc, imageSize] = arrayBufferToDataUri(data, responseType)\n      return [newSrc, ...imageSize] as ResolvedImageData\n    })\n    .then((result) => {\n      cache.set(url, result)\n      return result\n    })\n    .catch((err) => {\n      // SSRF blocks must fail closed to the caller — do not cache an empty\n      // result that would mask a blocked internal URL as a missing image.\n      if (err instanceof Error && err.message.includes('SSRF protection')) {\n        throw err\n      }\n      console.error(`Can't load image ${url}: ` + err.message)\n      cache.set(url, [])\n      return [] as const\n    })\n\n  inflightRequests.set(url, promise)\n  return promise\n}\n\n/**\n * Inspects the first few bytes of a buffer to determine if\n * it matches the \"magic number\" of known file signatures.\n * https://en.wikipedia.org/wiki/List_of_file_signatures\n */\nfunction detectContentType(buffer: Uint8Array) {\n  if ([0xff, 0xd8, 0xff].every((b, i) => buffer[i] === b)) {\n    return JPEG\n  }\n  if (\n    [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a].every(\n      (b, i) => buffer[i] === b\n    )\n  ) {\n    if (detectAPNG(buffer)) {\n      return APNG\n    }\n    return PNG\n  }\n  if ([0x47, 0x49, 0x46, 0x38].every((b, i) => buffer[i] === b)) {\n    return GIF\n  }\n  if (\n    [0x52, 0x49, 0x46, 0x46, 0, 0, 0, 0, 0x57, 0x45, 0x42, 0x50].every(\n      (b, i) => !b || buffer[i] === b\n    )\n  ) {\n    return WEBP\n  }\n  if ([0x3c, 0x3f, 0x78, 0x6d, 0x6c].every((b, i) => buffer[i] === b)) {\n    return SVG\n  }\n  if (\n    [0, 0, 0, 0, 0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66].every(\n      (b, i) => !b || buffer[i] === b\n    )\n  ) {\n    return AVIF\n  }\n  return null\n}\n\nfunction detectAPNG(bytes: Uint8Array) {\n  const dv = new DataView(bytes.buffer)\n  let type: string,\n    length: number,\n    off = 8,\n    isAPNG = false\n  while (!isAPNG && type !== 'IEND' && off < bytes.length) {\n    length = dv.getUint32(off)\n    const chars = bytes.subarray(off + 4, off + 8)\n    type = String.fromCharCode(...chars)\n    isAPNG = type === 'acTL'\n    off += 12 + length\n  }\n  return isAPNG\n}\n","/**\n * The content of form controls, which browsers render without elements.\n */\n\nimport type { ReactElement } from 'react'\nimport type FontLoader from './font.js'\n\n/** The style of the placeholder of an input, from stylesheets. */\nexport const PLACEHOLDER_PROP = '__satoriPlaceholder'\n\n/** The types of inputs whose value is text. */\nconst TEXT_INPUTS = new Set([\n  '',\n  'text',\n  'email',\n  'search',\n  'url',\n  'tel',\n  'password',\n  'number',\n])\n\n/** The types of button inputs, and their labels without a value. */\nconst BUTTON_INPUTS: Record<string, string> = {\n  submit: 'Submit',\n  reset: 'Reset',\n  button: '',\n}\n\nconst element = (type: string, props: Record<string, unknown>) =>\n  ({ type, key: null, props } as unknown as ReactElement)\n\n/**\n * The content of an `<input>`, like in browsers: the value of a text input,\n * or else its placeholder, on a line that's vertically centered and clipped.\n * By default, the line is `size` average characters wide. Button inputs show\n * their value, or a default label, on a centered line. Other inputs have no\n * content.\n */\nexport function getInputContent(\n  props: Record<string, any>,\n  style: Record<string, any>,\n  font: FontLoader\n): ReactElement[] {\n  const type = String(props.type ?? '').toLowerCase()\n  if (Object.prototype.hasOwnProperty.call(BUTTON_INPUTS, type)) {\n    const value = props.value ?? props.defaultValue\n    const label = (\n      value === undefined || value === null\n        ? BUTTON_INPUTS[type]\n        : String(value)\n    ).replace(/[\\r\\n]/g, '')\n    if (!label) return []\n    return [\n      element('::input', {\n        style: {\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'center',\n          height: '100%',\n          overflow: 'hidden',\n        },\n        children: element('::input-text', {\n          style: { whiteSpace: 'pre' },\n          children: label,\n        }),\n      }),\n    ]\n  }\n  if (!TEXT_INPUTS.has(type)) return []\n\n  const value = props.value ?? props.defaultValue\n  let text = value === undefined || value === null ? '' : String(value)\n  text = text.replace(/[\\r\\n]/g, '')\n  if (type === 'password') text = '\\u2022'.repeat([...text].length)\n  const placeholder =\n    !text && props.placeholder !== undefined && props.placeholder !== null\n      ? String(props.placeholder).replace(/[\\r\\n]/g, '')\n      : undefined\n\n  const size = parseInt(props.size, 10)\n  const width = Math.ceil(\n    (size > 0 ? size : 20) *\n      (font.getAverageCharRatio(style) ?? 0.5) *\n      (style.fontSize as number)\n  )\n  return [\n    element('::input', {\n      style: {\n        display: 'flex',\n        alignItems: 'center',\n        height: '100%',\n        overflow: 'hidden',\n      },\n      children: element('::input-text', {\n        style: {\n          // The width is the intrinsic width of the input, but the line\n          // fits the input otherwise.\n          width: `${width}px`,\n          flexGrow: 1,\n          flexShrink: 1,\n          minWidth: 0,\n          // An empty input is as tall as a line.\n          minHeight: '1lh',\n          whiteSpace: 'pre',\n          ...(placeholder === undefined\n            ? undefined\n            : { color: '#757575', ...props[PLACEHOLDER_PROP] }),\n        },\n        children: placeholder ?? text,\n      }),\n    }),\n  ]\n}\n\ninterface SelectOption {\n  label: string\n  value: string\n  selected: boolean\n  disabled: boolean\n  /** Whether the option is in an `<optgroup>`. */\n  grouped: boolean\n}\n\ntype SelectRow =\n  | { kind: 'group'; label: string }\n  | { kind: 'option'; option: SelectOption }\n\nconst REACT_FRAGMENT = Symbol.for('react.fragment')\n\n/** Whether a boolean attribute is set, like `selected` or `disabled`. */\nconst isSet = (value: unknown) =>\n  value !== undefined && value !== null && value !== false\n\n/** The text of an element's children. */\nfunction textContent(node: unknown): string {\n  if (node === null || node === undefined || typeof node === 'boolean') {\n    return ''\n  }\n  if (typeof node === 'string' || typeof node === 'number') return String(node)\n  if (Array.isArray(node)) return node.map(textContent).join('')\n  return textContent((node as ReactElement).props?.children)\n}\n\nconst collapse = (text: string) => text.replace(/[ \\t\\n\\f\\r]+/g, ' ').trim()\n\n/** Whether a select is a list box, rather than a drop-down. */\nexport function isListBox(props: Record<string, any>) {\n  return isSet(props?.multiple) || parseInt(props?.size, 10) > 1\n}\n\n/**\n * The options and groups of a select, and which options are selected, like in\n * browsers: the options with `selected`, or the ones with the `value` or\n * `defaultValue` of the select, as in React. Only one is selected in a\n * select without `multiple`: the last one, or else the first one that isn't\n * disabled in a drop-down.\n */\nfunction getSelectRows(props: Record<string, any>): SelectRow[] {\n  const rows: SelectRow[] = []\n  const visit = (node: unknown, group?: { disabled: boolean }) => {\n    if (Array.isArray(node)) {\n      for (const child of node) visit(child, group)\n      return\n    }\n    if (!node || typeof node !== 'object' || !('type' in node)) return\n    const { type, props: childProps = {} } = node as ReactElement<any>\n    if (type === 'option') {\n      const text = collapse(textContent(childProps.children))\n      const label =\n        typeof childProps.label === 'string' && childProps.label\n          ? childProps.label\n          : text\n      rows.push({\n        kind: 'option',\n        option: {\n          label,\n          value: isSet(childProps.value) ? String(childProps.value) : text,\n          selected: isSet(childProps.selected),\n          disabled: isSet(childProps.disabled) || !!group?.disabled,\n          grouped: !!group,\n        },\n      })\n    } else if (type === 'optgroup' && !group) {\n      rows.push({ kind: 'group', label: String(childProps.label ?? '') })\n      visit(childProps.children, { disabled: isSet(childProps.disabled) })\n    } else if ((type as unknown) === REACT_FRAGMENT) {\n      visit(childProps.children, group)\n    }\n  }\n  visit(props.children)\n\n  const options = rows.flatMap((row) =>\n    row.kind === 'option' ? [row.option] : []\n  )\n  const value = props.value ?? props.defaultValue\n  if (value !== undefined && value !== null) {\n    const values = new Set([].concat(value).map(String))\n    for (const option of options) option.selected = values.has(option.value)\n  }\n  if (!isSet(props.multiple)) {\n    const last = options.findLastIndex((option) => option.selected)\n    options.forEach((option, i) => (option.selected = i === last))\n    if (last === -1 && !isListBox(props)) {\n      const first = options.find((option) => !option.disabled)\n      if (first) first.selected = true\n    }\n  }\n  return rows\n}\n\n/** The arrow of a drop-down, like the one of Chrome. */\nconst ARROW = element('svg', {\n  width: 9,\n  height: 6,\n  viewBox: '0 0 9 6',\n  fill: 'none',\n  children: element('path', {\n    d: 'M1 1l3.5 3.5L8 1',\n    stroke: 'currentColor',\n    strokeWidth: 1.5,\n    strokeLinecap: 'round',\n    strokeLinejoin: 'round',\n  }),\n})\n\n/**\n * The content of a `<select>`, like in Chrome. A drop-down shows its selected\n * option, as wide as its widest option, and an arrow, unless its `appearance`\n * is `none`. A list box shows `size` rows of options, 4 with `multiple`, and\n * highlights the selected ones.\n */\nexport function getSelectContent(\n  props: Record<string, any>,\n  style: Record<string, any>\n): ReactElement[] {\n  const rows = getSelectRows(props)\n  const line = { whiteSpace: 'pre', overflow: 'hidden' }\n\n  if (isListBox(props)) {\n    const size = parseInt(props.size, 10)\n    const count = size > 0 ? size : 4\n    const children = rows.map((row, i) => {\n      const option = row.kind === 'option' ? row.option : undefined\n      return element('::option', {\n        style: {\n          ...line,\n          flexShrink: 0,\n          minHeight: '1.2em',\n          padding: '0 2px 1px',\n          ...(row.kind === 'group' ? { fontWeight: 'bold' } : undefined),\n          ...(option?.grouped ? { paddingLeft: 20 } : undefined),\n          ...(option?.disabled ? { color: '#808080' } : undefined),\n          ...(option?.selected\n            ? { backgroundColor: '#cecece', color: '#101010' }\n            : undefined),\n          // Rows after the visible ones are still as wide as they are.\n          ...(i >= count ? { height: 0, minHeight: 0, padding: 0 } : undefined),\n        },\n        children: row.kind === 'group' ? row.label : option.label,\n      })\n    })\n    // Empty rows fill the list box.\n    for (let i = rows.length; i < count; i++) {\n      children.push(\n        element('::option', {\n          style: { flexShrink: 0, minHeight: '1.2em', paddingBottom: 1 },\n        })\n      )\n    }\n    return [\n      element('::select', {\n        style: {\n          display: 'flex',\n          flexDirection: 'column',\n          height: '100%',\n          overflow: 'hidden',\n        },\n        children,\n      }),\n    ]\n  }\n\n  const options = rows.flatMap((row) =>\n    row.kind === 'option' ? [row.option] : []\n  )\n  const selected = options.find((option) => option.selected)\n  const appearance = String(\n    style.appearance ?? style.WebkitAppearance ?? 'auto'\n  ).toLowerCase()\n  const hasArrow = appearance !== 'none'\n  return [\n    element('::select', {\n      style: {\n        display: 'flex',\n        alignItems: 'center',\n        height: '100%',\n        ...(hasArrow ? { padding: '1px 0 1px 4px' } : undefined),\n      },\n      children: [\n        element('::select-text', {\n          style: {\n            display: 'flex',\n            flexDirection: 'column',\n            flexGrow: 1,\n            flexShrink: 1,\n            minWidth: 0,\n            overflow: 'hidden',\n          },\n          children: [\n            element('::option', {\n              style: { ...line, minHeight: '1lh' },\n              children: selected?.label ?? '',\n            }),\n            // Every option, without a height, makes the drop-down as wide as\n            // the widest one. Options in groups are indented in the menu.\n            ...options.map((option) =>\n              element('::option', {\n                style: {\n                  ...line,\n                  height: 0,\n                  ...(option.grouped ? { paddingLeft: '1.1em' } : undefined),\n                },\n                children: option.label,\n              })\n            ),\n          ],\n        }),\n        ...(hasArrow\n          ? [\n              element('::select-arrow', {\n                style: {\n                  display: 'flex',\n                  justifyContent: 'flex-end',\n                  alignItems: 'center',\n                  flexShrink: 0,\n                  boxSizing: 'border-box',\n                  width: 12,\n                  paddingRight: 3,\n                  // Chrome draws the arrow at the end of the padding box.\n                  ...(typeof style.paddingRight === 'number'\n                    ? { position: 'relative', left: style.paddingRight }\n                    : undefined),\n                },\n                children: ARROW,\n              }),\n            ]\n          : []),\n      ],\n    }),\n  ]\n}\n","/**\n * This module is used to calculate the layout of the current sub-tree.\n */\n\nimport type { ReactElement, ReactNode } from 'react'\nimport {\n  isReactElement,\n  buildXMLString,\n  normalizeChildren,\n  hasDangerouslySetInnerHTMLProp,\n} from './utils.js'\nimport { LayoutNode } from './layout-engine/index.js'\nimport { getStickyOffset } from './sticky-position.js'\nimport {\n  getBoxShadowExtent,\n  getFilterExtent,\n  getOutlineExtent,\n  isOutside,\n  type PaintBounds,\n} from './culling.js'\nimport {\n  applyCounters,\n  findMarkerTarget,\n  getCounterText,\n  getListMarker,\n  type Counters,\n} from './list-marker.js'\nimport { SVGNodeToImage, serializeSVGFilter } from './handler/preprocess.js'\nimport { svgTransformToCSS } from './parser/svg-transform.js'\nimport computeStyle from './handler/compute.js'\nimport FontLoader from './font.js'\nimport buildTextNodes from './text/index.js'\nimport {\n  buildInlineText,\n  InlineFormatting,\n  relativeOffset,\n  type AtomicInline,\n  type InlineBox,\n  type InlineBoxFragment,\n  type InlineEnv,\n} from './text/inline.js'\nimport rect from './builder/rect.js'\nimport outline from './builder/outline.js'\nimport {\n  buildFilterPrimitive,\n  getExpansion,\n} from './builder/backdrop-filter.js'\nimport type { BackdropFilter, URLFilter } from './parser/backdrop-filter.js'\nimport { Locale, normalizeLocale } from './language.js'\nimport { SerializedStyle } from './handler/expand.js'\nimport type {\n  OuterDisplay,\n  ReplacedElementHandlers,\n} from './handler/compute.js'\nimport type { ParsedTransformOrigin } from './transform-origin.js'\nimport { CONTAINER_PROP } from './handler/stylesheet.js'\nimport {\n  getInputContent,\n  getSelectContent,\n  PLACEHOLDER_PROP,\n} from './form-control.js'\nimport type { TransformFunction } from './parser/transform.js'\nimport {\n  getDepth,\n  isBackFacing,\n  resolveTransformState,\n  ROOT_TRANSFORM_STATE,\n  type ProjectPlane,\n  type TransformState,\n  default as buildTransform,\n} from './builder/transform.js'\nimport {\n  getFixedElementPosition,\n  insertFixedNode,\n  type FixedContainingBlock,\n  type FixedElement,\n} from './fixed-position.js'\n\n/** An element drawn in a 3D rendering context, sorted by depth. */\ninterface Plane {\n  depth: number\n  svg: string\n}\n\n/**\n * Positioned elements and stacking contexts are painted by the stacking\n * context they're in, ordered by `z-index`:\n * https://www.w3.org/TR/CSS22/zindex.html\n */\ninterface StackingLayer {\n  zIndex: number\n  svg: string\n}\n\ninterface StackingContext {\n  layers: StackingLayer[]\n  /**\n   * Whether an element in it has `mix-blend-mode`. They blend with the content\n   * of the stacking context only, so it's drawn as an isolated group.\n   */\n  hasBlending?: boolean\n}\n\n/**\n * Paint a stacking context's layers around its in-flow content. Layers are\n * added in tree order, which the sort keeps for equal `z-index` values.\n */\nfunction paintStackingContext(layers: StackingLayer[], content: string) {\n  layers.sort((a, b) => a.zIndex - b.zIndex)\n  let svg = ''\n  let i = 0\n  for (; i < layers.length && layers[i].zIndex < 0; i++) svg += layers[i].svg\n  svg += content\n  for (; i < layers.length; i++) svg += layers[i].svg\n  return svg\n}\n\ntype TransformList = TransformFunction[] & {\n  __parent?: TransformList\n  __state?: TransformState\n}\n\n/** A node, and the position of its border box once it's known. */\nexport interface PositionedBox {\n  node: LayoutNode\n  offset: { left: number; top: number }\n}\n\nexport interface LayoutContext {\n  id: string\n  parentStyle: SerializedStyle\n  inheritedStyle: SerializedStyle\n  isInheritingTransform?: boolean\n  parent: LayoutNode\n  font: FontLoader\n  embedFont: boolean\n  debug?: boolean\n  graphemeImages?: Record<string, string>\n  canLoadAdditionalAssets: boolean\n  locale?: Locale\n  getTwStyles: (tw: string, style: any) => any\n  onNodeDetected?: (node: SatoriNode) => void\n  onStyleError?: (error: Error) => void\n  convertColors: boolean\n  pointScaleFactor?: number\n  replacedElements?: ReplacedElementHandlers\n  /** Draws elements with perspective, see `satori/experimental`. */\n  projectPlane?: ProjectPlane\n  /** Collects the planes of the 3D rendering context the element is in. */\n  planes?: Plane[]\n  /**\n   * The containing block of `position: fixed` descendants, if they're\n   * displayed.\n   */\n  fixedContainingBlock?: FixedContainingBlock\n  /**\n   * The containing block of absolutely positioned descendants: the nearest\n   * positioned ancestor, or the root.\n   */\n  absoluteContainingBlock?: FixedContainingBlock\n  /** Collects the out-of-flow elements laid out in their containing block. */\n  fixedElements: FixedElement[]\n  /** The counters in scope, see `list-marker.ts`. */\n  counters: Counters\n  /** Whether it's in an element with `display: none`, without counters. */\n  countersHidden?: boolean\n  /** The number of lists the element is in, for their default styles. */\n  listDepth?: number\n  /** Markers of list items to be placed at the start of its first line. */\n  markers?: ReactElement[]\n  /** The parent, the containing block of sticky children. */\n  parentBox?: PositionedBox\n  /**\n   * The nearest scroll container, or the root, which sticky descendants stick\n   * to.\n   */\n  scrollport?: PositionedBox\n  /**\n   * The size of the image, shared by all elements and set once the layout is\n   * known. Elements entirely outside of it aren't drawn.\n   */\n  paintBounds?: PaintBounds\n  /** The SVG `<filter>` elements of the document, by their `id`. */\n  svgFilters?: Map<string, ReactElement>\n  /**\n   * Collects the layers of the stacking context the element is in. The root\n   * element has none, and establishes the root stacking context.\n   */\n  stackingContext?: StackingContext\n  /**\n   * How the parent lays out its children. Elements are blockified unless\n   * they're in a block container.\n   */\n  formattingContext?: 'block' | 'flex' | 'grid' | 'root'\n  /** The inline content of the block container the element is in. */\n  inline?: InlineFormatting\n  /** Lays out a tree on its own, for atomic inlines. */\n  computeLayout?: InlineEnv['computeLayout']\n  /** The node of a paragraph to lay out text in, see `buildInlineText()`. */\n  textNode?: LayoutNode\n  /** Whether there are floats, which text wraps around. */\n  floats?: { found: boolean }\n  /** Whether the text fills the width of a block container. */\n  blockParagraph?: boolean\n  /** The nodes of query containers, by their `CONTAINER_PROP`. */\n  containers?: Map<number, LayoutNode>\n}\n\nexport interface SatoriNode {\n  // Layout information.\n  left: number\n  top: number\n  width: number\n  height: number\n  type: string\n  key?: string | number\n  props: Record<string, any>\n  textContent?: string\n}\n\n/**\n * The border box of a fragment of an inline box, offset by `left` and `top`,\n * the position of its block container.\n */\nfunction fragmentRect(\n  box: InlineBox,\n  fragment: InlineBoxFragment,\n  left: number,\n  top: number\n) {\n  const paragraph = fragment.paragraph.node.layout\n  const [dx, dy] = relativeOffset([...box.ancestors, box], paragraph.width)\n  return {\n    left: left + paragraph.left + fragment.left + dx,\n    top: top + paragraph.top + fragment.top + dy,\n    width: fragment.width,\n    height: fragment.height,\n  }\n}\n\n/**\n * Reports the descendants of an element that isn't displayed, which aren't\n * laid out, with empty boxes like in browsers. Like in `layout()`, fragments\n * are `display: contents` elements.\n */\nfunction reportHiddenDescendants(children: ReactNode, context: LayoutContext) {\n  const { onNodeDetected, replacedElements } = context\n  for (const child of normalizeChildren(children)) {\n    if (!isReactElement(child)) continue\n    const element = child as ReactElement\n    const isFragment =\n      (element.type as unknown) === Symbol.for('react.fragment')\n    const {\n      children: descendants,\n      [CONTAINER_PROP]: _container,\n      [PLACEHOLDER_PROP]: _placeholder,\n      ...props\n    } = element.props || {}\n    const type = isFragment ? 'div' : (element.type as string)\n    onNodeDetected?.({\n      left: 0,\n      top: 0,\n      width: 0,\n      height: 0,\n      type,\n      props: isFragment ? { style: { display: 'contents' } } : props,\n      key: element.key ?? undefined,\n      textContent: isReactElement(descendants) ? undefined : descendants,\n    })\n    // Like when they're displayed, the content of SVG and replaced elements\n    // isn't reported.\n    if (type !== 'svg' && !replacedElements?.[type]) {\n      reportHiddenDescendants(descendants, context)\n    }\n  }\n}\n\nexport default async function* layout(\n  element: ReactNode,\n  context: LayoutContext\n): AsyncGenerator<\n  { word: string; locale?: string }[],\n  string,\n  [number, number]\n> {\n  const {\n    id,\n    inheritedStyle,\n    parent,\n    font,\n    debug,\n    locale,\n    embedFont = true,\n    graphemeImages,\n    canLoadAdditionalAssets,\n    getTwStyles,\n  } = context\n\n  // 1. Pre-process the node.\n  if (element === null || typeof element === 'undefined') {\n    yield\n    yield\n    return ''\n  }\n\n  // A text node. In a block container, it's inline content. Components are\n  // already rendered, see `resolveComponents()`.\n  if (!isReactElement(element)) {\n    const iter = context.inline\n      ? buildInlineText(String(element), context)\n      : buildTextNodes(String(element), context)\n    yield (await iter.next()).value as { word: string; locale?: Locale }[]\n    await iter.next()\n    const offset = yield\n    return (await iter.next(offset)).value as string\n  }\n\n  // A fragment, e.g. returned by a component, generates no box.\n  if ((element.type as unknown) === Symbol.for('react.fragment')) {\n    return yield* layout(\n      {\n        ...element,\n        type: 'div',\n        props: {\n          children: element.props?.children,\n          style: { display: 'contents' },\n        },\n      } as ReactElement,\n      context\n    )\n  }\n\n  // Process as element.\n  const { type: $type, props } = element\n  // type must be a string here.\n  const type = $type as string\n\n  if (props && hasDangerouslySetInnerHTMLProp(props)) {\n    throw new Error(\n      'dangerouslySetInnerHTML property is not supported. See documentation for more information https://github.com/vercel/satori#jsx.'\n    )\n  }\n  // A line break in inline content.\n  if (type === 'br') {\n    context.inline?.addBreak()\n    yield []\n    yield\n    return ''\n  }\n\n  let { style, children, tw, lang: _newLocale = locale } = props || {}\n  const newLocale = normalizeLocale(_newLocale)\n\n  // Extend Tailwind styles. Like with Tailwind's preflight styles, elements\n  // have `border-box` sizing and solid borders without a width.\n  if (tw) {\n    const twStyles = getTwStyles(tw, style)\n    style = Object.assign(\n      { boxSizing: 'border-box', borderWidth: 0, borderStyle: 'solid' },\n      twStyles,\n      style\n    )\n  }\n\n  // The `transform` attribute of an inline SVG transforms its box, unless the\n  // `transform` property is set.\n  if (\n    type === 'svg' &&\n    typeof props.transform === 'string' &&\n    style?.transform === undefined\n  ) {\n    const transform = svgTransformToCSS(props.transform)\n    if (transform) style = { ...style, transform }\n  }\n\n  const node = new LayoutNode()\n  // Container queries are evaluated with the sizes of these, see `satori()`.\n  if (typeof props?.[CONTAINER_PROP] === 'number') {\n    context.containers?.set(props[CONTAINER_PROP], node)\n  }\n\n  const [computedStyle, newInheritableStyle] = await computeStyle(\n    node,\n    type,\n    inheritedStyle,\n    style,\n    props,\n    context.replacedElements,\n    context.onStyleError,\n    context.convertColors,\n    context.pointScaleFactor,\n    context.listDepth\n  )\n  // For the `ch` unit of descendants and of later properties, in the font of\n  // the element.\n  const chRatio = font.getChRatio(computedStyle as any)\n  if (chRatio !== undefined) {\n    computedStyle._chRatio = newInheritableStyle._chRatio = chRatio\n  }\n  // Inputs show their value or placeholder instead of children, and selects\n  // their options.\n  if (type === 'input') children = getInputContent(props, computedStyle, font)\n  else if (type === 'select') children = getSelectContent(props, computedStyle)\n\n  // Counters are changed in tree order, by elements that are displayed.\n  const countersHidden =\n    context.countersHidden || computedStyle.__outerDisplay === 'none'\n  if (!countersHidden) {\n    applyCounters(\n      context.counters,\n      computedStyle,\n      id.slice(0, Math.max(0, id.lastIndexOf('-'))),\n      [].concat(children ?? []).flat()\n    )\n  }\n\n  // Counters in the content of pseudo-elements have their values at this\n  // point of the tree, after the counters they change, see\n  // `applyStyleSheets()`.\n  if (type === '::before' || type === '::after') {\n    children = normalizeChildren(children).map((child) =>\n      child?.type === '::counter'\n        ? getCounterText(\n            context.counters,\n            child.props.name,\n            child.props.separator,\n            child.props.counterStyle\n          )\n        : child\n    )\n  }\n\n  // Elements are blockified in flex and grid containers, as the root\n  // element, and when they're out of flow. Inline elements without a box are\n  // laid out by the paragraphs of their block container, and atomic inlines\n  // on their own.\n  const isOutOfFlow =\n    computedStyle.position === 'absolute' || computedStyle.position === 'fixed'\n  let outerDisplay = computedStyle.__outerDisplay as OuterDisplay\n  // Floats only apply in block containers, and are blockified too.\n  if (\n    node.style.float &&\n    (context.formattingContext !== 'block' ||\n      !context.inline ||\n      outerDisplay === 'contents' ||\n      node.style.display === 'none')\n  ) {\n    node.style.float = undefined\n  }\n  const isFloat = !!node.style.float\n  if (\n    outerDisplay === 'inline' &&\n    (context.formattingContext !== 'block' ||\n      isOutOfFlow ||\n      isFloat ||\n      !context.inline)\n  ) {\n    outerDisplay = 'block'\n  }\n  const isReplacedElement =\n    type === 'img' || type === 'svg' || !!context.replacedElements?.[type]\n  const isInlineBox =\n    outerDisplay === 'inline' &&\n    computedStyle.__innerDisplay === 'inline' &&\n    !isReplacedElement\n  const atomicInline: AtomicInline | undefined =\n    outerDisplay === 'inline' && !isInlineBox\n      ? { node, style: computedStyle }\n      : undefined\n  const isContents = outerDisplay === 'contents' && !!context.inline\n  let inlineBox: InlineBox | undefined\n  if (isInlineBox) {\n    // `transform` and `overflow` don't apply to inline boxes.\n    computedStyle.transform = inheritedStyle.transform\n    newInheritableStyle.transform = inheritedStyle.transform\n    computedStyle.overflow = 'visible'\n    computedStyle.overflowX = computedStyle.overflowY = 'visible'\n    computedStyle.clipPath = undefined\n    inlineBox = { style: computedStyle, fragments: [], paragraphs: [] }\n  }\n\n  // Absolutely positioned and fixed elements are laid out in their containing\n  // block. Without a box, they're not positioned.\n  const outOfFlowContainingBlock =\n    node.style.display === 'none' || node.style.display === 'contents'\n      ? undefined\n      : computedStyle.position === 'fixed'\n      ? context.fixedContainingBlock\n      : computedStyle.position === 'absolute'\n      ? context.absoluteContainingBlock\n      : undefined\n  const fixedElement = outOfFlowContainingBlock\n    ? insertFixedNode(\n        node,\n        parent,\n        outOfFlowContainingBlock,\n        context.fixedElements\n      )\n    : undefined\n  if (fixedElement) {\n    // `overflow: hidden` of elements between it and its containing block\n    // doesn't clip it.\n    const { clipPathId, maskId } = fixedElement.containingBlock\n    for (const s of [computedStyle, newInheritableStyle]) {\n      s._inheritedClipPathId = clipPathId\n      s._inheritedMaskId = maskId\n    }\n  } else if (inlineBox) {\n    context.inline.openBox(inlineBox)\n  } else if (atomicInline) {\n    context.inline.addAtomic(atomicInline)\n  } else if (isFloat) {\n    context.inline.addFloat(node)\n    if (context.floats) context.floats.found = true\n  } else if (!isContents) {\n    // A block-level box ends the paragraph before it.\n    if (outerDisplay === 'block' && !isOutOfFlow) {\n      context.inline?.breakForBlock()\n    }\n    parent.insertChild(node)\n  }\n\n  // Post-process styles to attach inheritable properties for Satori.\n\n  const opacity =\n    typeof computedStyle.opacity === 'number' ? computedStyle.opacity : 1\n\n  // Elements that affect how their children are transformed, and children of\n  // those, need their own transform state even without a `transform`. Like in\n  // browsers, `opacity` makes `preserve-3d` flat, as the element and its\n  // descendants are drawn as a group.\n  const preserve3d =\n    computedStyle.transformStyle === 'preserve-3d' && opacity === 1\n  const perspective =\n    typeof computedStyle.perspective === 'number'\n      ? computedStyle.perspective\n      : undefined\n\n  // These properties make the element the containing block of its fixed\n  // descendants.\n  const isFixedContainingBlock =\n    computedStyle.transformStyle === 'preserve-3d' ||\n    perspective !== undefined ||\n    (computedStyle.transform !== inheritedStyle.transform &&\n      (computedStyle.transform as unknown as TransformList).length > 0) ||\n    (!!computedStyle.filter &&\n      computedStyle.filter !== 'none' &&\n      computedStyle.filter !== inheritedStyle.filter) ||\n    (computedStyle._backdropFilters as unknown as unknown[] | undefined)\n      ?.length > 0\n\n  if (\n    computedStyle.transform === inheritedStyle.transform &&\n    (preserve3d ||\n      perspective !== undefined ||\n      context.parentStyle.transformStyle === 'preserve-3d' ||\n      typeof context.parentStyle.perspective === 'number')\n  ) {\n    computedStyle.transform = [] as any\n    newInheritableStyle.transform = computedStyle.transform\n  }\n\n  // If the element is inheriting the parent `transform`, or applying its own.\n  // This affects the coordinate system.\n  const isInheritingTransform =\n    computedStyle.transform === inheritedStyle.transform\n  if (!isInheritingTransform) {\n    ;(computedStyle.transform as unknown as TransformList).__parent =\n      inheritedStyle.transform as unknown as TransformList\n  }\n\n  // Transformed elements, and their descendants, can be drawn elsewhere than\n  // their boxes, so they're always drawn, even when their boxes are outside of\n  // the image. Filters can draw outside of what they filter, e.g. with\n  // `drop-shadow()`, so they're checked with a margin.\n  if (!isInheritingTransform) newInheritableStyle._alwaysDrawn = 1\n  const filterExtent = getFilterExtent(\n    computedStyle._filters as unknown as\n      | (BackdropFilter | URLFilter)[]\n      | undefined\n  )\n  if (filterExtent) {\n    newInheritableStyle._cullMargin =\n      ((inheritedStyle._cullMargin as number) || 0) + filterExtent\n  }\n\n  // A `preserve-3d` element establishes a 3D rendering context, or extends\n  // the one it's in. Its children are drawn sorted by depth.\n  const planes = preserve3d ? context.planes || [] : undefined\n\n  // If the element has `overflow` set to `hidden` or clip-path is set, we need to create a clip\n  // path and use it in all its children.\n  const hasClipPath =\n    computedStyle.clipPath && computedStyle.clipPath !== 'none'\n  if (computedStyle.overflow === 'hidden' || hasClipPath) {\n    newInheritableStyle._inheritedClipPathId = `satori_cp-${id}`\n    newInheritableStyle._inheritedMaskId = `satori_om-${id}`\n  }\n\n  if (computedStyle.maskImage) {\n    newInheritableStyle._inheritedMaskId = `satori_mi-${id}`\n  }\n\n  // Fixed descendants are clipped by their containing block, and by the\n  // `clip-path` and `mask-image` of elements in between. Descendants of an\n  // element that isn't displayed aren't displayed either.\n  let fixedContainingBlock = context.fixedContainingBlock\n  const fixedClip = {\n    clipPathId: newInheritableStyle._inheritedClipPathId as string | undefined,\n    maskId: newInheritableStyle._inheritedMaskId as string | undefined,\n  }\n  if (node.style.display === 'none') {\n    fixedContainingBlock = undefined\n  } else if (isFixedContainingBlock) {\n    fixedContainingBlock = { node, offset: { left: 0, top: 0 }, ...fixedClip }\n  } else if (fixedContainingBlock && (hasClipPath || computedStyle.maskImage)) {\n    fixedContainingBlock = { ...fixedContainingBlock, ...fixedClip }\n  }\n  // Positioned elements are the containing block of absolutely positioned\n  // descendants too, unless they don't have a box in the layout.\n  let absoluteContainingBlock = context.absoluteContainingBlock\n  if (node.style.display === 'none') {\n    absoluteContainingBlock = undefined\n  } else if (fixedContainingBlock?.node === node) {\n    absoluteContainingBlock = fixedContainingBlock\n  } else if (\n    computedStyle.position !== 'static' &&\n    !inlineBox &&\n    outerDisplay !== 'contents'\n  ) {\n    absoluteContainingBlock = {\n      node,\n      offset: { left: 0, top: 0 },\n      ...fixedClip,\n    }\n  } else if (\n    absoluteContainingBlock &&\n    (hasClipPath || computedStyle.maskImage)\n  ) {\n    absoluteContainingBlock = { ...absoluteContainingBlock, ...fixedClip }\n  }\n\n  // The containing block of sticky children is the nearest block container,\n  // and they stick to the nearest scroll container.\n  const box: PositionedBox = { node, offset: { left: 0, top: 0 } }\n  const isScrollContainer =\n    !inlineBox &&\n    [computedStyle.overflowX, computedStyle.overflowY].some(\n      (overflow) =>\n        overflow === 'hidden' || overflow === 'scroll' || overflow === 'auto'\n    )\n  const parentBox = inlineBox || isContents ? context.parentBox : box\n  const scrollport = isScrollContainer ? box : context.scrollport\n\n  // A stacking context paints its descendants together. Elements of a 3D\n  // rendering context, elements projected by the `perspective` of their parent,\n  // and elements hidden by `backface-visibility` are drawn with their\n  // descendants too. `z-index` applies to positioned elements, and to flex and\n  // grid items.\n  const isPositioned = computedStyle.position !== 'static'\n  const zIndex =\n    typeof computedStyle.zIndex === 'number' &&\n    (isPositioned ||\n      context.formattingContext === 'flex' ||\n      context.formattingContext === 'grid')\n      ? computedStyle.zIndex\n      : undefined\n  const mixBlendMode =\n    computedStyle.mixBlendMode && computedStyle.mixBlendMode !== 'normal'\n      ? computedStyle.mixBlendMode\n      : undefined\n  const isStackingContext =\n    !context.stackingContext ||\n    !!mixBlendMode ||\n    computedStyle.isolation === 'isolate' ||\n    zIndex !== undefined ||\n    computedStyle.position === 'fixed' ||\n    computedStyle.position === 'sticky' ||\n    isFixedContainingBlock ||\n    opacity < 1 ||\n    !!hasClipPath ||\n    !!computedStyle.maskImage ||\n    !!context.planes ||\n    typeof context.parentStyle.perspective === 'number' ||\n    computedStyle.backfaceVisibility === 'hidden'\n  const stackingContext: StackingContext = isStackingContext\n    ? { layers: [] }\n    : context.stackingContext\n  if (mixBlendMode && context.stackingContext) {\n    context.stackingContext.hasBlending = true\n  }\n\n  // If the element has `background-clip: text` set, we need to create a clip\n  // path and use it in all its children.\n  if (computedStyle.backgroundClip === 'text') {\n    const mutateRefValue = { value: '' } as any\n    newInheritableStyle._inheritedBackgroundClipTextPath = mutateRefValue\n    computedStyle._inheritedBackgroundClipTextPath = mutateRefValue\n\n    if (computedStyle.backgroundImage) {\n      newInheritableStyle._inheritedBackgroundClipTextHasBackground = 'true'\n      computedStyle._inheritedBackgroundClipTextHasBackground = 'true'\n    }\n  }\n\n  // 2. Do layout recursively for its children.\n  // Children of replaced elements, e.g. the fallback content of a <canvas>,\n  // are never rendered, and neither are the ones of elements that aren't\n  // displayed, e.g. the text of <style>, which would be laid out for nothing.\n  // The content of SVG elements is drawn as an image.\n  const isReplaced = !!context.replacedElements?.[type]\n  const normalizedChildren =\n    isReplaced || type === 'svg' || node.style.display === 'none'\n      ? []\n      : normalizeChildren(children)\n  const iterators: ReturnType<typeof layout>[] = []\n\n  // The markers of list items are placed at the start of the first line of\n  // their block container: before its first in-flow child, or in the first\n  // line of that child if it's a block container too.\n  let markers = context.markers\n  if (computedStyle.__listItem && !countersHidden && !isReplaced) {\n    const engine = font.getEngine(\n      computedStyle.fontSize as number,\n      computedStyle.lineHeight as number,\n      computedStyle as any,\n      newLocale\n    )\n    markers = [\n      ...(markers || []),\n      ...getListMarker(\n        computedStyle,\n        context.counters.value('list-item'),\n        Math.round(engine.ascent('0'))\n      ),\n    ]\n  }\n  let markerTarget = -1\n  if (markers?.length && !isReplaced && type !== 'svg') {\n    const isItemContainer =\n      computedStyle.__innerDisplay === 'flex' ||\n      computedStyle.__innerDisplay === 'grid'\n    const target = findMarkerTarget(normalizedChildren, isItemContainer)\n    if (target.nested) {\n      markerTarget = target.index\n    } else if (target.wrap) {\n      normalizedChildren[target.index] = {\n        type: 'span',\n        key: null,\n        props: { children: [...markers, normalizedChildren[target.index]] },\n      } as any\n    } else if (!isItemContainer) {\n      normalizedChildren.splice(target.index, 0, ...markers)\n    }\n  }\n\n  // Children of a block container take part in its inline content, and\n  // children of inline boxes in the one of their block container.\n  const isBlockContainer =\n    !inlineBox &&\n    !isContents &&\n    !isReplacedElement &&\n    (node.style.display === 'block' || node.style.display === 'flow-root')\n  const childInline = isBlockContainer\n    ? new InlineFormatting(node, computedStyle, {\n        font,\n        embedFont,\n        debug,\n        graphemeImages,\n        pointScaleFactor: context.pointScaleFactor,\n        computeLayout: context.computeLayout,\n      })\n    : inlineBox || isContents\n    ? context.inline\n    : undefined\n  const childFormattingContext: LayoutContext['formattingContext'] =\n    isBlockContainer\n      ? 'block'\n      : inlineBox || outerDisplay === 'contents'\n      ? context.formattingContext\n      : node.style.display === 'grid'\n      ? 'grid'\n      : 'flex'\n  const childParent = inlineBox || isContents ? context.inline.container : node\n\n  let i = 0\n  const segmentsMissingFont: { word: string; locale?: string }[] = []\n  // The `order` of the flex or grid item each child generates.\n  const childOrders: number[] = []\n  for (const [index, child] of normalizedChildren.entries()) {\n    // In flex and grid containers, text with only white space isn't\n    // rendered, even with `white-space: pre`, e.g. the newlines between the\n    // lines of code blocks.\n    if (\n      typeof child === 'string' &&\n      (childFormattingContext === 'flex' ||\n        childFormattingContext === 'grid') &&\n      /^[ \\t\\n\\r\\f]*$/.test(child)\n    ) {\n      continue\n    }\n    const childCount = childParent.children.length\n    const iter = layout(child, {\n      id: id + '-' + i++,\n      parentStyle: computedStyle,\n      inheritedStyle: newInheritableStyle,\n      isInheritingTransform: true,\n      parent: childParent,\n      font,\n      embedFont,\n      debug,\n      graphemeImages,\n      canLoadAdditionalAssets,\n      locale: newLocale,\n      getTwStyles,\n      onNodeDetected: context.onNodeDetected,\n      onStyleError: context.onStyleError,\n      convertColors: context.convertColors,\n      pointScaleFactor: context.pointScaleFactor,\n      replacedElements: context.replacedElements,\n      projectPlane: context.projectPlane,\n      planes,\n      fixedContainingBlock,\n      absoluteContainingBlock,\n      fixedElements: context.fixedElements,\n      paintBounds: context.paintBounds,\n      svgFilters: context.svgFilters,\n      counters: context.counters,\n      countersHidden,\n      listDepth:\n        (context.listDepth || 0) +\n        (['ul', 'ol', 'menu', 'dir'].includes(type) ? 1 : 0),\n      markers: index === markerTarget ? markers : undefined,\n      parentBox,\n      scrollport,\n      floats: context.floats,\n      stackingContext,\n      formattingContext: childFormattingContext,\n      inline: childInline,\n      computeLayout: context.computeLayout,\n      containers: context.containers,\n    })\n    if (canLoadAdditionalAssets) {\n      segmentsMissingFont.push(...(((await iter.next()).value as any) || []))\n    } else {\n      await iter.next()\n    }\n    const added = childParent.children.slice(childCount)\n    childOrders.push(added.length === 1 ? added[0].style.order || 0 : 0)\n    iterators.push(iter)\n  }\n  if (isBlockContainer) childInline.end()\n  if (inlineBox) context.inline.closeBox(inlineBox)\n  // Counters created by the children are out of scope.\n  context.counters.closeScope(id)\n  yield segmentsMissingFont\n  for (const iter of iterators) await iter.next()\n\n  // 3. Post-process the node.\n  const [x, y] = yield\n  // Atomic inlines are positioned by their paragraph.\n  atomicInline?.paragraph?.finalize()\n  let { left, top, width, height } = node.layout\n  if (fixedElement) {\n    ;[left, top] = getFixedElementPosition(fixedElement, x, y)\n  } else {\n    // Attach offset to the current node.\n    left += x\n    top += y\n  }\n  if (\n    computedStyle.position === 'sticky' &&\n    !inlineBox &&\n    context.parentBox &&\n    context.scrollport\n  ) {\n    const [dx, dy] = getStickyOffset(\n      { left, top, width, height, margin: node.layout.margin },\n      computedStyle,\n      context.parentBox,\n      context.scrollport\n    )\n    left += dx\n    top += dy\n  }\n  box.offset.left = left\n  box.offset.top = top\n  for (const containingBlock of [\n    fixedContainingBlock,\n    absoluteContainingBlock,\n  ]) {\n    if (containingBlock?.node === node) {\n      containingBlock.offset.left = left\n      containingBlock.offset.top = top\n    }\n  }\n\n  // Add the layer before the descendants add theirs, to keep the tree order.\n  // Elements of a 3D rendering context are drawn by depth instead. Floats\n  // are drawn over the in-flow blocks around them.\n  let layer: StackingLayer | undefined\n  if (\n    context.stackingContext &&\n    !context.planes &&\n    (isPositioned || isStackingContext || isFloat)\n  ) {\n    layer = { zIndex: zIndex ?? 0, svg: '' }\n    context.stackingContext.layers.push(layer)\n  }\n\n  let childrenRenderResult = ''\n  let baseRenderResult = ''\n  let depsRenderResult = ''\n\n  // Emit event for the current node. We don't pass the children prop to the\n  // event handler because everything is already flattened, unless it's a text\n  // node.\n  const {\n    children: childrenNode,\n    [CONTAINER_PROP]: _container,\n    [PLACEHOLDER_PROP]: _placeholder,\n    ...restProps\n  } = props\n  // Inline boxes are reported like by `getBoundingClientRect()` in browsers,\n  // as the union of the border boxes of their fragments on each line.\n  let detected = { left, top, width, height }\n  if (inlineBox) {\n    for (const paragraph of inlineBox.paragraphs) paragraph.finalize()\n    const rects = inlineBox.fragments.map((fragment) =>\n      fragmentRect(inlineBox, fragment, left, top)\n    )\n    if (rects.length) {\n      const minLeft = Math.min(...rects.map((r) => r.left))\n      const minTop = Math.min(...rects.map((r) => r.top))\n      detected = {\n        left: minLeft,\n        top: minTop,\n        width: Math.max(...rects.map((r) => r.left + r.width)) - minLeft,\n        height: Math.max(...rects.map((r) => r.top + r.height)) - minTop,\n      }\n    }\n  }\n  context.onNodeDetected?.({\n    ...detected,\n    type,\n    props: restProps,\n    key: element.key,\n    textContent: isReactElement(childrenNode) ? undefined : childrenNode,\n  })\n  if (node.style.display === 'none' && context.onNodeDetected) {\n    reportHiddenDescendants(childrenNode, context)\n  }\n\n  // Resolve transforms now that the layout is known. Children read the state\n  // from their parent's transform list.\n  const transformList = computedStyle.transform as unknown as\n    | TransformList\n    | undefined\n  if (transformList && !isInheritingTransform) {\n    transformList.__state = resolveTransformState({\n      functions: transformList,\n      box: { left, top, width, height },\n      origin: computedStyle.transformOrigin as ParsedTransformOrigin,\n      parent: transformList.__parent?.__state || ROOT_TRANSFORM_STATE,\n      preserve3d,\n      perspectiveDistance: perspective,\n      perspectiveOrigin:\n        computedStyle.perspectiveOrigin as unknown as ParsedTransformOrigin,\n      canProject: !!context.projectPlane,\n    })\n  }\n  const transformState = transformList?.__state || ROOT_TRANSFORM_STATE\n  const isHidden =\n    transformState.behindViewer ||\n    (computedStyle.backfaceVisibility === 'hidden' &&\n      isBackFacing(transformState))\n\n  // Planes of a 3D rendering context are drawn back to front. Equal depths\n  // keep the document order, so an element is added before its children.\n  let plane: Plane | undefined\n  const contextPlanes = context.planes || planes\n  if (contextPlanes) {\n    const depth = getDepth(transformState, left + width / 2, top + height / 2)\n    // Round off floating point errors, so planes at the same depth are equal.\n    plane = {\n      depth: Number.isFinite(depth) ? Math.round(depth * 1e6) / 1e6 : 0,\n      svg: '',\n    }\n    contextPlanes.push(plane)\n  }\n\n  // An element is drawn as a group with its opacity, with its descendants\n  // and the elements in its stacking context. Without\n  // children, it's drawn by itself, which avoids an extra group for a single\n  // shape.\n  let groupOpacity = opacity < 1 && iterators.length > 0 ? opacity : 1\n  const rectOpacity = groupOpacity < 1 ? 1 : opacity\n  const drawn = { shapes: true }\n\n  // Boxes entirely outside of the image aren't drawn, with their shadows,\n  // unless they define the clip paths or masks of their descendants. The\n  // descendants are checked by themselves.\n  const paintBounds = newInheritableStyle._alwaysDrawn\n    ? undefined\n    : context.paintBounds\n  const definesClip =\n    newInheritableStyle._inheritedClipPathId !==\n      inheritedStyle._inheritedClipPathId ||\n    newInheritableStyle._inheritedMaskId !== inheritedStyle._inheritedMaskId\n  const cullMargin = (newInheritableStyle._cullMargin as number) || 0\n  const shadowExtent =\n    paintBounds && !definesClip\n      ? getBoxShadowExtent(computedStyle) + cullMargin\n      : 0\n  const isCulled = (area: {\n    left: number\n    top: number\n    width: number\n    height: number\n  }) =>\n    !!paintBounds &&\n    !definesClip &&\n    isOutside(\n      paintBounds,\n      area.left,\n      area.top,\n      area.width,\n      area.height,\n      shadowExtent\n    )\n  const isBoxCulled = isCulled({ left, top, width, height })\n\n  // Generate the rendered markup for the current node.\n  if ((type === 'img' || isReplaced || type === 'svg') && isBoxCulled) {\n    // Not drawn, see above.\n  } else if (type === 'img' || isReplaced) {\n    // A replaced element without rendered content has no `src`, so it's drawn\n    // as a box.\n    const src = computedStyle.__src as string | undefined\n    baseRenderResult = await rect(\n      {\n        id,\n        left,\n        top,\n        width,\n        height,\n        src,\n        isInheritingTransform,\n        debug,\n        opacity: rectOpacity,\n      },\n      computedStyle,\n      newInheritableStyle\n    )\n  } else if (type === 'svg') {\n    // When entering a <svg> node, we need to convert it to a <img> with the\n    // SVG data URL embedded.\n    const currentColor = computedStyle.color\n    // `var()` in its attributes uses the variables of the element.\n    const variables: Record<string, string> = {}\n    for (const key in computedStyle) {\n      if (key.startsWith('--')) variables[key] = String(computedStyle[key])\n    }\n    const src = await SVGNodeToImage(\n      element,\n      currentColor,\n      context.convertColors,\n      variables\n    )\n    // Like in browsers, the viewBox is fitted in the box by the\n    // `preserveAspectRatio` of the SVG, which the image applies to it.\n    const aspectRatio = (element.props as Record<string, unknown>)\n      ?.preserveAspectRatio\n    baseRenderResult = await rect(\n      {\n        id,\n        left,\n        top,\n        width,\n        height,\n        src,\n        svgAspectRatio:\n          typeof aspectRatio === 'string' && aspectRatio.trim()\n            ? aspectRatio.trim()\n            : 'xMidYMid meet',\n        isInheritingTransform,\n        debug,\n        opacity: rectOpacity,\n      },\n      computedStyle,\n      newInheritableStyle\n    )\n  } else if (inlineBox) {\n    // Each line has a fragment of the box. The edges are only drawn where the\n    // box starts and ends.\n    for (const paragraph of inlineBox.paragraphs) paragraph.finalize()\n    drawn.shapes = false\n    for (const [index, fragment] of inlineBox.fragments.entries()) {\n      const fragmentStyle = { ...computedStyle }\n      if (!fragment.first) {\n        fragmentStyle.borderLeftWidth = 0\n        fragmentStyle.paddingLeft = 0\n        fragmentStyle.borderTopLeftRadius = 0\n        fragmentStyle.borderBottomLeftRadius = 0\n      }\n      if (!fragment.last) {\n        fragmentStyle.borderRightWidth = 0\n        fragmentStyle.paddingRight = 0\n        fragmentStyle.borderTopRightRadius = 0\n        fragmentStyle.borderBottomRightRadius = 0\n      }\n      const fragmentBox = fragmentRect(inlineBox, fragment, left, top)\n      if (isCulled(fragmentBox)) continue\n      const fragmentDrawn = { shapes: true }\n      baseRenderResult += await rect(\n        {\n          id: `${id}-${index}`,\n          ...fragmentBox,\n          isInheritingTransform,\n          debug,\n          opacity: rectOpacity,\n          drawn: fragmentDrawn,\n        },\n        fragmentStyle,\n        newInheritableStyle\n      )\n      drawn.shapes ||= fragmentDrawn.shapes\n    }\n  } else if (!isBoxCulled) {\n    baseRenderResult = await rect(\n      {\n        id,\n        left,\n        top,\n        width,\n        height,\n        isInheritingTransform,\n        debug,\n        opacity: rectOpacity,\n        drawn,\n      },\n      computedStyle,\n      newInheritableStyle\n    )\n  }\n\n  // If the element only has text, the text is drawn with the opacity, which\n  // can avoid a group for a single path.\n  if (\n    groupOpacity < 1 &&\n    !drawn.shapes &&\n    normalizedChildren.length === 1 &&\n    typeof normalizedChildren[0] === 'string'\n  ) {\n    computedStyle._textOpacity = groupOpacity\n    groupOpacity = 1\n  }\n\n  // Generate the rendered markup for the children. Flex and grid items are\n  // painted in `order`, like they're laid out.\n  const paintOrder = iterators.map((_, index) => index)\n  if (\n    childParent === node &&\n    (node.style.display === 'flex' || node.style.display === 'grid') &&\n    childOrders.some(Boolean)\n  ) {\n    paintOrder.sort((a, b) => childOrders[a] - childOrders[b])\n  }\n  for (const index of paintOrder) {\n    childrenRenderResult += (await iterators[index].next([left, top])).value\n  }\n\n  // The outline is drawn over the element and its in-flow descendants, and\n  // under positioned ones. Outlines of inline boxes aren't drawn.\n  const outlineResult =\n    inlineBox ||\n    computedStyle.visibility === 'hidden' ||\n    (paintBounds &&\n      isOutside(\n        paintBounds,\n        left,\n        top,\n        width,\n        height,\n        getOutlineExtent(computedStyle) + cullMargin\n      ))\n      ? ''\n      : outline(\n          { id, left, top, width, height, isInheritingTransform },\n          computedStyle\n        )\n\n  // An extra pass to generate the special background-clip shape collected from\n  // children.\n  if (computedStyle._inheritedBackgroundClipTextPath) {\n    depsRenderResult += buildXMLString(\n      'clipPath',\n      {\n        id: `satori_bct-${id}`,\n        'clip-path': computedStyle._inheritedClipPathId\n          ? `url(#${computedStyle._inheritedClipPathId})`\n          : undefined,\n      },\n      (computedStyle._inheritedBackgroundClipTextPath as any).value\n    )\n  }\n\n  // Children in the same 3D rendering context were added to `planes` and\n  // returned nothing, so this is the element's own plane, including the\n  // descendants flattened onto it.\n  // An element without a box draws nothing, including its descendants.\n  let result =\n    isHidden || opacity === 0 || node.style.display === 'none'\n      ? ''\n      : depsRenderResult +\n        baseRenderResult +\n        (isStackingContext\n          ? paintStackingContext(\n              stackingContext.layers,\n              childrenRenderResult + outlineResult\n            )\n          : childrenRenderResult + outlineResult)\n\n  // The filter applies to the element and its descendants as a group, then\n  // its own clip path clips the filtered result, e.g. the edges of a blur.\n  // https://drafts.fxtf.org/filter-effects-1/#placement\n  const filters = computedStyle._filters as unknown as\n    | (BackdropFilter | URLFilter)[]\n    | undefined\n  // Like in browsers, a reference to a missing SVG filter makes the whole list\n  // ignored.\n  const isMissing = (filter: BackdropFilter | URLFilter) =>\n    filter.type === 'url' && !context.svgFilters?.get(filter.id)\n  if (result && filters?.length && !filters.some(isMissing)) {\n    // Filter functions are applied together, and SVG filters by themselves,\n    // in order.\n    let count = 0\n    let functions: BackdropFilter[] = []\n    const applyFunctions = () => {\n      if (!functions.length) return\n      // Descendants can be drawn anywhere, so the filter region is the image,\n      // and what the filter draws into it from outside.\n      const filterId = `satori_f-${id}${count ? `-${count}` : ''}`\n      count++\n      const expansion = getExpansion(functions)\n      const primitives = functions\n        .map((filter, index) =>\n          buildFilterPrimitive(\n            filter,\n            index ? `${filterId}-${index - 1}` : 'SourceGraphic',\n            `${filterId}-${index}`,\n            false\n          )\n        )\n        .join('')\n      result =\n        buildXMLString(\n          'filter',\n          {\n            id: filterId,\n            x: -expansion.left,\n            y: -expansion.top,\n            width:\n              (computedStyle._viewportWidth as number) +\n              expansion.left +\n              expansion.right,\n            height:\n              (computedStyle._viewportHeight as number) +\n              expansion.top +\n              expansion.bottom,\n            filterUnits: 'userSpaceOnUse',\n            'color-interpolation-filters': 'sRGB',\n          },\n          primitives\n        ) + buildXMLString('g', { filter: `url(#${filterId})` }, result)\n      functions = []\n    }\n    for (const filter of filters) {\n      if (filter.type !== 'url') {\n        functions.push(filter)\n        continue\n      }\n      applyFunctions()\n      const filterId = `satori_f-${id}${count ? `-${count}` : ''}`\n      count++\n      // Like in browsers, the bounding box of the filter, e.g. for its default\n      // region, is at least the border box of the element.\n      const borderBox = buildXMLString('rect', {\n        x: left,\n        y: top,\n        width,\n        height,\n        fill: 'none',\n        transform: computedStyle.transform\n          ? buildTransform(\n              { left, top, width, height },\n              computedStyle.transform,\n              isInheritingTransform\n            ) || undefined\n          : undefined,\n      })\n      result =\n        serializeSVGFilter(\n          context.svgFilters!.get(filter.id)!,\n          filterId,\n          computedStyle.color as string,\n          context.convertColors\n        ) +\n        buildXMLString('g', { filter: `url(#${filterId})` }, borderBox + result)\n    }\n    applyFunctions()\n    if (hasClipPath && isInheritingTransform) {\n      result = buildXMLString(\n        'g',\n        { 'clip-path': `url(#satori_cp-${id})` },\n        result\n      )\n    }\n  }\n\n  if (result && transformState.projection && !isInheritingTransform) {\n    result = context.projectPlane(result, {\n      matrix: transformState.projection,\n      node,\n      left,\n      top,\n      style: computedStyle,\n      id,\n    })\n  }\n\n  // The root stacking context is isolated by the SVG itself.\n  const isolate =\n    isStackingContext &&\n    stackingContext.hasBlending &&\n    !!context.stackingContext\n  if (result && (mixBlendMode || isolate || groupOpacity < 1)) {\n    result = buildXMLString(\n      'g',\n      {\n        opacity: groupOpacity < 1 ? groupOpacity : undefined,\n        style:\n          [\n            mixBlendMode && `mix-blend-mode:${mixBlendMode}`,\n            isolate && 'isolation:isolate',\n          ]\n            .filter(Boolean)\n            .join(';') || undefined,\n      },\n      result\n    )\n  }\n\n  if (plane) {\n    plane.svg = result\n    // The element establishing the 3D rendering context draws all of them.\n    if (context.planes) return ''\n    result = planes\n      .sort((a, b) => a.depth - b.depth)\n      .map(({ svg }) => svg)\n      .join('')\n  }\n\n  if (layer) {\n    layer.svg = result\n    return ''\n  }\n  return result\n}\n","import type { Edges } from './layout-engine/node.js'\nimport type { SerializedStyle } from './handler/expand.js'\nimport type { PositionedBox } from './layout.js'\n\n/** Resolves an inset of a sticky element, `undefined` if it's `auto`. */\nfunction resolveInset(value: unknown, base: number): number | undefined {\n  if (typeof value === 'number') return value\n  if (typeof value === 'string' && value.endsWith('%')) {\n    return (parseFloat(value) / 100) * base\n  }\n  if (value && typeof value === 'object' && 'calc' in value) {\n    return (value as { calc: (base: number) => number }).calc(base)\n  }\n}\n\n/** The content box of a positioned box. */\nfunction innerBox({ node, offset }: PositionedBox) {\n  const { width, height, border, padding } = node.layout\n  const inset = (edge: keyof Edges) => border[edge] + padding[edge]\n  return {\n    left: offset.left + inset('left'),\n    top: offset.top + inset('top'),\n    right: offset.left + width - inset('right'),\n    bottom: offset.top + height - inset('bottom'),\n  }\n}\n\n/**\n * Moves a sticky element along one axis, into its sticky view rectangle\n * without leaving its containing block. The start inset wins.\n */\nfunction stickAxis(\n  start: number,\n  end: number,\n  marginStart: number,\n  marginEnd: number,\n  view: [start: number | undefined, end: number | undefined],\n  containingBlock: [start: number, end: number]\n) {\n  let offset = 0\n  if (view[1] !== undefined && end > view[1]) {\n    offset = -Math.min(\n      end - view[1],\n      Math.max(0, start - marginStart - containingBlock[0])\n    )\n  }\n  if (view[0] !== undefined && start + offset < view[0]) {\n    offset = Math.max(\n      0,\n      Math.min(view[0] - start, containingBlock[1] - end - marginEnd)\n    )\n  }\n  return offset\n}\n\n/**\n * The offset of a sticky element. Without scrolling, it's moved into the\n * content box of its nearest scroll container, inset by its `top`, `right`,\n * `bottom` and `left`, and kept in its containing block.\n *\n * @see https://www.w3.org/TR/css-position-3/#stickypos-insets\n */\nexport function getStickyOffset(\n  box: {\n    left: number\n    top: number\n    width: number\n    height: number\n    margin: Edges\n  },\n  style: SerializedStyle,\n  parent: PositionedBox,\n  scrollport: PositionedBox\n): [dx: number, dy: number] {\n  // Like in browsers, the padding of the scroll container is excluded.\n  const port = innerBox(scrollport)\n  const containingBlock = innerBox(parent)\n  const portWidth = port.right - port.left\n  const portHeight = port.bottom - port.top\n  const top = resolveInset(style.top, portHeight)\n  const bottom = resolveInset(style.bottom, portHeight)\n  const left = resolveInset(style.left, portWidth)\n  const right = resolveInset(style.right, portWidth)\n  const dx = stickAxis(\n    box.left,\n    box.left + box.width,\n    box.margin.left,\n    box.margin.right,\n    [\n      left === undefined ? undefined : port.left + left,\n      right === undefined ? undefined : port.right - right,\n    ],\n    [containingBlock.left, containingBlock.right]\n  )\n  const dy = stickAxis(\n    box.top,\n    box.top + box.height,\n    box.margin.top,\n    box.margin.bottom,\n    [\n      top === undefined ? undefined : port.top + top,\n      bottom === undefined ? undefined : port.bottom - bottom,\n    ],\n    [containingBlock.top, containingBlock.bottom]\n  )\n  return [dx, dy]\n}\n","/**\n * What's entirely outside of the image isn't drawn, which makes the SVGs of\n * long content, e.g. pages rendered at the size of a viewport, much smaller.\n * Descendants of transformed elements are always drawn, as they can be drawn\n * elsewhere than their boxes, and descendants of filtered elements are checked\n * with how far the filters draw outside of them.\n */\n\nimport type { SerializedStyle } from './handler/expand.js'\nimport type { BackdropFilter, URLFilter } from './parser/backdrop-filter.js'\n\n/** The size of the image, known once the layout is. */\nexport interface PaintBounds {\n  width: number\n  height: number\n}\n\n/**\n * Whether a box, grown by `margin` on each side, is entirely outside of the\n * image. Anti-aliasing can draw next to the edges of shapes, so boxes that\n * touch the image are drawn.\n */\nexport function isOutside(\n  bounds: PaintBounds,\n  left: number,\n  top: number,\n  width: number,\n  height: number,\n  margin = 0\n): boolean {\n  const grow = margin + 1\n  return (\n    left + width + grow <= 0 ||\n    top + height + grow <= 0 ||\n    left - grow >= bounds.width ||\n    top - grow >= bounds.height\n  )\n}\n\ninterface BoxShadow {\n  offsetX?: number\n  offsetY?: number\n  blurRadius?: number\n  spreadRadius?: number\n  inset?: boolean\n}\n\n/**\n * How far outside of its box the box shadows of an element are drawn, at\n * most, which includes the region of the filters that draw them.\n */\nexport function getBoxShadowExtent(style: SerializedStyle): number {\n  const shadows = style.boxShadow as unknown as BoxShadow[] | undefined\n  let extent = 0\n  for (const shadow of shadows || []) {\n    if (shadow.inset) continue\n    const blur = shadow.blurRadius || 0\n    extent = Math.max(\n      extent,\n      Math.abs(shadow.offsetX || 0) +\n        Math.abs(shadow.offsetY || 0) +\n        Math.abs(shadow.spreadRadius || 0) +\n        blur * 3 +\n        (blur * blur) / 4\n    )\n  }\n  return extent\n}\n\n/**\n * How far filters draw outside of what they filter, at most. Filters are\n * applied one after the other, so their extents add up. Filters of colors\n * draw in place.\n */\nexport function getFilterExtent(\n  filters: (BackdropFilter | URLFilter)[] | undefined\n) {\n  let extent = 0\n  for (const filter of filters || []) {\n    // SVG filters can draw anywhere, e.g. with `<feOffset>`.\n    if (filter.type === 'url') return Infinity\n    if (filter.type === 'blur') {\n      extent += filter.value * 3\n    } else if (filter.type === 'drop-shadow') {\n      extent +=\n        filter.blurRadius * 3 +\n        Math.abs(filter.offsetX) +\n        Math.abs(filter.offsetY)\n    }\n  }\n  return extent\n}\n\n/** How far outside of its box the outline of an element is drawn. */\nexport function getOutlineExtent(style: SerializedStyle): number {\n  if (!style.outlineStyle || style.outlineStyle === 'none') return 0\n  const width = typeof style.outlineWidth === 'number' ? style.outlineWidth : 3\n  const offset =\n    typeof style.outlineOffset === 'number'\n      ? Math.max(style.outlineOffset, 0)\n      : 0\n  return width + offset\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-empty-interface */\n/**\n * @file\n * Minimal JSX runtime for Satori adapted from React v19.1.\n *\n * Use the `@jsxImportSource` pragma directive in files containing JSX for Satori.\n *\n * @see {@link https://github.com/facebook/react/blob/v19.1.0/packages/react/src/jsx/ReactJSXElement.js React JSX runtime implementation}\n * @see {@link https://www.typescriptlang.org/docs/handbook/jsx.html TypeScript: JSX reference}\n * @see {@link https://www.typescriptlang.org/tsconfig/#jsxImportSource TSConfig: using \"jsxImportSource\" or `@jsxImportSource` pragma directive}\n * @see {@link https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/react/index.d.ts React typings `@types/react`}\n * @see {@link https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/react/jsx-runtime.d.ts React typings for `jsx-runtime`}\n */\nimport type { JSXElement, JSXKey, FC } from './types.js'\nimport type { DefinedIntrinsicElements } from './intrinsic-elements.js'\n\nexport namespace JSX {\n  /**\n   * **WARNING**: Satori does not support class components.\n   * @see {@link https://github.com/vercel/satori?tab=readme-ov-file#jsx Satori JSX documentation}\n   */\n  export type ElementClass = never\n\n  export type ElementType = string | FC<any>\n\n  export type Element = JSXElement<any, any>\n\n  export interface ElementAttributesProperty {\n    props: {}\n  }\n\n  export interface ElementChildrenAttribute {\n    children: {}\n  }\n\n  // TODO: define IntrinsicElements supported by Satori.\n  export interface IntrinsicElements extends DefinedIntrinsicElements {}\n\n  export interface IntrinsicAttributes {\n    /** **INFO**: Allowed as prop, but will be ignored by Satori. */\n    key?: JSXKey | undefined | null\n  }\n}\n\nexport function jsx(\n  type: string | FC<any>,\n  props: Record<string, unknown>,\n  key?: JSXKey | undefined | null\n): JSXElement {\n  if ('key' in props) {\n    // Destructure spread key from props.\n    const { key: keyProp, ...restProps } = props\n    // Key param takes precedence over spread key prop.\n    key = arguments.length === 3 ? key : (keyProp as JSXKey)\n    // Shallow copy of props without key.\n    props = restProps\n  }\n  // Coerce key to string if not nullish.\n  key = key != null ? String(key) : null\n  return { type, props, key }\n}\n\nexport const jsxs = jsx\nexport const jsxDEV = jsx\n\n// HACK: Symbol used internally by React.\nexport const Fragment = Symbol.for('react.fragment')\n","import type { ReactElement, ReactNode, Fragment } from 'react'\nimport { Fragment as FragmentSymbol } from '../jsx/jsx-runtime.js'\nimport { resolveImageData, cache } from './image.js'\nimport { convertColors as convertColorValues } from '../parser/color.js'\nimport {\n  extractCustomProperties,\n  mergeVariables,\n  resolveVariables,\n  type CSSVariables,\n} from './variables.js'\nimport {\n  buildXMLString,\n  escapeXMLText,\n  isReactElement,\n  parseViewBox,\n  midline,\n} from '../utils.js'\n\n// Based on\n// https://raw.githubusercontent.com/facebook/react/master/packages/react-dom/src/shared/possibleStandardNames.js\nconst ATTRIBUTE_MAPPING = {\n  accentHeight: 'accent-height',\n  alignmentBaseline: 'alignment-baseline',\n  arabicForm: 'arabic-form',\n  baselineShift: 'baseline-shift',\n  capHeight: 'cap-height',\n  clipPath: 'clip-path',\n  clipRule: 'clip-rule',\n  colorInterpolation: 'color-interpolation',\n  colorInterpolationFilters: 'color-interpolation-filters',\n  colorProfile: 'color-profile',\n  colorRendering: 'color-rendering',\n  dominantBaseline: 'dominant-baseline',\n  enableBackground: 'enable-background',\n  fillOpacity: 'fill-opacity',\n  fillRule: 'fill-rule',\n  floodColor: 'flood-color',\n  floodOpacity: 'flood-opacity',\n  fontFamily: 'font-family',\n  fontSize: 'font-size',\n  fontSizeAdjust: 'font-size-adjust',\n  fontStretch: 'font-stretch',\n  fontStyle: 'font-style',\n  fontVariant: 'font-variant',\n  fontWeight: 'font-weight',\n  glyphName: 'glyph-name',\n  glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n  glyphOrientationVertical: 'glyph-orientation-vertical',\n  horizAdvX: 'horiz-adv-x',\n  horizOriginX: 'horiz-origin-x',\n  href: 'href',\n  imageRendering: 'image-rendering',\n  letterSpacing: 'letter-spacing',\n  lightingColor: 'lighting-color',\n  markerEnd: 'marker-end',\n  markerMid: 'marker-mid',\n  markerStart: 'marker-start',\n  overlinePosition: 'overline-position',\n  overlineThickness: 'overline-thickness',\n  paintOrder: 'paint-order',\n  panose1: 'panose-1',\n  pointerEvents: 'pointer-events',\n  renderingIntent: 'rendering-intent',\n  shapeRendering: 'shape-rendering',\n  stopColor: 'stop-color',\n  stopOpacity: 'stop-opacity',\n  strikethroughPosition: 'strikethrough-position',\n  strikethroughThickness: 'strikethrough-thickness',\n  strokeDasharray: 'stroke-dasharray',\n  strokeDashoffset: 'stroke-dashoffset',\n  strokeLinecap: 'stroke-linecap',\n  strokeLinejoin: 'stroke-linejoin',\n  strokeMiterlimit: 'stroke-miterlimit',\n  strokeOpacity: 'stroke-opacity',\n  strokeWidth: 'stroke-width',\n  textAnchor: 'text-anchor',\n  textDecoration: 'text-decoration',\n  textRendering: 'text-rendering',\n  underlinePosition: 'underline-position',\n  underlineThickness: 'underline-thickness',\n  unicodeBidi: 'unicode-bidi',\n  unicodeRange: 'unicode-range',\n  unitsPerEm: 'units-per-em',\n  vAlphabetic: 'v-alphabetic',\n  vHanging: 'v-hanging',\n  vIdeographic: 'v-ideographic',\n  vMathematical: 'v-mathematical',\n  vectorEffect: 'vector-effect',\n  vertAdvY: 'vert-adv-y',\n  vertOriginX: 'vert-origin-x',\n  vertOriginY: 'vert-origin-y',\n  wordSpacing: 'word-spacing',\n  writingMode: 'writing-mode',\n  xHeight: 'x-height',\n  xlinkActuate: 'xlink:actuate',\n  xlinkArcrole: 'xlink:arcrole',\n  xlinkHref: 'xlink:href',\n  xlinkRole: 'xlink:role',\n  xlinkShow: 'xlink:show',\n  xlinkTitle: 'xlink:title',\n  xlinkType: 'xlink:type',\n  xmlBase: 'xml:base',\n  xmlLang: 'xml:lang',\n  xmlSpace: 'xml:space',\n  xmlnsXlink: 'xmlns:xlink',\n} as const\n\n// The original characters make SVG suitable for a data URL. Ampersands are\n// additionally encoded so inner XML entities survive the enclosing SVG parse.\nconst EMBEDDED_SVG_DATA_URL_SYMBOLS = /[\\r\\n%#()<>?[\\\\\\]^`{|}\"'&]/g\n\n/**\n * Resolves `currentColor` in an attribute or style value, and converts colors\n * that SVG renderers may not support.\n */\nfunction resolveSVGColors(\n  value: unknown,\n  currentColor: string,\n  convertColors: boolean\n) {\n  if (typeof value !== 'string') return value\n  if (value.toLowerCase() === 'currentcolor') return currentColor\n  return convertColors ? convertColorValues(value, currentColor) : value\n}\n\n/**\n * After `z`, a command other than a move starts a subpath where the closed one\n * started, which resvg can't parse: it panics and ends the process. `m0 0`\n * moves to that point first, which doesn't change the path.\n */\nfunction normalizePathData(data: string) {\n  return data.replace(/[zZ](?=\\s*[a-ln-yA-LN-Y])/g, '$&m0 0')\n}\n\n/**\n * Resolves `var()` in an attribute or style value, like browsers do for\n * presentation attributes. A value that is invalid then is `undefined`, and\n * left out.\n */\nfunction resolveSVGVariables(value: unknown, variables: CSSVariables) {\n  if (typeof value !== 'string' || !value.includes('var(')) return value\n  const resolved = resolveVariables(value, variables)\n  return typeof resolved === 'string' && !resolved.trim() ? undefined : resolved\n}\n\n/** The variables of an element of an SVG, with the inherited ones. */\nfunction getSVGVariables(style: unknown, inherited: CSSVariables) {\n  if (!style || typeof style !== 'object') return inherited\n  const { variables } = extractCustomProperties(\n    style as Record<string, string | number>\n  )\n  return Object.keys(variables).length\n    ? mergeVariables(inherited, variables)\n    : inherited\n}\n\nfunction translateSVGNodeToSVGString(\n  node:\n    | ReactElement\n    | string\n    | typeof Fragment\n    | (ReactElement | string | typeof Fragment)[],\n  inheritedColor: string,\n  convertColors: boolean,\n  inheritedVariables: CSSVariables = {}\n): string {\n  if (!node) return ''\n  if (Array.isArray(node)) {\n    return node\n      .map((n) =>\n        translateSVGNodeToSVGString(\n          n,\n          inheritedColor,\n          convertColors,\n          inheritedVariables\n        )\n      )\n      .join('')\n  }\n  if (typeof node !== 'object') return escapeXMLText(node)\n\n  const type = node.type\n  if (type === 'text') {\n    throw new Error(\n      '<text> nodes are not currently supported, please convert them to <path>'\n    )\n  }\n\n  const { children, style, ...restProps } = node.props || {}\n  const variables = getSVGVariables(style, inheritedVariables)\n  const color = resolveSVGVariables(style?.color, variables)\n  const currentColor = color\n    ? String(resolveSVGColors(color, inheritedColor, convertColors))\n    : inheritedColor\n\n  if ((type as typeof node.type | typeof FragmentSymbol) === FragmentSymbol) {\n    return translateSVGNodeToSVGString(\n      children,\n      currentColor,\n      convertColors,\n      variables\n    )\n  }\n\n  if (typeof type !== 'string') {\n    throw new Error('Only intrinsic elements are supported inside <svg>')\n  }\n\n  const attrs: Record<string, unknown> = {}\n  for (const [k, value] of Object.entries(restProps)) {\n    const withVariables = resolveSVGVariables(value, variables)\n    if (withVariables === undefined) continue\n    let resolvedValue = resolveSVGColors(\n      withVariables,\n      currentColor,\n      convertColors\n    )\n\n    if ((k === 'href' || k === 'xlinkHref') && type === 'image') {\n      resolvedValue = cache.get(resolvedValue as string)[0]\n    }\n    if (k === 'd' && typeof resolvedValue === 'string') {\n      resolvedValue = normalizePathData(resolvedValue)\n    }\n\n    const name = ATTRIBUTE_MAPPING[k] || k\n    attrs[name] = resolvedValue\n  }\n\n  if (style) {\n    const declarations: string[] = []\n    for (const [k, value] of Object.entries(style)) {\n      // Custom properties are resolved above.\n      if (k.startsWith('--')) continue\n      const resolved =\n        k === 'color' ? currentColor : resolveSVGVariables(value, variables)\n      if (resolved === undefined) continue\n      declarations.push(\n        `${midline(k)}:${\n          k === 'color'\n            ? currentColor\n            : resolveSVGColors(resolved, currentColor, convertColors)\n        }`\n      )\n    }\n    if (declarations.length) attrs.style = declarations.join(';')\n  }\n\n  return buildXMLString(\n    type,\n    attrs,\n    translateSVGNodeToSVGString(\n      children,\n      currentColor,\n      convertColors,\n      variables\n    )\n  )\n}\n/**\n * Serializes an SVG `<filter>` of the document with an `id`, for the\n * elements that reference it with `filter: url(#id)`.\n */\nexport function serializeSVGFilter(\n  node: ReactElement,\n  id: string,\n  inheritedColor: string,\n  convertColors: boolean\n) {\n  return translateSVGNodeToSVGString(\n    { ...node, props: { ...node.props, id } } as ReactElement,\n    inheritedColor,\n    convertColors\n  )\n}\n\n/**\n * pre process node and resolve absolute link to img data for image element.\n * The SVG `<filter>` elements with an `id` are added to `filters`, the first\n * one for each `id`, like `getElementById()`.\n * @param node ReactNode\n * @returns\n */\nexport async function preProcessNode(\n  node: ReactNode,\n  filters?: Map<string, ReactElement>\n) {\n  const set = new Set<string | Buffer | ArrayBuffer>()\n  const walk = (_node: ReactNode) => {\n    if (!_node) return\n    if (!isReactElement(_node)) return\n\n    if (Array.isArray(_node)) {\n      _node.forEach((v) => walk(v))\n      return\n    } else if (typeof _node === 'object') {\n      if (_node.type === 'image') {\n        const imageSrc = _node.props.href || _node.props.xlinkHref\n        if (imageSrc) {\n          if (set.has(imageSrc)) {\n            // do nothing\n          } else {\n            set.add(imageSrc)\n          }\n        }\n      } else if (_node.type === 'img') {\n        if (set.has(_node.props.src)) {\n          // do nothing\n        } else {\n          set.add(_node.props.src)\n        }\n      } else if (\n        _node.type === 'filter' &&\n        filters &&\n        typeof _node.props?.id === 'string' &&\n        !filters.has(_node.props.id)\n      ) {\n        filters.set(_node.props.id, _node as ReactElement)\n      } else {\n        // do nothing\n      }\n    }\n\n    Array.isArray(_node.props.children)\n      ? _node.props.children.map((c) => walk(c))\n      : walk(_node.props.children)\n  }\n\n  walk(node)\n\n  return Promise.all(Array.from(set).map((s) => resolveImageData(s)))\n}\n\nexport async function SVGNodeToImage(\n  node: ReactElement,\n  inheritedColor: string,\n  convertColors = true,\n  inheritedVariables: CSSVariables = {}\n): Promise<string> {\n  let {\n    viewBox,\n    viewbox,\n    width,\n    height,\n    className,\n    style,\n    children,\n    // It transforms the element's box instead, see `layout()`.\n    transform: _transform,\n    ...restProps\n  } = node.props || {}\n\n  viewBox ||= viewbox\n\n  // We directly assign the xmlns attribute here to deduplicate.\n  restProps.xmlns = 'http://www.w3.org/2000/svg'\n\n  const variables = getSVGVariables(style, inheritedVariables)\n  const color = resolveSVGVariables(style?.color, variables)\n  const currentColor = color\n    ? String(resolveSVGColors(color, inheritedColor, convertColors))\n    : inheritedColor\n  const viewBoxSize = parseViewBox(viewBox)\n\n  // ratio = height / width\n  const ratio = viewBoxSize ? viewBoxSize[3] / viewBoxSize[2] : null\n  // A missing size follows from the other one and the ratio of the viewBox.\n  width = width || (ratio && height ? height / ratio : null)\n  height = height || (ratio && width ? width * ratio : null)\n\n  // Sizes that are still missing are left out.\n  restProps.width = width ?? undefined\n  restProps.height = height ?? undefined\n  if (viewBox) restProps.viewBox = viewBox\n\n  const attrs: Record<string, unknown> = {}\n  for (const [k, value] of Object.entries(restProps)) {\n    const resolved = resolveSVGVariables(value, variables)\n    if (resolved === undefined) continue\n    const name = ATTRIBUTE_MAPPING[k] || k\n    attrs[name] = resolveSVGColors(resolved, currentColor, convertColors)\n  }\n\n  const serializedSVG = buildXMLString(\n    'svg',\n    attrs,\n    translateSVGNodeToSVGString(\n      children,\n      currentColor,\n      convertColors,\n      variables\n    )\n  )\n\n  return `data:image/svg+xml;utf8,${serializedSVG.replace(\n    EMBEDDED_SVG_DATA_URL_SYMBOLS,\n    encodeURIComponent\n  )}`\n}\n","/**\n * Converts the `transform` attribute of an SVG element to a CSS `matrix()`,\n * or returns `undefined` if it's invalid. Unlike CSS, its functions take\n * unitless numbers, in degrees for angles, and `rotate()` takes an optional\n * center: https://www.w3.org/TR/css-transforms-1/#svg-syntax\n */\nexport function svgTransformToCSS(value: string): string | undefined {\n  const functionPattern = /\\s*([a-zA-Z]+)\\s*\\(([^)]*)\\)\\s*,?/y\n  let matrix = [1, 0, 0, 1, 0, 0]\n  let position = 0\n  let match: RegExpExecArray | null\n  while ((match = functionPattern.exec(value))) {\n    const args = match[2]\n      .trim()\n      .split(/[\\s,]+/)\n      .filter(Boolean)\n      .map(Number)\n    const fn = args.some(isNaN) ? undefined : getMatrix(match[1], args)\n    if (!fn) return\n    matrix = multiply(matrix, fn)\n    position = functionPattern.lastIndex\n  }\n  if (!position || value.slice(position).trim()) return\n  return `matrix(${matrix.map((n) => +n.toFixed(6)).join(',')})`\n}\n\ntype Matrix = number[]\n\nfunction getMatrix(name: string, args: number[]): Matrix | undefined {\n  const rad = (args[0] * Math.PI) / 180\n  switch (name) {\n    case 'matrix':\n      return args.length === 6 ? args : undefined\n    case 'translate':\n      return args.length === 1 || args.length === 2\n        ? [1, 0, 0, 1, args[0], args[1] ?? 0]\n        : undefined\n    case 'scale':\n      return args.length === 1 || args.length === 2\n        ? [args[0], 0, 0, args[1] ?? args[0], 0, 0]\n        : undefined\n    case 'rotate': {\n      if (args.length !== 1 && args.length !== 3) return\n      const [cos, sin] = [Math.cos(rad), Math.sin(rad)]\n      const [cx, cy] = [args[1] ?? 0, args[2] ?? 0]\n      return [\n        cos,\n        sin,\n        -sin,\n        cos,\n        cx - cos * cx + sin * cy,\n        cy - sin * cx - cos * cy,\n      ]\n    }\n    case 'skewX':\n      return args.length === 1 ? [1, 0, Math.tan(rad), 1, 0, 0] : undefined\n    case 'skewY':\n      return args.length === 1 ? [1, Math.tan(rad), 0, 1, 0, 0] : undefined\n  }\n}\n\nfunction multiply(\n  [a1, b1, c1, d1, e1, f1]: Matrix,\n  [a2, b2, c2, d2, e2, f2]: Matrix\n) {\n  return [\n    a1 * a2 + c1 * b2,\n    b1 * a2 + d1 * b2,\n    a1 * c2 + c1 * d2,\n    b1 * c2 + d1 * d2,\n    a1 * e2 + c1 * f2 + e1,\n    b1 * e2 + d1 * f2 + f1,\n  ]\n}\n","/**\n * This module calculates the layout of a text string. Currently the only\n * supported inline node is text. All other nodes are using block layout.\n */\nimport type { LayoutContext } from '../layout.js'\nimport {\n  v,\n  segment,\n  splitImages,\n  wordSeparators,\n  buildXMLString,\n  isUndefined,\n  lengthToNumber,\n  roundUpToLayout,\n} from '../utils.js'\nimport { LayoutNode } from '../layout-engine/index.js'\nimport buildText, {\n  buildGlyphPaths,\n  container,\n  getTextFillColor,\n  getTextStrokeAttributes,\n} from '../builder/text.js'\nimport { buildDropShadow } from '../builder/shadow.js'\nimport buildDecoration, {\n  getDecorationLines,\n  getDecorationThickness,\n  getUnderlineY,\n} from '../builder/text-decoration.js'\nimport { getSyntheticBoldWidth, type GlyphBox } from '../font.js'\nimport { Locale } from '../language.js'\nimport { HorizontalEllipsis, Space, Tab } from './characters.js'\nimport { genMeasurer } from './measurer.js'\nimport {\n  getTabAdvance,\n  getTabWidth,\n  preprocess,\n  resolveTextAlign,\n} from './processor.js'\nimport { getFontFeatureSettings } from './font-features.js'\nimport {\n  getBidiClass,\n  hasRTL,\n  reorderLine,\n  resolveLevels,\n  splitByDirection,\n} from './bidi.js'\nimport cssColorParse from 'parse-css-color'\nimport { isOutside } from '../culling.js'\n\nconst skippedWordWhenFindingMissingFont = new Set([Tab])\n\nfunction shouldSkipWhenFindingMissingFont(word: string): boolean {\n  return skippedWordWhenFindingMissingFont.has(word)\n}\n\nfunction isFullyTransparent(color: string): boolean {\n  if (color === 'transparent') return true\n  const parsed = cssColorParse(color)\n  return parsed ? parsed.alpha === 0 : false\n}\n\nfunction isOpaqueWhite(color: string): boolean {\n  if (!color) return false\n  const parsed = cssColorParse(color)\n  if (!parsed) return false\n  const [r, g, b, a] = parsed.values\n  return r === 255 && g === 255 && b === 255 && (a === undefined || a === 1)\n}\n\nexport default async function* buildTextNodes(\n  content: string,\n  context: LayoutContext\n): AsyncGenerator<{ word: string; locale?: Locale }[], string, [any, any]> {\n  const {\n    parentStyle,\n    inheritedStyle,\n    parent,\n    font,\n    id,\n    isInheritingTransform,\n    debug,\n    embedFont,\n    graphemeImages,\n    locale,\n    canLoadAdditionalAssets,\n    pointScaleFactor,\n    paintBounds,\n  } = context\n\n  const {\n    textAlign,\n    textIndent = 0,\n    lineHeight,\n    textWrap,\n    fontSize,\n    filter: cssFilter,\n    letterSpacing,\n    wordSpacing,\n    _inheritedBackgroundClipTextPath,\n    _inheritedBackgroundClipTextHasBackground,\n  } = parentStyle\n  const fontFeatureSettings = getFontFeatureSettings(parentStyle)\n\n  const {\n    words: segmentedWords,\n    requiredBreaks: segmentedRequiredBreaks,\n    allowSoftWrap,\n    allowBreakWord,\n    allowBreakWordInMinContent,\n    processedContent,\n    shouldCollapseTabsAndSpaces,\n    lineLimit,\n    blockEllipsis,\n  } = preprocess(content, parentStyle, locale)\n\n  v(\n    textAlign,\n    {\n      left: true,\n      right: true,\n      center: true,\n      justify: true,\n      // We don't have other writing modes yet.\n      start: true,\n      end: true,\n    },\n    true,\n    'textAlign'\n  )\n\n  // Lines start at the right with `rtl`. Their pieces are reordered with the\n  // bidi algorithm with `rtl`, or when they have right-to-left text, see\n  // `reorderLines()`.\n  const isRTL = parentStyle.direction === 'rtl'\n  const align = resolveTextAlign(textAlign, parentStyle.direction)\n  const needsBidi = isRTL || hasRTL(processedContent)\n\n  // The indent of the first line, at its start. Percentages are of the width\n  // the text is laid out in, and of 0 for its max-content size.\n  const getIndent = (width: number) => {\n    const indent =\n      typeof textIndent === 'string'\n        ? lengthToNumber(textIndent, fontSize, width, parentStyle, true)\n        : textIndent\n    return Number.isFinite(indent) ? (indent as number) : 0\n  }\n\n  // Like the anonymous flex item around text in CSS, or the paragraph of a\n  // block container.\n  const textContainer = context.textNode ?? new LayoutNode({ flexShrink: 1 })\n  if (!context.textNode) parent.insertChild(textContainer)\n\n  // Get the correct font according to the container style.\n  // https://www.w3.org/TR/CSS2/visudet.html\n  let engine = font.getEngine(fontSize, lineHeight, parentStyle, locale)\n\n  // Yield segments that are missing a font.\n  const wordsMissingFont = canLoadAdditionalAssets\n    ? segment(processedContent, 'grapheme').filter(\n        (word) => !shouldSkipWhenFindingMissingFont(word) && !engine.has(word)\n      )\n    : []\n\n  yield wordsMissingFont.map((word) => {\n    return {\n      word,\n      locale,\n    }\n  })\n\n  if (wordsMissingFont.length) {\n    // Reload the engine with additional fonts.\n    engine = font.getEngine(fontSize, lineHeight, parentStyle, locale)\n  }\n\n  function isImage(s: string): boolean {\n    return !!(\n      graphemeImages &&\n      Object.prototype.hasOwnProperty.call(graphemeImages, s) &&\n      graphemeImages[s]\n    )\n  }\n  const hasImages = !!graphemeImages && Object.keys(graphemeImages).length > 0\n\n  const { measureGrapheme, measureGraphemeArray, measureText } = genMeasurer(\n    engine,\n    isImage,\n    {\n      fontSize,\n      letterSpacing,\n      wordSpacing: wordSpacing as number,\n      fontFeatureSettings,\n    }\n  )\n\n  const tabWidth = getTabWidth(parentStyle, measureGrapheme(Space))\n\n  const tabAdvance = (x: number, count: number) =>\n    getTabAdvance(x, count, tabWidth, measureGrapheme(Space))\n\n  const calc = (\n    text: string,\n    currentWidth: number\n  ): {\n    originWidth: number\n    endingSpacesWidth: number\n    text: string\n  } => {\n    if (text.length === 0) {\n      return {\n        originWidth: 0,\n        endingSpacesWidth: 0,\n        text,\n      }\n    }\n\n    let originWidth = 0\n\n    if (text.includes(Tab)) {\n      // Tabs move to the next tab stop, from the start of the line.\n      let x = currentWidth\n      for (const part of text.split(/(\\t+)/)) {\n        if (part) {\n          x += part[0] === Tab ? tabAdvance(x, part.length) : measureText(part)\n        }\n      }\n      originWidth = x - currentWidth\n    } else {\n      originWidth = measureText(text)\n    }\n\n    const afterTrimEndWidth =\n      text.trimEnd() === text ? originWidth : measureText(text.trimEnd())\n\n    return {\n      originWidth,\n      endingSpacesWidth: originWidth - afterTrimEndWidth,\n      text,\n    }\n  }\n\n  // Global variables used to compute the text layout.\n  // @TODO: Use segments instead of words to properly support kerning.\n  let lineWidths = []\n  let baselines = []\n  let lastBaseline: number | undefined\n  let lineSegmentNumber = []\n  let texts: string[] = []\n  let wordPositionInLayout: (null | {\n    x: number\n    y: number\n    width: number\n    line: number\n    lineIndex: number\n    isImage: boolean\n    /** With bidi, how far `justify` moves the piece. */\n    justifyShift?: number\n  })[] = []\n\n  // Whether the min-content size is measured, see `canBreakWords()`.\n  let measuringMinContent = false\n\n  // With the given container width, compute the text layout.\n  function flow(width: number) {\n    let lines = 0\n    let maxWidth = 0\n    let lineIndex = -1\n    let height = 0\n    let currentWidth = 0\n    let currentLineHeight = 0\n    let currentBaselineOffset = 0\n\n    lineWidths = []\n    baselines = []\n    lineSegmentNumber = [0]\n    texts = []\n    wordPositionInLayout = []\n\n    // The text is laid out with several widths, and words may be broken for\n    // one of them, so keep the original words.\n    const words = segmentedWords.slice()\n    const requiredBreaks = segmentedRequiredBreaks.slice()\n\n    // The first line is shorter by the indent. Tab stops are from the start\n    // of the container, before the indent.\n    const indent = getIndent(width)\n    const lineIndent = () => (lines === 0 ? indent : 0)\n\n    // We naively implement the width calculation without proper kerning.\n    // @TODO: Support different writing modes.\n    let i = 0\n    let prevLineEndingSpacesWidth = 0\n    while (i < words.length && lines < lineLimit) {\n      let word = words[i]\n      const forceBreak = requiredBreaks[i]\n\n      let w = 0\n\n      const {\n        originWidth,\n        endingSpacesWidth,\n        text: _word,\n      } = calc(word, currentWidth + lineIndent())\n      word = _word\n\n      w = originWidth\n      const lineEndingSpacesWidth = endingSpacesWidth\n\n      // When starting a new line from an empty line, we should push one extra\n      // line height.\n      if (forceBreak && currentLineHeight === 0) {\n        currentLineHeight = engine.height(word)\n      }\n\n      const allowedToJustify = textAlign === 'justify'\n\n      const willWrap =\n        i &&\n        // When determining whether a line break is necessary, the width of the\n        // trailing spaces is not included in the calculation, as the end boundary\n        // can be closely adjacent to the last non-space character.\n        // e.g.\n        // 'aaa bbb ccc'\n        // When the break line happens at the end of the `bbb`, what we see looks like this\n        // |aaa bbb|\n        // |ccc    |\n        currentWidth + w > width - lineIndent() + lineEndingSpacesWidth &&\n        allowSoftWrap\n\n      // Need to break the word if:\n      // - we have break-word\n      // - the word is wider than the container width\n      // - the word will be put at the beginning of the line\n      // A single grapheme can't be broken, even if it's wider than the\n      // container, e.g. when measuring the min-content width.\n      const needToBreakWord =\n        (measuringMinContent ? allowBreakWordInMinContent : allowBreakWord) &&\n        w > width - lineIndent() &&\n        (!currentWidth || willWrap || forceBreak)\n      const chars = needToBreakWord ? segment(word, 'grapheme') : undefined\n\n      if (chars && chars.length > 1) {\n        // Break the word into multiple segments and continue the loop.\n        words.splice(i, 1, ...chars)\n        requiredBreaks.splice(\n          i,\n          1,\n          forceBreak,\n          ...chars.slice(1).map(() => false)\n        )\n        if (currentWidth > 0) {\n          // Start a new line, spaces can be ignored.\n          lineWidths.push(currentWidth - prevLineEndingSpacesWidth)\n          baselines.push(currentBaselineOffset)\n          lines++\n          height += currentLineHeight\n          currentWidth = 0\n          currentLineHeight = 0\n          currentBaselineOffset = 0\n          lineSegmentNumber.push(1)\n          lineIndex = -1\n        }\n        prevLineEndingSpacesWidth = lineEndingSpacesWidth\n        continue\n      }\n      if (forceBreak || willWrap) {\n        // Start a new line, spaces can be ignored.\n        if (shouldCollapseTabsAndSpaces && word === Space) {\n          w = 0\n        } else if (word.includes(Tab)) {\n          w = calc(word, 0).originWidth\n        }\n\n        lineWidths.push(currentWidth - prevLineEndingSpacesWidth)\n        baselines.push(currentBaselineOffset)\n        lines++\n        height += currentLineHeight\n        currentWidth = w\n        currentLineHeight = w ? Math.round(engine.height(word)) : 0\n        currentBaselineOffset = w ? Math.round(engine.baseline(word)) : 0\n        lineSegmentNumber.push(1)\n        lineIndex = -1\n\n        // If it's naturally broken, we update the max width.\n        // Since if there are multiple lines, the width should fit the\n        // container.\n        if (!forceBreak) {\n          maxWidth = Math.max(maxWidth, width)\n        }\n      } else {\n        // It fits into the current line.\n        currentWidth += w\n        const glyphHeight = Math.round(engine.height(word))\n        if (glyphHeight > currentLineHeight) {\n          // Use the baseline of the highest segment as the baseline of the line.\n          currentLineHeight = glyphHeight\n          currentBaselineOffset = Math.round(engine.baseline(word))\n        }\n        if (allowedToJustify) {\n          lineSegmentNumber[lineSegmentNumber.length - 1]++\n        }\n      }\n\n      if (allowedToJustify) {\n        lineIndex++\n      }\n\n      maxWidth = Math.max(maxWidth, currentWidth + lineIndent())\n\n      let x = currentWidth - w\n\n      if (w === 0) {\n        wordPositionInLayout.push({\n          y: height,\n          x,\n          width: 0,\n          line: lines,\n          lineIndex,\n          isImage: false,\n        })\n      } else {\n        let _texts = segment(word, 'word')\n        // Images in words, e.g. consecutive keycaps, are drawn apart.\n        if (hasImages) _texts = _texts.flatMap((s) => splitImages(s, isImage))\n        // Parts of words in different directions are reordered separately.\n        if (needsBidi) _texts = _texts.flatMap(splitByDirection)\n\n        for (let j = 0; j < _texts.length; j++) {\n          const _text = _texts[j]\n          let _width = 0\n          let _isImage = false\n\n          if (isImage(_text)) {\n            _width = fontSize\n            _isImage = true\n          } else if (_text[0] === Tab) {\n            _width = tabAdvance(x + lineIndent(), _text.length)\n          } else if (!embedFont && _text.length > 1) {\n            // When embedFont is false, use measureText for multi-character strings\n            // to ensure consistency with how currentWidth is accumulated (sum of\n            // grapheme widths). measureGrapheme uses getAdvanceWidth which includes\n            // kerning, causing position mismatches between consecutive <text> elements.\n            _width = measureText(_text)\n          } else {\n            _width = measureGrapheme(_text)\n          }\n\n          texts.push(_text)\n          wordPositionInLayout.push({\n            y: height,\n            x,\n            width: _width,\n            line: lines,\n            lineIndex,\n            isImage: _isImage,\n          })\n\n          // Widths include the letter spacing after each character, so they\n          // add up to the width of the word.\n          x += _width\n        }\n      }\n\n      i++\n      prevLineEndingSpacesWidth = lineEndingSpacesWidth\n    }\n\n    if (currentWidth) {\n      if (lines < lineLimit) {\n        height += currentLineHeight\n      }\n      lines++\n      lineWidths.push(currentWidth)\n      baselines.push(currentBaselineOffset)\n      lastBaseline = height - currentLineHeight + currentBaselineOffset\n    } else {\n      lastBaseline = lines ? height : undefined\n    }\n\n    // @TODO: Support `line-height`.\n    return { width: maxWidth, height }\n  }\n\n  // It's possible that the text's measured size is different from the container's\n  // size, because the container might have a fixed width or height or being\n  // expanded by its parent.\n  let measuredTextSize = { width: 0, height: 0 }\n  const layoutText = (containerWidth: number) => {\n    const { width, height } = flow(containerWidth)\n\n    // When doing `text-wrap: balance`, we reflow the text multiple times\n    // using binary search to find the best width.\n    // https://www.w3.org/TR/css-text-4/#valdef-text-wrap-balance\n    if (textWrap === 'balance') {\n      let l = width / 2\n      let r = width\n      let m: number = width\n      while (l + 1 < r) {\n        m = (l + r) / 2\n        const { height: mHeight } = flow(m)\n        if (mHeight > height) {\n          l = m\n        } else {\n          r = m\n        }\n      }\n      // The lines are balanced, but like in browsers, the size of the text\n      // doesn't change.\n      flow(r)\n      const _width = roundUpToLayout(width, pointScaleFactor)\n      measuredTextSize = { width: _width, height }\n      return { width: _width, height }\n    }\n\n    // When doing `text-wrap: pretty`, we try to avoid ending a paragraph with a single word\n    // by reshaping all lines in a way that achieves more balanced line lengths\n    // This \"pretty\" line breaking algorithm tries to achieve optimal line breaks\n    // that avoid orphans (single words at the end of a paragraph) and create\n    // visually pleasing line lengths.\n    if (textWrap === 'pretty') {\n      // Check if the last line has a single word or is very short\n      // (typically less than 1/3 of the container width)\n      const lastLineWidth = lineWidths[lineWidths.length - 1]\n      const isLastLineShort = lastLineWidth < width / 3\n\n      if (isLastLineShort) {\n        // Reflow the paragraph with slightly adjusted line breaks\n        // to avoid orphans and create more even line lengths\n        // This is a simplified approach - a real implementation would use a\n        // more sophisticated algorithm to find optimal line breaks\n\n        // We'll just reflow once with slightly reduced width to force\n        // redistribution of words. This is much simplified from the actual\n        // paragraph-level line breaking algorithm which would compute scores\n        // for different line break combinations.\n        const adjustedWidth = width * 0.9\n        const result = flow(adjustedWidth)\n\n        // Use the result if it reduces orphans without adding too many lines\n        if (result.height <= height * 1.3) {\n          measuredTextSize = { width, height: result.height }\n          return { width, height: result.height }\n        }\n      }\n    }\n\n    const _width = roundUpToLayout(width, pointScaleFactor)\n    measuredTextSize = { width: _width, height }\n    return { width: _width, height }\n  }\n\n  // The layout engine measures the text several times, often with the same\n  // width. The size only depends on the width, so cache it. `flowedWidth` is\n  // the width that the line state, e.g. `lineWidths`, was computed for.\n  const measureCache = new Map<\n    number,\n    {\n      width: number\n      height: number\n      firstBaseline?: number\n      lastBaseline?: number\n    }\n  >()\n  let flowedWidth: number | undefined\n  const measure = (\n    containerWidth: number,\n    _height?: number,\n    _exclusions?: unknown,\n    minContent = false\n  ) => {\n    // The min-content size may break fewer words than a width of 0.\n    const key = minContent ? -1 : containerWidth\n    let cached = measureCache.get(key)\n    if (!cached) {\n      measuringMinContent = minContent\n      cached = { ...layoutText(containerWidth), lastBaseline }\n      // The first line starts at the top. Without baselines, the layout would\n      // align the text by its bottom, e.g. with `alignItems: baseline`.\n      if (baselines.length) cached.firstBaseline = baselines[0]\n      measuringMinContent = false\n      flowedWidth = minContent ? undefined : containerWidth\n      measureCache.set(key, cached)\n    }\n    return cached\n  }\n  textContainer.measure = measure\n  textContainer.lastBaseline = (width) => {\n    measure(width)\n    return measureCache.get(width).lastBaseline\n  }\n\n  const [x, y] = yield\n\n  let result = ''\n  let backgroundClipDef = ''\n\n  const clipPathId = inheritedStyle._inheritedClipPathId as string | undefined\n  const overflowMaskId = inheritedStyle._inheritedMaskId as number | undefined\n  const fillColor = getTextFillColor(parentStyle)\n\n  const {\n    left: containerLeft,\n    top: containerTop,\n    width: containerWidth,\n    height: containerHeight,\n  } = textContainer.layout\n\n  // The layout engine may have measured the text with other widths last, so\n  // lay it out again with the final width.\n  if (flowedWidth !== containerWidth) layoutText(containerWidth)\n\n  const textIndentNumber = getIndent(containerWidth)\n  const parentContainerInnerWidth = parent.contentWidth\n\n  // The pieces of each line are positioned by their bidi levels, which are\n  // also the directions they're shaped in. Lines are from the right with\n  // `rtl`. Without right-to-left text, they're in logical order.\n  const baseLevel = isRTL ? 1 : 0\n  const levels = needsBidi ? reorderLines() : undefined\n  function reorderLines() {\n    const pieceLevels = resolveLevels(\n      wordPositionInLayout.map((_, i) => getBidiClass(texts[i] ?? '')),\n      baseLevel\n    )\n    for (let start = 0; start < wordPositionInLayout.length; ) {\n      const line = wordPositionInLayout[start]?.line\n      let end = start + 1\n      while (\n        end < wordPositionInLayout.length &&\n        wordPositionInLayout[end]?.line === line\n      ) {\n        end++\n      }\n      const pieces = wordPositionInLayout.slice(start, end)\n      if (line === undefined || pieces.some((piece) => !piece)) {\n        start = end\n        continue\n      }\n\n      // L1: spaces at the end of a line have the base level.\n      for (let i = end - 1; i >= start && !texts[i]?.trim(); i--) {\n        pieceLevels[i] = baseLevel\n      }\n      const lefts = reorderLine(\n        pieces,\n        pieceLevels.slice(start, end),\n        lineWidths[line] ?? 0\n      )\n      pieces.forEach((piece, index) => {\n        piece.x = lefts[index]\n      })\n\n      // Justified lines are widened between pieces of different words, from\n      // the left.\n      if (align === 'justify' && line < lineWidths.length - 1) {\n        const order = pieces\n          .map((_, index) => index)\n          .sort((a, b) => pieces[a].x - pieces[b].x)\n        const isGap = (k: number) =>\n          k > 0 && pieces[order[k]].lineIndex !== pieces[order[k - 1]].lineIndex\n        const gaps = order.filter((_, k) => isGap(k)).length\n        const remainingWidth =\n          containerWidth -\n          lineWidths[line] -\n          (line === 0 ? textIndentNumber : 0)\n        const gutter = gaps ? remainingWidth / gaps : 0\n        let count = 0\n        order.forEach((index, k) => {\n          if (isGap(k)) count++\n          pieces[index].justifyShift = gutter * count\n        })\n      }\n      start = end\n    }\n    return pieceLevels\n  }\n\n  type PlacedPiece = NonNullable<typeof wordPositionInLayout[number]>\n\n  // Where a piece is drawn in the container, after its line is indented and\n  // aligned, and the left of its line. The first line is aligned beside its\n  // indent.\n  function placePiece(layout: PlacedPiece) {\n    const { line } = layout\n    const indent = line === 0 ? textIndentNumber : 0\n    const remainingWidth = containerWidth - lineWidths[line] - indent\n    const isJustified = align === 'justify' && line < lineWidths.length - 1\n\n    if (isRTL) {\n      // Lines are aligned even when the container is as wide as their text,\n      // so they're at the right of a wider container. The indent is on the\n      // right. The last line of justified text is aligned to the start.\n      let lineLeft = 0\n      if (align === 'right' || (align === 'justify' && !isJustified)) {\n        lineLeft = remainingWidth\n      } else if (align === 'center') {\n        lineLeft = remainingWidth / 2\n      }\n      let leftOffset = layout.x + lineLeft\n      if (isJustified) leftOffset += layout.justifyShift ?? 0\n      if (embedFont) {\n        leftOffset = Math.round(leftOffset)\n        lineLeft = Math.round(lineLeft)\n      }\n      return { leftOffset, lineLeft, extendedWidth: isJustified }\n    }\n\n    let leftOffset = layout.x\n    let lineLeft = indent\n    let extendedWidth = false\n    if (indent) leftOffset += indent\n    if (\n      lineWidths.length > 1 ||\n      (context.blockParagraph && (align === 'right' || align === 'center'))\n    ) {\n      // A flex item around text is as wide as a single line, but a paragraph\n      // of a block container fills its width.\n      if (align === 'right') {\n        leftOffset += remainingWidth\n        lineLeft += remainingWidth\n      } else if (align === 'center') {\n        leftOffset += remainingWidth / 2\n        lineLeft += remainingWidth / 2\n      } else if (isJustified) {\n        if (layout.justifyShift !== undefined) {\n          leftOffset += layout.justifyShift\n        } else {\n          const segments = lineSegmentNumber[line]\n          const gutter = segments > 1 ? remainingWidth / (segments - 1) : 0\n          leftOffset += gutter * layout.lineIndex\n        }\n        extendedWidth = true\n      }\n\n      // Only round for embedded fonts (paths benefit from pixel alignment).\n      // For non-embedded fonts (<text> elements), keep fractional positions\n      // to maintain consistent spacing between consecutive elements.\n      if (embedFont) {\n        leftOffset = Math.round(leftOffset)\n        lineLeft = Math.round(lineLeft)\n      }\n    }\n    return { leftOffset, lineLeft, extendedWidth }\n  }\n\n  // With bidi, the line that ends in an ellipsis is cut in visual order: the\n  // pieces past its end edge, on the right or on the left with `rtl`, are\n  // hidden, and the ellipsis is drawn after the others.\n  // https://drafts.csswg.org/css-overflow/#text-overflow\n  const ellipsisPlan =\n    levels && lineLimit !== Infinity ? planEllipsis(lineLimit - 1) : null\n  function planEllipsis(line: number) {\n    if (\n      line >= lineWidths.length ||\n      (line === lineWidths.length - 1 &&\n        lineWidths[line] <= parentContainerInnerWidth)\n    ) {\n      return null\n    }\n    let text = blockEllipsis\n    let width = measureGrapheme(text)\n    if (width > parentContainerInnerWidth) {\n      text = HorizontalEllipsis\n      width = measureGrapheme(text)\n    }\n\n    // Distances from the start edge of the container.\n    const limit = parentContainerInnerWidth - width\n    const pieces: { index: number; left: number; width: number }[] = []\n    wordPositionInLayout.forEach((layout, index) => {\n      if (layout?.line !== line) return\n      const { leftOffset } = placePiece(layout)\n      pieces.push({ index, left: leftOffset, width: layout.width })\n    })\n    const near = (piece: typeof pieces[number]) =>\n      isRTL ? containerWidth - piece.left - piece.width : piece.left\n    pieces.sort((a, b) => near(a) - near(b))\n\n    const hidden = new Set<number>()\n    let truncated: { index: number; text: string; left: number } | undefined\n    // The edge of the text that's kept, without spaces, on the side of the\n    // end edge.\n    let end: number | undefined\n    for (const piece of pieces) {\n      const pieceText = texts[piece.index] ?? ''\n      if (hidden.size || truncated) {\n        hidden.add(piece.index)\n      } else if (near(piece) + piece.width <= limit) {\n        if (pieceText.trim()) {\n          end = isRTL ? piece.left : piece.left + piece.width\n        }\n      } else {\n        // The graphemes of the piece on the side of the start edge are kept,\n        // which is its start if it's in the direction of the line. Like in\n        // browsers, the first one of the line is always kept.\n        const keepsStart = (levels[piece.index] % 2 === 1) === isRTL\n        const graphemes = segment(pieceText.trim(), 'grapheme', locale)\n        if (!keepsStart) graphemes.reverse()\n        let kept = ''\n        let keptWidth = 0\n        for (const grapheme of graphemes) {\n          const next = keepsStart ? kept + grapheme : grapheme + kept\n          const nextWidth = measureGraphemeArray([next])\n          if ((kept || end !== undefined) && near(piece) + nextWidth > limit) {\n            break\n          }\n          kept = next\n          keptWidth = nextWidth\n        }\n        if (kept) {\n          let keptLeft = isRTL\n            ? piece.left + piece.width - keptWidth\n            : piece.left\n          if (embedFont) keptLeft = Math.round(keptLeft)\n          truncated = { index: piece.index, text: kept, left: keptLeft }\n          end = isRTL ? keptLeft : keptLeft + keptWidth\n        } else {\n          hidden.add(piece.index)\n        }\n      }\n    }\n    end ??= isRTL ? containerWidth : 0\n    return {\n      line,\n      hidden,\n      truncated,\n      text,\n      width,\n      end,\n      left: isRTL ? end - width : end,\n    }\n  }\n\n  // Attach offset to the current node.\n  const left = x + containerLeft\n  const top = y + containerTop\n\n  const { matrix } = container(\n    {\n      left: containerLeft,\n      top: containerTop,\n      width: containerWidth,\n      height: containerHeight,\n      isInheritingTransform,\n    },\n    parentStyle\n  )\n\n  let filter = ''\n  if (parentStyle.textShadowOffset) {\n    const { textShadowColor, textShadowOffset, textShadowRadius } = parentStyle\n\n    filter = buildDropShadow(\n      {\n        width: measuredTextSize.width,\n        height: measuredTextSize.height,\n        id,\n      },\n      {\n        shadowColor: textShadowColor,\n        shadowOffset: textShadowOffset,\n        shadowRadius: textShadowRadius,\n      },\n      isFullyTransparent(fillColor) ||\n        (_inheritedBackgroundClipTextHasBackground && isOpaqueWhite(fillColor))\n    )\n\n    filter = buildXMLString('defs', {}, filter)\n  }\n\n  let decorationShape = ''\n  let mergedPath = ''\n  // The paths of synthetic bold glyphs, which are emboldened.\n  let mergedBoldPath = ''\n  let extra = ''\n  let skippedLine = -1\n  type DecorationLine = {\n    left: number\n    top: number\n    ascender: number\n    width: number\n  }\n  let decorationLines: Record<number, DecorationLine | null> = {}\n  let decorationGlyphs: Record<number, GlyphBox[]> = {}\n  let wordBuffer: string | null = null\n  let bufferedOffset = 0\n  let bufferedRight = 0\n\n  // Lines entirely above or below the image aren't drawn. The margin includes\n  // the baseline of the line, glyphs drawn outside of their lines,\n  // decorations and strokes. Lines are checked as a whole, as words are only\n  // drawn together on the same line.\n  const lineBounds =\n    inheritedStyle._alwaysDrawn || parentStyle.textShadowOffset\n      ? undefined\n      : paintBounds\n  const lineMargin =\n    2 * fontSize +\n    ((parentStyle.WebkitTextStrokeWidth as number) || 0) +\n    ((inheritedStyle._cullMargin as number) || 0)\n\n  for (let i = 0; i < texts.length; i++) {\n    // Skip whitespace and empty characters.\n    const layout = wordPositionInLayout[i]\n    const nextLayout = wordPositionInLayout[i + 1]\n\n    if (!layout) continue\n\n    let text = texts[i]\n    let path: string | null = null\n    let isLastDisplayedBeforeEllipsis = false\n\n    const image =\n      graphemeImages &&\n      Object.prototype.hasOwnProperty.call(graphemeImages, text)\n        ? graphemeImages[text]\n        : null\n\n    let topOffset = layout.y\n    const width = layout.width\n    const line = layout.line\n    const shouldCollectDecorationBoxes =\n      getDecorationLines(parentStyle).includes('underline') &&\n      (parentStyle.textDecorationSkipInk || 'auto') !== 'none'\n\n    if (line === skippedLine) {\n      continue\n    }\n    if (\n      ellipsisPlan &&\n      (line > ellipsisPlan.line || ellipsisPlan.hidden.has(i))\n    ) {\n      continue\n    }\n    if (\n      lineBounds &&\n      isOutside(\n        lineBounds,\n        0,\n        top + layout.y,\n        lineBounds.width,\n        0,\n        lineMargin + Math.abs(baselines[line] || 0)\n      )\n    ) {\n      continue\n    }\n\n    // With `justify`, the line is as wide as the container beside the indent.\n    const placed = placePiece(layout)\n    let leftOffset = placed.leftOffset\n    const { extendedWidth, lineLeft } = placed\n\n    const baselineOfLine = baselines[line]\n    const baselineOfWord = engine.baseline(text)\n    const heightOfWord = engine.height(text)\n    const baselineDelta = baselineOfLine - baselineOfWord\n\n    const buildUnderlineBand = (offset: number) => {\n      if (!shouldCollectDecorationBoxes) return undefined\n      const strokeWidth = getDecorationThickness(parentStyle)\n      return {\n        underlineY:\n          top +\n          offset +\n          baselineDelta +\n          getUnderlineY(parentStyle, baselineOfWord, strokeWidth),\n        strokeWidth,\n      }\n    }\n\n    if (!decorationLines[line]) {\n      decorationLines[line] = {\n        // With bidi, the first piece may not be on the left of the line.\n        left: levels ? lineLeft : leftOffset,\n        top: top + topOffset + baselineDelta,\n        ascender: baselineOfWord,\n        width: extendedWidth\n          ? containerWidth - (line === 0 ? textIndentNumber : 0)\n          : lineWidths[line],\n      }\n    }\n\n    // The shaping direction of the piece, guessed from its text without bidi.\n    const direction =\n      levels === undefined ? undefined : levels[i] % 2 === 1 ? 'rtl' : 'ltr'\n\n    if (ellipsisPlan?.truncated?.index === i) {\n      text = ellipsisPlan.truncated.text\n      leftOffset = ellipsisPlan.truncated.left\n    }\n\n    if (lineLimit !== Infinity && !ellipsisPlan) {\n      let _blockEllipsis = blockEllipsis\n      let ellipsisWidth = measureGrapheme(blockEllipsis)\n      if (ellipsisWidth > parentContainerInnerWidth) {\n        _blockEllipsis = HorizontalEllipsis\n        ellipsisWidth = measureGrapheme(_blockEllipsis)\n      }\n      const isNotLastLine = line < lineWidths.length - 1\n      const isLastAllowedLine = line + 1 === lineLimit\n\n      function calcEllipsis(baseWidth: number, _text: string) {\n        const chars = segment(_text, 'grapheme', locale)\n\n        let subset = ''\n        let resolvedWidth = 0\n\n        for (const char of chars) {\n          const w = baseWidth + measureGraphemeArray([subset + char])\n          if (\n            // Keep at least one character at the start of the line:\n            // > The first character or atomic inline-level element on a line\n            // must be clipped rather than ellipsed.\n            // https://drafts.csswg.org/css-overflow/#text-overflow\n            (subset || layout.x > 0) &&\n            w + ellipsisWidth > parentContainerInnerWidth\n          ) {\n            break\n          }\n          subset += char\n          resolvedWidth = w\n        }\n\n        return {\n          subset,\n          resolvedWidth,\n        }\n      }\n\n      if (\n        isLastAllowedLine &&\n        (isNotLastLine || lineWidths[line] > parentContainerInnerWidth)\n      ) {\n        // Like in browsers, the last line keeps its words, and characters are\n        // only removed when the ellipsis doesn't fit after them.\n        // https://drafts.csswg.org/css-overflow-4/#block-ellipsis\n        if (\n          leftOffset + width + ellipsisWidth > parentContainerInnerWidth ||\n          (nextLayout && nextLayout.line !== line)\n        ) {\n          // Spaces at the end of the line aren't drawn before the ellipsis.\n          const { subset, resolvedWidth } = calcEllipsis(\n            leftOffset,\n            text.replace(/\\s+$/, '')\n          )\n\n          text = subset + _blockEllipsis\n          skippedLine = line\n          decorationLines[line].width = Math.max(\n            0,\n            resolvedWidth - decorationLines[line].left\n          )\n          isLastDisplayedBeforeEllipsis = true\n        }\n      }\n    }\n\n    if (image) {\n      // For images, we remove the baseline offset.\n      topOffset += 0\n    } else if (embedFont) {\n      // If the current word and the next word are on the same line, we try to\n      // merge them together to better handle the kerning.\n      if (\n        !text.includes(Tab) &&\n        !wordSeparators.includes(text) &&\n        texts[i + 1] &&\n        nextLayout &&\n        !nextLayout.isImage &&\n        topOffset === nextLayout.y &&\n        !isLastDisplayedBeforeEllipsis &&\n        // Text is only shaped together in one direction, and not with pieces\n        // hidden by the ellipsis.\n        (levels === undefined ||\n          (levels[i] === levels[i + 1] && !ellipsisPlan?.hidden.has(i + 1)))\n      ) {\n        if (wordBuffer === null) {\n          bufferedOffset = leftOffset\n          bufferedRight = leftOffset + layout.width\n        } else if (levels) {\n          // Right-to-left pieces are drawn from the left of the last one.\n          bufferedOffset = Math.min(bufferedOffset, leftOffset)\n          bufferedRight = Math.max(bufferedRight, leftOffset + layout.width)\n        }\n        wordBuffer = wordBuffer === null ? text : wordBuffer + text\n        continue\n      }\n\n      const finalizedSegment = wordBuffer === null ? text : wordBuffer + text\n      let finalizedLeftOffset =\n        wordBuffer === null ? leftOffset : bufferedOffset\n      let finalizedWidth = layout.width + leftOffset - finalizedLeftOffset\n      if (levels && wordBuffer !== null) {\n        finalizedLeftOffset = Math.min(bufferedOffset, leftOffset)\n        finalizedWidth =\n          Math.max(bufferedRight, leftOffset + layout.width) -\n          finalizedLeftOffset\n      }\n\n      const band = buildUnderlineBand(topOffset)\n\n      const svg = engine.getSVG(\n        finalizedSegment.replace(/(\\t)+/g, ''),\n        {\n          fontSize,\n          left: left + finalizedLeftOffset,\n          // Since we need to pass the baseline position, add the ascender to the top.\n          top: top + topOffset + baselineOfWord + baselineDelta,\n          letterSpacing,\n          wordSpacing: wordSpacing as number,\n          fontFeatureSettings,\n          direction,\n        },\n        band\n      )\n\n      path = svg.path\n      mergedBoldPath += svg.boldPath\n\n      if (shouldCollectDecorationBoxes && svg.boxes && svg.boxes.length) {\n        ;(decorationGlyphs[line] || (decorationGlyphs[line] = [])).push(\n          ...svg.boxes\n        )\n      }\n\n      wordBuffer = null\n\n      if (debug) {\n        extra +=\n          // Glyph\n          buildXMLString('rect', {\n            x: left + finalizedLeftOffset,\n            y: top + topOffset + baselineDelta,\n            width: finalizedWidth,\n            height: heightOfWord,\n            fill: 'transparent',\n            stroke: '#575eff',\n            'stroke-width': 1,\n            transform: matrix ? matrix : undefined,\n            'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\n          }) +\n          // Baseline\n          buildXMLString('line', {\n            x1: left + leftOffset,\n            x2: left + leftOffset + layout.width,\n            y1: top + topOffset + baselineDelta + baselineOfWord,\n            y2: top + topOffset + baselineDelta + baselineOfWord,\n            stroke: '#14c000',\n            'stroke-width': 1,\n            transform: matrix ? matrix : undefined,\n            'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\n          })\n      }\n    } else {\n      // We need manually add the font ascender height to ensure it starts\n      // at the baseline because <text>'s alignment baseline is set to `hanging`\n      // by default and supported to change in SVG 1.1.\n      topOffset += baselineOfWord + baselineDelta\n\n      if (shouldCollectDecorationBoxes && !image) {\n        const band = buildUnderlineBand(topOffset)\n\n        const svg = engine.getSVG(\n          text.replace(/(\\t)+/g, ''),\n          {\n            fontSize,\n            left: left + leftOffset,\n            top: top + topOffset,\n            letterSpacing,\n            wordSpacing: wordSpacing as number,\n            fontFeatureSettings,\n            direction,\n          },\n          band\n        )\n\n        if (svg.boxes && svg.boxes.length) {\n          ;(decorationGlyphs[line] || (decorationGlyphs[line] = [])).push(\n            ...svg.boxes\n          )\n        }\n      }\n    }\n\n    if (path !== null) {\n      mergedPath += path + ' '\n    } else {\n      const [t, shape] = buildText(\n        {\n          content: text,\n          filter,\n          id,\n          left: left + leftOffset,\n          top: top + topOffset,\n          width,\n          height: heightOfWord,\n          matrix,\n          image,\n          clipPathId,\n          debug,\n          shape: !!_inheritedBackgroundClipTextPath,\n        },\n        parentStyle\n      )\n      result += t\n      backgroundClipDef += shape\n    }\n\n    if (isLastDisplayedBeforeEllipsis) {\n      break\n    }\n  }\n\n  if (ellipsisPlan) {\n    const { line, text, width, end } = ellipsisPlan\n    // At the baseline of the line, in the direction of the line.\n    const baselineTop =\n      top +\n      wordPositionInLayout.find((layout) => layout?.line === line).y +\n      baselines[line]\n    if (embedFont) {\n      const svg = engine.getSVG(text, {\n        fontSize,\n        left: left + ellipsisPlan.left,\n        top: baselineTop,\n        letterSpacing,\n        wordSpacing: wordSpacing as number,\n        fontFeatureSettings,\n        direction: isRTL ? 'rtl' : 'ltr',\n      })\n      mergedPath += svg.path + ' '\n      mergedBoldPath += svg.boldPath\n    } else {\n      const [t, shape] = buildText(\n        {\n          content: text,\n          filter,\n          id,\n          left: left + ellipsisPlan.left,\n          top: baselineTop,\n          width,\n          height: engine.height(text),\n          matrix,\n          image: null,\n          clipPathId,\n          debug,\n          shape: !!_inheritedBackgroundClipTextPath,\n        },\n        parentStyle\n      )\n      result += t\n      backgroundClipDef += shape\n    }\n\n    // The decoration ends with the text before the ellipsis.\n    const decoration = decorationLines[line]\n    if (decoration) {\n      const right = decoration.left + decoration.width\n      if (isRTL) decoration.left = Math.min(end, right)\n      decoration.width = Math.max(0, (isRTL ? right : end) - decoration.left)\n    }\n  }\n\n  if (getDecorationLines(parentStyle).length) {\n    decorationShape = Object.entries(decorationLines)\n      .map(([lineIndex, deco]) => {\n        if (!deco) return ''\n        const glyphBoxes = decorationGlyphs[lineIndex] || []\n\n        return buildDecoration(\n          {\n            left: left + deco.left,\n            top: deco.top,\n            width: deco.width,\n            ascender: deco.ascender,\n            clipPathId,\n            matrix,\n            glyphBoxes,\n          },\n          parentStyle\n        )\n      })\n      .join('')\n  }\n\n  // The opacity of the parent if it only has this text, see `layout()`. A\n  // single path without stroke or filters is one fill operation, so\n  // `fill-opacity` looks the same as drawing it as a group with `opacity`,\n  // and avoids the compositing surface of a group in rasterizers.\n  const textOpacity = (parentStyle._textOpacity as number | undefined) ?? 1\n  const fillOpacity =\n    textOpacity < 1 &&\n    !result &&\n    !filter &&\n    !cssFilter &&\n    !decorationShape &&\n    !mergedBoldPath &&\n    !getTextStrokeAttributes(parentStyle).stroke\n      ? textOpacity\n      : undefined\n\n  // Embed the font as path.\n  if (mergedPath || mergedBoldPath) {\n    const strokeAttributes = getTextStrokeAttributes(parentStyle)\n    const path =\n      !isFullyTransparent(fillColor) || strokeAttributes.stroke || filter\n        ? buildGlyphPaths(\n            { path: mergedPath, boldPath: mergedBoldPath },\n            {\n              fill:\n                filter &&\n                (isFullyTransparent(fillColor) ||\n                  (_inheritedBackgroundClipTextHasBackground &&\n                    isOpaqueWhite(fillColor)))\n                  ? 'black'\n                  : fillColor,\n              transform: matrix ? matrix : undefined,\n              'fill-opacity': fillOpacity,\n              ...strokeAttributes,\n            },\n            getSyntheticBoldWidth(fontSize),\n            id\n          )\n        : ''\n    const p = path\n      ? buildXMLString(\n          'g',\n          {\n            mask: overflowMaskId ? `url(#${overflowMaskId})` : undefined,\n            'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\n          },\n          path\n        )\n      : ''\n\n    if (_inheritedBackgroundClipTextPath) {\n      backgroundClipDef = buildXMLString('path', {\n        d: mergedPath + mergedBoldPath,\n        transform: matrix ? matrix : undefined,\n      })\n    }\n\n    result +=\n      (filter\n        ? filter +\n          buildXMLString(\n            'g',\n            { filter: `url(#satori_s-${id})` },\n            p + decorationShape\n          )\n        : p + decorationShape) + extra\n  } else if (decorationShape) {\n    result += filter\n      ? buildXMLString('g', { filter: `url(#satori_s-${id})` }, decorationShape)\n      : decorationShape\n  }\n\n  if (textOpacity < 1 && fillOpacity === undefined && result) {\n    result = buildXMLString('g', { opacity: textOpacity }, result)\n  }\n\n  // Hidden text takes up space, but isn't drawn.\n  if (parentStyle.visibility === 'hidden') return ''\n\n  // Attach information to the parent node.\n  if (backgroundClipDef) {\n    ;(parentStyle._inheritedBackgroundClipTextPath as any).value +=\n      backgroundClipDef\n  }\n\n  return result\n}\n","import escapeHTML from 'escape-html'\nimport type { ParsedTransformOrigin } from '../transform-origin.js'\nimport transform from './transform.js'\nimport { buildXMLString } from '../utils.js'\n\nexport function container(\n  {\n    left,\n    top,\n    width,\n    height,\n    isInheritingTransform,\n  }: {\n    left: number\n    top: number\n    width: number\n    height: number\n    isInheritingTransform: boolean\n  },\n  style: Record<string, number | string>\n) {\n  let matrix = ''\n\n  if (style.transform) {\n    matrix = transform(\n      {\n        left,\n        top,\n        width,\n        height,\n      },\n      style.transform as unknown as number[],\n      isInheritingTransform,\n      style.transformOrigin as ParsedTransformOrigin | undefined\n    )\n  }\n\n  return { matrix }\n}\n\n/** The color glyphs are filled with. */\nexport function getTextFillColor(style: Record<string, number | string>) {\n  return (style.WebkitTextFillColor ?? style.color) as string\n}\n\n/**\n * The path elements of glyphs, with `attributes` such as the fill and the\n * text stroke. Synthetic bold glyphs are emboldened by a stroke of\n * `boldWidth` with the fill color, like the fake bold of browsers, and their\n * text stroke is around the emboldened glyphs. `id` makes the ids of masks\n * unique.\n */\nexport function buildGlyphPaths(\n  { path, boldPath }: { path: string; boldPath: string },\n  attributes: Record<string, string | number | undefined>,\n  boldWidth: number,\n  id: string\n) {\n  const result = path.trim()\n    ? buildXMLString('path', { ...attributes, d: path })\n    : ''\n  if (!boldPath.trim()) return result\n\n  const {\n    stroke,\n    'stroke-width': strokeWidth,\n    'stroke-linejoin': strokeLinejoin,\n    'paint-order': paintOrder,\n    ...fillAttributes\n  } = attributes\n  const fill = buildXMLString('path', {\n    ...fillAttributes,\n    d: boldPath,\n    stroke: fillAttributes.fill,\n    'stroke-width': boldWidth,\n  })\n  if (!stroke) return result + fill\n\n  // The text stroke is centered on the edge of the emboldened glyphs, which\n  // is half of `boldWidth` outside the glyphs. It's drawn as wide as both,\n  // and masked to outside the glyphs moved out by half of their difference.\n  const width = parseFloat(String(strokeWidth)) || 0\n  const maskId = `satori_sb-${id}`\n  const region = { x: -1e5, y: -1e5, width: 2e5, height: 2e5 }\n  const mask = buildXMLString(\n    'mask',\n    { id: maskId, maskUnits: 'userSpaceOnUse', ...region },\n    buildXMLString('rect', { ...region, fill: '#fff' }) +\n      buildXMLString('path', {\n        d: boldPath,\n        fill: '#000',\n        stroke: width > boldWidth ? '#fff' : '#000',\n        'stroke-width': Math.abs(width - boldWidth),\n        'stroke-linejoin': strokeLinejoin,\n      })\n  )\n  const ring = buildXMLString('path', {\n    d: boldPath,\n    fill: 'none',\n    stroke,\n    'stroke-width': width + boldWidth,\n    'stroke-linejoin': strokeLinejoin,\n    transform: fillAttributes.transform,\n    mask: `url(#${maskId})`,\n  })\n  // Parts that aren't listed in `paint-order` are painted after the listed\n  // ones, in the default order.\n  const order = String(paintOrder ?? '').split(/\\s+/)\n  for (const part of ['fill', 'stroke']) {\n    if (!order.includes(part)) order.push(part)\n  }\n  const strokeFirst = order.indexOf('stroke') < order.indexOf('fill')\n  return result + mask + (strokeFirst ? ring + fill : fill + ring)\n}\n\n/** Attributes for `-webkit-text-stroke` and `paint-order`. */\nexport function getTextStrokeAttributes(\n  style: Record<string, number | string>\n) {\n  const width = style.WebkitTextStrokeWidth\n  if (!width) return {}\n  return {\n    'stroke-width': `${width}px`,\n    stroke: style.WebkitTextStrokeColor ?? style.color,\n    'stroke-linejoin': 'round',\n    // The stroke is painted above the fill by default.\n    'paint-order':\n      style.paintOrder && style.paintOrder !== 'normal'\n        ? style.paintOrder\n        : undefined,\n  }\n}\n\nexport default function buildText(\n  {\n    id,\n    content,\n    filter,\n    left,\n    top,\n    width,\n    height,\n    matrix,\n    image,\n    clipPathId,\n    debug,\n    shape,\n    decorationShape,\n  }: {\n    content: string\n    filter: string\n    id: string\n    left: number\n    top: number\n    width: number\n    height: number\n    matrix: string\n    image: string | null\n    clipPathId?: string\n    debug?: boolean\n    shape?: boolean\n    decorationShape?: string\n  },\n  style: Record<string, number | string>\n) {\n  let extra = ''\n  if (debug) {\n    extra = buildXMLString('rect', {\n      x: left,\n      y: top - height,\n      width,\n      height,\n      fill: 'transparent',\n      stroke: '#575eff',\n      'stroke-width': 1,\n      transform: matrix || undefined,\n      'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\n    })\n  }\n\n  // This grapheme should be rendered as an image.\n  if (image) {\n    const shapeProps = {\n      href: image,\n      x: left,\n      y: top,\n      width,\n      height,\n      transform: matrix || undefined,\n      'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\n    }\n    const imageMarkup =\n      buildXMLString('image', shapeProps) + (decorationShape || '')\n    return [\n      (filter\n        ? filter +\n          buildXMLString('g', { filter: `url(#satori_s-${id})` }, imageMarkup)\n        : imageMarkup) + extra,\n      // SVG doesn't support `<image>` as the shape.\n      '',\n    ]\n  }\n\n  // Do not embed the font, use <text> with the raw content instead.\n  const shapeProps = {\n    x: left,\n    y: top,\n    width,\n    height,\n    'font-weight': style.fontWeight,\n    'font-style': style.fontStyle,\n    'font-size': style.fontSize,\n    'font-family': style.fontFamily,\n    'letter-spacing': style.letterSpacing || undefined,\n    transform: matrix || undefined,\n    'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\n    ...getTextStrokeAttributes(style),\n  }\n  const textMarkup =\n    buildXMLString(\n      'text',\n      {\n        ...shapeProps,\n        fill: getTextFillColor(style),\n      },\n      escapeHTML(content)\n    ) + (decorationShape || '')\n  return [\n    (filter\n      ? filter +\n        buildXMLString('g', { filter: `url(#satori_s-${id})` }, textMarkup)\n      : textMarkup) + extra,\n    shape ? buildXMLString('text', shapeProps, escapeHTML(content)) : '',\n  ]\n}\n","/**\n * CSS transforms, including 3D transforms.\n *\n * Every element draws its shapes on its own plane: z = 0, in the absolute\n * layout coordinates computed by the layout engine. A 4x4 matrix (`TransformState.world`)\n * maps that plane to the space the shapes are drawn in. Without perspective,\n * the mapping is affine and becomes an SVG `matrix()`. With perspective it\n * isn't, and the element is either drawn with a projection hook provided by\n * `satori/experimental`, or approximated by an affine mapping.\n *\n * https://drafts.csswg.org/css-transforms-2/#3d-rendering-contexts\n */\n\nimport type { ParsedTransformOrigin } from '../transform-origin.js'\nimport type { TransformFunction } from '../parser/transform.js'\nimport type { CalcLength, LayoutNode } from '../layout-engine/index.js'\nimport type { SerializedStyle } from '../handler/expand.js'\n\n/** A 4x4 matrix in column-major order, like the arguments of `matrix3d()`. */\nexport type Mat4 = number[]\n\nexport interface Box {\n  left: number\n  top: number\n  width: number\n  height: number\n}\n\nexport interface ProjectedElement {\n  /** Maps the element's plane to the space the result is drawn in. */\n  matrix: Mat4\n  node: LayoutNode\n  left: number\n  top: number\n  style: SerializedStyle\n  id: string\n}\n\n/**\n * Draws an element with perspective, see `satori/experimental`. `svg` is the\n * element and its flat descendants, drawn on the element's plane.\n */\nexport type ProjectPlane = (svg: string, element: ProjectedElement) => string\n\n// prettier-ignore\nconst IDENTITY: Mat4 = [\n  1, 0, 0, 0,\n  0, 1, 0, 0,\n  0, 0, 1, 0,\n  0, 0, 0, 1,\n]\n\n// Drops the z coordinate, flattening 3D content onto the z = 0 plane.\n// prettier-ignore\nconst FLATTEN: Mat4 = [\n  1, 0, 0, 0,\n  0, 1, 0, 0,\n  0, 0, 0, 0,\n  0, 0, 0, 1,\n]\n\n/** a · b, i.e. b is applied first. */\nexport function multiply(a: Mat4, b: Mat4): Mat4 {\n  const result: Mat4 = new Array(16)\n  for (let column = 0; column < 4; column++) {\n    for (let row = 0; row < 4; row++) {\n      result[column * 4 + row] =\n        a[row] * b[column * 4] +\n        a[4 + row] * b[column * 4 + 1] +\n        a[8 + row] * b[column * 4 + 2] +\n        a[12 + row] * b[column * 4 + 3]\n    }\n  }\n  return result\n}\n\nfunction translate(x: number, y: number, z: number): Mat4 {\n  // prettier-ignore\n  return [\n    1, 0, 0, 0,\n    0, 1, 0, 0,\n    0, 0, 1, 0,\n    x, y, z, 1,\n  ]\n}\n\nfunction scale(x: number, y: number, z: number): Mat4 {\n  // prettier-ignore\n  return [\n    x, 0, 0, 0,\n    0, y, 0, 0,\n    0, 0, z, 0,\n    0, 0, 0, 1,\n  ]\n}\n\nfunction rotate(x: number, y: number, z: number, degrees: number): Mat4 {\n  const length = Math.hypot(x, y, z)\n  // A zero vector means no rotation.\n  if (!length) return IDENTITY\n  x /= length\n  y /= length\n  z /= length\n\n  const radians = (degrees * Math.PI) / 180\n  const c = Math.cos(radians)\n  const s = Math.sin(radians)\n  const t = 1 - c\n  // prettier-ignore\n  return [\n    t * x * x + c,     t * x * y + s * z, t * x * z - s * y, 0,\n    t * x * y - s * z, t * y * y + c,     t * y * z + s * x, 0,\n    t * x * z + s * y, t * y * z - s * x, t * z * z + c,     0,\n    0,                 0,                 0,                 1,\n  ]\n}\n\nfunction skew(xDegrees: number, yDegrees: number): Mat4 {\n  const x = Math.tan((xDegrees * Math.PI) / 180)\n  const y = Math.tan((yDegrees * Math.PI) / 180)\n  // prettier-ignore\n  return [\n    1, y, 0, 0,\n    x, 1, 0, 0,\n    0, 0, 1, 0,\n    0, 0, 0, 1,\n  ]\n}\n\nfunction perspective(distance: number): Mat4 {\n  // `perspective(none)` is resolved to Infinity, which gives the identity.\n  // Distances below 1px are clamped to 1px, like browsers do.\n  const d = -1 / Math.max(distance, 1)\n  // prettier-ignore\n  return [\n    1, 0, 0, 0,\n    0, 1, 0, 0,\n    0, 0, 1, d,\n    0, 0, 0, 1,\n  ]\n}\n\nfunction toMatrix(\n  { name, args }: TransformFunction,\n  width: number,\n  height: number\n): Mat4 {\n  // Percentages are only allowed in X and Y translations.\n  const resolve = (\n    value: number | string | CalcLength | undefined,\n    size: number\n  ) =>\n    typeof value === 'string'\n      ? (parseFloat(value) / 100) * size\n      : typeof value === 'object'\n      ? value.calc(size)\n      : value ?? 0\n  const [a, b, c, d] = args as number[]\n\n  switch (name) {\n    case 'matrix': {\n      const [, , , , e, f] = args as number[]\n      // prettier-ignore\n      return [\n        a, b, 0, 0,\n        c, d, 0, 0,\n        0, 0, 1, 0,\n        e, f, 0, 1,\n      ]\n    }\n    case 'matrix3d':\n      return args as number[]\n    case 'translate':\n      return translate(resolve(a, width), resolve(b, height), 0)\n    case 'translateX':\n      return translate(resolve(a, width), 0, 0)\n    case 'translateY':\n      return translate(0, resolve(a, height), 0)\n    case 'translateZ':\n      return translate(0, 0, a)\n    case 'translate3d':\n      return translate(resolve(a, width), resolve(b, height), c)\n    case 'scale':\n      return scale(a, b ?? a, 1)\n    case 'scaleX':\n      return scale(a, 1, 1)\n    case 'scaleY':\n      return scale(1, a, 1)\n    case 'scaleZ':\n      return scale(1, 1, a)\n    case 'scale3d':\n      return scale(a, b, c)\n    case 'rotate':\n    case 'rotateZ':\n      return rotate(0, 0, 1, a)\n    case 'rotateX':\n      return rotate(1, 0, 0, a)\n    case 'rotateY':\n      return rotate(0, 1, 0, a)\n    case 'rotate3d':\n      return rotate(a, b, c, d)\n    case 'skew':\n      return skew(a, b ?? 0)\n    case 'skewX':\n      return skew(a, 0)\n    case 'skewY':\n      return skew(0, a)\n    case 'perspective':\n      return perspective(a)\n    default:\n      throw new Error(`Invalid transform function: \"${name}\".`)\n  }\n}\n\n/**\n * Wraps a matrix so it applies around an origin given relative to a box.\n */\nfunction aroundOrigin(\n  matrix: Mat4,\n  { left, top, width, height }: Box,\n  origin: ParsedTransformOrigin | undefined\n): Mat4 {\n  const x =\n    left + (origin?.xAbsolute ?? ((origin?.xRelative ?? 50) * width) / 100)\n  const y =\n    top + (origin?.yAbsolute ?? ((origin?.yRelative ?? 50) * height) / 100)\n  const z = origin?.zAbsolute ?? 0\n  return multiply(translate(x, y, z), multiply(matrix, translate(-x, -y, -z)))\n}\n\nexport interface TransformState {\n  /** Maps the element's plane to the space its shapes are drawn in. */\n  world: Mat4\n  /**\n   * The element's 3D transform since the last flattening, and the mapping of\n   * the plane it was flattened onto: `world = base · local`. Elements in the\n   * same 3D rendering context share `base`, and `local` gives their depth.\n   */\n  base: Mat4\n  local: Mat4\n  /** Whether children keep their 3D position (`transform-style: preserve-3d`). */\n  preserve3d: boolean\n  /** The `perspective` property, applied to children. */\n  perspective?: Mat4\n  /**\n   * Set if the element's mapping isn't affine and it's drawn with a\n   * projection instead: its shapes and flat descendants are then drawn on its\n   * own plane (`world` is the identity) and the result is projected with this\n   * matrix.\n   */\n  projection?: Mat4\n  /** Whether the element is entirely behind the viewer, so it isn't drawn. */\n  behindViewer?: boolean\n}\n\nexport const ROOT_TRANSFORM_STATE: TransformState = {\n  world: IDENTITY,\n  base: IDENTITY,\n  local: IDENTITY,\n  preserve3d: false,\n}\n\n/** The w coordinate of a point on an element's plane. */\nfunction w(m: Mat4, x: number, y: number) {\n  return m[3] * x + m[7] * y + m[15]\n}\n\n/**\n * Compute how an element is transformed, after layout.\n */\nexport function resolveTransformState({\n  functions,\n  box,\n  origin,\n  parent,\n  preserve3d,\n  perspectiveDistance,\n  perspectiveOrigin,\n  canProject,\n}: {\n  functions: TransformFunction[]\n  box: Box\n  origin?: ParsedTransformOrigin\n  parent: TransformState\n  preserve3d: boolean\n  perspectiveDistance?: number\n  perspectiveOrigin?: ParsedTransformOrigin\n  canProject: boolean\n}): TransformState {\n  let matrix = IDENTITY\n  for (const fn of functions) {\n    matrix = multiply(matrix, toMatrix(fn, box.width, box.height))\n  }\n  matrix = aroundOrigin(matrix, box, origin)\n  if (parent.perspective) matrix = multiply(parent.perspective, matrix)\n\n  // Children of a `preserve-3d` element stay in its 3D space. Otherwise, the\n  // element is flattened onto its parent's plane.\n  const base = parent.preserve3d ? parent.base : multiply(parent.world, FLATTEN)\n  const local = parent.preserve3d ? multiply(parent.local, matrix) : matrix\n  let world = multiply(base, local)\n\n  // With perspective, the w coordinate varies across the element's plane, so\n  // the mapping isn't affine.\n  const { left, top, width, height } = box\n  const ws = [\n    w(world, left, top),\n    w(world, left + width, top),\n    w(world, left, top + height),\n    w(world, left + width, top + height),\n  ]\n  const center = w(world, left + width / 2, top + height / 2)\n  const isAffine = ws.every((value) => Math.abs(value - center) < 1e-6)\n\n  let projection: Mat4 | undefined\n  if (!isAffine && canProject) {\n    projection = world\n    world = IDENTITY\n  } else if (world[3] || world[7] || world[15] !== 1) {\n    // Approximate the mapping by the affine one that matches it best around\n    // the element's center: its value and derivatives there. That's exact for\n    // planes facing the viewer, such as `translateZ()` with perspective.\n    const cx = left + width / 2\n    const cy = top + height / 2\n    const x = (world[0] * cx + world[4] * cy + world[12]) / center\n    const y = (world[1] * cx + world[5] * cy + world[13]) / center\n    const dxdx = (world[0] - x * world[3]) / center\n    const dxdy = (world[4] - x * world[7]) / center\n    const dydx = (world[1] - y * world[3]) / center\n    const dydy = (world[5] - y * world[7]) / center\n    world = [...world]\n    world[0] = dxdx\n    world[1] = dydx\n    world[4] = dxdy\n    world[5] = dydy\n    world[12] = x - dxdx * cx - dxdy * cy\n    world[13] = y - dydx * cx - dydy * cy\n    world[3] = world[7] = 0\n    world[15] = 1\n  }\n\n  return {\n    world,\n    base,\n    local,\n    preserve3d,\n    perspective:\n      perspectiveDistance !== undefined\n        ? aroundOrigin(perspective(perspectiveDistance), box, perspectiveOrigin)\n        : undefined,\n    projection,\n    behindViewer: ws.every((value) => value <= 0),\n  }\n}\n\n/**\n * The depth of a point on an element's plane in its 3D rendering context.\n * Larger values are closer to the viewer.\n */\nexport function getDepth(state: TransformState, x: number, y: number) {\n  const m = state.local\n  return (m[2] * x + m[6] * y + m[14]) / w(m, x, y)\n}\n\nfunction determinant3(m: number[]) {\n  return (\n    m[0] * (m[4] * m[8] - m[5] * m[7]) -\n    m[1] * (m[3] * m[8] - m[5] * m[6]) +\n    m[2] * (m[3] * m[7] - m[4] * m[6])\n  )\n}\n\nfunction determinant4(m: Mat4) {\n  let result = 0\n  for (let column = 0; column < 4; column++) {\n    // The minor without row 0 and this column.\n    const minor: number[] = []\n    for (let c = 0; c < 4; c++) {\n      if (c === column) continue\n      minor.push(m[c * 4 + 1], m[c * 4 + 2], m[c * 4 + 3])\n    }\n    result += (column % 2 ? -1 : 1) * m[column * 4] * determinant3(minor)\n  }\n  return result\n}\n\n/**\n * Whether the back of the element faces the viewer, for\n * `backface-visibility: hidden`. Per the spec, that's when the z-z component\n * of the inverse of its accumulated 3D matrix is negative. That component is\n * the cofactor of z-z divided by the determinant.\n */\nexport function isBackFacing(state: TransformState) {\n  const m = state.local\n  const det = determinant4(m)\n  if (!det) return false\n  const cofactor = determinant3([\n    m[0],\n    m[1],\n    m[3],\n    m[4],\n    m[5],\n    m[7],\n    m[12],\n    m[13],\n    m[15],\n  ])\n  return cofactor / det < 0\n}\n\n/**\n * Convert an affine mapping to an SVG `matrix()`.\n */\nfunction toSVGMatrix(m: Mat4) {\n  const divisor = m[15]\n  // Keep 6 decimals: with only 2, `scale(1.005)` rendered as a plain shift and\n  // `rotate(0.25deg)` as no rotation at all. 6 keep the error below 0.01px up\n  // to 10,000px from the origin. Trailing zeros are dropped.\n  return `matrix(${[m[0], m[1], m[4], m[5], m[12], m[13]]\n    .map((v) => +(v / divisor).toFixed(6))\n    .join(',')})`\n}\n\n/**\n * The SVG transform for the shapes of an element, from the transform state\n * attached to its (possibly inherited) transform list after layout.\n */\nexport default function transform(\n  _box: Box,\n  transforms: unknown,\n  _isInheritingTransform: boolean,\n  _transformOrigin?: ParsedTransformOrigin\n) {\n  const state = (transforms as { __state?: TransformState }).__state\n  return toSVGMatrix((state ?? ROOT_TRANSFORM_STATE).world)\n}\n","// @TODO: It seems that SVG filters are pretty expensive for resvg, PNG\n// generation time 10x'd when adding this filter (WASM in browser).\n// https://drafts.fxtf.org/filter-effects/#feGaussianBlurElement\n\nimport { buildXMLString } from '../utils.js'\n\nfunction shiftPath(path: string, dx: number, dy: number) {\n  return path.replace(\n    /([MA])([0-9.-]+),([0-9.-]+)/g,\n    function (_, command, x, y) {\n      return command + (parseFloat(x) + dx) + ',' + (parseFloat(y) + dy)\n    }\n  )\n}\n\n// The scale is used to make the filter area larger than the bounding box,\n// because usually the given measured text bounding is larger than the path\n// bounding.\n// The text bounding box is measured via the font metrics, which is not the same\n// as the actual content. For example, the text bounding box of \"A\" is larger\n// than the actual \"a\" path but they have the same font metrics.\n// This scale can be adjusted to prevent the filter from cutting off the text.\nconst SCALE = 1.1\n\nexport function buildDropShadow(\n  { id, width, height }: { id: string; width: number; height: number },\n  style: {\n    shadowColor: string[]\n    shadowOffset: {\n      width: number\n      height: number\n    }[]\n    shadowRadius: number[]\n  },\n  transparentText = false\n) {\n  if (\n    !style.shadowColor ||\n    !style.shadowOffset ||\n    typeof style.shadowRadius === 'undefined'\n  ) {\n    return ''\n  }\n\n  const shadowCount = style.shadowColor.length\n  let effects = ''\n  let merge = ''\n\n  // There could be multiple shadows, we need to get the maximum bounding box\n  // and use `feMerge` to merge them together.\n  let left = 0\n  let right = width\n  let top = 0\n  let bottom = height\n  for (let i = 0; i < shadowCount; i++) {\n    // Expand the area for the filter to prevent it from cutting off.\n    const grow = (style.shadowRadius[i] * style.shadowRadius[i]) / 4\n    left = Math.min(style.shadowOffset[i].width - grow, left)\n    right = Math.max(style.shadowOffset[i].width + grow + width, right)\n    top = Math.min(style.shadowOffset[i].height - grow, top)\n    bottom = Math.max(style.shadowOffset[i].height + grow + height, bottom)\n\n    // Shadows are built from primitives instead of `feDropShadow`, which\n    // includes the source, and of which librsvg only draws the last one when\n    // they're merged. The first shadow is on top, and the text above them.\n    const resultId = `satori_s-${id}-result-${i}`\n    effects +=\n      buildXMLString('feGaussianBlur', {\n        in: 'SourceAlpha',\n        // According to the spec, we use the half of the blur radius as the\n        // standard deviation for the filter.\n        // > the image that would be generated by applying to the shadow a\n        // > Gaussian blur with a standard deviation equal to half the blur\n        // > radius\n        // > https://www.w3.org/TR/css-backgrounds-3/#shadow-blur\n        stdDeviation: style.shadowRadius[i] / 2,\n        result: `${resultId}-blur`,\n      }) +\n      buildXMLString('feOffset', {\n        in: `${resultId}-blur`,\n        dx: style.shadowOffset[i].width,\n        dy: style.shadowOffset[i].height,\n        result: `${resultId}-offset`,\n      }) +\n      buildXMLString('feFlood', {\n        'flood-color': style.shadowColor[i],\n        'flood-opacity': 1,\n        result: `${resultId}-color`,\n      }) +\n      buildXMLString('feComposite', {\n        in: `${resultId}-color`,\n        in2: `${resultId}-offset`,\n        operator: 'in',\n        result: resultId,\n      })\n    merge = buildXMLString('feMergeNode', { in: resultId }) + merge\n  }\n  // Transparent text only has its shadows.\n  if (!transparentText) {\n    merge += buildXMLString('feMergeNode', { in: 'SourceGraphic' })\n  }\n\n  return buildXMLString(\n    'filter',\n    {\n      id: `satori_s-${id}`,\n      x: ((left / width) * 100 * SCALE).toFixed(2) + '%',\n      y: ((top / height) * 100 * SCALE).toFixed(2) + '%',\n      width: (((right - left) / width) * 100 * SCALE).toFixed(2) + '%',\n      height: (((bottom - top) / height) * 100 * SCALE).toFixed(2) + '%',\n    },\n    effects + buildXMLString('feMerge', {}, merge)\n  )\n}\n\nexport function boxShadow(\n  {\n    width,\n    height,\n    shape,\n    id,\n  }: {\n    width: number\n    height: number\n    shape: string\n    id: string\n  },\n  style: Record<string, any>\n) {\n  if (!style.boxShadow) return null\n\n  let shadow = ''\n  let innerShadow = ''\n\n  for (let i = style.boxShadow.length - 1; i >= 0; i--) {\n    let s = ''\n\n    const shadowStyle = style.boxShadow[i]\n\n    if (shadowStyle.spreadRadius && shadowStyle.inset) {\n      shadowStyle.spreadRadius = -shadowStyle.spreadRadius\n    }\n\n    // Expand the area for the filter to prevent it from cutting off.\n    const grow =\n      (shadowStyle.blurRadius * shadowStyle.blurRadius) / 4 +\n      (shadowStyle.spreadRadius || 0)\n\n    const left = Math.min(\n      -grow - (shadowStyle.inset ? shadowStyle.offsetX : 0),\n      0\n    )\n    const right = Math.max(\n      grow + width - (shadowStyle.inset ? shadowStyle.offsetX : 0),\n      width\n    )\n    const top = Math.min(\n      -grow - (shadowStyle.inset ? shadowStyle.offsetY : 0),\n      0\n    )\n    const bottom = Math.max(\n      grow + height - (shadowStyle.inset ? shadowStyle.offsetY : 0),\n      height\n    )\n\n    const sid = `satori_s-${id}-${i}`\n    const maskId = `satori_ms-${id}-${i}`\n    const shapeWithSpread = shadowStyle.spreadRadius\n      ? shape.replace(\n          'stroke-width=\"0\"',\n          `stroke-width=\"${shadowStyle.spreadRadius * 2}\"`\n        )\n      : shape\n\n    s += buildXMLString(\n      'mask',\n      {\n        id: maskId,\n        maskUnits: 'userSpaceOnUse',\n      },\n      buildXMLString('rect', {\n        x: 0,\n        y: 0,\n        width: style._viewportWidth || '100%',\n        height: style._viewportHeight || '100%',\n        fill: shadowStyle.inset ? '#000' : '#fff',\n      }) +\n        shapeWithSpread\n          .replace(\n            'fill=\"#fff\"',\n            shadowStyle.inset ? 'fill=\"#fff\"' : 'fill=\"#000\"'\n          )\n          .replace('stroke=\"#fff\"', '')\n    )\n\n    let finalShape = shapeWithSpread\n      .replace(/d=\"([^\"]+)\"/, (_, path) => {\n        return (\n          'd=\"' +\n          shiftPath(path, shadowStyle.offsetX, shadowStyle.offsetY) +\n          '\"'\n        )\n      })\n      .replace(/x=\"([^\"]+)\"/, (_, x) => {\n        return 'x=\"' + (parseFloat(x) + shadowStyle.offsetX) + '\"'\n      })\n      .replace(/y=\"([^\"]+)\"/, (_, y) => {\n        return 'y=\"' + (parseFloat(y) + shadowStyle.offsetY) + '\"'\n      })\n\n    // Negative spread radius, we need another mask here.\n    if (shadowStyle.spreadRadius && shadowStyle.spreadRadius < 0) {\n      s += buildXMLString(\n        'mask',\n        {\n          id: maskId + '-neg',\n          maskUnits: 'userSpaceOnUse',\n        },\n        finalShape\n          .replace('stroke=\"#fff\"', 'stroke=\"#000\"')\n          .replace(\n            /stroke-width=\"[^\"]+\"/,\n            `stroke-width=\"${-shadowStyle.spreadRadius * 2}\"`\n          )\n      )\n    }\n\n    if (shadowStyle.spreadRadius && shadowStyle.spreadRadius < 0) {\n      finalShape = buildXMLString(\n        'g',\n        {\n          mask: `url(#${maskId}-neg)`,\n        },\n        finalShape\n      )\n    }\n\n    s +=\n      buildXMLString(\n        'defs',\n        {},\n        buildXMLString(\n          'filter',\n          {\n            id: sid,\n            x: `${(left / width) * 100}%`,\n            y: `${(top / height) * 100}%`,\n            width: `${((right - left) / width) * 100}%`,\n            height: `${((bottom - top) / height) * 100}%`,\n          },\n          buildXMLString('feGaussianBlur', {\n            // According to the spec, we use the half of the blur radius as the standard\n            // deviation for the filter.\n            // > the image that would be generated by applying to the shadow a Gaussian\n            // > blur with a standard deviation equal to half the blur radius\n            // > https://www.w3.org/TR/css-backgrounds-3/#shadow-blur\n            stdDeviation: shadowStyle.blurRadius / 2,\n            result: 'b',\n          }) +\n            buildXMLString('feFlood', {\n              'flood-color': shadowStyle.color,\n              in: 'SourceGraphic',\n              result: 'f',\n            }) +\n            buildXMLString('feComposite', {\n              in: 'f',\n              in2: 'b',\n              operator: shadowStyle.inset ? 'out' : 'in',\n            })\n        )\n      ) +\n      buildXMLString(\n        'g',\n        {\n          mask: `url(#${maskId})`,\n          filter: `url(#${sid})`,\n        },\n        finalShape\n      )\n\n    if (shadowStyle.inset) {\n      innerShadow += s\n    } else {\n      shadow += s\n    }\n  }\n\n  return [shadow, innerShadow]\n}\n","import { buildXMLString } from '../utils.js'\nimport type { GlyphBox } from '../font.js'\n\nfunction buildSkipInkSegments(\n  start: number,\n  end: number,\n  glyphBoxes: GlyphBox[],\n  y: number,\n  strokeWidth: number,\n  baseline: number\n) {\n  const halfStroke = strokeWidth / 2\n  const bleed = Math.max(halfStroke, strokeWidth * 1.25)\n  const skipRanges: [number, number][] = []\n\n  for (const box of glyphBoxes) {\n    // Only skip glyphs that actually cross the underline position and extend below the baseline.\n    if (box.y2 < baseline + halfStroke || box.y1 > y + halfStroke) continue\n\n    const from = Math.max(start, box.x1 - bleed)\n    const to = Math.min(end, box.x2 + bleed)\n\n    if (from >= to) continue\n    if (skipRanges.length === 0) {\n      skipRanges.push([from, to])\n      continue\n    }\n\n    const last = skipRanges[skipRanges.length - 1]\n    if (from <= last[1]) {\n      last[1] = Math.max(last[1], to)\n    } else {\n      skipRanges.push([from, to])\n    }\n  }\n\n  if (!skipRanges.length) {\n    return [[start, end]] as [number, number][]\n  }\n\n  const segments: [number, number][] = []\n  let cursor = start\n\n  for (const [from, to] of skipRanges) {\n    if (from > cursor) {\n      segments.push([cursor, from])\n    }\n    cursor = Math.max(cursor, to)\n    if (cursor >= end) break\n  }\n\n  if (cursor < end) {\n    segments.push([cursor, end])\n  }\n\n  return segments\n}\n\n/** The lines of `text-decoration-line`. */\nexport function getDecorationLines(style: Record<string, any>): string[] {\n  const line = style.textDecorationLine\n  return !line || line === 'none' ? [] : String(line).split(' ')\n}\n\n/** Resolves a percentage of the font size or a length. */\nfunction resolveDecorationLength(value: unknown, fontSize: number) {\n  if (typeof value === 'number') return value\n  if (typeof value === 'string' && value.endsWith('%')) {\n    return (parseFloat(value) / 100) * fontSize\n  }\n}\n\n/** The thickness of decoration lines. */\nexport function getDecorationThickness(style: Record<string, any>) {\n  const thickness = resolveDecorationLength(\n    style.textDecorationThickness,\n    style.fontSize\n  )\n  // The UA should use such font-based information when choosing auto line thicknesses wherever appropriate.\n  // https://drafts.csswg.org/css-text-decor-4/#text-decoration-thickness\n  return thickness === undefined\n    ? Math.max(1, style.fontSize * 0.1)\n    : Math.max(0, thickness)\n}\n\n/**\n * The distance of the underline's center from the top of the text. A\n * `text-underline-offset` is the distance of its top edge from the baseline.\n */\nexport function getUnderlineY(\n  style: Record<string, any>,\n  ascender: number,\n  thickness: number\n) {\n  const offset = resolveDecorationLength(\n    style.textUnderlineOffset,\n    style.fontSize\n  )\n  return offset === undefined\n    ? ascender * 1.1\n    : ascender + offset + thickness / 2\n}\n\n/** A wavy line along a segment, starting and ending at its center. */\nfunction wavyPath(x1: number, x2: number, y: number, thickness: number) {\n  const amplitude = Math.max(1, thickness)\n  const period = Math.max(4, thickness * 4)\n  let d = `M${x1} ${y}`\n  for (let x = x1; x < x2; x += period / 2) {\n    const half = Math.min(period / 2, x2 - x)\n    const direction = Math.round((x - x1) / (period / 2)) % 2 ? 1 : -1\n    d += ` q${half / 2} ${direction * amplitude * 2} ${half} 0`\n  }\n  return d\n}\n\nexport default function buildDecoration(\n  {\n    width,\n    left,\n    top,\n    ascender,\n    clipPathId,\n    matrix,\n    glyphBoxes,\n  }: {\n    width: number\n    left: number\n    top: number\n    ascender: number\n    clipPathId?: string\n    matrix?: string\n    glyphBoxes?: GlyphBox[]\n  },\n  style: Record<string, any>\n) {\n  const {\n    textDecorationColor,\n    textDecorationStyle,\n    textDecorationSkipInk,\n    color,\n  } = style\n  const height = getDecorationThickness(style)\n  if (!height) return ''\n\n  const content = getDecorationLines(style)\n    .map((line) =>\n      buildLine(\n        line,\n        line === 'line-through'\n          ? top + ascender * 0.7\n          : line === 'underline'\n          ? top + getUnderlineY(style, ascender, height)\n          : top - height / 2\n      )\n    )\n    .join('')\n\n  return clipPathId && content\n    ? buildXMLString('g', { 'clip-path': `url(#${clipPathId})` }, content)\n    : content\n\n  function buildLine(line: string, y: number) {\n    const dasharray =\n      textDecorationStyle === 'dashed'\n        ? `${height * 1.2} ${height * 2}`\n        : textDecorationStyle === 'dotted'\n        ? `0 ${height * 2}`\n        : undefined\n\n    const applySkipInk =\n      line === 'underline' &&\n      (textDecorationSkipInk || 'auto') !== 'none' &&\n      glyphBoxes?.length\n\n    const baseline = top + ascender\n\n    const segments = applySkipInk\n      ? buildSkipInkSegments(\n          left,\n          left + width,\n          glyphBoxes,\n          y,\n          height,\n          baseline\n        )\n      : ([[left, left + width]] as [number, number][])\n\n    if (textDecorationStyle === 'wavy') {\n      return segments\n        .map(([x1, x2]) =>\n          buildXMLString('path', {\n            d: wavyPath(x1, x2, y, height),\n            fill: 'none',\n            stroke: textDecorationColor || color,\n            'stroke-width': height,\n            transform: matrix,\n          })\n        )\n        .join('')\n    }\n\n    // https://www.w3.org/TR/css-backgrounds-3/#valdef-line-style-double\n    const extraLine =\n      textDecorationStyle === 'double'\n        ? segments\n            .map(([x1, x2]) =>\n              buildXMLString('line', {\n                x1,\n                y1: y + height + 1,\n                x2,\n                y2: y + height + 1,\n                stroke: textDecorationColor || color,\n                'stroke-width': height,\n                'stroke-dasharray': dasharray,\n                'stroke-linecap':\n                  textDecorationStyle === 'dotted' ? 'round' : 'square',\n                transform: matrix,\n              })\n            )\n            .join('')\n        : ''\n\n    return (\n      segments\n        .map(([x1, x2]) =>\n          buildXMLString('line', {\n            x1,\n            y1: y,\n            x2,\n            y2: y,\n            stroke: textDecorationColor || color,\n            'stroke-width': height,\n            'stroke-dasharray': dasharray,\n            'stroke-linecap':\n              textDecorationStyle === 'dotted' ? 'round' : 'square',\n            transform: matrix,\n          })\n        )\n        .join('') + extraLine\n    )\n  }\n}\n","/**\n * This class handles everything related to fonts.\n */\nimport opentype from '@shuding/opentype.js'\nimport { inflateSync } from 'fflate'\nimport { Locale, locales, isValidLocale } from './language.js'\nimport {\n  shapeText,\n  parseFontFeatureSettings,\n  type ShapedGlyph,\n} from './harfbuzz.js'\nimport { segment } from './utils.js'\n\nconst MAX_SHAPED_RUN_CACHE_ENTRIES = 256\n\n/**\n * Check if a character is whitespace (space, tab, etc.)\n */\nfunction isWhitespace(char: string): boolean {\n  return /^\\s$/.test(char)\n}\n\n/**\n * Split content into segments where each segment uses the same font.\n * Returns array of [text, font] pairs.\n *\n * Whitespace characters are kept with the preceding segment's font when\n * possible. This ensures proper spacing within text runs and prevents\n * HarfBuzz from shaping whitespace separately (which can cause spacing issues).\n */\nfunction splitByFont(\n  content: string,\n  resolveFont: (word: string) => opentype.Font\n): Array<[string, opentype.Font]> {\n  if (!content) return []\n\n  const graphemes = segment(content, 'grapheme')\n  const result: Array<[string, opentype.Font]> = []\n\n  let currentText = ''\n  let currentFont: opentype.Font | null = null\n\n  for (const grapheme of graphemes) {\n    // For whitespace, try to keep it with the current font if the font\n    // has a glyph for it. This maintains proper spacing within text runs.\n    let font: opentype.Font\n    if (isWhitespace(grapheme) && currentFont !== null) {\n      // Check if current font has a glyph for this whitespace\n      if (currentFont.charToGlyphIndex(grapheme)) {\n        font = currentFont\n      } else {\n        font = resolveFont(grapheme)\n      }\n    } else {\n      font = resolveFont(grapheme)\n    }\n\n    if (currentFont === null) {\n      currentFont = font\n      currentText = grapheme\n    } else if (font === currentFont) {\n      currentText += grapheme\n    } else {\n      result.push([currentText, currentFont])\n      currentText = grapheme\n      currentFont = font\n    }\n  }\n\n  if (currentText && currentFont) {\n    result.push([currentText, currentFont])\n  }\n\n  return result\n}\n\n/** Whether font data is WOFF2, from its `wOF2` signature. */\nfunction isWoff2(data: ArrayBuffer) {\n  if (data.byteLength < 4) return false\n  const bytes = new Uint8Array(data, 0, 4)\n  return (\n    bytes[0] === 0x77 &&\n    bytes[1] === 0x4f &&\n    bytes[2] === 0x46 &&\n    bytes[3] === 0x32\n  )\n}\n\nconst FVAR = 0x66766172\n\n/**\n * Variable fonts are read as their default instance. opentype.js fails to\n * parse their `fvar` table, as it reads the names of the axes from the `name`\n * table, which it doesn't parse. So it's given a copy where the table is\n * renamed, and skips it.\n */\nfunction withoutVariations(data: ArrayBuffer) {\n  const view = new DataView(data)\n  if (data.byteLength < 12) return data\n  // The table records of WOFF and of TrueType or OpenType fonts.\n  const isWoff = view.getUint32(0) === 0x774f4646\n  const count = view.getUint16(isWoff ? 12 : 4)\n  const start = isWoff ? 44 : 12\n  const size = isWoff ? 20 : 16\n  for (let i = 0; i < count; i++) {\n    const record = start + i * size\n    if (record + 4 > data.byteLength) break\n    if (view.getUint32(record) === FVAR) {\n      const copy = data.slice(0)\n      // `_var`\n      new DataView(copy).setUint32(record, 0x5f766172)\n      return copy\n    }\n  }\n  return data\n}\n\n/**\n * Convert WOFF to raw sfnt (TrueType/OpenType) format for HarfBuzz.\n */\nfunction woffToSfnt(woff: ArrayBuffer): ArrayBuffer {\n  const view = new DataView(woff)\n  const numTables = view.getUint16(12)\n  const sfntSize = view.getUint32(16)\n\n  const sfnt = new ArrayBuffer(sfntSize)\n  const out = new DataView(sfnt)\n  const outBytes = new Uint8Array(sfnt)\n\n  // Write sfnt header (flavor from WOFF becomes signature)\n  out.setUint32(0, view.getUint32(4))\n  out.setUint16(4, numTables)\n  const entrySelector = Math.floor(Math.log2(numTables))\n  const searchRange = (1 << entrySelector) * 16\n  out.setUint16(6, searchRange)\n  out.setUint16(8, entrySelector)\n  out.setUint16(10, numTables * 16 - searchRange)\n\n  let tableOffset = 12 + numTables * 16\n\n  for (let i = 0; i < numTables; i++) {\n    const entry = 44 + i * 20\n    const tag = view.getUint32(entry)\n    const offset = view.getUint32(entry + 4)\n    const compLen = view.getUint32(entry + 8)\n    const origLen = view.getUint32(entry + 12)\n    const checksum = view.getUint32(entry + 16)\n\n    // Write table record\n    const record = 12 + i * 16\n    out.setUint32(record, tag)\n    out.setUint32(record + 4, checksum)\n    out.setUint32(record + 8, tableOffset)\n    out.setUint32(record + 12, origLen)\n\n    // Decompress or copy table data\n    if (compLen < origLen) {\n      const compressed = new Uint8Array(woff, offset + 2, compLen - 2)\n      outBytes.set(inflateSync(compressed), tableOffset)\n    } else {\n      outBytes.set(new Uint8Array(woff, offset, origLen), tableOffset)\n    }\n\n    tableOffset += (origLen + 3) & ~3\n  }\n\n  return sfnt\n}\n\nexport type Weight = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900\nexport type WeightName = 'normal' | 'bold'\nexport type FontWeight = Weight | WeightName\nexport type FontStyle = 'normal' | 'italic'\nconst SUFFIX_WHEN_LANG_NOT_SET = 'unknown'\n\nexport interface FontOptions {\n  data: Buffer | ArrayBuffer\n  name: string\n  weight?: Weight\n  style?: FontStyle\n  lang?: string\n}\n\nexport type GlyphBox = {\n  x1: number\n  x2: number\n  y1: number\n  y2: number\n}\n\n/**\n * The width of the stroke that emboldens synthetic bold glyphs, like the fake\n * bold of Skia, which Chrome uses: 1/24 of the font size at 9px and smaller,\n * and 1/32 at 36px and larger. Their advances don't change.\n */\nexport function getSyntheticBoldWidth(fontSize: number) {\n  const t = Math.min(1, Math.max(0, (fontSize - 9) / (36 - 9)))\n  return fontSize * (1 / 24 + (1 / 32 - 1 / 24) * t)\n}\n\n/** Synthetic italic glyphs are slanted by a quarter, like in Chrome. */\nconst SYNTHETIC_SKEW = 0.25\n\n/** Which styles are synthesized for the glyphs of a font. */\ntype Synthesis = (font: opentype.Font) => { bold: boolean; italic: boolean }\n\n/**\n * Whether a font style is italic or oblique enough to be slanted. Like in\n * Chrome, oblique angles smaller than 11deg aren't.\n * https://www.w3.org/TR/css-fonts-4/#font-style-matching\n */\nfunction isSlanted(fontStyle: string) {\n  if (fontStyle === 'italic') return true\n  const oblique = /^oblique(?:\\s+(-?[\\d.]+)deg)?$/.exec(fontStyle.trim())\n  return !!oblique && Number(oblique[1] ?? 14) >= 11\n}\n\n/**\n * Whether the bold and italic of a font are synthesized when it's missing,\n * from `fontSynthesis` and its longhands, which are both on by default.\n */\nfunction allowsSynthesis(style: {\n  fontSynthesis?: unknown\n  fontSynthesisWeight?: unknown\n  fontSynthesisStyle?: unknown\n}) {\n  const keywords = String(style.fontSynthesis ?? 'weight style').split(/\\s+/)\n  const longhand = (value: unknown, keyword: string) =>\n    value === undefined ? keywords.includes(keyword) : value !== 'none'\n  return {\n    weight: longhand(style.fontSynthesisWeight, 'weight'),\n    style: longhand(style.fontSynthesisStyle, 'style'),\n  }\n}\ntype SkipInkBand = {\n  underlineY: number\n  strokeWidth: number\n}\n\nexport type FontEngine = {\n  has: (s: string) => boolean\n  baseline: (s?: string, resolvedFont?: any) => number\n  height: (s?: string, resolvedFont?: any) => number\n  /** The ascent and descent of the content area, without the leading. */\n  ascent: (s?: string) => number\n  descent: (s?: string) => number\n  measure: (\n    s: string,\n    style: {\n      fontSize: number\n      letterSpacing: number\n      wordSpacing?: number\n      fontFeatureSettings?: string\n    }\n  ) => number\n  getSVG: (\n    s: string,\n    style: {\n      fontSize: number\n      top: number\n      left: number\n      letterSpacing: number\n      wordSpacing?: number\n      fontFeatureSettings?: string\n      /** The shaping direction, guessed from the text by default. */\n      direction?: TextDirection\n    },\n    band?: SkipInkBand\n  ) => GlyphPaths\n}\n\n/**\n * The paths of glyphs. Synthetic bold glyphs are in `boldPath`, which is\n * stroked to embolden them, see `getSyntheticBoldWidth()`.\n */\nexport interface GlyphPaths {\n  path: string\n  boldPath: string\n  boxes: GlyphBox[]\n}\n\nexport type TextDirection = 'ltr' | 'rtl'\n\ntype ShapedRun = [text: string, font: opentype.Font, glyphs: ShapedGlyph[]]\n\n/**\n * The characters that `word-spacing` is added to.\n *\n * @see https://www.w3.org/TR/css-text-3/#word-separator\n */\nconst WORD_SEPARATORS =\n  /[\\u0020\\u00a0\\u1361]|\\ud800[\\udd00\\udd01\\udf9f]|\\ud802\\udd1f/g\n\nfunction isWordSeparator(text: string, index: number) {\n  const char = String.fromCodePoint(text.codePointAt(index) ?? 0)\n  WORD_SEPARATORS.lastIndex = 0\n  return WORD_SEPARATORS.test(char)\n}\n\n/** `word-spacing` in pixels, `normal` is 0. */\nconst toWordSpacing = (value: number | string | undefined) =>\n  typeof value === 'number' ? value : 0\ntype GetShapedRuns = (\n  content: string,\n  fontFeatureSettings?: string,\n  direction?: TextDirection\n) => ShapedRun[]\n\ntype BandPoint = [number, number]\n\ntype LineSegment = {\n  from: BandPoint\n  to: BandPoint\n}\n\nfunction flattenPath(commands: opentype.Path['commands']): LineSegment[] {\n  const segments: LineSegment[] = []\n  let start: BandPoint = [0, 0]\n  let current: BandPoint = [0, 0]\n\n  const addCurve = (points: BandPoint[], steps: number) => {\n    let prev = points[0]\n    for (let i = 1; i <= steps; i++) {\n      const t = i / steps\n      const next = evaluateBezier(points, t)\n      segments.push({ from: prev, to: next })\n      prev = next\n    }\n    current = points[points.length - 1]\n  }\n\n  for (const cmd of commands) {\n    if (cmd.type === 'M') {\n      start = current = [cmd.x, cmd.y]\n      continue\n    }\n\n    if (cmd.type === 'L') {\n      const next: BandPoint = [cmd.x, cmd.y]\n      segments.push({ from: current, to: next })\n      current = next\n      continue\n    }\n\n    if (cmd.type === 'Q') {\n      addCurve([current, [cmd.x1, cmd.y1], [cmd.x, cmd.y]], 12)\n      continue\n    }\n\n    if (cmd.type === 'C') {\n      addCurve(\n        [current, [cmd.x1, cmd.y1], [cmd.x2, cmd.y2], [cmd.x, cmd.y]],\n        16\n      )\n      continue\n    }\n\n    if (cmd.type === 'Z') {\n      segments.push({ from: current, to: start })\n      current = start\n    }\n  }\n\n  return segments\n}\n\nfunction evaluateBezier(points: BandPoint[], t: number): BandPoint {\n  let working = points\n\n  while (working.length > 1) {\n    const next: BandPoint[] = []\n    for (let i = 0; i < working.length - 1; i++) {\n      next.push([\n        working[i][0] + (working[i + 1][0] - working[i][0]) * t,\n        working[i][1] + (working[i + 1][1] - working[i][1]) * t,\n      ])\n    }\n    working = next\n  }\n\n  return working[0]\n}\n\nfunction computeBandBox(\n  commands: opentype.Path['commands'],\n  band?: SkipInkBand\n): GlyphBox[] {\n  if (!band) return []\n\n  const strokeWidth = band.strokeWidth\n  const bandMin = band.underlineY - strokeWidth * 0.25\n  const bandMax = band.underlineY + strokeWidth * 2.5\n\n  const segments = flattenPath(commands)\n  if (!segments.length) return []\n\n  const bandHeight = bandMax - bandMin\n  const ySamples = Math.max(12, Math.ceil(bandHeight / 0.25))\n  const yStep = bandHeight / ySamples\n  const yStart = bandMin + yStep / 2\n\n  const columnHits = new Set<number>()\n\n  for (let i = 0; i < ySamples; i++) {\n    const y = yStart + yStep * i\n    const intersections: number[] = []\n\n    for (const seg of segments) {\n      const [x1, y1] = seg.from\n      const [x2, y2] = seg.to\n\n      if (y1 === y2) continue\n      const yMin = Math.min(y1, y2)\n      const yMax = Math.max(y1, y2)\n      if (y < yMin || y >= yMax) continue\n\n      const t = (y - y1) / (y2 - y1)\n      const x = x1 + (x2 - x1) * t\n      intersections.push(x)\n    }\n\n    if (!intersections.length) continue\n    intersections.sort((a, b) => a - b)\n\n    for (let j = 0; j < intersections.length - 1; j += 2) {\n      const from = Math.min(intersections[j], intersections[j + 1])\n      const to = Math.max(intersections[j], intersections[j + 1])\n      const start = Math.floor(from)\n      const end = Math.ceil(to)\n      for (let col = start; col < end; col++) {\n        columnHits.add(col)\n      }\n    }\n  }\n\n  if (!columnHits.size) return []\n\n  const columns = Array.from(columnHits.values()).sort((a, b) => a - b)\n  const inkRanges: [number, number][] = []\n\n  let rangeStart = columns[0]\n  let prev = columns[0]\n  for (let i = 1; i < columns.length; i++) {\n    const col = columns[i]\n    if (col > prev + 1) {\n      inkRanges.push([rangeStart, prev + 1])\n      rangeStart = col\n    }\n    prev = col\n  }\n  inkRanges.push([rangeStart, prev + 1])\n\n  const boxes: GlyphBox[] = []\n  const bleed = strokeWidth * 0.6\n  const minX = inkRanges[0][0]\n  const maxX = inkRanges[inkRanges.length - 1][1]\n\n  for (const [x1, x2] of inkRanges) {\n    const left = Math.min(x1, minX) - bleed\n    const right = Math.max(x2, maxX) + bleed\n    boxes.push({\n      x1: left,\n      x2: right,\n      y1: bandMin,\n      y2: bandMax,\n    })\n  }\n\n  return boxes\n}\n\nfunction computeBoundingBox(\n  commands: opentype.Path['commands']\n): GlyphBox | null {\n  const xs: number[] = []\n  const ys: number[] = []\n\n  for (const cmd of commands) {\n    if ('x' in cmd && typeof cmd.x === 'number') xs.push(cmd.x)\n    if ('y' in cmd && typeof cmd.y === 'number') ys.push(cmd.y)\n    if ('x1' in cmd && typeof cmd.x1 === 'number') xs.push(cmd.x1)\n    if ('y1' in cmd && typeof cmd.y1 === 'number') ys.push(cmd.y1)\n    if ('x2' in cmd && typeof cmd.x2 === 'number') xs.push(cmd.x2)\n    if ('y2' in cmd && typeof cmd.y2 === 'number') ys.push(cmd.y2)\n  }\n\n  if (!xs.length || !ys.length) {\n    return null\n  }\n\n  return {\n    x1: Math.min(...xs),\n    x2: Math.max(...xs),\n    y1: Math.min(...ys),\n    y2: Math.max(...ys),\n  }\n}\n\nfunction compareFont(\n  weight,\n  style,\n  [matchedWeight, matchedStyle],\n  [nextWeight, nextStyle]\n) {\n  if (matchedWeight !== nextWeight) {\n    // Put the defined weight first.\n    if (!matchedWeight) return 1\n    if (!nextWeight) return -1\n\n    // Exact match.\n    if (matchedWeight === weight) return -1\n    if (nextWeight === weight) return 1\n\n    // 400 and 500.\n    if (weight === 400 && matchedWeight === 500) return -1\n    if (weight === 500 && matchedWeight === 400) return -1\n    if (weight === 400 && nextWeight === 500) return 1\n    if (weight === 500 && nextWeight === 400) return 1\n\n    // Less than 400.\n    if (weight < 400) {\n      if (matchedWeight < weight && nextWeight < weight)\n        return nextWeight - matchedWeight\n      if (matchedWeight < weight) return -1\n      if (nextWeight < weight) return 1\n      return matchedWeight - nextWeight\n    }\n\n    // Greater than 500.\n    if (weight < matchedWeight && weight < nextWeight)\n      return matchedWeight - nextWeight\n    if (weight < matchedWeight) return -1\n    if (weight < nextWeight) return 1\n    return nextWeight - matchedWeight\n  }\n\n  if (matchedStyle !== nextStyle) {\n    // Exact match.\n    if (matchedStyle === style) return -1\n    if (nextStyle === style) return 1\n  }\n\n  return -1\n}\n\nconst cachedParsedFont = new WeakMap<\n  Buffer | ArrayBuffer,\n  opentype.Font | null | undefined\n>()\n\nexport default class FontLoader {\n  defaultFont: opentype.Font\n  fonts = new Map<string, [opentype.Font, Weight?, FontStyle?][]>()\n  // Shaping results are cached on the loader (which persists across renders\n  // for the same font configuration) so repeated renders don't re-shape\n  // identical text runs with HarfBuzz.\n  private shapedRunCache = new Map<string, ShapedRun[]>()\n  /** Decodes WOFF2 fonts, see `crates/layout`. */\n  private decodeWoff2?: (data: Uint8Array) => ArrayBuffer | undefined\n  constructor(\n    fontOptions: FontOptions[],\n    decodeWoff2?: (data: Uint8Array) => ArrayBuffer | undefined\n  ) {\n    this.decodeWoff2 = decodeWoff2\n    this.addFonts(fontOptions)\n  }\n\n  // Get font by name and weight.\n  private get({\n    name,\n    weight,\n    style,\n  }: {\n    name: string\n    weight: Weight | WeightName\n    style: FontStyle\n  }) {\n    if (!this.fonts.has(name)) {\n      return null\n    }\n\n    if (weight === 'normal') weight = 400\n    if (weight === 'bold') weight = 700\n    if (typeof weight === 'string')\n      weight = Number.parseInt(weight, 10) as Weight\n\n    const fonts = [...this.fonts.get(name)]\n\n    let matchedFont = fonts[0]\n\n    // Fallback to the closest weight and style according to the strategy here:\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#fallback_weights\n    for (let i = 1; i < fonts.length; i++) {\n      const [, weight1, style1] = matchedFont\n      const [, weight2, style2] = fonts[i]\n      if (\n        compareFont(weight, style, [weight1, style1], [weight2, style2]) > 0\n      ) {\n        matchedFont = fonts[i]\n      }\n    }\n\n    return matchedFont[0]\n  }\n\n  private chRatios = new Map<string, number>()\n\n  /**\n   * The width of `0` relative to the font size, for the `ch` unit, or\n   * `undefined` without fonts.\n   */\n  public getChRatio(style: {\n    fontFamily?: string | string[]\n    fontWeight?: FontWeight\n    fontStyle?: FontStyle\n  }) {\n    if (!this.fonts.size) return\n    const key = [\n      [style.fontFamily].flat().join(','),\n      style.fontWeight,\n      style.fontStyle,\n    ].join('|')\n    let ratio = this.chRatios.get(key)\n    if (ratio === undefined) {\n      ratio = this.getEngine(1, 'normal', style, undefined).measure('0', {\n        fontSize: 1,\n        letterSpacing: 0,\n      })\n      this.chRatios.set(key, ratio)\n    }\n    return ratio\n  }\n\n  /**\n   * The average width of characters relative to the font size, for the width\n   * of text inputs, or `undefined` without fonts. Like in Chrome, it's from\n   * the first font of the family, or the width of `0`.\n   */\n  public getAverageCharRatio(style: {\n    fontFamily?: string | string[]\n    fontWeight?: FontWeight\n    fontStyle?: FontStyle\n  }) {\n    if (!this.fonts.size) return\n    const weight = style.fontWeight ?? 400\n    const fontStyle = style.fontStyle ?? 'normal'\n    let font: opentype.Font | null = null\n    for (const family of [style.fontFamily ?? []].flat()) {\n      const name = family.toLowerCase()\n      font =\n        this.get({ name, weight, style: fontStyle }) ??\n        this.get({ name: name + '_unknown', weight, style: fontStyle })\n      if (font) break\n    }\n    font ??= this.get({\n      name: this.fonts.keys().next().value,\n      weight,\n      style: fontStyle,\n    })\n    const average = font?.tables.os2?.xAvgCharWidth\n    return average > 0 ? average / font.unitsPerEm : this.getChRatio(style)\n  }\n\n  public addFonts(fontOptions: FontOptions[]) {\n    // Adding fonts can change how text resolves across the font list, so\n    // previously shaped runs may no longer be correct.\n    if (fontOptions.length && this.fonts.size) {\n      this.shapedRunCache.clear()\n      this.chRatios.clear()\n    }\n    for (const fontOption of fontOptions) {\n      const { name, data, lang } = fontOption\n      if (lang && !isValidLocale(lang)) {\n        throw new Error(\n          `Invalid value for props \\`lang\\`: \"${lang}\". The value must be one of the following: ${locales.join(\n            ', '\n          )}.`\n        )\n      }\n      const _lang = lang ?? SUFFIX_WHEN_LANG_NOT_SET\n      let font\n\n      if (cachedParsedFont.has(data)) {\n        font = cachedParsedFont.get(data)\n      } else {\n        // Convert Buffer to ArrayBuffer if needed\n        let arrayBuffer =\n          'buffer' in data\n            ? data.buffer.slice(\n                data.byteOffset,\n                data.byteOffset + data.byteLength\n              )\n            : data\n\n        // WOFF2 fonts are decoded into TrueType or OpenType fonts.\n        if (isWoff2(arrayBuffer)) {\n          const decoded = this.decodeWoff2?.(new Uint8Array(arrayBuffer))\n          if (!decoded) {\n            throw new Error(`Failed to decode the WOFF2 font \"${name}\".`)\n          }\n          arrayBuffer = decoded\n        }\n\n        font = opentype.parse(\n          withoutVariations(arrayBuffer),\n          // @ts-ignore\n          { lowMemory: true }\n        )\n\n        // Store the raw font data for HarfBuzz (convert WOFF to sfnt if needed)\n        const bytes = new Uint8Array(arrayBuffer)\n        const isWoff =\n          bytes[0] === 0x77 &&\n          bytes[1] === 0x4f &&\n          bytes[2] === 0x46 &&\n          bytes[3] === 0x46\n        ;(font as any)._rawFontData = isWoff\n          ? woffToSfnt(arrayBuffer)\n          : arrayBuffer\n\n        // Modify the `charToGlyphIndex` method, so we can know which char is\n        // being mapped to which glyph.\n        const originalCharToGlyphIndex = font.charToGlyphIndex\n        font.charToGlyphIndex = (char) => {\n          const index = originalCharToGlyphIndex.call(font, char)\n          if (index === 0) {\n            // The current requested char is missing a glyph.\n            if ((font as any)._trackBrokenChars) {\n              ;(font as any)._trackBrokenChars.push(char)\n            }\n          }\n          return index\n        }\n\n        cachedParsedFont.set(data, font)\n      }\n\n      // We use the first font as the default font fallback.\n      if (!this.defaultFont) this.defaultFont = font\n\n      const _name = `${name.toLowerCase()}_${_lang}`\n\n      if (!this.fonts.has(_name)) {\n        this.fonts.set(_name, [])\n      }\n      this.fonts.get(_name).push([font, fontOption.weight, fontOption.style])\n    }\n  }\n\n  public getEngine(\n    fontSize = 16,\n    lineHeight: number | string = 'normal',\n    {\n      fontFamily = 'sans-serif',\n      fontWeight = 400,\n      fontStyle = 'normal',\n      ...synthesisStyle\n    }: {\n      fontFamily?: string | string[]\n      fontWeight?: FontWeight\n      fontStyle?: FontStyle\n      fontSynthesis?: unknown\n      fontSynthesisWeight?: unknown\n      fontSynthesisStyle?: unknown\n    },\n    locale: Locale | undefined\n  ): FontEngine {\n    if (!this.fonts.size) {\n      throw new Error(\n        'No fonts are loaded. At least one font is required to calculate the layout.'\n      )\n    }\n\n    fontFamily = (Array.isArray(fontFamily) ? fontFamily : [fontFamily]).map(\n      (name) => name.toLowerCase()\n    )\n    const fonts = []\n    fontFamily.forEach((face) => {\n      const getNormal = this.get({\n        name: face,\n        weight: fontWeight,\n        style: fontStyle,\n      })\n      if (getNormal) {\n        fonts.push(getNormal)\n        return\n      }\n\n      const getUnknown = this.get({\n        name: face + '_unknown',\n        weight: fontWeight,\n        style: fontStyle,\n      })\n\n      if (getUnknown) {\n        fonts.push(getUnknown)\n        return\n      }\n    })\n\n    // Add additional fonts as the fallback.\n    const keys = Array.from(this.fonts.keys())\n    const specifiedLangFonts = []\n    const nonSpecifiedLangFonts = []\n    const additionalFonts = []\n    for (const name of keys) {\n      if (fontFamily.includes(name)) continue\n      if (locale) {\n        const lang = getLangFromFontName(name)\n        if (lang) {\n          if (lang === locale) {\n            specifiedLangFonts.push(\n              this.get({\n                name,\n                weight: fontWeight,\n                style: fontStyle,\n              })\n            )\n          } else {\n            nonSpecifiedLangFonts.push(\n              this.get({\n                name,\n                weight: fontWeight,\n                style: fontStyle,\n              })\n            )\n          }\n        } else {\n          additionalFonts.push(\n            this.get({\n              name,\n              weight: fontWeight,\n              style: fontStyle,\n            })\n          )\n        }\n      } else {\n        additionalFonts.push(\n          this.get({\n            name,\n            weight: fontWeight,\n            style: fontStyle,\n          })\n        )\n      }\n    }\n\n    const cachedFontResolver = new Map<number, opentype.Font | undefined>()\n    const resolveFont = (word: string, fallback = true) => {\n      const _fonts = [\n        ...fonts,\n        ...additionalFonts,\n        ...specifiedLangFonts,\n        ...(fallback ? nonSpecifiedLangFonts : []),\n      ]\n\n      if (typeof word === 'undefined') {\n        if (fallback) {\n          return _fonts[_fonts.length - 1]\n        }\n        return undefined\n      }\n\n      const code = word.charCodeAt(0)\n      if (cachedFontResolver.has(code)) return cachedFontResolver.get(code)\n\n      const font = _fonts.find((_font, index) => {\n        return (\n          !!_font.charToGlyphIndex(word) ||\n          (fallback && index === _fonts.length - 1)\n        )\n      })\n\n      if (font) {\n        cachedFontResolver.set(code, font)\n      }\n\n      return font\n    }\n\n    // Like in Chrome, bold is synthesized when the weight is at least 600 and\n    // the font isn't bold, and italic when the style is italic or oblique and\n    // the font isn't italic. They're found from the font itself.\n    const requestedWeight =\n      fontWeight === 'bold'\n        ? 700\n        : fontWeight === 'normal'\n        ? 400\n        : Number(fontWeight) || 400\n    const allowed = allowsSynthesis(synthesisStyle)\n    const slanted = isSlanted(String(fontStyle))\n    const synthesis: Synthesis = (font) => {\n      const { os2, head } = font.tables || {}\n      return {\n        bold:\n          allowed.weight &&\n          requestedWeight >= 600 &&\n          (os2?.usWeightClass || 400) < 600,\n        italic:\n          allowed.style &&\n          slanted &&\n          !(os2?.fsSelection & 1) &&\n          !(head?.macStyle & 2),\n      }\n    }\n\n    const ascender = (resolvedFont: opentype.Font, useOS2Table = false) => {\n      const _ascender =\n        (useOS2Table ? resolvedFont.tables?.os2?.sTypoAscender : 0) ||\n        resolvedFont.ascender\n      return (_ascender / resolvedFont.unitsPerEm) * fontSize\n    }\n\n    const descender = (resolvedFont: opentype.Font, useOS2Table = false) => {\n      const _descender =\n        (useOS2Table ? resolvedFont.tables?.os2?.sTypoDescender : 0) ||\n        resolvedFont.descender\n      return (_descender / resolvedFont.unitsPerEm) * fontSize\n    }\n\n    const height = (resolvedFont: opentype.Font, useOS2Table = false) => {\n      if ('string' === typeof lineHeight && 'normal' === lineHeight) {\n        const _lineGap =\n          (useOS2Table ? resolvedFont.tables?.os2?.sTypoLineGap : 0) || 0\n        return (\n          ascender(resolvedFont, useOS2Table) -\n          descender(resolvedFont, useOS2Table) +\n          (_lineGap / resolvedFont.unitsPerEm) * fontSize\n        )\n      } else if ('number' === typeof lineHeight) {\n        return fontSize * lineHeight\n      }\n    }\n\n    const resolve = (s: string) => {\n      return resolveFont(s, false)\n    }\n\n    // Text is shaped during both measurement and SVG generation, and the same\n    // text is typically shaped again on subsequent renders. Cache the result\n    // on the loader (keyed by the resolved font configuration) so both the\n    // second pass of this render and future renders can reuse it.\n    // Shaped glyphs are in font units, so the key only needs the inputs that\n    // affect font resolution and shaping — not the font size.\n    const shapedRunCache = this.shapedRunCache\n    const engineKey = `${fontFamily.join(',')}|${fontWeight}|${fontStyle}|${\n      locale || ''\n    }`\n    const getShapedRuns: GetShapedRuns = (\n      content,\n      fontFeatureSettings,\n      direction\n    ) => {\n      const key = `${engineKey}\\0${fontFeatureSettings || ''}\\0${\n        direction || ''\n      }\\0${content}`\n      const cached = shapedRunCache.get(key)\n\n      if (cached !== undefined) {\n        shapedRunCache.delete(key)\n        shapedRunCache.set(key, cached)\n        return cached\n      }\n\n      const features = fontFeatureSettings\n        ? parseFontFeatureSettings(fontFeatureSettings)\n        : {}\n      const shapedRuns = splitByFont(content, resolveFont).map(\n        ([text, font]): ShapedRun => [\n          text,\n          font,\n          shapeText(font, text, { features, direction }),\n        ]\n      )\n\n      if (shapedRunCache.size >= MAX_SHAPED_RUN_CACHE_ENTRIES) {\n        const oldestKey = shapedRunCache.keys().next().value\n        if (oldestKey !== undefined) shapedRunCache.delete(oldestKey)\n      }\n      shapedRunCache.set(key, shapedRuns)\n      return shapedRuns\n    }\n\n    const engine = {\n      has: (s: string) => {\n        if (s === '\\n') return true\n        // Characters followed by U+FE0F or a keycap (U+20E3) are emojis, even\n        // if a font has them, like digits and the copyright sign.\n        if (/[\\uFE0F\\u20E3]/.test(s)) return false\n        const font = resolve(s)\n        if (!font) return false\n        // Use charToGlyphIndex directly instead of stringToGlyphs to avoid\n        // triggering opentype.js GSUB processing which can emit warnings for\n        // unsupported lookup types (e.g., \"lookupType: 5 - substFormat: 3\").\n        // We only need to check if basic glyphs exist for the characters.\n        for (const char of segment(s, 'grapheme')) {\n          if (!font.charToGlyphIndex(char)) return false\n        }\n        return true\n      },\n      baseline: (\n        s?: string,\n        resolvedFont = typeof s === 'undefined' ? fonts[0] : resolveFont(s)\n      ) => {\n        // Like in Chrome, the ascent and descent are rounded to pixels, and\n        // half of the leading is floored.\n        const asc = Math.round(ascender(resolvedFont))\n        const desc = Math.round(-descender(resolvedFont))\n        return asc + Math.floor((height(resolvedFont) - asc - desc) / 2)\n      },\n      height: (\n        s?: string,\n        resolvedFont = typeof s === 'undefined' ? fonts[0] : resolveFont(s)\n      ) => {\n        return height(resolvedFont)\n      },\n      ascent: (s?: string) =>\n        ascender(typeof s === 'undefined' ? fonts[0] : resolveFont(s)),\n      descent: (s?: string) =>\n        -descender(typeof s === 'undefined' ? fonts[0] : resolveFont(s)),\n      measure: (\n        s: string,\n        style: {\n          fontSize: number\n          letterSpacing: number\n          wordSpacing?: number\n        }\n      ) => {\n        return this.measure(s, style, getShapedRuns)\n      },\n      getSVG: (\n        s: string,\n        style: {\n          fontSize: number\n          top: number\n          left: number\n          letterSpacing: number\n          wordSpacing?: number\n          direction?: TextDirection\n        },\n        band?: SkipInkBand\n      ) => {\n        return this.getSVG(s, style, getShapedRuns, synthesis, band)\n      },\n    }\n\n    return engine\n  }\n\n  private patchFontFallbackResolver(\n    font: opentype.Font,\n    resolveFont: (word: string, fallback?: boolean) => opentype.Font\n  ) {\n    const brokenChars = []\n    ;(font as any)._trackBrokenChars = brokenChars\n\n    const originalStringToGlyphs = font.stringToGlyphs\n    font.stringToGlyphs = (s: string, ...args: any) => {\n      const glyphs = originalStringToGlyphs.call(font, s, ...args)\n\n      for (let i = 0; i < glyphs.length; i++) {\n        // Hitting an undefined glyph. We have to try to resolve it from other\n        // fonts.\n        // @TODO: This affects the kerning resolution but should be fine for now.\n        if (glyphs[i].unicode === undefined) {\n          const char = brokenChars.shift()\n          const anotherFont = resolveFont(char)\n          if (anotherFont !== font) {\n            const glyph = anotherFont.charToGlyph(char)\n            // Scale the glyph to match the current units per em.\n            const scale = font.unitsPerEm / anotherFont.unitsPerEm\n            const p = new opentype.Path()\n            p.unitsPerEm = font.unitsPerEm\n            p.commands = glyph.path.commands.map((command) => {\n              const scaledCommand = { ...command }\n              for (let k in scaledCommand) {\n                if (typeof scaledCommand[k] === 'number') {\n                  scaledCommand[k] *= scale\n                }\n              }\n              return scaledCommand\n            })\n            const g = new opentype.Glyph({\n              ...glyph,\n              advanceWidth: glyph.advanceWidth * scale,\n              xMin: glyph.xMin * scale,\n              xMax: glyph.xMax * scale,\n              yMin: glyph.yMin * scale,\n              yMax: glyph.yMax * scale,\n              path: p,\n            })\n\n            glyphs[i] = g\n          }\n        }\n      }\n\n      return glyphs\n    }\n\n    return () => {\n      font.stringToGlyphs = originalStringToGlyphs\n      ;(font as any)._trackBrokenChars = undefined\n    }\n  }\n\n  private measure(\n    content: string,\n    {\n      fontSize,\n      letterSpacing = 0,\n      wordSpacing,\n      fontFeatureSettings,\n    }: {\n      fontSize: number\n      letterSpacing: number\n      wordSpacing?: number\n      fontFeatureSettings?: string\n    },\n    getShapedRuns: GetShapedRuns\n  ) {\n    const shapedRuns = getShapedRuns(content, fontFeatureSettings)\n\n    let totalWidth = 0\n    let clusterCount = 0\n    for (const [, font, glyphs] of shapedRuns) {\n      let segmentWidth = 0\n      for (let i = 0; i < glyphs.length; i++) {\n        segmentWidth += glyphs[i].ax\n        if (glyphs[i + 1]?.cl !== glyphs[i].cl) clusterCount++\n      }\n\n      totalWidth += (segmentWidth / font.unitsPerEm) * fontSize\n    }\n\n    // Like in browsers, letter spacing is added after every character,\n    // including the last one, and a ligature is one character.\n    const spacingWidth = letterSpacing * clusterCount\n    const separators = wordSpacing\n      ? content.match(WORD_SEPARATORS)?.length ?? 0\n      : 0\n\n    return totalWidth + spacingWidth + separators * toWordSpacing(wordSpacing)\n  }\n\n  private getSVG(\n    content: string,\n    {\n      fontSize,\n      top,\n      left,\n      letterSpacing = 0,\n      wordSpacing,\n      fontFeatureSettings,\n      direction,\n    }: {\n      fontSize: number\n      top: number\n      left: number\n      letterSpacing: number\n      wordSpacing?: number\n      fontFeatureSettings?: string\n      direction?: TextDirection\n    },\n    getShapedRuns: GetShapedRuns,\n    synthesis: Synthesis,\n    band?: SkipInkBand\n  ): GlyphPaths {\n    if (fontSize === 0) {\n      return { path: '', boldPath: '', boxes: [] }\n    }\n\n    let shapedRuns = getShapedRuns(\n      content.replace(/\\n/g, ''),\n      fontFeatureSettings,\n      direction\n    )\n    // The glyphs of each run are in visual order, and so are the runs of\n    // right-to-left text when they're reversed.\n    if (direction === 'rtl') shapedRuns = shapedRuns.slice().reverse()\n\n    const boxes: GlyphBox[] = []\n\n    let cursorX = left\n    const cursorY = top\n\n    let path = ''\n    let boldPath = ''\n\n    const extraWordSpacing = toWordSpacing(wordSpacing)\n\n    // Process each font segment\n    for (const [runText, font, glyphs] of shapedRuns) {\n      const scale = fontSize / font.unitsPerEm\n      const { bold, italic } = synthesis(font)\n      const skew = italic ? SYNTHETIC_SKEW : 0\n\n      // DEBUG: Uncomment to trace glyph positions\n      // console.log(`getSVG segment: \"${text}\", fontSize=${fontSize}, letterSpacing=${letterSpacing}`)\n\n      // Process shaped glyphs for this segment\n      for (let i = 0; i < glyphs.length; i++) {\n        const shapedGlyph = glyphs[i]\n\n        // Get the glyph from opentype.js by ID\n        const glyph = font.glyphs.get(shapedGlyph.g)\n\n        // DEBUG: Uncomment to trace glyph positions\n        // const char = text[i] || '?'\n        // console.log(`  [${i}] char=\"${char}\" glyph=${shapedGlyph.g} cursorX=${cursorX.toFixed(2)} ax=${shapedGlyph.ax} advance=${(shapedGlyph.ax * scale).toFixed(2)}px`)\n\n        if (glyph && glyph.path) {\n          // Calculate glyph position\n          const gX = cursorX + shapedGlyph.dx * scale\n          const gY = cursorY + shapedGlyph.dy * scale\n\n          // Like `glyph.getPath()`, scaled by the units per em of the path.\n          const data = glyphPathData(\n            glyph.path.commands,\n            gX,\n            gY,\n            fontSize / (glyph.path.unitsPerEm || 1000),\n            skew\n          )\n          if (bold) boldPath += data\n          else path += data\n\n          // Compute band boxes for text decoration skip-ink\n          if (band) {\n            let commands = glyph.getPath(gX, gY, fontSize, {}).commands\n            if (skew) commands = skewCommands(commands, gY, skew)\n            const bandBoxes = computeBandBox(commands, band)\n            if (bandBoxes.length) boxes.push(...bandBoxes)\n          }\n        }\n\n        // Advance cursor by the shaped advance.\n        cursorX += shapedGlyph.ax * scale\n\n        // Letter spacing is added after the last glyph of every character,\n        // and word spacing after the last glyph of a word separator.\n        if (glyphs[i + 1]?.cl !== shapedGlyph.cl) {\n          cursorX += letterSpacing\n          if (extraWordSpacing && isWordSeparator(runText, shapedGlyph.cl)) {\n            cursorX += extraWordSpacing\n          }\n        }\n      }\n    }\n\n    return { path, boldPath, boxes }\n  }\n}\n\n/** Slants path commands in px around the baseline at `y`. */\nfunction skewCommands(\n  commands: opentype.Path['commands'],\n  y: number,\n  skew: number\n): opentype.Path['commands'] {\n  return commands.map((command) => {\n    const skewed = { ...command } as any\n    if ('x' in command) skewed.x = command.x + skew * (y - command.y)\n    if ('x1' in command) skewed.x1 = command.x1 + skew * (y - command.y1)\n    if ('x2' in command) skewed.x2 = command.x2 + skew * (y - command.y2)\n    return skewed\n  })\n}\n\n// Rounds to 0.1px, half away from zero like `toPathData(1)` of opentype.js.\nconst round = (value: number) =>\n  (value < 0 ? -Math.round(-value * 10) : Math.round(value * 10)) / 10\n\n/**\n * The SVG path data of a glyph, from its commands in font units, positioned at\n * the baseline and scaled to px. Faster than transforming and serializing\n * opentype.js paths. `skew` slants it, by how far it moves points to the\n * right for each unit above the baseline.\n */\nfunction glyphPathData(\n  commands: opentype.Path['commands'],\n  x: number,\n  y: number,\n  scale: number,\n  skew = 0\n) {\n  const px = (cx: number, cy: number) => round(x + (cx + skew * cy) * scale)\n  const py = (cy: number) => round(y - cy * scale)\n  let data = ''\n  for (const command of commands) {\n    switch (command.type) {\n      case 'M':\n      case 'L':\n        data += `${command.type}${px(command.x, command.y)} ${py(command.y)}`\n        break\n      case 'Q':\n        data += `Q${px(command.x1, command.y1)} ${py(command.y1)} ${px(\n          command.x,\n          command.y\n        )} ${py(command.y)}`\n        break\n      case 'C':\n        data += `C${px(command.x1, command.y1)} ${py(command.y1)} ${px(\n          command.x2,\n          command.y2\n        )} ${py(command.y2)} ${px(command.x, command.y)} ${py(command.y)}`\n        break\n      case 'Z':\n        data += 'Z'\n        break\n    }\n  }\n  return data\n}\n\nfunction getLangFromFontName(name: string): Locale | undefined {\n  const arr = name.split('_')\n  const lang = arr[arr.length - 1]\n\n  return lang === SUFFIX_WHEN_LANG_NOT_SET ? undefined : (lang as Locale)\n}\n","const r = String.raw,\n  e = r`\\p{Emoji}(?:\\p{EMod}|[\\u{E0020}-\\u{E007E}]+\\u{E007F}|\\uFE0F?\\u20E3?)`;\nexport default () => new RegExp(r`\\p{RI}{2}|(?![#*\\d](?!\\uFE0F?\\u20E3))${e}(?:\\u200D${e})*`, 'gu');\n","// This function guesses the human language (writing system) of the given\n// JavaScript string, using the Unicode Alias in extended RegExp.\n//\n// You can learn more about this in:\n// - https://en.wikipedia.org/wiki/Script_(Unicode)\n// - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes\n// - https://unicode.org/reports/tr18/#General_Category_Property\n// - https://tc39.es/ecma262/multipage/text-processing.html#table-unicode-script-values\n\nimport createEmojiRegex from 'emoji-regex-xs'\n\nconst emojiRegex = new RegExp(createEmojiRegex(), 'u')\n\n// Supported languages. The order matters.\n// Usually, this is only for \"special cases\" like CJKV languages as latin\n// characters are usually included in the base font, and can be safely fallback\n// to the Noto Sans font. A list of special cases we want to support can be\n// found here (sort by popularity):\n// - https://fonts.google.com/noto/fonts?sort=popularity&noto.query=sans\n//\n// We can't tell if a hanzi(kanji) is Chinese or Japanese by regular expressions.\n// - https://unicode.org/faq/han_cjk.html\n\nconst specialCode = {\n  emoji: emojiRegex,\n  symbol: /\\p{Symbol}/u,\n  math: /\\p{Math}/u,\n} as const\n\nconst code = {\n  'ja-JP': /\\p{scx=Hira}|\\p{scx=Kana}|\\p{scx=Han}|[\\u3000]|[\\uFF00-\\uFFEF]/u,\n  'ko-KR': /\\p{scx=Hangul}/u,\n  'zh-CN': /\\p{scx=Han}/u,\n  'zh-TW': /\\p{scx=Han}/u,\n  'zh-HK': /\\p{scx=Han}/u,\n  'th-TH': /\\p{scx=Thai}/u,\n  'bn-IN': /\\p{scx=Bengali}/u,\n  'ar-AR': /\\p{scx=Arabic}/u,\n  'ta-IN': /\\p{scx=Tamil}/u,\n  'ml-IN': /\\p{scx=Malayalam}/u,\n  'he-IL': /\\p{scx=Hebrew}/u,\n  'te-IN': /\\p{scx=Telugu}/u,\n  devanagari: /\\p{scx=Devanagari}/u,\n  kannada: /\\p{scx=Kannada}/u,\n} as const\n\ntype SpecialCodeKey = keyof typeof specialCode\ntype CodeKey = keyof typeof specialCode | keyof typeof code\nexport type Locale = keyof typeof code\nexport type LangCode = CodeKey | 'unknown'\n\nexport const locales = Object.keys({ ...code, ...specialCode }) as Locale[]\nexport function isValidLocale(x: any): x is Locale {\n  return locales.includes(x)\n}\n\nexport function detectLanguageCode(\n  segment: string,\n  locale?: Locale\n): Array<Locale> | ['unknown'] | [SpecialCodeKey] {\n  // U+FE0E asks for a character that is text by default, like a heart, to be\n  // drawn as text. Characters that are emojis by default stay emojis, which\n  // is how browsers draw them when no font has them as text.\n  const isTextPresentation =\n    segment.includes('\\uFE0E') && !/\\p{Emoji_Presentation}/u.test(segment)\n\n  for (const c of Object.keys(specialCode) as SpecialCodeKey[]) {\n    if (c === 'emoji' && isTextPresentation) continue\n    if (specialCode[c].test(segment)) {\n      return [c]\n    }\n  }\n\n  const languages = Object.keys(code).filter((lang) =>\n    code[lang].test(segment)\n  ) as Locale[]\n\n  if (languages.length === 0) {\n    return ['unknown']\n  }\n\n  if (locale) {\n    const index = languages.findIndex((lang) => lang === locale)\n    if (index !== -1) {\n      languages.splice(index, 1)\n      languages.unshift(locale)\n    }\n  }\n\n  return languages\n}\n\nexport function normalizeLocale(locale?: string): Locale | undefined {\n  if (locale) {\n    return locales.find((l) => l.toLowerCase().startsWith(locale.toLowerCase()))\n  }\n}\n","/**\n * HarfBuzz wrapper module for advanced text shaping with OpenType features.\n * This module provides text shaping capabilities while maintaining compatibility\n * with the existing opentype.js-based system.\n */\n\nimport opentype from '@shuding/opentype.js'\nimport harfbuzzjsPromise from 'harfbuzzjs'\n\n// HarfBuzz types (will be populated when module loads)\nlet hb: any = null\nlet initPromise: Promise<void> | null = null\n\n/**\n * Shape result from HarfBuzz containing glyph IDs and positions\n */\nexport interface ShapedGlyph {\n  g: number // glyph ID\n  cl: number // cluster (character index)\n  ax: number // advance x\n  ay: number // advance y\n  dx: number // offset x\n  dy: number // offset y\n}\n\n/**\n * Font features configuration\n * Maps feature tags to boolean or numeric values\n * Examples: { liga: true, kern: true, smcp: 1 }\n */\nexport interface FontFeatures {\n  [feature: string]: boolean | number\n}\n\n/**\n * Internal cache for HarfBuzz font objects\n */\nconst hbFontCache = new WeakMap<opentype.Font, any>()\nconst hbFontFinalizer =\n  typeof FinalizationRegistry === 'function'\n    ? new FinalizationRegistry<any>((font) => font.destroy())\n    : null\n\n/**\n * Initialize HarfBuzz WASM module\n * Must be called before using any shaping functions\n */\nexport async function initHarfBuzz(): Promise<void> {\n  // If already initialized, return immediately\n  if (hb) return\n\n  // If initialization is in progress, wait for it\n  if (initPromise) {\n    await initPromise\n    return\n  }\n\n  // Start initialization\n  initPromise = (async () => {\n    hb = await harfbuzzjsPromise\n\n    if (!hb || typeof hb.createBlob !== 'function') {\n      throw new Error('HarfBuzz module loaded but API is not available')\n    }\n  })()\n\n  await initPromise\n}\n\n/**\n * Create or get cached HarfBuzz font from opentype.js font\n */\nfunction getHarfBuzzFont(font: opentype.Font): any {\n  if (!hb) {\n    throw new Error('HarfBuzz not initialized. Call initHarfBuzz() first.')\n  }\n\n  // Check cache first\n  if (hbFontCache.has(font)) {\n    const cached = hbFontCache.get(font)\n    return cached\n  }\n\n  // Get the raw font data (already converted from WOFF if needed in font.ts)\n  const arrayBuffer = (font as any)._rawFontData\n\n  if (!arrayBuffer) {\n    throw new Error(\n      'Font does not have _rawFontData. Make sure to store the original ' +\n        'ArrayBuffer when loading fonts.'\n    )\n  }\n\n  const blob = hb.createBlob(new Uint8Array(arrayBuffer))\n  const face = hb.createFace(blob, 0)\n  const hbFont = hb.createFont(face)\n\n  // The HarfBuzz font keeps the face alive, and the face keeps the blob alive.\n  // Release our temporary references immediately and destroy the font when the\n  // matching opentype.js font is collected.\n  face.destroy()\n  blob.destroy()\n\n  // Set scale to unitsPerEm so advances are returned in font design units.\n  // The caller scales by (fontSize / unitsPerEm) to convert to pixels.\n  const upem = font.unitsPerEm\n  hbFont.setScale(upem, upem)\n\n  // Cache the HarfBuzz font\n  hbFontCache.set(font, hbFont)\n  hbFontFinalizer?.register(font, hbFont)\n\n  return hbFont\n}\n\n/**\n * Shape text using HarfBuzz with optional OpenType features\n *\n * @param font - opentype.js font object\n * @param text - text to shape\n * @param features - optional OpenType features to apply\n * @param language - optional language code (e.g., 'en', 'ar')\n * @param script - optional script code (e.g., 'latn', 'arab')\n * @param direction - text direction ('ltr', 'rtl', 'ttb', 'btt')\n * @returns Array of shaped glyphs with IDs and positions\n */\nexport function shapeText(\n  font: opentype.Font,\n  text: string,\n  options: {\n    features?: FontFeatures\n    language?: string\n    script?: string\n    direction?: 'ltr' | 'rtl' | 'ttb' | 'btt'\n  } = {}\n): ShapedGlyph[] {\n  if (!hb) {\n    throw new Error('HarfBuzz not initialized')\n  }\n\n  // Handle empty string\n  if (!text || text.length === 0) {\n    return []\n  }\n\n  const { features, language, script, direction } = options\n\n  // Get or create HarfBuzz font\n  const hbFont = getHarfBuzzFont(font)\n\n  // Create buffer\n  const buffer = hb.createBuffer()\n\n  try {\n    // Add text to buffer\n    buffer.addText(text)\n\n    // Always call guessSegmentProperties() first to detect script, language,\n    // and direction from the text content. This is essential for complex\n    // scripts like Arabic, Devanagari, Thai, Tamil, etc.\n    buffer.guessSegmentProperties()\n\n    // Override with explicitly provided values if any\n    if (language) buffer.setLanguage(language)\n    if (script) buffer.setScript(script)\n    if (direction) buffer.setDirection(direction)\n\n    // Build features string if provided\n    let featuresString: string | undefined\n    if (features && Object.keys(features).length > 0) {\n      const featureStrings: string[] = []\n      for (const [tag, value] of Object.entries(features)) {\n        if (typeof value === 'boolean') {\n          featureStrings.push(value ? `+${tag}` : `-${tag}`)\n        } else {\n          featureStrings.push(`${tag}=${value}`)\n        }\n      }\n      featuresString = featureStrings.join(',')\n    }\n\n    // Shape the text with optional features (passed as third parameter)\n    if (featuresString) {\n      hb.shape(hbFont, buffer, featuresString)\n    } else {\n      hb.shape(hbFont, buffer)\n    }\n\n    // Get shaped glyphs\n    const result = buffer.json(hbFont)\n\n    return result as ShapedGlyph[]\n  } finally {\n    // Clean up buffer\n    buffer.destroy()\n  }\n}\n\n/**\n * Parse font-feature-settings CSS property value\n * Examples:\n *   \"liga\" off -> { liga: false }\n *   \"smcp\" on -> { smcp: true }\n *   \"smcp\" -> { smcp: true }\n *   \"c2sc\", \"smcp\" -> { c2sc: true, smcp: true }\n */\nexport function parseFontFeatureSettings(value: string): FontFeatures {\n  if (!value || value === 'normal') {\n    return {}\n  }\n\n  const features: FontFeatures = {}\n\n  // Split by comma\n  const parts = value.split(',').map((s) => s.trim())\n\n  for (const part of parts) {\n    // Match: \"tag\" [on|off|number]\n    const match = part.match(/[\"']([a-z0-9]{4})[\"']\\s*(?:(on|off|[0-9]+))?/i)\n\n    if (match) {\n      const tag = match[1]\n      const valueStr = match[2]\n\n      if (!valueStr || valueStr === 'on' || valueStr === '1') {\n        features[tag] = true\n      } else if (valueStr === 'off' || valueStr === '0') {\n        features[tag] = false\n      } else {\n        const num = parseInt(valueStr, 10)\n        if (!isNaN(num)) {\n          features[tag] = num\n        }\n      }\n    }\n  }\n\n  return features\n}\n","export function stringFromCode(code: string): string {\n  code = code.replace('U+', '0x')\n\n  return String.fromCodePoint(Number(code))\n}\n\nexport const Space = stringFromCode('U+0020')\nexport const Tab = stringFromCode('U+0009')\nexport const HorizontalEllipsis = stringFromCode('U+2026')\n","import { FontEngine } from '../font.js'\nimport { segment } from '../utils.js'\n\nexport function genMeasurer(\n  engine: FontEngine,\n  isImage: (grapheme: string) => boolean,\n  style: {\n    fontSize: number\n    letterSpacing: number\n    wordSpacing?: number\n    fontFeatureSettings?: string\n  }\n): {\n  measureGrapheme: (grapheme: string) => number\n  measureGraphemeArray: (graphemes: string[]) => number\n  measureText: (text: string) => number\n} {\n  const { fontSize, letterSpacing, wordSpacing, fontFeatureSettings } = style\n\n  const cache = new Map<string, number>()\n\n  function measureTextRun(text: string): number {\n    let width = cache.get(text)\n\n    if (width === undefined) {\n      width = engine.measure(text, {\n        fontSize,\n        letterSpacing,\n        wordSpacing,\n        fontFeatureSettings,\n      })\n      cache.set(text, width)\n    }\n\n    return width\n  }\n\n  function measureGrapheme(grapheme: string): number {\n    return measureTextRun(grapheme)\n  }\n\n  function measureGraphemeArray(graphemes: string[]): number {\n    let width = 0\n    let textRun = ''\n\n    const flushTextRun = () => {\n      if (textRun) {\n        width += measureTextRun(textRun)\n        textRun = ''\n      }\n    }\n\n    for (const grapheme of graphemes) {\n      if (isImage(grapheme)) {\n        flushTextRun()\n        width += fontSize\n      } else {\n        textRun += grapheme\n      }\n    }\n\n    flushTextRun()\n\n    return width\n  }\n\n  function measureText(text: string): number {\n    return measureGraphemeArray(segment(text, 'grapheme'))\n  }\n\n  return {\n    measureGrapheme,\n    measureGraphemeArray,\n    measureText,\n  }\n}\n","import { Locale } from '../language.js'\nimport {\n  isString,\n  lengthToNumber,\n  segment,\n  splitByBreakOpportunities,\n} from '../utils.js'\nimport { HorizontalEllipsis, Space } from './characters.js'\nimport { SerializedStyle } from '../handler/expand.js'\n\nexport function preprocess(\n  content: string,\n  style: SerializedStyle,\n  locale?: Locale\n): {\n  words: string[]\n  requiredBreaks: boolean[]\n  allowSoftWrap: boolean\n  allowBreakWord: boolean\n  allowBreakWordInMinContent: boolean\n  processedContent: string\n  shouldCollapseTabsAndSpaces: boolean\n  lineLimit: number\n  blockEllipsis: string\n} {\n  const { textTransform, whiteSpace, wordBreak, overflowWrap } = style\n\n  content = processTextTransform(content, textTransform, locale)\n\n  const {\n    content: processedContent,\n    shouldCollapseTabsAndSpaces,\n    allowSoftWrap,\n  } = processWhiteSpace(content, whiteSpace)\n\n  const { words, requiredBreaks, allowBreakWord, allowBreakWordInMinContent } =\n    processWordBreak(processedContent, wordBreak, overflowWrap as string)\n\n  const [lineLimit, blockEllipsis] = processTextOverflow(style, allowSoftWrap)\n\n  return {\n    words,\n    requiredBreaks,\n    allowSoftWrap,\n    allowBreakWord,\n    allowBreakWordInMinContent,\n    processedContent,\n    shouldCollapseTabsAndSpaces,\n    lineLimit,\n    blockEllipsis,\n  }\n}\n\n/**\n * The full-width forms of characters: the inverse of the `<wide>`\n * decompositions of fullwidth forms, and the `<narrow>` decompositions of\n * halfwidth forms.\n */\nlet fullWidthForms: Map<string, string> | undefined\nfunction getFullWidthForms() {\n  if (fullWidthForms) return fullWidthForms\n  fullWidthForms = new Map()\n  const range = (start: number, end: number) =>\n    Array.from({ length: end - start + 1 }, (_, i) =>\n      String.fromCodePoint(start + i)\n    )\n  for (const form of [\n    '\\u3000',\n    ...range(0xff01, 0xff60),\n    ...range(0xffe0, 0xffe6),\n  ]) {\n    const base = form.normalize('NFKD')\n    if (base.length === 1) fullWidthForms.set(base, form)\n  }\n  // The decomposition of its base decomposes further.\n  fullWidthForms.set('\\u00af', '\\uffe3')\n  for (const form of [...range(0xff61, 0xff9f), ...range(0xffe8, 0xffee)]) {\n    const base = form.normalize('NFKD')\n    if (base !== form) fullWidthForms.set(form, base)\n  }\n  // Halfwidth Hangul letters, whose decompositions decompose further.\n  for (const [start, end, base] of [\n    [0xffa0, 0xffa0, 0x3164],\n    [0xffa1, 0xffbe, 0x3131],\n    [0xffc2, 0xffc7, 0x314f],\n    [0xffca, 0xffcf, 0x3155],\n    [0xffd2, 0xffd7, 0x315b],\n    [0xffda, 0xffdc, 0x3161],\n  ]) {\n    for (let code = start; code <= end; code++) {\n      fullWidthForms.set(\n        String.fromCodePoint(code),\n        String.fromCodePoint(base + code - start)\n      )\n    }\n  }\n  return fullWidthForms\n}\n\n/** The full-size kana of small kana. */\nconst FULL_SIZE_KANA: Record<string, string> = Object.fromEntries(\n  [\n    'ぁあ',\n    'ぃい',\n    'ぅう',\n    'ぇえ',\n    'ぉお',\n    'ゕか',\n    'ゖけ',\n    'っつ',\n    'ゃや',\n    'ゅゆ',\n    'ょよ',\n    'ゎわ',\n    'ァア',\n    'ィイ',\n    'ゥウ',\n    'ェエ',\n    'ォオ',\n    'ヵカ',\n    'ㇰク',\n    'ヶケ',\n    'ㇱシ',\n    'ㇲス',\n    'ッツ',\n    'ㇳト',\n    'ㇴヌ',\n    'ㇵハ',\n    'ㇶヒ',\n    'ㇷフ',\n    'ㇸヘ',\n    'ㇹホ',\n    'ㇺム',\n    'ャヤ',\n    'ュユ',\n    'ョヨ',\n    'ㇻラ',\n    'ㇼリ',\n    'ㇽル',\n    'ㇾレ',\n    'ㇿロ',\n    'ヮワ',\n    'ｧｱ',\n    'ｨｲ',\n    'ｩｳ',\n    'ｪｴ',\n    'ｫｵ',\n    'ｯﾂ',\n    'ｬﾔ',\n    'ｭﾕ',\n    'ｮﾖ',\n    '\\u{1b132}こ',\n    '\\u{1b150}ゐ',\n    '\\u{1b151}ゑ',\n    '\\u{1b152}を',\n    '\\u{1b155}コ',\n    '\\u{1b164}ヰ',\n    '\\u{1b165}ヱ',\n    '\\u{1b166}ヲ',\n    '\\u{1b167}ン',\n  ].map((pair) => [...pair] as [string, string])\n)\n\nconst mapCharacters = (content: string, map: (char: string) => string) =>\n  Array.from(content, map).join('')\n\n/**\n * Transforms the case of the text, then puts it in full-width forms, then\n * makes small kana full-size, by the keywords of `textTransform`.\n *\n * @see https://www.w3.org/TR/css-text-3/#text-transform-property\n */\nexport function processTextTransform(\n  content: string,\n  textTransform: string,\n  locale?: Locale\n): string {\n  const keywords = new Set(\n    typeof textTransform === 'string' ? textTransform.split(/\\s+/) : []\n  )\n  if (keywords.has('uppercase')) {\n    content = content.toLocaleUpperCase(locale)\n  } else if (keywords.has('lowercase')) {\n    content = content.toLocaleLowerCase(locale)\n  } else if (keywords.has('capitalize')) {\n    content = segment(content, 'word', locale)\n      // For each word...\n      .map((word) => {\n        // ...split into graphemes...\n        return segment(word, 'grapheme', locale)\n          .map((grapheme, index) => {\n            // ...and make the first grapheme uppercase\n            return index === 0 ? grapheme.toLocaleUpperCase(locale) : grapheme\n          })\n          .join('')\n      })\n      .join('')\n  }\n  if (keywords.has('full-width')) {\n    const forms = getFullWidthForms()\n    content = mapCharacters(content, (char) => forms.get(char) ?? char)\n  }\n  if (keywords.has('full-size-kana')) {\n    content = mapCharacters(content, (char) => FULL_SIZE_KANA[char] ?? char)\n  }\n\n  return content\n}\n\nfunction processTextOverflow(\n  style: SerializedStyle,\n  allowSoftWrap: boolean\n): [number, string?] {\n  const {\n    textOverflow,\n    lineClamp,\n    WebkitLineClamp,\n    WebkitBoxOrient,\n    overflow,\n    display,\n  } = style\n\n  if (display === 'block' && lineClamp) {\n    const [lineLimit, blockEllipsis = HorizontalEllipsis] =\n      parseLineClamp(lineClamp)\n    if (lineLimit) {\n      return [lineLimit, blockEllipsis]\n    }\n  }\n\n  // Like in browsers, `-webkit-line-clamp` always ends in an ellipsis.\n  if (\n    display === '-webkit-box' &&\n    WebkitBoxOrient === 'vertical' &&\n    Number(WebkitLineClamp) > 0\n  ) {\n    return [Number(WebkitLineClamp), HorizontalEllipsis]\n  }\n\n  if (textOverflow === 'ellipsis' && overflow === 'hidden' && !allowSoftWrap) {\n    return [1, HorizontalEllipsis]\n  }\n\n  return [Infinity]\n}\n\n/**\n * Whether words that don't fit are broken, and whether they're broken when\n * measuring the min-content size, which `overflowWrap: break-word` doesn't do.\n */\nexport function canBreakWords(wordBreak: string, overflowWrap: string) {\n  const inMinContent =\n    ['break-all', 'break-word'].includes(wordBreak) ||\n    overflowWrap === 'anywhere'\n  return {\n    allowBreakWord: inMinContent || overflowWrap === 'break-word',\n    allowBreakWordInMinContent: inMinContent,\n  }\n}\n\nfunction processWordBreak(\n  content,\n  wordBreak: string,\n  overflowWrap: string\n): {\n  words: string[]\n  requiredBreaks: boolean[]\n  allowBreakWord: boolean\n  allowBreakWordInMinContent: boolean\n} {\n  const { allowBreakWord, allowBreakWordInMinContent } = canBreakWords(\n    wordBreak,\n    overflowWrap\n  )\n\n  const { words, requiredBreaks } = splitByBreakOpportunities(\n    content,\n    wordBreak\n  )\n\n  return { words, requiredBreaks, allowBreakWord, allowBreakWordInMinContent }\n}\n\nfunction processWhiteSpace(\n  content: string,\n  whiteSpace: string\n): {\n  content: string\n  shouldCollapseTabsAndSpaces: boolean\n  allowSoftWrap: boolean\n} {\n  const shouldKeepLinebreak = ['pre', 'pre-wrap', 'pre-line'].includes(\n    whiteSpace\n  )\n\n  const shouldCollapseTabsAndSpaces = ['normal', 'nowrap', 'pre-line'].includes(\n    whiteSpace\n  )\n\n  const allowSoftWrap = !['pre', 'nowrap'].includes(whiteSpace)\n\n  if (!shouldKeepLinebreak) {\n    content = content.replace(/\\n/g, Space)\n  }\n\n  if (shouldCollapseTabsAndSpaces) {\n    content = content.replace(/([ ]|\\t)+/g, Space).replace(/^[ ]|[ ]$/g, '')\n  }\n\n  return { content, shouldCollapseTabsAndSpaces, allowSoftWrap }\n}\n\nfunction parseLineClamp(input: number | string): [number?, string?] {\n  if (typeof input === 'number') return [input]\n\n  const regex1 = /^(\\d+)\\s*\"(.*)\"$/\n  const regex2 = /^(\\d+)\\s*'(.*)'$/\n  const match1 = regex1.exec(input)\n  const match2 = regex2.exec(input)\n\n  if (match1) {\n    const number = +match1[1]\n    const text = match1[2]\n\n    return [number, text]\n  } else if (match2) {\n    const number = +match2[1]\n    const text = match2[2]\n\n    return [number, text]\n  }\n\n  return []\n}\n\n/**\n * The physical alignment of lines. `start` and `end`, and the initial value,\n * follow the base direction.\n */\nexport function resolveTextAlign(\n  textAlign: unknown,\n  direction: unknown\n): 'left' | 'right' | 'center' | 'justify' {\n  const rtl = direction === 'rtl'\n  switch (textAlign) {\n    case 'left':\n    case 'right':\n    case 'center':\n    case 'justify':\n      return textAlign\n    case 'end':\n      return rtl ? 'left' : 'right'\n    default:\n      return rtl ? 'right' : 'left'\n  }\n}\n\n/** The distance between tab stops, from `tabSize`. */\nexport function getTabWidth(style: SerializedStyle, spaceWidth: number) {\n  const tabSize = style.tabSize ?? 8\n  return isString(tabSize)\n    ? lengthToNumber(tabSize, style.fontSize as number, 1, style)\n    : spaceWidth * (tabSize as number)\n}\n\n/**\n * The advance of `count` tabs at `x` from the start of the line, which move\n * to the next tab stop. Like in browsers, the first one moves to the stop after\n * the next when it's closer than half a space.\n * https://drafts.csswg.org/css-text-3/#tab-size-property\n */\nexport function getTabAdvance(\n  x: number,\n  count: number,\n  tabWidth: number,\n  spaceWidth: number\n) {\n  if (!(tabWidth > 0)) return 0\n  let advance = (Math.floor(x / tabWidth) + 1) * tabWidth - x\n  if (advance < spaceWidth / 2) advance += tabWidth\n  return advance + (count - 1) * tabWidth\n}\n","/**\n * A simplified Unicode Bidirectional Algorithm. It resolves the levels of the\n * pieces of text that lines are made of, e.g. words and spaces, instead of\n * characters, and doesn't support explicit embeddings, isolates or bracket\n * pairs.\n * https://www.unicode.org/reports/tr9/\n */\nimport { segment } from '../utils.js'\n\n/**\n * The bidi class of a piece of text: left-to-right, right-to-left, European\n * or Arabic numbers, or neutral.\n */\nexport type BidiClass = 'L' | 'R' | 'EN' | 'AN' | 'N'\n\n// The blocks of right-to-left scripts, e.g. Hebrew, Arabic, Syriac, Thaana,\n// N'Ko and Adlam.\nconst RTL =\n  /[\\u0590-\\u08ff\\ufb1d-\\ufdff\\ufe70-\\ufeff\\u{10800}-\\u{10fff}\\u{1e800}-\\u{1efff}]/u\n// Those, and the right-to-left and Arabic letter marks.\nconst RTL_TEXT =\n  /[\\u0590-\\u08ff\\ufb1d-\\ufdff\\ufe70-\\ufeff\\u200f\\u061c\\u{10800}-\\u{10fff}\\u{1e800}-\\u{1efff}]/u\nconst LETTER = /\\p{L}/u\nconst ARABIC_NUMBER = /[\\u0660-\\u0669\\u066b\\u066c\\u08e2]/\nconst NUMBER = /\\p{Nd}/u\n\n/**\n * Whether the text has characters of right-to-left scripts, so it's\n * reordered even in left-to-right text.\n */\nexport function hasRTL(text: string) {\n  return RTL_TEXT.test(text)\n}\n\n/** The class of the first strong character, or of the numbers in the text. */\nexport function getBidiClass(text: string): BidiClass {\n  let number: BidiClass | undefined\n  for (const char of text) {\n    // The left-to-right, right-to-left and Arabic letter marks.\n    if (char === '\\u200e') return 'L'\n    if (char === '\\u200f' || char === '\\u061c') return 'R'\n    if (LETTER.test(char)) return RTL.test(char) ? 'R' : 'L'\n    if (ARABIC_NUMBER.test(char)) number ??= 'AN'\n    else if (NUMBER.test(char)) number ??= 'EN'\n  }\n  return number ?? 'N'\n}\n\n/**\n * Splits a piece of text with right-to-left characters where the class of its\n * graphemes changes, e.g. between Latin and Arabic letters or numbers, so\n * each part has one direction. Neutral graphemes stay with the part before\n * them.\n */\nexport function splitByDirection(text: string): string[] {\n  if (!hasRTL(text)) return [text]\n  const parts: string[] = []\n  let part = ''\n  let partClass: BidiClass = 'N'\n  for (const grapheme of segment(text, 'grapheme')) {\n    const graphemeClass = getBidiClass(grapheme)\n    if (graphemeClass !== 'N') {\n      if (partClass !== 'N' && graphemeClass !== partClass) {\n        parts.push(part)\n        part = ''\n      }\n      partClass = graphemeClass\n    }\n    part += grapheme\n  }\n  if (part) parts.push(part)\n  return parts\n}\n\n/**\n * The embedding levels of pieces of a paragraph with a base level of 0 for\n * left-to-right text, or 1 for right-to-left text. Right-to-left pieces are\n * at an odd level, and left-to-right ones and numbers at an even one, which\n * is higher than the base level for numbers.\n */\nexport function resolveLevels(\n  classes: BidiClass[],\n  baseLevel: 0 | 1\n): number[] {\n  const base = baseLevel === 1 ? 'R' : 'L'\n  const types = classes.slice()\n\n  // W7: European numbers after left-to-right text are left-to-right.\n  let lastStrong: BidiClass = base\n  for (let i = 0; i < types.length; i++) {\n    if (types[i] === 'L' || types[i] === 'R') lastStrong = types[i]\n    else if (types[i] === 'EN' && lastStrong === 'L') types[i] = 'L'\n  }\n\n  // N1 and N2: neutrals between pieces of the same direction have it, and\n  // numbers count as right-to-left. Other neutrals have the base direction.\n  const direction = (type: BidiClass) => (type === 'L' ? 'L' : 'R')\n  for (let i = 0; i < types.length; ) {\n    if (types[i] !== 'N') {\n      i++\n      continue\n    }\n    let end = i\n    while (end < types.length && types[end] === 'N') end++\n    const before = i > 0 ? direction(types[i - 1]) : base\n    const after = end < types.length ? direction(types[end]) : base\n    types.fill(before === after ? before : base, i, end)\n    i = end\n  }\n\n  // I1 and I2.\n  return types.map((type) =>\n    baseLevel === 1\n      ? type === 'R'\n        ? 1\n        : 2\n      : type === 'L'\n      ? 0\n      : type === 'R'\n      ? 1\n      : 2\n  )\n}\n\n/**\n * Positions the pieces of a line, which are in logical order with their `x`\n * from the start of the line, by their levels. Like rule L2, from the highest\n * level to the lowest odd level, each run of pieces at that level or higher\n * is reversed, by mirroring it within its extent. Returns the left of each\n * piece, with the line from 0 to `lineWidth`, which spaces at the end of a\n * right-to-left line hang past on the left.\n */\nexport function reorderLine(\n  pieces: { x: number; width: number }[],\n  levels: number[],\n  lineWidth: number\n): number[] {\n  const lefts = pieces.map(({ x }) => x)\n  const highest = Math.max(0, ...levels)\n  for (let level = highest; level >= 1; level--) {\n    for (let start = 0; start < pieces.length; ) {\n      if (levels[start] < level) {\n        start++\n        continue\n      }\n      let end = start\n      while (end < pieces.length && levels[end] >= level) end++\n      let runLeft = Infinity\n      let runRight = -Infinity\n      for (let i = start; i < end; i++) {\n        runLeft = Math.min(runLeft, lefts[i])\n        runRight = Math.max(runRight, lefts[i] + pieces[i].width)\n      }\n      runRight = Math.min(runRight, lineWidth)\n      for (let i = start; i < end; i++) {\n        lefts[i] = runLeft + runRight - lefts[i] - pieces[i].width\n      }\n      start = end\n    }\n  }\n  return lefts\n}\n","/**\n * Inline layout: text, inline boxes and atomic inlines, e.g. images and\n * `inline-block` elements, flow together in lines in a block container.\n * https://www.w3.org/TR/css-inline-3/\n *\n * The inline content of a block container is split into paragraphs at its\n * block-level children. Each paragraph is laid out as a leaf, like an\n * anonymous block box.\n */\nimport type { LayoutContext } from '../layout.js'\nimport type { SerializedStyle } from '../handler/expand.js'\nimport {\n  getSyntheticBoldWidth,\n  type FontEngine,\n  type GlyphBox,\n} from '../font.js'\nimport type FontLoader from '../font.js'\nimport type { Locale } from '../language.js'\nimport { LayoutNode, type FloatExclusion } from '../layout-engine/index.js'\nimport {\n  buildXMLString,\n  lengthToNumber,\n  roundUpToLayout,\n  segment as segmentText,\n  splitByBreakOpportunities,\n  splitImages,\n} from '../utils.js'\nimport buildText, {\n  buildGlyphPaths,\n  container as getContainer,\n  getTextFillColor,\n  getTextStrokeAttributes,\n} from '../builder/text.js'\nimport buildDecoration, {\n  getDecorationLines,\n  getDecorationThickness,\n  getUnderlineY,\n} from '../builder/text-decoration.js'\nimport { buildDropShadow } from '../builder/shadow.js'\nimport { genMeasurer } from './measurer.js'\nimport {\n  canBreakWords,\n  getTabAdvance,\n  getTabWidth,\n  preprocess,\n  processTextTransform,\n  resolveTextAlign,\n} from './processor.js'\nimport { getFontFeatureSettings } from './font-features.js'\nimport buildTextNodes from './index.js'\nimport cssColorParse from 'parse-css-color'\n\nexport interface InlineEnv {\n  font: FontLoader\n  embedFont: boolean\n  debug?: boolean\n  graphemeImages?: Record<string, string>\n  /** The scale that layouts are rounded at, see `roundUpToLayout()`. */\n  pointScaleFactor?: number\n  /** Lays out a tree, used for atomic inlines. */\n  computeLayout: (\n    root: LayoutNode,\n    options: { width?: number | 'min-content'; height?: number }\n  ) => void\n}\n\n/** The box of an inline element, which is split into fragments by lines. */\nexport interface InlineBox {\n  style: SerializedStyle\n  /** Set when the paragraphs are finalized. */\n  fragments: InlineBoxFragment[]\n  /** The paragraphs the box is in, split by block-level elements. */\n  paragraphs: Paragraph[]\n  /** The inline boxes the box is in, from the outermost. */\n  ancestors?: InlineBox[]\n}\n\n/**\n * How far `position: relative` moves the content of inline boxes, the boxes\n * from the outermost. Percentages are of the width of the paragraph.\n */\nexport function relativeOffset(boxes: InlineBox[], width: number) {\n  let x = 0\n  let y = 0\n  for (const { style } of boxes) {\n    if (style.position !== 'relative') continue\n    const inset = (side: string) =>\n      style[side] === undefined || style[side] === 'auto'\n        ? undefined\n        : toNumber(style[side], style, width)\n    x += inset('left') ?? -(inset('right') ?? 0)\n    y += inset('top') ?? -(inset('bottom') ?? 0)\n  }\n  return [x, y]\n}\n\n/** A fragment of an inline box, relative to its paragraph. */\nexport interface InlineBoxFragment {\n  paragraph: Paragraph\n  left: number\n  top: number\n  width: number\n  height: number\n  /** Whether the fragment starts or ends the box, with its edges drawn. */\n  first: boolean\n  last: boolean\n}\n\nexport interface TextRun {\n  content: string\n  /** The style of the element the text is in. */\n  style: SerializedStyle\n  inheritedStyle: SerializedStyle\n  locale?: Locale\n  id: string\n  /** The inline boxes the text is in, from the outermost. */\n  boxes: InlineBox[]\n}\n\n/** An `inline-block` element or a replaced element, laid out on its own. */\nexport interface AtomicInline {\n  node: LayoutNode\n  style: SerializedStyle\n  paragraph?: Paragraph\n}\n\ntype Item =\n  | { kind: 'text'; run: TextRun }\n  | { kind: 'open'; box: InlineBox; continuation?: boolean }\n  | { kind: 'close'; box: InlineBox; continued?: boolean }\n  | { kind: 'atomic'; atomic: AtomicInline }\n  | { kind: 'break' }\n\ninterface Segment {\n  item: Item\n  /** The text of a text segment, without forced line breaks. */\n  text?: string\n  width: number\n  /** Set by `flow()`. */\n  x: number\n}\n\ninterface Word {\n  segments: Segment[]\n  /** A forced line break before the word. */\n  forceBreak: boolean\n  /** Whether lines can be wrapped after the word. */\n  canBreakAfter: boolean\n  width: number\n  /** The width of collapsible spaces at the end, which hang at a line end. */\n  trailing: number\n}\n\ninterface Line {\n  words: Word[]\n  width: number\n  trailing: number\n  top: number\n  /** Where the line starts, beside floats on the left. */\n  left: number\n  /** The width for the content of the line, beside floats and the indent. */\n  available: number\n  /** The distance of the baseline from the top. */\n  baseline: number\n  height: number\n}\n\ninterface AtomicLayout {\n  width: number\n  marginBoxWidth: number\n  marginBoxHeight: number\n  /** The distance of the baseline from the top of the margin box. */\n  ascent: number\n}\n\ninterface RunState {\n  engine: FontEngine\n  measureText: (text: string) => number\n  isImage: (s: string) => boolean\n  /** The distance the baseline is raised by `vertical-align`. */\n  shift: number\n}\n\nconst COLLAPSIBLE_WHITE_SPACE = ['normal', 'nowrap', 'pre-line']\n\nconst SIDES = ['Top', 'Right', 'Bottom', 'Left']\n\n/** Whether a box has margins, padding or borders on any side. */\nfunction hasBoxEdges(style: SerializedStyle) {\n  const isZero = (value: unknown) =>\n    value === undefined || value === 0 || value === '0' || value === '0px'\n  return SIDES.some(\n    (side) =>\n      !isZero(style[`margin${side}`]) ||\n      !isZero(style[`padding${side}`]) ||\n      (!isZero(style[`border${side}Width`]) &&\n        !['none', 'hidden', undefined].includes(\n          style[`border${side}Style`] as string\n        ))\n  )\n}\nconst PRESERVED_LINE_BREAKS = ['pre', 'pre-wrap', 'pre-line']\nconst NO_SOFT_WRAP = ['pre', 'nowrap']\nconst OBJECT_REPLACEMENT = '\\uFFFC'\n// Metrics of the first available font are those of a space.\nconst STRUT = ' '\n\nfunction toNumber(\n  value: unknown,\n  style: SerializedStyle,\n  percentageBase: number\n): number {\n  if (typeof value === 'number') return value\n  if (typeof value !== 'string' || value === 'auto') return 0\n  return (\n    lengthToNumber(\n      value,\n      style.fontSize as number,\n      percentageBase,\n      style as Record<string, any>,\n      true\n    ) || 0\n  )\n}\n\nfunction isFullyTransparent(color: string): boolean {\n  if (color === 'transparent') return true\n  const parsed = cssColorParse(color)\n  return parsed ? parsed.alpha === 0 : false\n}\n\n/**\n * Collects the inline content of a block container into paragraphs, in tree\n * order with its block-level children.\n */\nexport class InlineFormatting {\n  private paragraph: Paragraph | null = null\n  /** The inline boxes that are open, from the outermost. */\n  private open: InlineBox[] = []\n\n  constructor(\n    readonly container: LayoutNode,\n    readonly style: SerializedStyle,\n    readonly env: InlineEnv\n  ) {}\n\n  private current() {\n    if (!this.paragraph) {\n      this.paragraph = new Paragraph(this.style, this.env)\n      this.container.insertChild(this.paragraph.node)\n      // Boxes split by a block-level element continue in the paragraph.\n      for (const box of this.open) {\n        this.paragraph.items.push({ kind: 'open', box, continuation: true })\n        box.paragraphs.push(this.paragraph)\n      }\n    }\n    return this.paragraph\n  }\n\n  addText(run: TextRun) {\n    run.boxes = [...this.open]\n    const paragraph = this.current()\n    paragraph.items.push({ kind: 'text', run })\n    return paragraph\n  }\n\n  openBox(box: InlineBox) {\n    box.ancestors = [...this.open]\n    const paragraph = this.current()\n    paragraph.items.push({ kind: 'open', box })\n    box.paragraphs.push(paragraph)\n    this.open.push(box)\n  }\n\n  closeBox(box: InlineBox) {\n    this.open.pop()\n    this.paragraph?.items.push({ kind: 'close', box })\n  }\n\n  addAtomic(atomic: AtomicInline) {\n    const paragraph = this.current()\n    atomic.paragraph = paragraph\n    paragraph.items.push({ kind: 'atomic', atomic })\n  }\n\n  addBreak() {\n    this.current().items.push({ kind: 'break' })\n  }\n\n  /**\n   * A float is laid out before the paragraph it's in, so the paragraph wraps\n   * around it.\n   */\n  addFloat(node: LayoutNode) {\n    if (this.paragraph) this.paragraph.nearFloats = true\n    const index = this.paragraph\n      ? this.container.children.indexOf(this.paragraph.node)\n      : -1\n    this.container.insertChild(node, index === -1 ? undefined : index)\n  }\n\n  /** A block-level element ends the paragraph. */\n  breakForBlock() {\n    if (!this.paragraph) return\n    for (let i = this.open.length - 1; i >= 0; i--) {\n      this.paragraph.items.push({\n        kind: 'close',\n        box: this.open[i],\n        continued: true,\n      })\n    }\n    this.removeIfCollapsed()\n    this.paragraph = null\n  }\n\n  /** The end of the content of the container. */\n  end() {\n    this.removeIfCollapsed()\n  }\n\n  /**\n   * Like in browsers, a paragraph of white space that collapses away has no\n   * line boxes, e.g. between block-level elements, so it's removed. It would\n   * also separate the margins of the elements around it.\n   */\n  private removeIfCollapsed() {\n    if (this.paragraph?.collapsesAway()) {\n      this.container.removeChild(this.paragraph.node)\n    }\n  }\n}\n\nexport class Paragraph {\n  // An anonymous block box of the lines, which wraps around floats.\n  readonly node = new LayoutNode({ display: 'block' })\n  readonly items: Item[] = []\n\n  /**\n   * Whether the paragraph only has white space that collapses, in inline boxes\n   * without margins, padding or borders.\n   */\n  collapsesAway() {\n    return this.items.every((item) => {\n      if (item.kind === 'open' || item.kind === 'close') {\n        return !hasBoxEdges(item.box.style)\n      }\n      if (item.kind !== 'text') return false\n      const whiteSpace = String(item.run.style.whiteSpace ?? 'normal')\n      if (!COLLAPSIBLE_WHITE_SPACE.includes(whiteSpace)) return false\n      // Preserved line breaks are forced breaks.\n      return PRESERVED_LINE_BREAKS.includes(whiteSpace)\n        ? /^[ \\t]*$/.test(item.run.content)\n        : /^[ \\t\\n\\r\\f]*$/.test(item.run.content)\n    })\n  }\n  private words: Word[] | null = null\n  private lines: Line[] = []\n  private runStates = new Map<TextRun, RunState>()\n  private atomicLayouts = new Map<AtomicInline, AtomicLayout>()\n  private atomicWidth = NaN\n  private finalized = false\n  /** The floats of the last measurement, which is the final one. */\n  private exclusions: FloatExclusion[] = []\n  /** Whether a float is in the paragraph or before it, which it may wrap around. */\n  nearFloats = false\n  /** The pieces of each run, set by `finalize()`. */\n  private pieces = new Map<\n    TextRun,\n    { text: string; x: number; width: number; line: number; baseline: number }[]\n  >()\n  /** Set when the paragraph is only text of the container. */\n  simple?: {\n    first: TextRun\n    delegate?: ReturnType<typeof buildTextNodes>\n  } | null\n\n  constructor(readonly style: SerializedStyle, readonly env: InlineEnv) {\n    this.node.measure = (width, _height, exclusions, minContent) =>\n      this.measure(width, exclusions, minContent)\n    this.node.lastBaseline = (width) => {\n      this.flow(width)\n      const last = this.lines[this.lines.length - 1]\n      return last ? last.top + last.baseline : undefined\n    }\n  }\n\n  /** Whether the paragraph is only text directly in the container. */\n  isSimple() {\n    if (this.simple === undefined) {\n      const first = this.items[0]\n      this.simple =\n        first?.kind === 'text' &&\n        this.items.every(\n          (item) => item.kind === 'text' && item.run.style === this.style\n        )\n          ? { first: first.run }\n          : null\n    }\n    return !!this.simple\n  }\n\n  /** The text of a simple paragraph. */\n  get text() {\n    return this.items\n      .map((item) => (item.kind === 'text' ? item.run.content : ''))\n      .join('')\n  }\n\n  private engine(style: SerializedStyle, locale?: Locale) {\n    return this.env.font.getEngine(\n      style.fontSize as number,\n      style.lineHeight as any,\n      style as any,\n      locale\n    )\n  }\n\n  private runState(run: TextRun): RunState {\n    let state = this.runStates.get(run)\n    if (!state) {\n      const engine = this.engine(run.style, run.locale)\n      const { graphemeImages } = this.env\n      const isImage = (s: string) =>\n        !!(\n          graphemeImages &&\n          Object.prototype.hasOwnProperty.call(graphemeImages, s) &&\n          graphemeImages[s]\n        )\n      const { measureText } = genMeasurer(engine, isImage, {\n        fontSize: run.style.fontSize as number,\n        letterSpacing: run.style.letterSpacing as number,\n        wordSpacing: run.style.wordSpacing as number,\n        fontFeatureSettings: getFontFeatureSettings(run.style),\n      })\n      let shift = 0\n      let parentStyle = this.style\n      for (const box of run.boxes) {\n        shift += verticalShift(box.style, parentStyle)\n        parentStyle = box.style\n      }\n      state = { engine, measureText, isImage, shift }\n      this.runStates.set(run, state)\n    }\n    return state\n  }\n\n  /**\n   * Collapses white space across the text of the paragraph, and splits it\n   * into words at line break opportunities.\n   */\n  private prepare() {\n    if (this.words) return this.words\n\n    let content = ''\n    // The item of each code unit.\n    const owners: number[] = []\n    const markers = new Map<number, number[]>()\n    const collapsible = (index: number) => {\n      const item = this.items[owners[index]]\n      return (\n        item?.kind === 'text' &&\n        COLLAPSIBLE_WHITE_SPACE.includes(item.run.style.whiteSpace as string)\n      )\n    }\n    const removeTrailingSpace = () => {\n      const last = content.length - 1\n      if (content[last] === ' ' && collapsible(last)) {\n        content = content.slice(0, -1)\n        owners.pop()\n      }\n    }\n\n    // Spaces are collapsed across inline boxes, and removed at the start.\n    let afterCollapsibleSpace = true\n    this.items.forEach((item, index) => {\n      if (item.kind === 'text') {\n        const { style, locale } = item.run\n        const whiteSpace = style.whiteSpace as string\n        const collapse = COLLAPSIBLE_WHITE_SPACE.includes(whiteSpace)\n        let text = processTextTransform(\n          item.run.content,\n          style.textTransform as string,\n          locale\n        )\n        if (!PRESERVED_LINE_BREAKS.includes(whiteSpace)) {\n          text = text.replace(/\\n/g, ' ')\n        }\n        if (collapse) {\n          text = text.replace(/[ \\t]+/g, ' ').replace(/ ?\\n ?/g, '\\n')\n        }\n        for (let i = 0; i < text.length; i++) {\n          const char = text[i]\n          if (collapse && char === ' ' && afterCollapsibleSpace) continue\n          if (char === '\\n') removeTrailingSpace()\n          content += char\n          owners.push(index)\n          afterCollapsibleSpace = (collapse && char === ' ') || char === '\\n'\n        }\n      } else if (item.kind === 'atomic') {\n        content += OBJECT_REPLACEMENT\n        owners.push(index)\n        afterCollapsibleSpace = false\n      } else if (item.kind === 'break') {\n        removeTrailingSpace()\n        content += '\\n'\n        owners.push(index)\n        afterCollapsibleSpace = true\n      } else {\n        const offset = content.length\n        markers.set(offset, [...(markers.get(offset) || []), index])\n      }\n    })\n    removeTrailingSpace()\n\n    // Markers after the removed spaces are at the end.\n    for (const offset of [...markers.keys()]) {\n      if (offset > content.length) {\n        const moved = markers.get(offset)\n        markers.delete(offset)\n        markers.set(content.length, [\n          ...(markers.get(content.length) || []),\n          ...moved,\n        ])\n      }\n    }\n\n    const { words: texts, requiredBreaks } = content\n      ? splitByBreakOpportunities(content, this.style.wordBreak as string)\n      : { words: [] as string[], requiredBreaks: [] as boolean[] }\n    if (!texts.length) {\n      // Only empty inline boxes.\n      texts.push('')\n    }\n\n    let offset = 0\n    this.words = texts.map((text, index) => {\n      const start = offset\n      const end = offset + text.length\n      offset = end\n      const isFirst = index === 0\n      const isLast = index === texts.length - 1\n      const segments: Segment[] = []\n\n      for (let p = start; p <= end; p++) {\n        const here = markers.get(p) || []\n        for (const [k, markerIndex] of here.entries()) {\n          const item = this.items[markerIndex]\n          // Boxes end in the word before them, and start in the word after.\n          // Empty boxes, opened and closed at the same offset, stay in the\n          // word before them, like in browsers.\n          const isEmpty =\n            item.kind === 'close'\n              ? here.slice(0, k).some((i) => {\n                  const other = this.items[i]\n                  return other.kind === 'open' && other.box === item.box\n                })\n              : item.kind === 'open' &&\n                here.slice(k + 1).some((i) => {\n                  const other = this.items[i]\n                  return other.kind === 'close' && other.box === item.box\n                })\n          const belongs =\n            item.kind === 'close' || isEmpty\n              ? p > start || isFirst\n              : p < end || (isLast && p === end)\n          if (belongs) segments.push({ item, width: 0, x: 0 })\n        }\n        if (p === end) break\n\n        const char = content[p]\n        const item = this.items[owners[p]]\n        if (item.kind === 'text') {\n          if (char === '\\n') continue\n          const last = segments[segments.length - 1]\n          // Tabs are in segments of their own, see `placeTabs()`.\n          if (\n            last &&\n            last.item === item &&\n            (last.text[0] === '\\t') === (char === '\\t')\n          ) {\n            last.text += char\n          } else {\n            segments.push({ item, text: char, width: 0, x: 0 })\n          }\n        } else if (item.kind === 'atomic') {\n          segments.push({ item, width: 0, x: 0 })\n        }\n      }\n\n      // Whether the text before the break opportunity can wrap.\n      const lastItem = this.items[owners[end - 1]]\n      const whiteSpace =\n        lastItem?.kind === 'text'\n          ? (lastItem.run.style.whiteSpace as string)\n          : (this.style.whiteSpace as string)\n\n      return {\n        segments,\n        forceBreak: !!requiredBreaks[index],\n        canBreakAfter: !NO_SOFT_WRAP.includes(whiteSpace),\n        width: 0,\n        trailing: 0,\n      }\n    })\n    return this.words\n  }\n\n  /** Lays out an atomic inline, which shrinks to fit the width. */\n  /** The content height of the container, if its height is a length. */\n  private containerHeight() {\n    const { height } = this.style\n    if (typeof height !== 'number') return\n    if (this.style.boxSizing === 'content-box') return height\n    const inset = (name: string) => (this.style[name] as number) || 0\n    return Math.max(\n      0,\n      height -\n        inset('paddingTop') -\n        inset('paddingBottom') -\n        inset('borderTopWidth') -\n        inset('borderBottomWidth')\n    )\n  }\n\n  private layoutAtomic(atomic: AtomicInline, width: number): AtomicLayout {\n    const cached = this.atomicLayouts.get(atomic)\n    if (cached && this.atomicWidth === width) return cached\n\n    const { node } = atomic\n    // Percentages of heights are of the height of the container, if it's\n    // definite.\n    const height = [\n      node.style.height,\n      node.style.minHeight,\n      node.style.maxHeight,\n    ].some((value) => typeof value === 'string' && value.endsWith('%'))\n      ? this.containerHeight()\n      : undefined\n    const computeLayout = (\n      root: LayoutNode,\n      options: { width?: number | 'min-content' }\n    ) => this.env.computeLayout(root, { ...options, height })\n    const marginWidth = () =>\n      node.layout.width + node.layout.margin.left + node.layout.margin.right\n    const margins = () => node.layout.margin.left + node.layout.margin.right\n    const hasWidth = Number.isFinite(width)\n    // Laid out on its own, the box ignores sizing keywords, so they're\n    // resolved here.\n    const size = node.style.width\n    // Lays the box out with a border box width.\n    const layoutWithWidth = (borderBoxWidth: number) => {\n      const { padding, border } = node.layout\n      const insets =\n        node.style.boxSizing === 'content-box'\n          ? padding.left + padding.right + border.left + border.right\n          : 0\n      node.style.width = Math.max(0, borderBoxWidth - insets)\n      computeLayout(node, {})\n      node.style.width = size\n    }\n    if (size === 'min-content') {\n      computeLayout(node, { width: 'min-content' })\n    } else if (size === 'stretch' && hasWidth) {\n      computeLayout(node, {})\n      layoutWithWidth(width - margins())\n    } else if (typeof size === 'object' && 'fitContent' in size) {\n      // The limit, clamped between the min-content and max-content widths.\n      computeLayout(node, {})\n      const maxContent = node.layout.width\n      computeLayout(node, { width: 'min-content' })\n      const minContent = node.layout.width\n      const { padding, border } = node.layout\n      const insets =\n        node.style.boxSizing === 'content-box'\n          ? padding.left + padding.right + border.left + border.right\n          : 0\n      const limit =\n        typeof size.fitContent === 'number'\n          ? size.fitContent\n          : hasWidth\n          ? (parseFloat(size.fitContent) / 100) * width\n          : Infinity\n      layoutWithWidth(\n        Math.min(maxContent, Math.max(minContent, limit + insets))\n      )\n    } else {\n      // Percentages are of the width of the paragraph.\n      const isPercentage = [\n        node.style.width,\n        node.style.minWidth,\n        node.style.maxWidth,\n      ].some((value) => typeof value === 'string' && value.endsWith('%'))\n      computeLayout(node, isPercentage && hasWidth ? { width } : {})\n      // Except for `max-content`, boxes shrink to fit the width.\n      if (\n        size !== 'max-content' &&\n        !isPercentage &&\n        hasWidth &&\n        marginWidth() > width\n      ) {\n        computeLayout(node, { width: Math.max(0, width - margins()) })\n      }\n    }\n\n    const { layout } = node\n    const marginBoxHeight =\n      layout.height + layout.margin.top + layout.margin.bottom\n    // The baseline of the last line, or the bottom margin edge.\n    const baseline =\n      atomic.style.overflow === 'hidden' ? undefined : findBaseline(node)\n    const result: AtomicLayout = {\n      width: layout.width,\n      marginBoxWidth: marginWidth(),\n      marginBoxHeight,\n      ascent:\n        baseline === undefined ? marginBoxHeight : layout.margin.top + baseline,\n    }\n    this.atomicLayouts.set(atomic, result)\n    return result\n  }\n\n  /**\n   * Breaks the paragraph into lines that fit the width, beside floats, and\n   * balances them with `text-wrap: balance`, like plain text.\n   */\n  private flow(\n    width: number,\n    exclusions: FloatExclusion[] = [],\n    minContent = false\n  ) {\n    const result = this.breakLines(width, exclusions, minContent)\n    const count = this.lines.length\n    if (\n      this.style.textWrap !== 'balance' ||\n      minContent ||\n      count < 2 ||\n      !Number.isFinite(width)\n    ) {\n      return result\n    }\n    // The narrowest lines that don't make the paragraph longer, still aligned\n    // in the available width.\n    let low = 0\n    let high = width\n    while (high - low > 0.5) {\n      const limit = (low + high) / 2\n      this.breakLines(width, exclusions, false, limit)\n      if (this.lines.length > count) low = limit\n      else high = limit\n    }\n    return this.breakLines(width, exclusions, false, high)\n  }\n\n  /**\n   * Breaks the paragraph into lines that fit the width, beside floats, and\n   * aligns them. Lines are at most `limit` wide, but still aligned in the\n   * available width.\n   */\n  private breakLines(\n    width: number,\n    exclusions: FloatExclusion[] = [],\n    minContent = false,\n    limit = Infinity\n  ) {\n    const words = this.prepare().slice()\n    if (this.atomicWidth !== width) {\n      this.atomicLayouts.clear()\n      this.atomicWidth = width\n    }\n\n    const containerWidth = Number.isFinite(width) ? width : 0\n    const measureWord = (word: Word) => {\n      word.width = 0\n      word.trailing = 0\n      for (const segment of word.segments) {\n        const { item } = segment\n        if (item.kind === 'text') {\n          const { measureText } = this.runState(item.run)\n          segment.width = measureText(segment.text)\n          const collapse = COLLAPSIBLE_WHITE_SPACE.includes(\n            item.run.style.whiteSpace as string\n          )\n          const trimmed = segment.text.trimEnd()\n          word.trailing =\n            collapse && trimmed !== segment.text\n              ? segment.width - measureText(trimmed)\n              : 0\n        } else if (item.kind === 'open') {\n          const { style } = item.box\n          segment.width = item.continuation\n            ? 0\n            : toNumber(style.marginLeft, style, containerWidth) +\n              ((style.borderLeftWidth as number) || 0) +\n              toNumber(style.paddingLeft, style, containerWidth)\n        } else if (item.kind === 'close') {\n          const { style } = item.box\n          segment.width = item.continued\n            ? 0\n            : toNumber(style.marginRight, style, containerWidth) +\n              ((style.borderRightWidth as number) || 0) +\n              toNumber(style.paddingRight, style, containerWidth)\n        } else if (item.kind === 'atomic') {\n          segment.width = this.layoutAtomic(item.atomic, width).marginBoxWidth\n          word.trailing = 0\n        }\n        word.width += segment.width\n      }\n    }\n    words.forEach(measureWord)\n\n    // Tabs move to the next tab stop, from the start of the line at `x`.\n    const placeTabs = (word: Word, x: number) => {\n      if (!word.segments.some((s) => s.text?.[0] === '\\t')) return\n      word.width = 0\n      for (const segment of word.segments) {\n        const { item } = segment\n        if (item.kind === 'text' && segment.text?.[0] === '\\t') {\n          const { measureText } = this.runState(item.run)\n          const spaceWidth = measureText(' ')\n          segment.width = getTabAdvance(\n            x + word.width,\n            segment.text.length,\n            getTabWidth(item.run.style, spaceWidth),\n            spaceWidth\n          )\n        }\n        word.width += segment.width\n      }\n    }\n\n    const breakWords = canBreakWords(\n      this.style.wordBreak as string,\n      this.style.overflowWrap as string\n    )\n    const allowBreakWord = minContent\n      ? breakWords.allowBreakWordInMinContent\n      : breakWords.allowBreakWord\n    // The first line is shorter by the indent.\n    const indent = toNumber(this.style.textIndent, this.style, containerWidth)\n\n    // Line heights include the strut of the container.\n    const strut = this.engine(this.style)\n    const strutAscent = Math.round(strut.baseline(STRUT))\n    const strutDescent = Math.round(strut.height(STRUT)) - strutAscent\n    // `start` and `end` follow `direction`. Lines with inline boxes or atomic\n    // inlines are aligned, but their content isn't reordered with `rtl` yet.\n    const textAlign = resolveTextAlign(\n      this.style.textAlign,\n      this.style.direction\n    )\n\n    // Lines are shortened by the floats beside them. A line that is at least\n    // as tall as the strut is beside the floats from its top to there.\n    const placeLine = (line: Line, top: number) => {\n      let left = 0\n      let right = 0\n      for (const exclusion of exclusions) {\n        if (\n          exclusion.top < top + strutAscent + strutDescent &&\n          exclusion.bottom > top\n        ) {\n          left = Math.max(left, exclusion.left)\n          right = Math.max(right, exclusion.right)\n        }\n      }\n      line.top = top\n      line.left = left\n      line.available = width - left - right - (lines.length === 1 ? indent : 0)\n    }\n    // The next position below `top` where floats end.\n    const nextFloatBottom = (top: number) => {\n      let next = Infinity\n      for (const { bottom } of exclusions) {\n        if (bottom > top) next = Math.min(next, bottom)\n      }\n      return next\n    }\n\n    const lines: Line[] = []\n    let line: Line | undefined\n    let top = 0\n    let wrapped = false\n    let canBreak = false\n\n    // Lays out the words of a line vertically, and moves below it.\n    const finishLine = (current: Line) => {\n      let ascent = strutAscent\n      let descent = strutDescent\n      // Atomic inlines aligned to the top or bottom of the line box.\n      const lineAligned: { ascent: number; height: number; top: boolean }[] = []\n      for (const word of current.words) {\n        for (const segment of word.segments) {\n          const { item } = segment\n          if (item.kind === 'text' && segment.text) {\n            const { engine, shift } = this.runState(item.run)\n            const a = Math.round(engine.baseline(segment.text))\n            const d = Math.round(engine.height(segment.text)) - a\n            ascent = Math.max(ascent, a + shift)\n            descent = Math.max(descent, d - shift)\n          } else if (item.kind === 'atomic') {\n            const atomic = this.layoutAtomic(item.atomic, width)\n            const align = this.atomicAlignment(item.atomic, atomic, strut)\n            if (align.lineRelative) {\n              lineAligned.push({\n                ascent: atomic.ascent,\n                height: atomic.marginBoxHeight,\n                top: align.lineRelative === 'top',\n              })\n            } else {\n              ascent = Math.max(ascent, align.ascent)\n              descent = Math.max(descent, align.descent)\n            }\n          }\n        }\n      }\n      for (const aligned of lineAligned) {\n        if (aligned.height > ascent + descent) {\n          if (aligned.top) descent = aligned.height - ascent\n          else ascent = aligned.height - descent\n        }\n      }\n      current.baseline = ascent\n      current.height = ascent + descent\n      top = current.top + current.height\n    }\n\n    const newLine = (): Line => {\n      if (line) finishLine(line)\n      const created: Line = {\n        words: [],\n        width: 0,\n        trailing: 0,\n        top: 0,\n        left: 0,\n        available: width,\n        baseline: 0,\n        height: 0,\n      }\n      lines.push(created)\n      placeLine(created, top)\n      return created\n    }\n\n    for (let i = 0; i < words.length; i++) {\n      const word = words[i]\n      if (!line || (i > 0 && word.forceBreak)) {\n        line = newLine()\n      } else {\n        placeTabs(word, line.width + (lines.length === 1 ? indent : 0))\n        if (\n          line.words.length &&\n          canBreak &&\n          line.width + word.width - word.trailing >\n            Math.min(line.available, limit) + 1e-3\n        ) {\n          line = newLine()\n          wrapped = true\n        }\n      }\n      if (!line.words.length) {\n        placeTabs(word, lines.length === 1 ? indent : 0)\n      }\n\n      // A line that doesn't fit beside floats moves down until it does.\n      while (\n        !line.words.length &&\n        word.width - word.trailing > line.available + 1e-3 &&\n        nextFloatBottom(line.top) < Infinity\n      ) {\n        placeLine(line, nextFloatBottom(line.top))\n      }\n\n      // Break a word that doesn't fit on a line between its characters.\n      if (\n        allowBreakWord &&\n        !line.words.length &&\n        word.width - word.trailing > line.available + 1e-3\n      ) {\n        const parts = splitWord(word)\n        if (parts.length > 1) {\n          parts.forEach(measureWord)\n          words.splice(i, 1, ...parts)\n          i--\n          continue\n        }\n      }\n\n      line.words.push(word)\n      line.width += word.width\n      line.trailing = word.trailing\n      canBreak = word.canBreakAfter\n    }\n    if (line) finishLine(line)\n\n    let maxWidth = 0\n    lines.forEach((current, index) => {\n      // Align the line.\n      const lineWidth = current.width - current.trailing\n      const lineIndent = index === 0 ? indent : 0\n      maxWidth = Math.max(maxWidth, current.left + lineWidth + lineIndent)\n      let x = current.left + lineIndent\n      let gap = 0\n      if (Number.isFinite(width)) {\n        const remaining = current.available - lineWidth\n        if (textAlign === 'right') {\n          x += remaining\n        } else if (textAlign === 'center') {\n          x += remaining / 2\n        } else if (\n          textAlign === 'justify' &&\n          index < lines.length - 1 &&\n          !lines[index + 1].words[0]?.forceBreak &&\n          current.words.length > 1\n        ) {\n          gap = remaining / (current.words.length - 1)\n        }\n        if (this.env.embedFont) x = Math.round(x)\n      }\n      current.words.forEach((word, wordIndex) => {\n        for (const segment of word.segments) {\n          segment.x = x\n          x += segment.width\n        }\n        if (wordIndex < current.words.length - 1) x += gap\n      })\n    })\n\n    this.lines = lines\n    return {\n      width: Math.max(maxWidth, wrapped ? width : 0),\n      height: top,\n    }\n  }\n\n  /** The vertical position of an atomic inline relative to the baseline. */\n  private atomicAlignment(\n    atomic: AtomicInline,\n    layout: AtomicLayout,\n    strut: FontEngine\n  ): { ascent: number; descent: number; lineRelative?: 'top' | 'bottom' } {\n    const { ascent, marginBoxHeight: height } = layout\n    const align = atomic.style.verticalAlign\n    const fontSize = this.style.fontSize as number\n    switch (align) {\n      case 'middle': {\n        // The middle is aligned to the baseline plus half the x-height.\n        const middle = fontSize * 0.25\n        return {\n          ascent: height / 2 + middle,\n          descent: height / 2 - middle,\n        }\n      }\n      case 'text-top': {\n        const a = strut.ascent(STRUT)\n        return { ascent: a, descent: height - a }\n      }\n      case 'text-bottom': {\n        const d = strut.descent(STRUT)\n        return { ascent: height - d, descent: d }\n      }\n      case 'top':\n      case 'bottom':\n        return { ascent, descent: height - ascent, lineRelative: align }\n      default: {\n        const shift = verticalShift(atomic.style, this.style)\n        return { ascent: ascent + shift, descent: height - ascent - shift }\n      }\n    }\n  }\n\n  measure(\n    width: number,\n    exclusions: FloatExclusion[] = [],\n    minContent = false\n  ) {\n    if (this.simple?.delegate) {\n      // Measured by the delegate.\n      return { width: 0, height: 0 }\n    }\n    this.exclusions = exclusions\n    const { width: measuredWidth, height } = this.flow(\n      width,\n      exclusions,\n      minContent\n    )\n    const first = this.lines[0]\n    const last = this.lines[this.lines.length - 1]\n    return {\n      width: roundUpToLayout(measuredWidth, this.env.pointScaleFactor, 1e-3),\n      height,\n      firstBaseline: first ? first.top + first.baseline : undefined,\n      lastBaseline: last ? last.top + last.baseline : undefined,\n    }\n  }\n\n  /**\n   * Lays out the paragraph with its final width, and positions its pieces,\n   * inline box fragments and atomic inlines.\n   */\n  finalize() {\n    if (this.finalized) return\n    this.finalized = true\n\n    const { width } = this.node.layout\n    this.flow(width, this.exclusions)\n    this.pieces.clear()\n\n    const open: InlineBox[] = []\n    const fragmentStart = new Map<InlineBox, { x: number; first: boolean }>()\n    const containerWidth = width\n\n    const addFragment = (\n      box: InlineBox,\n      line: Line,\n      right: number,\n      last: boolean\n    ) => {\n      const start = fragmentStart.get(box)\n      const { style } = box\n      const engine = this.engine(style)\n      const ascent = engine.ascent(STRUT)\n      const descent = engine.descent(STRUT)\n      const shift = this.boxShift(box)\n      const baseline = line.top + line.baseline - shift\n      const paddingTop = toNumber(style.paddingTop, style, containerWidth)\n      const paddingBottom = toNumber(style.paddingBottom, style, containerWidth)\n      const top =\n        baseline - ascent - paddingTop - ((style.borderTopWidth as number) || 0)\n      const bottom =\n        baseline +\n        descent +\n        paddingBottom +\n        ((style.borderBottomWidth as number) || 0)\n      box.fragments.push({\n        paragraph: this,\n        left: start.x,\n        top,\n        width: Math.max(0, right - start.x),\n        height: bottom - top,\n        first: start.first,\n        last,\n      })\n    }\n\n    for (const line of this.lines) {\n      const lineStart = line.words[0]?.segments[0]?.x ?? 0\n      for (const box of open)\n        fragmentStart.set(box, { x: lineStart, first: false })\n      let x = lineStart\n\n      // Spaces at the end of the line hang after the edges of the boxes that\n      // start or end there, which are moved before them.\n      const lastWord = line.words[line.words.length - 1]\n      let lastText = Infinity\n      if (line.trailing) {\n        lastText = lastWord.segments.length - 1\n        while (lastText >= 0) {\n          const segment = lastWord.segments[lastText]\n          if (segment.item.kind === 'text' && segment.text) break\n          lastText--\n        }\n      }\n      const edge = (word: Word, index: number) =>\n        word.segments[index].x -\n        (word === lastWord && index > lastText ? line.trailing : 0)\n\n      for (const word of line.words) {\n        for (const [index, segment] of word.segments.entries()) {\n          const { item } = segment\n          if (item.kind === 'open') {\n            open.push(item.box)\n            const { style } = item.box\n            fragmentStart.set(item.box, {\n              x:\n                edge(word, index) +\n                (item.continuation\n                  ? 0\n                  : toNumber(style.marginLeft, style, containerWidth)),\n              first: !item.continuation,\n            })\n          } else if (item.kind === 'close') {\n            const { style } = item.box\n            addFragment(\n              item.box,\n              line,\n              edge(word, index) +\n                segment.width -\n                (item.continued\n                  ? 0\n                  : toNumber(style.marginRight, style, containerWidth)),\n              !item.continued\n            )\n            open.splice(open.lastIndexOf(item.box), 1)\n          } else if (\n            item.kind === 'text' &&\n            segment.text &&\n            segment.text[0] !== '\\t'\n          ) {\n            const { shift } = this.runState(item.run)\n            const pieces = this.pieces.get(item.run) || []\n            pieces.push({\n              text: segment.text,\n              x: segment.x,\n              width: segment.width,\n              line: this.lines.indexOf(line),\n              baseline: line.top + line.baseline - shift,\n            })\n            this.pieces.set(item.run, pieces)\n          } else if (item.kind === 'atomic') {\n            const atomic = this.layoutAtomic(item.atomic, width)\n            const strut = this.engine(this.style)\n            const align = this.atomicAlignment(item.atomic, atomic, strut)\n            const marginTop = align.lineRelative\n              ? align.lineRelative === 'top'\n                ? line.top\n                : line.top + line.height - atomic.marginBoxHeight\n              : line.top + line.baseline - align.ascent\n            const { layout } = item.atomic.node\n            const [dx, dy] = relativeOffset(open, width)\n            layout.left =\n              this.node.layout.left + segment.x + layout.margin.left + dx\n            layout.top =\n              this.node.layout.top + marginTop + layout.margin.top + dy\n          }\n          x = segment.x + segment.width\n        }\n      }\n\n      // Boxes that continue on the next line.\n      for (const box of open) addFragment(box, line, x - line.trailing, false)\n    }\n  }\n\n  /** The distance the baseline of an inline box is raised. */\n  private boxShift(box: InlineBox) {\n    let shift = 0\n    for (const item of this.items) {\n      if (item.kind === 'text' && item.run.boxes.includes(box)) {\n        // The shift of the box itself, without the boxes inside it.\n        const index = item.run.boxes.indexOf(box)\n        let parentStyle = this.style\n        for (let i = 0; i <= index; i++) {\n          shift += verticalShift(item.run.boxes[i].style, parentStyle)\n          parentStyle = item.run.boxes[i].style\n        }\n        return shift\n      }\n    }\n    return 0\n  }\n\n  /** Draws the text of a run, with the offset of the container. */\n  renderRun(run: TextRun, x: number, y: number) {\n    this.finalize()\n    const pieces = this.pieces.get(run)\n    // Hidden text takes up space, but isn't drawn.\n    if (!pieces?.length || run.style.visibility === 'hidden') return ''\n\n    const { style, inheritedStyle, id } = run\n    const { engine, isImage } = this.runState(run)\n    const { embedFont, debug, graphemeImages } = this.env\n    const hasImages = !!graphemeImages && Object.keys(graphemeImages).length > 0\n    const [dx, dy] = relativeOffset(run.boxes, this.node.layout.width)\n    const left = x + this.node.layout.left + dx\n    const top = y + this.node.layout.top + dy\n    const fontSize = style.fontSize as number\n    const letterSpacing = style.letterSpacing as number\n    const wordSpacing = style.wordSpacing as number\n    const fontFeatureSettings = getFontFeatureSettings(style)\n    const clipPathId = inheritedStyle._inheritedClipPathId as string | undefined\n    const maskId = inheritedStyle._inheritedMaskId as string | undefined\n    const fillColor = getTextFillColor(style)\n    const { matrix } = getContainer(\n      {\n        left: this.node.layout.left,\n        top: this.node.layout.top,\n        width: this.node.layout.width,\n        height: this.node.layout.height,\n        isInheritingTransform: true,\n      },\n      style\n    )\n\n    let filter = ''\n    if (style.textShadowOffset) {\n      filter = buildXMLString(\n        'defs',\n        {},\n        buildDropShadow(\n          {\n            width: this.node.layout.width,\n            height: this.node.layout.height,\n            id,\n          },\n          {\n            shadowColor: style.textShadowColor,\n            shadowOffset: style.textShadowOffset,\n            shadowRadius: style.textShadowRadius,\n          },\n          isFullyTransparent(fillColor)\n        )\n      )\n    }\n\n    const decorationLines = getDecorationLines(style)\n    const skipInk =\n      decorationLines.includes('underline') &&\n      (style.textDecorationSkipInk || 'auto') !== 'none'\n    const thickness = getDecorationThickness(style)\n\n    let path = ''\n    // The paths of synthetic bold glyphs, which are emboldened.\n    let boldPath = ''\n    let elements = ''\n    const decorations: {\n      left: number\n      right: number\n      top: number\n      ascender: number\n      glyphBoxes: GlyphBox[]\n    }[] = []\n\n    // Pieces on the same line are drawn together, for kerning.\n    const merged: typeof pieces = []\n    for (const piece of pieces) {\n      const last = merged[merged.length - 1]\n      if (\n        last &&\n        last.line === piece.line &&\n        Math.abs(last.x + last.width - piece.x) < 1e-3\n      ) {\n        merged.push({\n          ...last,\n          text: last.text + piece.text,\n          width: last.width + piece.width,\n        })\n        merged.splice(merged.length - 2, 1)\n      } else {\n        merged.push({ ...piece })\n      }\n    }\n\n    for (const piece of merged) {\n      const baseline = top + piece.baseline\n      const ascender = engine.baseline(piece.text)\n      const glyphTop = baseline - ascender\n      const band = skipInk\n        ? {\n            underlineY: glyphTop + getUnderlineY(style, ascender, thickness),\n            strokeWidth: thickness,\n          }\n        : undefined\n\n      let glyphBoxes: GlyphBox[] = []\n      let pieceX = left + piece.x\n      // Images of graphemes, e.g. emoji, are drawn as images.\n      const parts: string[] = []\n      let words = segmentText(piece.text, 'word')\n      // Images in words, e.g. consecutive keycaps, are drawn apart.\n      if (hasImages) words = words.flatMap((s) => splitImages(s, isImage))\n      for (const word of words) {\n        if (isImage(word) || !embedFont) {\n          parts.push(word)\n        } else if (parts.length && !isImage(parts[parts.length - 1])) {\n          parts[parts.length - 1] += word\n        } else {\n          parts.push(word)\n        }\n      }\n\n      for (const part of parts) {\n        const partWidth = isImage(part)\n          ? fontSize\n          : engine.measure(part, {\n              fontSize,\n              letterSpacing,\n              wordSpacing,\n              fontFeatureSettings,\n            })\n        if (isImage(part) || !embedFont) {\n          if (part.trim() || isImage(part)) {\n            const [element] = buildText(\n              {\n                content: part,\n                filter,\n                id,\n                left: pieceX,\n                top: isImage(part) ? glyphTop : glyphTop + ascender,\n                width: partWidth,\n                height: engine.height(part),\n                matrix,\n                image: isImage(part) ? graphemeImages[part] : null,\n                clipPathId,\n                debug,\n                shape: false,\n              },\n              style as any\n            )\n            elements += element\n          }\n        } else {\n          const svg = engine.getSVG(\n            part,\n            {\n              fontSize,\n              left: pieceX,\n              top: baseline,\n              letterSpacing,\n              wordSpacing,\n              fontFeatureSettings,\n            },\n            band\n          )\n          path += svg.path + ' '\n          boldPath += svg.boldPath\n          if (band && svg.boxes) glyphBoxes = glyphBoxes.concat(svg.boxes)\n        }\n        // Widths include the letter spacing after each character.\n        pieceX += partWidth\n      }\n\n      if (decorationLines.length) {\n        const last = decorations[decorations.length - 1]\n        if (\n          last &&\n          Math.abs(last.right - (left + piece.x)) < 1e-3 &&\n          last.top === glyphTop\n        ) {\n          last.right = left + piece.x + piece.width\n          last.glyphBoxes.push(...glyphBoxes)\n        } else {\n          decorations.push({\n            left: left + piece.x,\n            right: left + piece.x + piece.width,\n            top: glyphTop,\n            ascender,\n            glyphBoxes,\n          })\n        }\n      }\n    }\n\n    const decorationShape = decorations\n      .map((decoration) =>\n        buildDecoration(\n          {\n            left: decoration.left,\n            top: decoration.top,\n            width: decoration.right - decoration.left,\n            ascender: decoration.ascender,\n            clipPathId,\n            matrix,\n            glyphBoxes: decoration.glyphBoxes,\n          },\n          style\n        )\n      )\n      .join('')\n\n    const strokeAttributes = getTextStrokeAttributes(style)\n    const shape =\n      path || boldPath\n        ? !isFullyTransparent(fillColor) || strokeAttributes.stroke || filter\n          ? buildGlyphPaths(\n              { path, boldPath },\n              {\n                fill:\n                  filter && isFullyTransparent(fillColor) ? 'black' : fillColor,\n                transform: matrix || undefined,\n                ...strokeAttributes,\n              },\n              getSyntheticBoldWidth(fontSize),\n              id\n            )\n          : ''\n        : ''\n    let result =\n      buildXMLString(\n        'g',\n        {\n          mask: maskId ? `url(#${maskId})` : undefined,\n          'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\n        },\n        shape\n      ) +\n      elements +\n      decorationShape\n    if (filter) {\n      result =\n        filter + buildXMLString('g', { filter: `url(#satori_s-${id})` }, result)\n    }\n\n    const textOpacity = (style._textOpacity as number | undefined) ?? 1\n    if (textOpacity < 1) {\n      result = buildXMLString('g', { opacity: textOpacity }, result)\n    }\n\n    // The text clips the background of an element with `background-clip:\n    // text`.\n    const clipText = style._inheritedBackgroundClipTextPath as unknown as\n      | { value: string }\n      | undefined\n    if (clipText && (path || boldPath)) {\n      clipText.value += buildXMLString('path', {\n        d: path + boldPath,\n        transform: matrix || undefined,\n      })\n    }\n    return result\n  }\n}\n\n/**\n * The distance `vertical-align` raises the baseline of an inline box, for\n * values relative to the parent's baseline.\n */\nfunction verticalShift(style: SerializedStyle, parentStyle: SerializedStyle) {\n  const align = style.verticalAlign\n  const parentFontSize = parentStyle.fontSize as number\n  if (align === 'sub') return -parentFontSize * 0.2\n  if (align === 'super') return parentFontSize * 0.34\n  if (typeof align === 'number') return align\n  if (typeof align === 'string' && /^-?[\\d.]/.test(align)) {\n    const lineHeight =\n      typeof style.lineHeight === 'number'\n        ? (style.lineHeight as number) * (style.fontSize as number)\n        : (style.fontSize as number) * 1.2\n    return toNumber(align, style, lineHeight)\n  }\n  return 0\n}\n\n/** Splits a word into its graphemes, keeping the inline box boundaries. */\nfunction splitWord(word: Word): Word[] {\n  const words: Word[] = []\n  let current: Segment[] = []\n  const flush = () => {\n    if (current.length) {\n      words.push({\n        segments: current,\n        forceBreak: false,\n        canBreakAfter: true,\n        width: 0,\n        trailing: 0,\n      })\n      current = []\n    }\n  }\n  for (const segment of word.segments) {\n    if (segment.item.kind === 'text') {\n      for (const grapheme of segmentGraphemes(segment.text)) {\n        current.push({ item: segment.item, text: grapheme, width: 0, x: 0 })\n        flush()\n      }\n    } else if (segment.item.kind === 'open') {\n      current.push({ ...segment })\n    } else {\n      // Close markers and atomic inlines stay with the previous grapheme.\n      const last = words[words.length - 1]\n      if (segment.item.kind === 'close' && last && !current.length) {\n        last.segments.push({ ...segment })\n      } else {\n        current.push({ ...segment })\n        if (segment.item.kind === 'atomic') flush()\n      }\n    }\n  }\n  flush()\n  if (words.length) {\n    words[0].forceBreak = word.forceBreak\n    words[words.length - 1].canBreakAfter = word.canBreakAfter\n  }\n  return words\n}\n\nfunction segmentGraphemes(text: string) {\n  return segmentText(text, 'grapheme')\n}\n\n/**\n * The baseline of the last line box in the normal flow of a node, relative\n * to its top, if it has one.\n */\nfunction findBaseline(node: LayoutNode): number | undefined {\n  if (node.lastBaseline) {\n    return node.lastBaseline(node.layout.width)\n  }\n  for (let i = node.children.length - 1; i >= 0; i--) {\n    const child = node.children[i]\n    if (\n      child.style.position === 'absolute' ||\n      child.style.display === 'none' ||\n      child.style.display === 'contents'\n    ) {\n      continue\n    }\n    const baseline = findBaseline(child)\n    if (baseline !== undefined) return child.layout.top + baseline\n  }\n  return undefined\n}\n\n/**\n * Text in a block container. It's drawn by its paragraph, or by the text\n * engine for paragraphs of the container's text only.\n */\nexport async function* buildInlineText(\n  content: string,\n  context: LayoutContext\n): AsyncGenerator<{ word: string; locale?: Locale }[], string, [any, any]> {\n  const {\n    parentStyle,\n    inheritedStyle,\n    font,\n    locale,\n    canLoadAdditionalAssets,\n    id,\n  } = context\n  const run: TextRun = {\n    content,\n    style: parentStyle,\n    inheritedStyle,\n    locale,\n    id,\n    boxes: [],\n  }\n  const paragraph = context.inline.addText(run)\n  if (context.floats?.found) paragraph.nearFloats = true\n\n  // Yield segments that are missing a font.\n  const engine = font.getEngine(\n    parentStyle.fontSize as number,\n    parentStyle.lineHeight as any,\n    parentStyle as any,\n    locale\n  )\n  const { processedContent } = preprocess(content, parentStyle, locale)\n  yield canLoadAdditionalAssets\n    ? segmentText(processedContent, 'grapheme')\n        .filter((word) => word !== '\\t' && !engine.has(word))\n        .map((word) => ({ word, locale }))\n    : []\n\n  // A paragraph of the container's text only is laid out by the text engine,\n  // which doesn't wrap text around floats.\n  let delegate: ReturnType<typeof buildTextNodes> | undefined\n  if (\n    paragraph.isSimple() &&\n    paragraph.simple.first === run &&\n    !paragraph.nearFloats\n  ) {\n    delegate = buildTextNodes(paragraph.text, {\n      ...context,\n      parent: context.inline.container,\n      textNode: paragraph.node,\n      blockParagraph: true,\n    })\n    paragraph.simple.delegate = delegate\n    await delegate.next()\n    await delegate.next()\n  }\n\n  const [x, y] = yield\n  if (paragraph.simple?.delegate) {\n    return delegate ? ((await delegate.next([x, y])).value as string) : ''\n  }\n  return paragraph.renderRun(run, x, y)\n}\n","import { parseLinearGradient, ColorStop } from 'css-gradient-parser'\nimport {\n  expandColorStops,\n  extractInterpolationMethod,\n  normalizeStops,\n  resolveMathPositions,\n} from './utils.js'\nimport { buildXMLString, calcDegree, lengthToNumber } from '../../utils.js'\n\nexport function buildLinearGradient(\n  {\n    id,\n    width,\n    height,\n    tiles,\n  }: {\n    id: string\n    width: number\n    height: number\n    /** The distance between repeated images. */\n    tiles: [number, number]\n  },\n  image: string,\n  dimensions: number[],\n  offsets: number[],\n  inheritableStyle: Record<string, number | string>,\n  from?: 'background' | 'mask'\n) {\n  const [gradient, method] = extractInterpolationMethod(image)\n  const math: string[] = []\n  const parsed = parseLinearGradient(expandColorStops(gradient, math))\n  const [imageWidth, imageHeight] = dimensions\n  const repeating = image.startsWith('repeating')\n\n  // Calculate the direction.\n  let points, length, xys\n\n  if (parsed.orientation.type === 'directional') {\n    points = resolveXYFromDirection(parsed.orientation.value)\n\n    length = Math.sqrt(\n      Math.pow((points.x2 - points.x1) * imageWidth, 2) +\n        Math.pow((points.y2 - points.y1) * imageHeight, 2)\n    )\n  } else if (parsed.orientation.type === 'angular') {\n    const { length: l, ...p } = calcNormalPoint(\n      (calcDegree(\n        `${parsed.orientation.value.value}${parsed.orientation.value.unit}`\n      ) /\n        180) *\n        Math.PI,\n      imageWidth,\n      imageHeight\n    )\n\n    length = l\n    points = p\n  }\n\n  const colorStops = resolveMathPositions(\n    parsed.stops,\n    math,\n    length,\n    inheritableStyle\n  )\n  xys = repeating\n    ? calcPercentage(colorStops, length, points, inheritableStyle)\n    : points\n\n  const stops = normalizeStops(\n    repeating ? resolveRepeatingCycle(colorStops, length) : length,\n    colorStops,\n    inheritableStyle,\n    repeating,\n    from,\n    method\n  )\n\n  const gradientId = `satori_bi${id}`\n  const patternId = `satori_pattern_${id}`\n\n  const defs = buildXMLString(\n    'pattern',\n    {\n      id: patternId,\n      x: offsets[0] / width,\n      y: offsets[1] / height,\n      width: tiles[0] / width,\n      height: tiles[1] / height,\n      patternUnits: 'objectBoundingBox',\n    },\n    buildXMLString(\n      'linearGradient',\n      {\n        id: gradientId,\n        ...xys,\n        spreadMethod: repeating ? 'repeat' : 'pad',\n      },\n      stops\n        .map((stop) =>\n          buildXMLString('stop', {\n            offset: (stop.offset ?? 0) * 100 + '%',\n            'stop-color': stop.color,\n          })\n        )\n        .join('')\n    ) +\n      buildXMLString('rect', {\n        x: 0,\n        y: 0,\n        width: imageWidth,\n        height: imageHeight,\n        fill: `url(#${gradientId})`,\n      })\n  )\n  return [patternId, defs]\n}\n\nfunction resolveRepeatingCycle(stops: ColorStop[], length: number) {\n  const last = stops[stops.length - 1]\n  const { offset } = last\n  if (!offset) return length\n\n  if (offset.unit === '%') return (Number(offset.value) / 100) * length\n\n  return Number(offset.value)\n}\n\nfunction resolveXYFromDirection(dir: string) {\n  let x1 = 0,\n    y1 = 0,\n    x2 = 0,\n    y2 = 0\n\n  if (dir.includes('top')) {\n    y1 = 1\n  } else if (dir.includes('bottom')) {\n    y2 = 1\n  }\n\n  if (dir.includes('left')) {\n    x1 = 1\n  } else if (dir.includes('right')) {\n    x2 = 1\n  }\n\n  if (!x1 && !x2 && !y1 && !y2) {\n    y1 = 1\n  }\n\n  return { x1, y1, x2, y2 }\n}\n\n/**\n * calc start point and end point of linear gradient\n */\nfunction calcNormalPoint(v: number, w: number, h: number) {\n  const r = Math.pow(h / w, 2)\n\n  // make sure angle is 0 <= angle <= 360\n  v = ((v % (Math.PI * 2)) + Math.PI * 2) % (Math.PI * 2)\n\n  let x1, y1, x2, y2, length, tmp, a, b\n\n  const dfs = (angle: number) => {\n    if (angle === 0) {\n      x1 = 0\n      y1 = h\n      x2 = 0\n      y2 = 0\n      length = h\n      return\n    } else if (angle === Math.PI / 2) {\n      x1 = 0\n      y1 = 0\n      x2 = w\n      y2 = 0\n      length = w\n      return\n    }\n    if (angle > 0 && angle < Math.PI / 2) {\n      x1 =\n        ((r * w) / 2 / Math.tan(angle) - h / 2) /\n        (Math.tan(angle) + r / Math.tan(angle))\n      y1 = Math.tan(angle) * x1 + h\n      x2 = Math.abs(w / 2 - x1) + w / 2\n      y2 = h / 2 - Math.abs(y1 - h / 2)\n      length = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2))\n      // y = -1 / tan * x = h / 2 +1 / tan * w/2\n      // y = tan * x + h\n      a =\n        (w / 2 / Math.tan(angle) - h / 2) /\n        (Math.tan(angle) + 1 / Math.tan(angle))\n      b = Math.tan(angle) * a + h\n      length = 2 * Math.sqrt(Math.pow(w / 2 - a, 2) + Math.pow(h / 2 - b, 2))\n      return\n    } else if (angle > Math.PI / 2 && angle < Math.PI) {\n      x1 =\n        (h / 2 + (r * w) / 2 / Math.tan(angle)) /\n        (Math.tan(angle) + r / Math.tan(angle))\n      y1 = Math.tan(angle) * x1\n      x2 = Math.abs(w / 2 - x1) + w / 2\n      y2 = h / 2 + Math.abs(y1 - h / 2)\n      // y = -1 / tan * x + h / 2 + 1 / tan * w / 2\n      // y = tan * x\n      a =\n        (w / 2 / Math.tan(angle) + h / 2) /\n        (Math.tan(angle) + 1 / Math.tan(angle))\n      b = Math.tan(angle) * a\n      length = 2 * Math.sqrt(Math.pow(w / 2 - a, 2) + Math.pow(h / 2 - b, 2))\n      return\n    } else if (angle >= Math.PI) {\n      dfs(angle - Math.PI)\n\n      tmp = x1\n      x1 = x2\n      x2 = tmp\n      tmp = y1\n      y1 = y2\n      y2 = tmp\n    }\n  }\n\n  dfs(v)\n\n  return {\n    x1: x1 / w,\n    y1: y1 / h,\n    x2: x2 / w,\n    y2: y2 / h,\n    length,\n  }\n}\n\nfunction calcPercentage(\n  stops: ColorStop[],\n  length: number,\n  points: {\n    x1: number\n    y1: number\n    x2: number\n    y2: number\n  },\n  inheritableStyle: Record<string, string | number>\n) {\n  const { x1, x2, y1, y2 } = points\n  const p1 = !stops[0].offset\n    ? 0\n    : stops[0].offset.unit === '%'\n    ? Number(stops[0].offset.value) / 100\n    : lengthToNumber(\n        `${stops[0].offset.value}${stops[0].offset.unit}`,\n        inheritableStyle.fontSize as number,\n        length,\n        inheritableStyle,\n        true\n      ) / length\n  const p2 = !stops.at(-1).offset\n    ? 1\n    : stops.at(-1).offset.unit === '%'\n    ? Number(stops.at(-1).offset.value) / 100\n    : lengthToNumber(\n        `${stops.at(-1).offset.value}${stops.at(-1).offset.unit}`,\n        inheritableStyle.fontSize as number,\n        length,\n        inheritableStyle,\n        true\n      ) / length\n\n  const sx = (x2 - x1) * p1 + x1\n  const sy = (y2 - y1) * p1 + y1\n  const ex = (x2 - x1) * p2 + x1\n  const ey = (y2 - y1) * p2 + y1\n\n  return {\n    x1: sx,\n    y1: sy,\n    x2: ex,\n    y2: ey,\n  }\n}\n","import { lengthToNumber } from '../../utils.js'\nimport { MATH_FUNCTION, parseMath } from '../../parser/math.js'\nimport {\n  convertColors,\n  isColor,\n  mixColors,\n  parseColor,\n  parseCSSColor,\n  parseInterpolationMethod,\n  serializeColor,\n  toRGBA,\n  type InterpolationMethod,\n  type RGBA,\n} from '../../parser/color.js'\nimport type { ColorStop } from 'css-gradient-parser'\nimport valueParser from 'postcss-value-parser'\n\nconst POSITION =\n  /^[+-]?(\\d+(?:\\.\\d*)?|\\.\\d+)(px|em|rem|vw|vh|%|deg|turn|rad|grad)?$/i\n\n/** The placeholder lengths of math functions start here, see below. */\nconst MATH_POSITION = 1e9\n\n/**\n * Expands color stops with two positions, e.g. `red 0 50%`, into two stops\n * with the color, which is how they're defined and the only form\n * `css-gradient-parser` supports.\n *\n * With `math`, math functions in the positions of color stops and hints,\n * which `css-gradient-parser` drops, are replaced by placeholder lengths and\n * added to it, see `resolveMathPositions()`.\n */\nexport function expandColorStops(gradient: string, math?: string[]) {\n  const [fn] = valueParser(gradient).nodes\n  if (fn?.type !== 'function') return gradient\n\n  const args: string[][] = [[]]\n  for (const node of fn.nodes) {\n    if (node.type === 'div' && node.value === ',') args.push([])\n    else if (node.type !== 'space' && node.type !== 'comment') {\n      args[args.length - 1].push(valueParser.stringify(node))\n    }\n  }\n  let changed = false\n  if (math) {\n    args.forEach((tokens, index) => {\n      // The first argument can be the direction or shape instead.\n      if (index === 0 && !isColor(tokens[0] ?? '')) return\n      tokens.forEach((token, i) => {\n        if (!MATH_FUNCTION.test(token)) return\n        tokens[i] = `${MATH_POSITION + math.length}px`\n        math.push(token)\n        changed = true\n      })\n    })\n  }\n  const expanded = args.map((tokens) => {\n    const [color, start, end] = tokens\n    if (\n      tokens.length === 3 &&\n      isColor(color) &&\n      POSITION.test(start) &&\n      POSITION.test(end)\n    ) {\n      changed = true\n      return `${color} ${start}, ${color} ${end}`\n    }\n    return tokens.join(' ')\n  })\n  return changed ? `${fn.value}(${expanded.join(', ')})` : gradient\n}\n\n/**\n * Removes the color interpolation method of a gradient, `in <space> [<hue>\n * hue]` in its first argument, which `css-gradient-parser` doesn't support.\n */\nexport function extractInterpolationMethod(\n  gradient: string\n): [gradient: string, method: InterpolationMethod | undefined] {\n  if (!/\\bin\\b/i.test(gradient)) return [gradient, undefined]\n  const [fn] = valueParser(gradient).nodes\n  if (fn?.type !== 'function') return [gradient, undefined]\n  const comma = fn.nodes.findIndex(\n    (node) => node.type === 'div' && node.value === ','\n  )\n  if (comma === -1) return [gradient, undefined]\n  const first = fn.nodes\n    .slice(0, comma)\n    .filter((node) => node.type !== 'space' && node.type !== 'comment')\n    .map((node) => valueParser.stringify(node))\n  const index = first.findIndex((token) => token.toLowerCase() === 'in')\n  if (index === -1) return [gradient, undefined]\n  let length = 4\n  let method = parseInterpolationMethod(first.slice(index, index + length))\n  if (!method) {\n    length = 2\n    method = parseInterpolationMethod(first.slice(index, index + length))\n  }\n  if (!method) return [gradient, undefined]\n  first.splice(index, length)\n  const stops = valueParser.stringify(fn.nodes.slice(comma + 1)).trim()\n  return [\n    `${fn.value}(${first.length ? first.join(' ') + ', ' : ''}${stops})`,\n    method,\n  ]\n}\n\n/** Moves the middle of the transition between two colors to a hint. */\nexport function applyHint(t: number, hint: number) {\n  if (hint <= 0) return 1\n  if (hint >= 1) return 0\n  return Math.pow(t, Math.log(0.5) / Math.log(hint))\n}\n\n/**\n * Adds stops between `t0` and `t1` until SVG's interpolation in sRGB without\n * premultiplied alpha is within a level of each channel.\n */\nfunction subdivide(\n  colorAt: (t: number) => RGBA,\n  t0: number,\n  c0: RGBA,\n  t1: number,\n  c1: RGBA,\n  add: (t: number, color: RGBA) => void,\n  depth = 0\n) {\n  const t = (t0 + t1) / 2\n  const color = colorAt(t)\n  const premultiplied = (c: number[]) => [\n    c[0] * c[3],\n    c[1] * c[3],\n    c[2] * c[3],\n    c[3] * 255,\n  ]\n  const expected = premultiplied(color)\n  const drawn = premultiplied(c0.map((c, i) => (c + c1[i]) / 2))\n  const error = Math.max(...expected.map((c, i) => Math.abs(c - drawn[i])))\n  if (error <= 1 || depth >= 6) return\n  subdivide(colorAt, t0, c0, t, color, add, depth + 1)\n  add(t, color)\n  subdivide(colorAt, t, color, t1, c1, add, depth + 1)\n}\n\n/**\n * SVG interpolates gradients in sRGB without premultiplied alpha. Transitions\n * in other color spaces, with hints, or between colors with different alpha\n * are approximated with stops in between. Colors that SVG renderers may not\n * support are converted.\n */\nfunction interpolateStops(\n  stops: Stop[],\n  method: InterpolationMethod | undefined,\n  currentColor: string\n): Stop[] {\n  const result: Stop[] = []\n  stops.forEach((a, i) => {\n    result.push({\n      offset: a.offset,\n      color: convertColors(a.color, currentColor),\n    })\n    const b = stops[i + 1]\n    if (!b) return\n    const length = b.offset - a.offset\n    if (!(length > 0)) return\n    const from = parseCSSColor(a.color, currentColor)\n    const to = parseCSSColor(b.color, currentColor)\n    if (!from || !to) return\n    const hint =\n      a.hint === undefined\n        ? undefined\n        : (Math.min(Math.max(a.hint, a.offset), b.offset) - a.offset) / length\n    const [rgbaA, rgbaB] = [from, to].map(toRGBA)\n    const same =\n      JSON.stringify(from) === JSON.stringify(to) ||\n      (!method && rgbaA.every((c, j) => c === rgbaB[j]))\n    if (same || (!method && hint === undefined && rgbaA[3] === rgbaB[3])) {\n      return\n    }\n    const colorAt = (t: number) =>\n      mixColors(from, to, hint === undefined ? t : applyHint(t, hint), method)\n    const add = (t: number, color: RGBA) =>\n      result.push({\n        offset: a.offset + length * t,\n        color: serializeColor(color),\n      })\n    // Starts from quarters, so curves with the same middle are subdivided.\n    let previous = rgbaA\n    for (let quarter = 1; quarter <= 4; quarter++) {\n      const t = quarter / 4\n      const color = quarter === 4 ? rgbaB : colorAt(t)\n      subdivide(colorAt, t - 0.25, previous, t, color, add)\n      if (quarter < 4) add(t, color)\n      previous = color\n    }\n  })\n  return result\n}\n\ninterface Stop {\n  color: string\n  offset?: number\n  /** The position of the interpolation hint after the stop. */\n  hint?: number\n}\n\n/**\n * Resolves the math functions of `expandColorStops()` to lengths, with\n * percentages of the length of the gradient line.\n */\nexport function resolveMathPositions(\n  stops: ColorStop[],\n  math: string[],\n  length: number,\n  inheritedStyle: Record<string, string | number>\n): ColorStop[] {\n  if (!math.length) return stops\n  const resolve = (position: ColorStop['offset']) => {\n    if (!position || position.unit !== 'px') return position\n    const expression = math[Number(position.value) - MATH_POSITION]\n    if (expression === undefined) return position\n    const value = parseMath(expression, (part) =>\n      lengthToNumber(\n        part,\n        inheritedStyle.fontSize as number,\n        length,\n        inheritedStyle,\n        true\n      )\n    )?.evaluate(length)\n    // An invalid position is left out, like an omitted one.\n    return value === undefined || !Number.isFinite(value)\n      ? undefined\n      : { value: String(value), unit: 'px' }\n  }\n  return stops.map((stop) => ({\n    ...stop,\n    offset: resolve(stop.offset),\n    hint: resolve(stop.hint),\n  }))\n}\n\nexport function normalizeStops(\n  totalLength: number,\n  colorStops: ColorStop[],\n  inheritedStyle: Record<string, string | number>,\n  repeating: boolean,\n  from?: 'background' | 'mask',\n  method?: InterpolationMethod\n) {\n  // Resolve the color stops based on the spec:\n  // https://drafts.csswg.org/css-images/#color-stop-syntax\n  const stops: Stop[] = []\n  const lastColorStop = colorStops.at(-1)\n  const totalPercentage =\n    lastColorStop &&\n    lastColorStop.offset &&\n    lastColorStop.offset.unit === '%' &&\n    repeating\n      ? +lastColorStop.offset.value\n      : 100\n  // All offsets are relative values (0-1) in SVG.\n  const resolve = (position: ColorStop['offset']) =>\n    position.unit === '%'\n      ? +position.value / totalPercentage\n      : Number(\n          lengthToNumber(\n            `${position.value}${position.unit}`,\n            inheritedStyle.fontSize as number,\n            totalLength,\n            inheritedStyle,\n            true\n          )\n        ) / totalLength\n  for (const stop of colorStops) {\n    const { color } = stop\n    const hint = stop.hint ? resolve(stop.hint) : undefined\n    if (!stops.length) {\n      // First stop, ensure it's at the start.\n      stops.push({\n        offset: 0,\n        color,\n        hint,\n      })\n\n      if (!stop.offset) continue\n      if (stop.offset.value === '0') continue\n    }\n\n    stops.push({\n      offset: stop.offset ? resolve(stop.offset) : undefined,\n      color,\n      hint,\n    })\n  }\n  if (!stops.length) {\n    stops.push({\n      offset: 0,\n      color: 'transparent',\n    })\n  }\n  // Last stop, ensure it's at the end.\n  const lastStop = stops[stops.length - 1]\n  if (lastStop.offset !== 1) {\n    if (typeof lastStop.offset === 'undefined') {\n      lastStop.offset = 1\n    } else if (repeating) {\n      stops[stops.length - 1] = {\n        offset: 1,\n        color: lastStop.color,\n      }\n    } else {\n      stops.push({\n        offset: 1,\n        color: lastStop.color,\n      })\n    }\n  }\n\n  let previousStop = 0\n  let nextStop = 1\n  // Evenly distribute the missing stop offsets.\n  for (let i = 0; i < stops.length; i++) {\n    if (typeof stops[i].offset === 'undefined') {\n      // Find the next stop that has an offset.\n      if (nextStop < i) nextStop = i\n      while (typeof stops[nextStop].offset === 'undefined') nextStop++\n\n      stops[i].offset =\n        ((stops[nextStop].offset - stops[previousStop].offset) /\n          (nextStop - previousStop)) *\n          (i - previousStop) +\n        stops[previousStop].offset\n    } else {\n      previousStop = i\n    }\n  }\n\n  const interpolated = interpolateStops(\n    stops,\n    method,\n    String(inheritedStyle.color)\n  )\n\n  if (from === 'mask') {\n    return interpolated.map((stop) => {\n      const color = parseColor(stop.color)\n      if (!color) return stop\n      return { ...stop, color: `rgba(255, 255, 255, ${color[3]})` }\n    })\n  }\n\n  return interpolated\n}\n","import {\n  parseRadialGradient,\n  RadialResult,\n  RadialPropertyValue,\n  ColorStop,\n} from 'css-gradient-parser'\nimport { buildXMLString, lengthToNumber } from '../../utils.js'\nimport {\n  expandColorStops,\n  extractInterpolationMethod,\n  normalizeStops,\n  resolveMathPositions,\n} from './utils.js'\n\nexport function buildRadialGradient(\n  {\n    id,\n    width,\n    height,\n    tiles,\n  }: {\n    id: string\n    width: number\n    height: number\n    /** The distance between repeated images. */\n    tiles: [number, number]\n  },\n  image: string,\n  dimensions: number[],\n  offsets: number[],\n  inheritableStyle: Record<string, number | string>,\n  from?: 'background' | 'mask'\n) {\n  const [gradient, method] = extractInterpolationMethod(image)\n  const math: string[] = []\n  const {\n    shape,\n    stops: parsedStops,\n    position,\n    size,\n    repeating,\n  } = parseRadialGradient(withDefaultShape(expandColorStops(gradient, math)))\n  const colorStops = resolveMathPositions(\n    parsedStops,\n    math,\n    width,\n    inheritableStyle\n  )\n  const [xDelta, yDelta] = dimensions\n\n  let cx: number = xDelta / 2\n  let cy: number = yDelta / 2\n\n  const pos = calcRadialGradient(\n    position.x,\n    position.y,\n    xDelta,\n    yDelta,\n    inheritableStyle.fontSize as number,\n    inheritableStyle\n  )\n  cx = pos.x\n  cy = pos.y\n\n  const colorStopTotalLength = calcColorStopTotalLength(\n    width,\n    colorStops,\n    repeating,\n    inheritableStyle\n  )\n\n  const stops = normalizeStops(\n    colorStopTotalLength,\n    colorStops,\n    inheritableStyle,\n    repeating,\n    from,\n    method\n  )\n\n  const gradientId = `satori_radial_${id}`\n  const patternId = `satori_pattern_${id}`\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/radial-gradient()#values\n  const spread = calcRadius(\n    shape as Shape,\n    size,\n    inheritableStyle.fontSize as number,\n    { x: cx, y: cy },\n    [xDelta, yDelta],\n    inheritableStyle,\n    repeating\n  )\n\n  const props = calcRadialGradientProps(\n    shape as Shape,\n    inheritableStyle.fontSize as number,\n    colorStops,\n    [xDelta, yDelta],\n    inheritableStyle,\n    repeating,\n    spread\n  )\n\n  const stopElements = stops\n    .map((stop) =>\n      buildXMLString('stop', {\n        offset: stop.offset || 0,\n        'stop-color': stop.color,\n      })\n    )\n    .join('')\n  const lastColor = stops.at(-1)?.color || 'transparent'\n\n  let content: string\n  if (repeating) {\n    // The shape is made large enough to cover the box, see `patchSpread()`.\n    content =\n      buildXMLString(\n        'radialGradient',\n        {\n          id: gradientId,\n          ...props,\n        },\n        stopElements\n      ) +\n      buildXMLString(shape, {\n        cx: cx,\n        cy: cy,\n        width: xDelta,\n        height: yDelta,\n        ...spread,\n        fill: `url(#${gradientId})`,\n      })\n  } else {\n    // The gradient covers the whole box, and its last color continues outside\n    // of the ending shape. An ellipse is a circle scaled vertically.\n    const r = shape === 'circle' ? spread.r : spread.rx\n    const scaleY = shape === 'circle' ? 1 : spread.ry / spread.rx\n    const degenerate = !(r > 0) || !(scaleY > 0) || !Number.isFinite(scaleY)\n    content =\n      (degenerate\n        ? ''\n        : buildXMLString(\n            'radialGradient',\n            {\n              id: gradientId,\n              gradientUnits: 'userSpaceOnUse',\n              cx,\n              cy,\n              r,\n              gradientTransform:\n                scaleY === 1\n                  ? undefined\n                  : `translate(${cx} ${cy}) scale(1 ${scaleY}) translate(${-cx} ${-cy})`,\n              ...props,\n            },\n            stopElements\n          )) +\n      buildXMLString('rect', {\n        x: 0,\n        y: 0,\n        width: xDelta,\n        height: yDelta,\n        fill: degenerate ? lastColor : `url(#${gradientId})`,\n      })\n  }\n\n  // TODO: check for repeat-x/repeat-y\n  const defs = buildXMLString(\n    'pattern',\n    {\n      id: patternId,\n      x: offsets[0] / width,\n      y: offsets[1] / height,\n      width: tiles[0] / width,\n      height: tiles[1] / height,\n      patternUnits: 'objectBoundingBox',\n    },\n    content\n  )\n\n  const result = [patternId, defs]\n  return result\n}\n\ntype PositionKeyWord = 'center' | 'left' | 'right' | 'top' | 'bottom'\n\nfunction calcColorStopTotalLength(\n  width: number,\n  stops: ColorStop[],\n  repeating: boolean,\n  inheritableStyle: Record<string, string | number>\n) {\n  if (!repeating) return width\n  const lastStop = stops.at(-1)\n  if (!lastStop || !lastStop.offset || lastStop.offset.unit === '%')\n    return width\n\n  return lengthToNumber(\n    `${lastStop.offset.value}${lastStop.offset.unit}`,\n    +inheritableStyle.fontSize,\n    width,\n    inheritableStyle,\n    true\n  )\n}\n\nfunction calcRadialGradient(\n  cx: RadialPropertyValue,\n  cy: RadialPropertyValue,\n  xDelta: number,\n  yDelta: number,\n  baseFontSize: number,\n  style: Record<string, string | number>\n) {\n  const pos: { x: number; y: number } = { x: xDelta / 2, y: yDelta / 2 }\n  if (cx.type === 'keyword') {\n    Object.assign(\n      pos,\n      calcPos(cx.value as PositionKeyWord, xDelta, yDelta, 'x')\n    )\n  } else {\n    pos.x =\n      lengthToNumber(\n        `${cx.value.value}${cx.value.unit}`,\n        baseFontSize,\n        xDelta,\n        style,\n        true\n      ) ?? xDelta / 2\n  }\n\n  if (cy.type === 'keyword') {\n    Object.assign(\n      pos,\n      calcPos(cy.value as PositionKeyWord, xDelta, yDelta, 'y')\n    )\n  } else {\n    pos.y =\n      lengthToNumber(\n        `${cy.value.value}${cy.value.unit}`,\n        baseFontSize,\n        yDelta,\n        style,\n        true\n      ) ?? yDelta / 2\n  }\n\n  return pos\n}\n\nfunction calcPos(\n  key: PositionKeyWord,\n  xDelta: number,\n  yDelta: number,\n  dir: 'x' | 'y'\n) {\n  switch (key) {\n    case 'center':\n      return { [dir]: dir === 'x' ? xDelta / 2 : yDelta / 2 }\n    case 'left':\n      return { x: 0 }\n    case 'top':\n      return { y: 0 }\n    case 'right':\n      return { x: xDelta }\n    case 'bottom':\n      return { y: yDelta }\n  }\n}\n\ntype Shape = 'circle' | 'ellipse'\n\nfunction calcRadialGradientProps(\n  shape: Shape,\n  baseFontSize: number,\n  colorStops: ColorStop[],\n  [xDelta, yDelta]: [number, number],\n  inheritableStyle: Record<string, string | number>,\n  repeating: boolean,\n  spread: Record<string, number>\n) {\n  const { r, rx, ratio = 1 } = spread\n  if (!repeating) {\n    return {\n      spreadMethod: 'pad',\n    }\n  }\n  const last = colorStops.at(-1)\n  const radius = shape === 'circle' ? r * 2 : rx * 2\n  return {\n    spreadMethod: 'repeat',\n    cx: '50%',\n    cy: '50%',\n    r:\n      last.offset.unit === '%'\n        ? `${\n            (Number(last.offset.value) * Math.min(yDelta / xDelta, 1)) / ratio\n          }%`\n        : Number(\n            lengthToNumber(\n              `${last.offset.value}${last.offset.unit}`,\n              baseFontSize,\n              xDelta,\n              inheritableStyle,\n              true\n            ) / radius\n          ),\n  }\n}\n\nfunction calcRadius(\n  shape: Shape,\n  endingShape: RadialResult['size'],\n  baseFontSize: number,\n  centerAxis: { x: number; y: number },\n  length: [number, number],\n  inheritableStyle: Record<string, string | number>,\n  repeating: boolean\n) {\n  const [xDelta, yDelta] = length\n  const { x: cx, y: cy } = centerAxis\n  const spread: Record<string, number> = {}\n  let fx = 0\n  let fy = 0\n\n  if (isSizeAllLength(endingShape)) {\n    if (endingShape.some((v) => v.value.value.startsWith('-'))) {\n      throw new Error(\n        'disallow setting negative values to the size of the shape. Check https://w3c.github.io/csswg-drafts/css-images/#valdef-rg-size-length-0'\n      )\n    }\n    if (shape === 'circle') {\n      Object.assign(spread, {\n        r: Number(\n          lengthToNumber(\n            `${endingShape[0].value.value}${endingShape[0].value.unit}`,\n            baseFontSize,\n            xDelta,\n            inheritableStyle,\n            true\n          )\n        ),\n      })\n    } else {\n      Object.assign(spread, {\n        rx: Number(\n          lengthToNumber(\n            `${endingShape[0].value.value}${endingShape[0].value.unit}`,\n            baseFontSize,\n            xDelta,\n            inheritableStyle,\n            true\n          )\n        ),\n        ry: Number(\n          lengthToNumber(\n            `${endingShape[1].value.value}${endingShape[1].value.unit}`,\n            baseFontSize,\n            yDelta,\n            inheritableStyle,\n            true\n          )\n        ),\n      })\n    }\n    patchSpread(spread, xDelta, yDelta, cx, cy, repeating, shape)\n    return spread\n  }\n\n  switch (endingShape[0].value) {\n    case 'farthest-corner':\n      fx = Math.max(Math.abs(xDelta - cx), Math.abs(cx))\n      fy = Math.max(Math.abs(yDelta - cy), Math.abs(cy))\n      break\n    case 'closest-corner':\n      fx = Math.min(Math.abs(xDelta - cx), Math.abs(cx))\n      fy = Math.min(Math.abs(yDelta - cy), Math.abs(cy))\n      break\n    case 'farthest-side':\n      if (shape === 'circle') {\n        spread.r = Math.max(\n          Math.abs(xDelta - cx),\n          Math.abs(cx),\n          Math.abs(yDelta - cy),\n          Math.abs(cy)\n        )\n      } else {\n        spread.rx = Math.max(Math.abs(xDelta - cx), Math.abs(cx))\n        spread.ry = Math.max(Math.abs(yDelta - cy), Math.abs(cy))\n      }\n      patchSpread(spread, xDelta, yDelta, cx, cy, repeating, shape)\n      return spread\n    case 'closest-side':\n      if (shape === 'circle') {\n        spread.r = Math.min(\n          Math.abs(xDelta - cx),\n          Math.abs(cx),\n          Math.abs(yDelta - cy),\n          Math.abs(cy)\n        )\n      } else {\n        spread.rx = Math.min(Math.abs(xDelta - cx), Math.abs(cx))\n        spread.ry = Math.min(Math.abs(yDelta - cy), Math.abs(cy))\n      }\n      patchSpread(spread, xDelta, yDelta, cx, cy, repeating, shape)\n\n      return spread\n  }\n  if (shape === 'circle') {\n    spread.r = Math.sqrt(fx * fx + fy * fy)\n  } else {\n    Object.assign(spread, f2r(fx, fy))\n  }\n\n  patchSpread(spread, xDelta, yDelta, cx, cy, repeating, shape)\n\n  return spread\n}\n\n// compare with farthest-corner to make it cover the whole container\nfunction patchSpread(\n  spread: Record<string, number>,\n  xDelta: number,\n  yDelta: number,\n  cx: number,\n  cy: number,\n  repeating: boolean,\n  shape: Shape\n) {\n  if (repeating) {\n    if (shape === 'ellipse') {\n      const mfx = Math.max(Math.abs(xDelta - cx), Math.abs(cx))\n      const mfy = Math.max(Math.abs(yDelta - cy), Math.abs(cy))\n\n      const { rx: mrx, ry: mry } = f2r(mfx, mfy)\n\n      spread.ratio = Math.max(mrx / spread.rx, mry / spread.ry)\n      if (spread.ratio > 1) {\n        spread.rx *= spread.ratio\n        spread.ry *= spread.ratio\n      }\n    } else {\n      const mfx = Math.max(Math.abs(xDelta - cx), Math.abs(cx))\n      const mfy = Math.max(Math.abs(yDelta - cy), Math.abs(cy))\n\n      const mr = Math.sqrt(mfx * mfx + mfy * mfy)\n\n      spread.ratio = mr / spread.r\n      if (spread.ratio > 1) {\n        spread.r = mr\n      }\n    }\n  }\n}\n\nfunction f2r(fx: number, fy: number) {\n  // Spec: https://drafts.csswg.org/css-images/#typedef-size\n  // Get the aspect ratio of the closest-side size.\n  const ratio = fy !== 0 ? fx / fy : 1\n\n  if (fx === 0) {\n    return {\n      rx: 0,\n      ry: 0,\n    }\n  } else {\n    // fx^2/a^2 + fy^2/b^2 = 1\n    // fx^2/(b*ratio)^2 + fy^2/b^2 = 1\n    // (fx^2+fy^2*ratio^2) = (b*ratio)^2\n    // b = sqrt(fx^2+fy^2*ratio^2)/ratio\n\n    const ry = Math.sqrt(fx * fx + fy * fy * ratio * ratio) / ratio\n    return {\n      ry,\n      rx: ry * ratio,\n    }\n  }\n}\n\nfunction isSizeAllLength(v: RadialPropertyValue[]): v is Array<{\n  type: 'length'\n  value: {\n    unit: string\n    value: string\n  }\n}> {\n  return !v.some((s) => s.type === 'keyword')\n}\n\n/**\n * Adds the default `ellipse` shape before a size keyword without a shape,\n * which the parser would read as a color.\n */\nfunction withDefaultShape(gradient: string) {\n  return gradient.replace(\n    /^((?:repeating-)?radial-gradient\\(\\s*)((?:closest|farthest)-(?:side|corner)\\s*,)/,\n    '$1ellipse $2'\n  )\n}\n","import { parseConicGradient } from 'css-gradient-parser'\nimport {\n  parseColor as parseRGBA,\n  mixColors,\n  parseCSSColor,\n  type Color,\n  type InterpolationMethod,\n} from '../../parser/color.js'\n\nimport { buildXMLString, calcDegree, lengthToNumber } from '../../utils.js'\nimport {\n  applyHint,\n  expandColorStops,\n  extractInterpolationMethod,\n} from './utils.js'\n\n/**\n * SVG has no conic gradients, so they're drawn as thin wedges around the\n * center, each filled with the color in its middle.\n * https://drafts.csswg.org/css-images-4/#conic-gradients\n */\nexport function buildConicGradient(\n  {\n    id,\n    width,\n    height,\n    tiles,\n  }: {\n    id: string\n    width: number\n    height: number\n    /** The distance between repeated images. */\n    tiles: [number, number]\n  },\n  image: string,\n  dimensions: number[],\n  offsets: number[],\n  inheritableStyle: Record<string, number | string>,\n  from?: 'background' | 'mask'\n) {\n  const {\n    angle,\n    position,\n    stops: colorStops,\n    repeating,\n  } = parseConicGradient(expandColorStops(extractInterpolationMethod(image)[0]))\n  const method = extractInterpolationMethod(image)[1]\n  const [w, h] = dimensions\n  const [cx, cy] = resolveCenter(position, w, h, inheritableStyle)\n  const startAngle = calcDegree(angle) || 0\n\n  const stops = resolveStops(colorStops, inheritableStyle)\n  const colorAt = createColorAt(stops, repeating, method)\n\n  // Split at every stop, then into wedges of at most 1 degree, with at most\n  // about 2 levels of difference in each channel.\n  const breaks = new Set<number>([0, 1])\n  for (const turn of stopPositions(stops, repeating)) {\n    if (turn > 0 && turn < 1) breaks.add(turn)\n  }\n  const sortedBreaks = [...breaks].sort((a, b) => a - b)\n  const segments: [number, number][] = []\n  for (let i = 0; i < sortedBreaks.length - 1; i++) {\n    const start = sortedBreaks[i]\n    const end = sortedBreaks[i + 1]\n    if (end - start < 1e-9) continue\n    const a = colorAt(start + 1e-9)\n    const b = colorAt(end - 1e-9)\n    const difference = Math.max(\n      ...[0, 1, 2].map((c) => Math.abs(a[c] * a[3] - b[c] * b[3]) * 255),\n      Math.abs(a[3] - b[3]) * 255\n    )\n    const count = Math.min(\n      256,\n      Math.max(1, Math.ceil((end - start) * 360), Math.ceil(difference / 2))\n    )\n    for (let j = 0; j < count; j++) {\n      segments.push([\n        start + ((end - start) * j) / count,\n        start + ((end - start) * (j + 1)) / count,\n      ])\n    }\n  }\n\n  // Far enough to cover the box with straight edges between arc points.\n  const radius =\n    (Math.max(\n      Math.hypot(cx, cy),\n      Math.hypot(w - cx, cy),\n      Math.hypot(cx, h - cy),\n      Math.hypot(w - cx, h - cy)\n    ) +\n      1) /\n    Math.cos(Math.PI / 12)\n  const point = (turn: number) => {\n    const radians = ((startAngle + turn * 360) * Math.PI) / 180\n    return `${round(cx + radius * Math.sin(radians))} ${round(\n      cy - radius * Math.cos(radians)\n    )}`\n  }\n  const wedge = (start: number, end: number) => {\n    let d = `M${round(cx)} ${round(cy)}L${point(start)}`\n    // Points at most 30 degrees apart.\n    const steps = Math.ceil((end - start) * 12)\n    for (let i = 1; i <= steps; i++) {\n      d += `L${point(start + ((end - start) * i) / steps)}`\n    }\n    return d + 'Z'\n  }\n\n  // Wedges are drawn without antialiasing, which would show their edges, e.g.\n  // as seams. Each one overlaps the next one, which is drawn over it, and the\n  // first one starts before the start, under the last one. Where the color\n  // changes abruptly, an antialiased wedge is drawn over the edge.\n  const overlap = 0.5 / 360\n  const difference = (\n    a: [number, number, number, number],\n    b: [number, number, number, number]\n  ) =>\n    Math.max(\n      ...[0, 1, 2].map((c) => Math.abs(a[c] - b[c])),\n      Math.abs(a[3] - b[3])\n    ) * 255\n  // The color under the center, which may not be in any wedge.\n  const base = colorAt(segments[0] ? segments[0][0] : 0)\n  let colors = buildXMLString('rect', {\n    width: w,\n    height: h,\n    fill: from === 'mask' ? gray(base[3]) : hex(base),\n  })\n  let alphas = buildXMLString('rect', {\n    width: w,\n    height: h,\n    fill: gray(base[3]),\n  })\n  let antialiasedColors = ''\n  let antialiasedAlphas = ''\n  let translucent = base[3] < 1\n  const draw = (\n    start: number,\n    end: number,\n    color: [number, number, number, number],\n    antialias: boolean\n  ) => {\n    if (color[3] < 1) translucent = true\n    const d = wedge(start, end)\n    // Masks use the luminance, which is the alpha of the gradient.\n    const fill = from === 'mask' ? gray(color[3]) : hex(color)\n    const shape = buildXMLString('path', { d, fill })\n    const alpha = buildXMLString('path', { d, fill: gray(color[3]) })\n    if (antialias) {\n      antialiasedColors += shape\n      antialiasedAlphas += alpha\n    } else {\n      colors += shape\n      alphas += alpha\n    }\n  }\n  segments.forEach(([start, end], index) => {\n    draw(\n      index === 0 ? start - overlap : start,\n      index === segments.length - 1 ? end : end + overlap,\n      colorAt((start + end) / 2),\n      false\n    )\n  })\n  segments.forEach(([start, end], index) => {\n    const before = colorAt(index ? start - 1e-9 : 1 - 1e-9)\n    const after = colorAt(start + 1e-9)\n    if (difference(before, after) > 2) {\n      draw(start, Math.min(end, start + 2 / 360), after, true)\n    }\n  })\n  colors =\n    buildXMLString('g', { 'shape-rendering': 'crispEdges' }, colors) +\n    antialiasedColors\n  alphas =\n    buildXMLString('g', { 'shape-rendering': 'crispEdges' }, alphas) +\n    antialiasedAlphas\n\n  const patternId = `satori_pattern_${id}`\n  const maskId = `satori_mask_${id}`\n  const content =\n    translucent && from !== 'mask'\n      ? buildXMLString(\n          'mask',\n          {\n            id: maskId,\n            maskUnits: 'userSpaceOnUse',\n            x: 0,\n            y: 0,\n            width: w,\n            height: h,\n          },\n          alphas\n        ) + buildXMLString('g', { mask: `url(#${maskId})` }, colors)\n      : colors\n\n  const defs = buildXMLString(\n    'pattern',\n    {\n      id: patternId,\n      x: offsets[0] / width,\n      y: offsets[1] / height,\n      width: tiles[0] / width,\n      height: tiles[1] / height,\n      patternUnits: 'objectBoundingBox',\n    },\n    buildXMLString(\n      'svg',\n      { width: w, height: h, viewBox: `0 0 ${w} ${h}`, overflow: 'hidden' },\n      content\n    )\n  )\n\n  return [patternId, defs]\n}\n\ntype Stop = {\n  color: [number, number, number, number]\n  /** The color before it's clipped to sRGB. */\n  parsed: Color | null\n  position?: number\n  hint?: number\n}\n\ntype ResolvedStop = Stop & { position: number }\n\nconst round = (value: number) => Math.round(value * 10) / 10\nconst hex = ([r, g, b]: number[]) =>\n  '#' +\n  [r, g, b]\n    .map((c) =>\n      Math.round(Math.min(1, Math.max(0, c)) * 255)\n        .toString(16)\n        .padStart(2, '0')\n    )\n    .join('')\nconst gray = (value: number) => hex([value, value, value])\n\nfunction resolveCenter(\n  position: string,\n  width: number,\n  height: number,\n  style: Record<string, number | string>\n): [number, number] {\n  const tokens = position.trim().split(/\\s+/)\n  let x: number | undefined\n  let y: number | undefined\n  const keywords: Record<string, ['x' | 'y' | 'both', number]> = {\n    left: ['x', 0],\n    right: ['x', 1],\n    top: ['y', 0],\n    bottom: ['y', 1],\n    center: ['both', 0.5],\n  }\n  const resolve = (token: string, base: number) =>\n    lengthToNumber(token, style.fontSize as number, base, style, true)\n\n  // `<x> <y>`, or keywords in any order.\n  const lengths: string[] = []\n  for (const token of tokens) {\n    const keyword = keywords[token]\n    if (keyword) {\n      if (keyword[0] === 'x') x = keyword[1] * width\n      else if (keyword[0] === 'y') y = keyword[1] * height\n    } else {\n      lengths.push(token)\n    }\n  }\n  if (lengths.length && tokens.length <= 2) {\n    if (tokens.length === 1 || !keywords[tokens[0]]) {\n      x = resolve(lengths[0], width) ?? x\n      if (lengths[1]) y = resolve(lengths[1], height) ?? y\n    } else if (keywords[tokens[0]][0] === 'y') {\n      x = resolve(lengths[0], width) ?? x\n    } else {\n      y = resolve(lengths[0], height) ?? y\n    }\n  }\n  return [x ?? width / 2, y ?? height / 2]\n}\n\nfunction parseColor(\n  color: string,\n  style: Record<string, number | string>\n): [number, number, number, number] {\n  const value =\n    color.toLowerCase() === 'currentcolor' ? String(style.color) : color\n  const parsed = parseRGBA(value, String(style.color))\n  if (!parsed) return [0, 0, 0, 0]\n  const [r, g, b, a] = parsed\n  return [r / 255, g / 255, b / 255, a]\n}\n\n/** A position as a fraction of a turn. */\nfunction resolvePosition(offset: { value: string; unit: string }) {\n  const value = parseFloat(offset.value)\n  switch (offset.unit) {\n    case '%':\n      return value / 100\n    case 'deg':\n      return value / 360\n    case 'grad':\n      return value / 400\n    case 'rad':\n      return value / (2 * Math.PI)\n    case 'turn':\n      return value\n  }\n  // Unitless zero.\n  return value === 0 ? 0 : undefined\n}\n\n// https://drafts.csswg.org/css-images-4/#color-stop-fixup\nfunction resolveStops(\n  colorStops: ReturnType<typeof parseConicGradient>['stops'],\n  style: Record<string, number | string>\n): ResolvedStop[] {\n  const stops: Stop[] = colorStops.map((stop) => ({\n    color: parseColor(stop.color, style),\n    parsed: parseCSSColor(stop.color, String(style.color)),\n    position: stop.offset ? resolvePosition(stop.offset) : undefined,\n    hint: stop.hint ? resolvePosition(stop.hint) : undefined,\n  }))\n  if (!stops.length) {\n    return [{ color: [0, 0, 0, 0], parsed: null, position: 0 }]\n  }\n  if (stops[0].position === undefined) stops[0].position = 0\n  if (stops[stops.length - 1].position === undefined) {\n    stops[stops.length - 1].position = Math.max(\n      1,\n      ...stops.map((stop) => stop.position ?? 0)\n    )\n  }\n  // A position can't be before the ones before it.\n  let max = -Infinity\n  for (const stop of stops) {\n    if (stop.position !== undefined) {\n      stop.position = Math.max(stop.position, max)\n      max = stop.position\n    }\n  }\n  // Positions in between are spread evenly.\n  for (let i = 0; i < stops.length; i++) {\n    if (stops[i].position !== undefined) continue\n    let next = i\n    while (stops[next].position === undefined) next++\n    const start = stops[i - 1].position\n    const end = stops[next].position\n    for (let j = i; j < next; j++) {\n      stops[j].position = start + ((end - start) * (j - i + 1)) / (next - i + 1)\n    }\n  }\n  return stops as ResolvedStop[]\n}\n\n/** The positions of all stops in [0, 1], repeated if needed. */\nfunction stopPositions(stops: ResolvedStop[], repeating: boolean) {\n  const first = stops[0].position\n  const period = stops[stops.length - 1].position - first\n  const positions = stops.flatMap((stop) =>\n    stop.hint !== undefined ? [stop.position, stop.hint] : [stop.position]\n  )\n  if (!repeating || period <= 0) return positions\n  const all: number[] = []\n  const startRepeat = Math.floor((0 - first) / period)\n  const endRepeat = Math.ceil((1 - first) / period)\n  for (let k = startRepeat; k <= endRepeat; k++) {\n    for (const position of positions) all.push(position + k * period)\n  }\n  return all\n}\n\nfunction createColorAt(\n  stops: ResolvedStop[],\n  repeating: boolean,\n  method: InterpolationMethod | undefined\n) {\n  const first = stops[0].position\n  const last = stops[stops.length - 1].position\n  const period = last - first\n  return (turn: number): [number, number, number, number] => {\n    let p = turn\n    if (repeating && period > 0) {\n      p = first + ((((p - first) % period) + period) % period)\n    }\n    if (p <= first) return stops[0].color\n    if (p >= last) return stops[stops.length - 1].color\n    let i = 0\n    while (i < stops.length - 2 && p >= stops[i + 1].position) i++\n    const a = stops[i]\n    const b = stops[i + 1]\n    const length = b.position - a.position\n    if (length <= 0) return b.color\n    let t = (p - a.position) / length\n    // A hint moves the middle of the transition.\n    if (a.hint !== undefined) t = applyHint(t, (a.hint - a.position) / length)\n    if (method && a.parsed && b.parsed) {\n      const [r, g, blue, alpha] = mixColors(a.parsed, b.parsed, t, method)\n      return [r / 255, g / 255, blue / 255, alpha]\n    }\n    // Interpolate with premultiplied alpha.\n    const alpha = a.color[3] + (b.color[3] - a.color[3]) * t\n    if (alpha === 0) return [0, 0, 0, 0]\n    const channel = (c: number) =>\n      (a.color[c] * a.color[3] +\n        (b.color[c] * b.color[3] - a.color[c] * a.color[3]) * t) /\n      alpha\n    return [channel(0), channel(1), channel(2), alpha]\n  }\n}\n","import { buildXMLString, lengthToNumber } from '../utils.js'\n\nimport { hasIntrinsicSize, resolveImageData } from '../handler/image.js'\nimport { buildLinearGradient } from './gradient/linear.js'\nimport { buildRadialGradient } from './gradient/radial.js'\nimport { buildConicGradient } from './gradient/conic.js'\nimport { isColor } from '../parser/color.js'\n\ninterface Background {\n  attachment?: string\n  color?: string\n  clip: string\n  image: string\n  origin?: string\n  position: string\n  size: string\n  repeat: string\n}\n\ntype Style = Record<string, number | string>\n\nconst resolveLength = (value: string, base: number, style: Style) =>\n  lengthToNumber(value, style.fontSize as number, base, style, true) ?? 0\n\n/**\n * Resolves `background-size` in a positioning area, with the intrinsic size\n * of the image if it has one. Gradients don't, so they fill the area.\n * https://www.w3.org/TR/css-backgrounds-3/#the-background-size\n */\nfunction resolveSize(\n  size: string | undefined,\n  areaWidth: number,\n  areaHeight: number,\n  imageWidth: number,\n  imageHeight: number,\n  style: Style,\n  /** Without a size, an image with a ratio is sized like `contain`. */\n  hasSize = true\n): [number, number] {\n  let value = (size || 'auto').trim().toLowerCase()\n  const hasRatio = imageWidth > 0 && imageHeight > 0\n  if (!hasSize && hasRatio && /^auto(\\s+auto)?$/.test(value)) value = 'contain'\n  if (value === 'cover' || value === 'contain') {\n    if (!hasRatio) return [areaWidth, areaHeight]\n    const scale = (value === 'cover' ? Math.max : Math.min)(\n      areaWidth / imageWidth,\n      areaHeight / imageHeight\n    )\n    return [imageWidth * scale, imageHeight * scale]\n  }\n\n  const [widthValue, heightValue = 'auto'] = value.split(/\\s+/)\n  let width =\n    widthValue === 'auto'\n      ? undefined\n      : resolveLength(widthValue, areaWidth, style)\n  let height =\n    heightValue === 'auto'\n      ? undefined\n      : resolveLength(heightValue, areaHeight, style)\n  if (width === undefined && height === undefined) {\n    return hasRatio ? [imageWidth, imageHeight] : [areaWidth, areaHeight]\n  }\n  width ??= hasRatio ? (imageWidth / imageHeight) * height : areaWidth\n  height ??= hasRatio ? (imageHeight / imageWidth) * width : areaHeight\n  return [width, height]\n}\n\n/**\n * Resolves `background-position` with 1 to 4 values. Percentages are of the\n * space left by the image, so `100%` aligns the edges of the image and area.\n * https://www.w3.org/TR/css-backgrounds-3/#the-background-position\n */\nfunction resolvePosition(\n  position: string | undefined,\n  freeWidth: number,\n  freeHeight: number,\n  style: Style\n): [number, number] {\n  const tokens = (position || '0% 0%').trim().toLowerCase().split(/\\s+/)\n  const isX = (token: string) => token === 'left' || token === 'right'\n  const isY = (token: string) => token === 'top' || token === 'bottom'\n  const isKeyword = (token: string) =>\n    isX(token) || isY(token) || token === 'center'\n\n  // The edge each offset is from, and the offset.\n  let x: [string, string] = ['left', '50%']\n  let y: [string, string] = ['top', '50%']\n  const keywordOffset = (token: string, start: string): [string, string] =>\n    token === 'center' ? [start, '50%'] : [token, '0%']\n\n  if (tokens.length <= 2) {\n    let [first, second = 'center'] = tokens\n    if (isY(first) || isX(second)) [first, second] = [second, first]\n    x = isKeyword(first) ? keywordOffset(first, 'left') : ['left', first]\n    y = isKeyword(second) ? keywordOffset(second, 'top') : ['top', second]\n  } else {\n    // Keywords, each followed by an optional offset.\n    let assignedX = false\n    let assignedY = false\n    for (let i = 0; i < tokens.length; i++) {\n      const keyword = tokens[i]\n      const offset = !isKeyword(tokens[i + 1] ?? 'center') ? tokens[++i] : '0%'\n      if (isX(keyword) || (keyword === 'center' && !assignedX)) {\n        x = keyword === 'center' ? ['left', '50%'] : [keyword, offset]\n        assignedX = true\n      } else {\n        y = keyword === 'center' ? ['top', '50%'] : [keyword, offset]\n        assignedY = true\n      }\n    }\n    if (!assignedY) y = ['top', '50%']\n  }\n\n  const resolve = ([edge, offset]: [string, string], free: number) => {\n    const value = resolveLength(offset, free, style)\n    return edge === 'right' || edge === 'bottom' ? free - value : value\n  }\n  return [resolve(x, freeWidth), resolve(y, freeHeight)]\n}\n\n/**\n * The area of a box (`border-box`, `padding-box` or `content-box`) of an\n * element, which positions its backgrounds. Defaults to the padding box.\n */\nexport function getBoxArea(\n  {\n    left,\n    top,\n    width,\n    height,\n  }: Record<'left' | 'top' | 'width' | 'height', number>,\n  style: Record<string, number | string>,\n  box = 'padding-box'\n) {\n  const inset = (side: string) => {\n    const borderWidth = box === 'border-box' ? 0 : style[`border${side}Width`]\n    const padding = box === 'content-box' ? style[`padding${side}`] : 0\n    return (\n      (typeof borderWidth === 'number' ? borderWidth : 0) +\n      (typeof padding === 'number' ? padding : 0)\n    )\n  }\n  return {\n    left: left + inset('Left'),\n    top: top + inset('Top'),\n    width: width - inset('Left') - inset('Right'),\n    height: height - inset('Top') - inset('Bottom'),\n  }\n}\n\nexport default async function backgroundImage(\n  {\n    id,\n    width,\n    height,\n    left,\n    top,\n    origin,\n  }: {\n    id: string\n    width: number\n    height: number\n    left: number\n    top: number\n    /** The positioning area, the box by default. */\n    origin?: { left: number; top: number; width: number; height: number }\n  },\n  { image, size, position, repeat }: Background,\n  inheritableStyle: Record<string, number | string>,\n  from?: 'background' | 'mask'\n): Promise<string[] | undefined> {\n  // A layer without an image.\n  if (image.trim() === 'none') return\n\n  from = from || 'background'\n\n  // One keyword for both axes, or one for each.\n  const [repeatX, repeatY] = (() => {\n    const keywords = (repeat || 'repeat').trim().toLowerCase().split(/\\s+/)\n    if (keywords[0] === 'repeat-x') return ['repeat', 'no-repeat']\n    if (keywords[0] === 'repeat-y') return ['no-repeat', 'repeat']\n    return [keywords[0], keywords[1] ?? keywords[0]]\n  })()\n\n  const isGradient = /^(repeating-)?(linear|radial|conic)-gradient\\(/.test(\n    image\n  )\n  if (!isGradient && !image.startsWith('url(')) {\n    return buildColorLayer(id, image, left, top, width, height)\n  }\n\n  let src: string | undefined\n  let imageWidth = 0\n  let imageHeight = 0\n  if (!isGradient) {\n    ;[src, imageWidth, imageHeight] = await resolveImageData(image.slice(4, -1))\n  }\n\n  const area = origin ?? { left, top, width, height }\n  const dimensions = resolveSize(\n    size,\n    area.width,\n    area.height,\n    imageWidth,\n    imageHeight,\n    inheritableStyle,\n    !src || hasIntrinsicSize(src)\n  )\n\n  // `round` scales images to repeat a whole number of times, keeping the\n  // ratio if the other size is `auto`.\n  const [widthValue, heightValue = 'auto'] = (size || 'auto')\n    .trim()\n    .toLowerCase()\n    .split(/\\s+/)\n  const roundSize = (imageSize: number, areaSize: number) =>\n    areaSize / Math.max(1, Math.round(areaSize / imageSize))\n  if (repeatX === 'round' && dimensions[0] > 0) {\n    const rounded = roundSize(dimensions[0], area.width)\n    if (repeatY !== 'round' && heightValue === 'auto') {\n      dimensions[1] *= rounded / dimensions[0]\n    }\n    dimensions[0] = rounded\n  }\n  if (repeatY === 'round' && dimensions[1] > 0) {\n    const rounded = roundSize(dimensions[1], area.height)\n    if (repeatX !== 'round' && widthValue === 'auto') {\n      dimensions[0] *= rounded / dimensions[1]\n    }\n    dimensions[1] = rounded\n  }\n\n  const resolvedPosition = resolvePosition(\n    position,\n    area.width - dimensions[0],\n    area.height - dimensions[1],\n    inheritableStyle\n  )\n\n  // The offset of the first image from the box, and the distance between\n  // images. `space` repeats images that fit from edge to edge.\n  const tile = (\n    keyword: string,\n    imageSize: number,\n    areaSize: number,\n    areaOffset: number,\n    boxSize: number,\n    offset: number\n  ): [number, number] => {\n    const count = imageSize > 0 ? Math.floor(areaSize / imageSize) : 0\n    if (keyword === 'space' && count > 1) {\n      return [\n        areaOffset,\n        imageSize + (areaSize - count * imageSize) / (count - 1),\n      ]\n    }\n    if (keyword === 'no-repeat' || keyword === 'space') {\n      // Large enough to not repeat the image in the box.\n      return [\n        areaOffset + offset,\n        boxSize + Math.abs(areaOffset + offset) + imageSize,\n      ]\n    }\n    return [areaOffset + offset, imageSize]\n  }\n  const [offsetX, tileX] = tile(\n    repeatX,\n    dimensions[0],\n    area.width,\n    area.left - left,\n    width,\n    resolvedPosition[0]\n  )\n  const [offsetY, tileY] = tile(\n    repeatY,\n    dimensions[1],\n    area.height,\n    area.top - top,\n    height,\n    resolvedPosition[1]\n  )\n  const offsets = [offsetX, offsetY]\n  const tiles: [number, number] = [tileX, tileY]\n\n  if (/^(repeating-)?conic-gradient\\(/.test(image)) {\n    return buildConicGradient(\n      { id, width, height, tiles },\n      image,\n      dimensions,\n      offsets,\n      inheritableStyle,\n      from\n    )\n  }\n\n  if (image.includes('linear-gradient(')) {\n    return buildLinearGradient(\n      { id, width, height, tiles },\n      image,\n      dimensions,\n      offsets,\n      inheritableStyle,\n      from\n    )\n  }\n\n  if (isGradient) {\n    return buildRadialGradient(\n      { id, width, height, tiles },\n      image,\n      dimensions,\n      offsets,\n      inheritableStyle,\n      from\n    )\n  }\n\n  const [resolvedWidth, resolvedHeight] = dimensions\n  return [\n    `satori_bi${id}`,\n    buildXMLString(\n      'pattern',\n      {\n        id: `satori_bi${id}`,\n        patternContentUnits: 'userSpaceOnUse',\n        patternUnits: 'userSpaceOnUse',\n        x: offsets[0] + left,\n        y: offsets[1] + top,\n        width: tiles[0],\n        height: tiles[1],\n      },\n      buildXMLString('image', {\n        x: 0,\n        y: 0,\n        width: resolvedWidth,\n        height: resolvedHeight,\n        preserveAspectRatio: 'none',\n        href: src,\n      })\n    ),\n  ]\n}\n\n/**\n * A color as an image, which Satori supports in `background-image` lists.\n */\nfunction buildColorLayer(\n  id: string,\n  image: string,\n  left: number,\n  top: number,\n  width: number,\n  height: number\n) {\n  if (isColor(image)) {\n    const color = image\n\n    return [\n      `satori_bi${id}`,\n      buildXMLString(\n        'pattern',\n        {\n          id: `satori_bi${id}`,\n          patternContentUnits: 'userSpaceOnUse',\n          patternUnits: 'userSpaceOnUse',\n          x: left,\n          y: top,\n          width: width,\n          height: height,\n        },\n        buildXMLString('rect', {\n          x: 0,\n          y: 0,\n          width: width,\n          height: height,\n          fill: color,\n        })\n      ),\n    ]\n  }\n\n  throw new Error(`Invalid background image: \"${image}\"`)\n}\n","/**\n * CSS border radius to SVG path.\n */\n\n// TODO: Support the `border-radius: 10px / 20px` syntax.\n// https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius\n\nimport { buildXMLString, lengthToNumber } from '../utils.js'\nimport { MATH_FUNCTION, parseMath } from '../parser/math.js'\nimport { splitRadius } from '../parser/border-radius.js'\nimport { parseCornerShapeValue } from '../parser/corner-shape.js'\n\n// Getting the intersection of a 45deg ray with the elliptical arc x^2/rx^2 + y^2/ry^2 = 1.\n// Reference:\n// https://www.w3.org/TR/SVG/implnote.html#ArcConversionEndpointToCenter\nfunction svgArcCenterOffset([rx, ry]: number[]) {\n  if (Math.round(rx * 1000) === 0 && Math.round(ry * 1000) === 0) {\n    return 0\n  }\n  return Math.round(((rx * ry) / Math.sqrt(rx * rx + ry * ry)) * 1000) / 1000\n}\n\nfunction resolveSize(a: number, b: number, limit: number) {\n  if (limit < a + b) {\n    if (limit / 2 < a && limit / 2 < b) {\n      a = b = limit / 2\n    } else if (limit / 2 < a) {\n      a = limit - b\n    } else if (limit / 2 < b) {\n      b = limit - a\n    }\n  }\n  return [a, b]\n}\n\nfunction makeSmaller(arr: [number, number]) {\n  arr[0] = arr[1] = Math.min(arr[0], arr[1])\n}\n\n// Each corner can have 2 values, the first is the horizontal radius, the second is the vertical radius.\nfunction resolveRadius(\n  v: number | string | undefined,\n  width: number,\n  height: number,\n  fontSize: number,\n  style: any\n): [boolean, undefined | [number, number]] {\n  if (typeof v === 'string') {\n    const sides = splitRadius(v)\n    // Math functions with percentages are percentages of the width or height.\n    const parse = (side: string, basis: number) =>\n      MATH_FUNCTION.test(side)\n        ? parseMath(side, (length) =>\n            lengthToNumber(length, fontSize, basis, style, true)\n          )\n        : undefined\n    const resolve = (side: string, basis: number) => {\n      const math = parse(side, basis)\n      return (\n        (math\n          ? math.evaluate(basis)\n          : lengthToNumber(side, fontSize, basis, style, true)) ?? 0\n      )\n    }\n    const singleValue =\n      !sides[1] &&\n      !sides[0].endsWith('%') &&\n      !parse(sides[0], width)?.percentage\n    sides[1] = sides[1] || sides[0]\n    return [\n      singleValue,\n      [\n        Math.min(resolve(sides[0], width), width),\n        Math.min(resolve(sides[1], height), height),\n      ],\n    ]\n  }\n  if (typeof v === 'number') {\n    return [true, [Math.min(v, width), Math.min(v, height)]]\n  }\n  return [true, undefined]\n}\n\nconst radiusZeroOrNull = (_radius?: [number, number]) =>\n  _radius && _radius[0] !== 0 && _radius[1] !== 0\n\nexport function resolveCornerShape(value: unknown) {\n  if (typeof value !== 'string') return 1\n  return parseCornerShapeValue(value)\n}\n\ntype Point = [number, number]\n\nfunction cornerPoints(\n  start: Point,\n  end: Point,\n  outer: Point,\n  center: Point,\n  shape: number\n) {\n  if (shape === Infinity) return [start, outer, end]\n  if (shape === -Infinity) return [start, center, end]\n  if (shape === 0) {\n    return [\n      start,\n      [(start[0] + end[0]) / 2, (start[1] + end[1]) / 2] as Point,\n      end,\n    ]\n  }\n\n  const curveCenter = shape < 0 ? outer : center\n  const exponent = Math.pow(2, 1 - Math.abs(shape))\n  if (exponent === 0)\n    return shape > 0 ? [start, outer, end] : [start, center, end]\n  const points: Point[] = []\n  const segments = 16\n\n  for (let i = 0; i <= segments; i++) {\n    const angle = (Math.PI * i) / segments / 2\n    const x = Math.pow(Math.sin(angle), exponent)\n    const y = Math.pow(Math.cos(angle), exponent)\n    points.push([\n      curveCenter[0] +\n        (end[0] - curveCenter[0]) * x +\n        (start[0] - curveCenter[0]) * y,\n      curveCenter[1] +\n        (end[1] - curveCenter[1]) * x +\n        (start[1] - curveCenter[1]) * y,\n    ])\n  }\n\n  return points\n}\n\nfunction pointString(point: Point) {\n  return `${Math.round(point[0] * 1000) / 1000},${\n    Math.round(point[1] * 1000) / 1000\n  }`\n}\n\nfunction oppositeRadiiScale(\n  first: [number, number],\n  second: [number, number],\n  width: number,\n  height: number\n) {\n  return Math.min(\n    1,\n    width / (first[0] + second[0] || width),\n    height / (first[1] + second[1] || height)\n  )\n}\n\nfunction shapedRadiusPath(\n  left: number,\n  top: number,\n  width: number,\n  height: number,\n  radii: [number, number][],\n  shapes: number[],\n  partialSides?: boolean[],\n  fullCorners = false\n) {\n  if (partialSides?.every(Boolean)) partialSides = undefined\n\n  const right = left + width\n  const bottom = top + height\n  const [topLeft, topRight, bottomRight, bottomLeft] = radii\n  const corners = [\n    cornerPoints(\n      [left, top + topLeft[1]],\n      [left + topLeft[0], top],\n      [left, top],\n      [left + topLeft[0], top + topLeft[1]],\n      shapes[0]\n    ),\n    cornerPoints(\n      [right - topRight[0], top],\n      [right, top + topRight[1]],\n      [right, top],\n      [right - topRight[0], top + topRight[1]],\n      shapes[1]\n    ),\n    cornerPoints(\n      [right, bottom - bottomRight[1]],\n      [right - bottomRight[0], bottom],\n      [right, bottom],\n      [right - bottomRight[0], bottom - bottomRight[1]],\n      shapes[2]\n    ),\n    cornerPoints(\n      [left + bottomLeft[0], bottom],\n      [left, bottom - bottomLeft[1]],\n      [left, bottom],\n      [left + bottomLeft[0], bottom - bottomLeft[1]],\n      shapes[3]\n    ),\n  ]\n\n  if (partialSides) {\n    let start = partialSides.indexOf(true)\n    if (start === -1) throw new Error('Invalid `partialSides`.')\n    while (partialSides[(start + 3) % 4]) start = (start + 3) % 4\n\n    // From the middle of the corner before the sides to the middle of the\n    // corner after them, or through the whole corners.\n    const middle = (corner: unknown[]) =>\n      fullCorners ? 0 : Math.floor(corner.length / 2)\n    const firstCorner = corners[start]\n    const firstMiddle = middle(firstCorner)\n    let path = `M${pointString(firstCorner[firstMiddle])}`\n    let side = start\n\n    do {\n      const currentCorner = corners[side]\n      const currentMiddle = middle(currentCorner)\n      for (let i = currentMiddle + 1; i < currentCorner.length; i++) {\n        path += ` L${pointString(currentCorner[i])}`\n      }\n\n      const nextCorner = corners[(side + 1) % 4]\n      path += ` L${pointString(nextCorner[0])}`\n      const isLast = !partialSides[(side + 1) % 4]\n      const nextMiddle =\n        fullCorners && isLast\n          ? nextCorner.length - 1\n          : Math.floor(nextCorner.length / 2)\n      for (let i = 1; i <= nextMiddle; i++) {\n        path += ` L${pointString(nextCorner[i])}`\n      }\n\n      side = (side + 1) % 4\n    } while (partialSides[side] && side !== start)\n\n    return path\n  }\n\n  let path = `M${pointString(corners[0][corners[0].length - 1])}`\n  for (let side = 0; side < 4; side++) {\n    const nextCorner = corners[(side + 1) % 4]\n    path += ` L${pointString(nextCorner[0])}`\n    for (let i = 1; i < nextCorner.length; i++) {\n      path += ` L${pointString(nextCorner[i])}`\n    }\n  }\n  return path + ' Z'\n}\n\nexport function getBorderRadiusClipPath(\n  {\n    id,\n    borderRadiusPath,\n    borderType,\n    left,\n    top,\n    width,\n    height,\n  }: {\n    id: string\n    borderRadiusPath?: string\n    borderType?: 'rect' | 'path'\n    left: number\n    top: number\n    width: number\n    height: number\n  },\n  style: Record<string, number | string>\n) {\n  const rectClipId = `satori_brc-${id}`\n  const defs = buildXMLString(\n    'clipPath',\n    {\n      id: rectClipId,\n    },\n    buildXMLString(borderType, {\n      x: left,\n      y: top,\n      width,\n      height,\n      d: borderRadiusPath ? borderRadiusPath : undefined,\n    })\n  )\n\n  return [defs, rectClipId]\n}\n\n/**\n * Resolves the radii of the corners of a box, `[horizontal, vertical]` in px\n * from the top left clockwise, reduced so they don't overlap. Returns\n * `undefined` if no corner is rounded.\n */\nexport function resolveBorderRadii(\n  {\n    width,\n    height,\n  }: {\n    width: number\n    height: number\n  },\n  style: Record<string, any>,\n  keepSquare = false\n): [number, number][] | undefined {\n  let {\n    borderTopLeftRadius,\n    borderTopRightRadius,\n    borderBottomLeftRadius,\n    borderBottomRightRadius,\n    fontSize,\n  } = style\n  const cornerShapes = [\n    resolveCornerShape(style.cornerTopLeftShape),\n    resolveCornerShape(style.cornerTopRightShape),\n    resolveCornerShape(style.cornerBottomRightShape),\n    resolveCornerShape(style.cornerBottomLeftShape),\n  ]\n\n  let singleAbsValueTopLeftCorner\n  let singleAbsValueTopRightCorner\n  let singleAbsValueBottomLeftCorner\n  let singleAbsValueBottomRightCorner\n  ;[singleAbsValueTopLeftCorner, borderTopLeftRadius] = resolveRadius(\n    borderTopLeftRadius,\n    width,\n    height,\n    fontSize,\n    style\n  )\n  ;[singleAbsValueTopRightCorner, borderTopRightRadius] = resolveRadius(\n    borderTopRightRadius,\n    width,\n    height,\n    fontSize,\n    style\n  )\n  ;[singleAbsValueBottomLeftCorner, borderBottomLeftRadius] = resolveRadius(\n    borderBottomLeftRadius,\n    width,\n    height,\n    fontSize,\n    style\n  )\n  ;[singleAbsValueBottomRightCorner, borderBottomRightRadius] = resolveRadius(\n    borderBottomRightRadius,\n    width,\n    height,\n    fontSize,\n    style\n  )\n\n  if (\n    !keepSquare &&\n    !radiusZeroOrNull(borderTopLeftRadius) &&\n    !radiusZeroOrNull(borderTopRightRadius) &&\n    !radiusZeroOrNull(borderBottomLeftRadius) &&\n    !radiusZeroOrNull(borderBottomRightRadius)\n  ) {\n    return undefined\n  }\n  borderTopLeftRadius ||= [0, 0]\n  borderTopRightRadius ||= [0, 0]\n  borderBottomLeftRadius ||= [0, 0]\n  borderBottomRightRadius ||= [0, 0]\n\n  // Limit the radius sizes of each edge to make sure they will never overlap.\n\n  // Top\n  ;[borderTopLeftRadius[0], borderTopRightRadius[0]] = resolveSize(\n    borderTopLeftRadius[0],\n    borderTopRightRadius[0],\n    width\n  )\n  // Bottom\n  ;[borderBottomLeftRadius[0], borderBottomRightRadius[0]] = resolveSize(\n    borderBottomLeftRadius[0],\n    borderBottomRightRadius[0],\n    width\n  )\n  // Left\n  ;[borderTopLeftRadius[1], borderBottomLeftRadius[1]] = resolveSize(\n    borderTopLeftRadius[1],\n    borderBottomLeftRadius[1],\n    height\n  )\n  // Right\n  ;[borderTopRightRadius[1], borderBottomRightRadius[1]] = resolveSize(\n    borderTopRightRadius[1],\n    borderBottomRightRadius[1],\n    height\n  )\n\n  // If the specified border radius is a single value (e.g. 10px or 10em), we take\n  // the minimum of the resolved horizontal and vertical radius and apply to both.\n  if (singleAbsValueTopLeftCorner) {\n    makeSmaller(borderTopLeftRadius)\n  }\n  if (singleAbsValueTopRightCorner) {\n    makeSmaller(borderTopRightRadius)\n  }\n  if (singleAbsValueBottomLeftCorner) {\n    makeSmaller(borderBottomLeftRadius)\n  }\n  if (singleAbsValueBottomRightCorner) {\n    makeSmaller(borderBottomRightRadius)\n  }\n\n  if (cornerShapes.some((shape) => shape < 0)) {\n    const scale = Math.min(\n      oppositeRadiiScale(\n        borderTopLeftRadius,\n        borderBottomRightRadius,\n        width,\n        height\n      ),\n      oppositeRadiiScale(\n        borderTopRightRadius,\n        borderBottomLeftRadius,\n        width,\n        height\n      )\n    )\n    if (scale < 1) {\n      for (const corner of [\n        borderTopLeftRadius,\n        borderTopRightRadius,\n        borderBottomRightRadius,\n        borderBottomLeftRadius,\n      ]) {\n        corner[0] *= scale\n        corner[1] *= scale\n      }\n    }\n  }\n\n  return [\n    borderTopLeftRadius,\n    borderTopRightRadius,\n    borderBottomRightRadius,\n    borderBottomLeftRadius,\n  ]\n}\n\nexport default function radius(\n  {\n    left,\n    top,\n    width,\n    height,\n  }: {\n    left: number\n    top: number\n    width: number\n    height: number\n  },\n  style: Record<string, any>,\n  partialSides?: boolean[],\n  /** Whether partial sides include the whole corners at their ends. */\n  fullCorners = false,\n  /**\n   * Insets for the inner edge of a border, `[top, right, bottom, left]`.\n   * The radii are reduced by them.\n   */\n  inset?: number[]\n) {\n  const radii = resolveBorderRadii({ width, height }, style, !!partialSides)\n  if (!radii) return ''\n  let [\n    borderTopLeftRadius,\n    borderTopRightRadius,\n    borderBottomRightRadius,\n    borderBottomLeftRadius,\n  ] = radii\n  const cornerShapes = [\n    resolveCornerShape(style.cornerTopLeftShape),\n    resolveCornerShape(style.cornerTopRightShape),\n    resolveCornerShape(style.cornerBottomRightShape),\n    resolveCornerShape(style.cornerBottomLeftShape),\n  ]\n\n  if (inset) {\n    const [t, r, b, l] = inset\n    left += l\n    top += t\n    width = Math.max(0, width - l - r)\n    height = Math.max(0, height - t - b)\n    const reduce = (\n      corner: number[],\n      x: number,\n      y: number\n    ): [number, number] => [\n      Math.max(0, corner[0] - x),\n      Math.max(0, corner[1] - y),\n    ]\n    borderTopLeftRadius = reduce(borderTopLeftRadius, l, t)\n    borderTopRightRadius = reduce(borderTopRightRadius, r, t)\n    borderBottomRightRadius = reduce(borderBottomRightRadius, r, b)\n    borderBottomLeftRadius = reduce(borderBottomLeftRadius, l, b)\n  }\n\n  if (cornerShapes.some((shape) => shape !== 1)) {\n    return shapedRadiusPath(\n      left,\n      top,\n      width,\n      height,\n      [\n        borderTopLeftRadius,\n        borderTopRightRadius,\n        borderBottomRightRadius,\n        borderBottomLeftRadius,\n      ],\n      cornerShapes,\n      partialSides,\n      fullCorners\n    )\n  }\n\n  type Arc = [[number, number], [number, number]]\n  const p: Arc[] = []\n  p[0] = [borderTopRightRadius, borderTopRightRadius]\n  p[1] = [\n    borderBottomRightRadius,\n    [-borderBottomRightRadius[0], borderBottomRightRadius[1]],\n  ]\n  p[2] = [\n    borderBottomLeftRadius,\n    [-borderBottomLeftRadius[0], -borderBottomLeftRadius[1]],\n  ]\n  p[3] = [\n    borderTopLeftRadius,\n    [borderTopLeftRadius[0], -borderTopLeftRadius[1]],\n  ]\n\n  const T = `h${width - borderTopLeftRadius[0] - borderTopRightRadius[0]} a${\n    p[0][0]\n  } 0 0 1 ${p[0][1]}`\n  const R = `v${\n    height - borderTopRightRadius[1] - borderBottomRightRadius[1]\n  } a${p[1][0]} 0 0 1 ${p[1][1]}`\n  const B = `h${\n    borderBottomRightRadius[0] + borderBottomLeftRadius[0] - width\n  } a${p[2][0]} 0 0 1 ${p[2][1]}`\n  const L = `v${borderBottomLeftRadius[1] + borderTopLeftRadius[1] - height} a${\n    p[3][0]\n  } 0 0 1 ${p[3][1]}`\n\n  if (partialSides) {\n    // \"However it is not defined what these transitions look like or what function maps from this ratio to a point on the curve.\"\n    // https://w3c.github.io/csswg-drafts/css-backgrounds-3/#corner-transitions\n    let start = partialSides.indexOf(false)\n\n    if (!partialSides.includes(true)) throw new Error('Invalid `partialSides`.')\n\n    if (start === -1) {\n      start = 0\n    } else {\n      while (!partialSides[start]) {\n        start = (start + 1) % 4\n      }\n    }\n\n    function getArc(i: number) {\n      const c0 = svgArcCenterOffset(\n        [\n          borderTopLeftRadius,\n          borderTopRightRadius,\n          borderBottomRightRadius,\n          borderBottomLeftRadius,\n        ][i]\n      )\n      return i === 0\n        ? [\n            [\n              left + borderTopLeftRadius[0] - c0,\n              top + borderTopLeftRadius[1] - c0,\n            ],\n            [left + borderTopLeftRadius[0], top],\n          ]\n        : i === 1\n        ? [\n            [\n              left + width - borderTopRightRadius[0] + c0,\n              top + borderTopRightRadius[1] - c0,\n            ],\n            [left + width, top + borderTopRightRadius[1]],\n          ]\n        : i === 2\n        ? [\n            [\n              left + width - borderBottomRightRadius[0] + c0,\n              top + height - borderBottomRightRadius[1] + c0,\n            ],\n            [left + width - borderBottomRightRadius[0], top + height],\n          ]\n        : [\n            [\n              left + borderBottomLeftRadius[0] - c0,\n              top + height - borderBottomLeftRadius[1] + c0,\n            ],\n            [left, top + height - borderBottomLeftRadius[1]],\n          ]\n    }\n\n    let result = ''\n\n    const arc0 = getArc(start)\n\n    // The start of the corner before the sides.\n    const cornerStart = [\n      [left, top + borderTopLeftRadius[1]],\n      [left + width - borderTopRightRadius[0], top],\n      [left + width, top + height - borderBottomRightRadius[1]],\n      [left + borderBottomLeftRadius[0], top + height],\n    ][start]\n    let l = `M${fullCorners ? cornerStart : arc0[0]} A${\n      p[(start + 3) % 4][0]\n    } 0 0 1 ${arc0[1]}`\n\n    let len = 0\n    for (; len < 4 && partialSides[(start + len) % 4]; len++) {\n      result += l + ' '\n      l = [T, R, B, L][(start + len) % 4]\n    }\n    const end = (start + len) % 4\n\n    if (fullCorners) return result + l\n\n    // For the last segment, we skip the full arc and add the half arc.\n    result += l.split(' ')[0]\n\n    const arc1 = getArc(end)\n    result += ` A${p[(end + 3) % 4][0]} 0 0 1 ${arc1[0]}`\n\n    return result\n  }\n\n  // Generate the path\n  return `M${left + borderTopLeftRadius[0]},${top} ${T} ${R} ${B} ${L}`\n}\n","import { parseColor } from '../parser/color.js'\nimport { buildXMLString } from '../utils.js'\nimport radius, {\n  resolveBorderRadii,\n  resolveCornerShape,\n} from './border-radius.js'\n\nconst SIDES = ['Top', 'Right', 'Bottom', 'Left'] as const\n\nfunction compareBorderDirections(a: string, b: string, style: any) {\n  return (\n    style[a + 'Width'] === style[b + 'Width'] &&\n    style[a + 'Style'] === style[b + 'Style'] &&\n    style[a + 'Color'] === style[b + 'Color']\n  )\n}\n\nexport function getBorderClipPath(\n  {\n    id,\n    // Can be `overflow: hidden` from parent containers.\n    currentClipPathId,\n    borderPath,\n    borderType,\n    left,\n    top,\n    width,\n    height,\n  }: {\n    id: string\n    currentClipPathId?: string | number\n    borderPath?: string\n    borderType?: 'rect' | 'path'\n    left: number\n    top: number\n    width: number\n    height: number\n  },\n  style: Record<string, number | string>\n) {\n  const hasBorder =\n    style.borderTopWidth ||\n    style.borderRightWidth ||\n    style.borderBottomWidth ||\n    style.borderLeftWidth\n\n  if (!hasBorder) return null\n\n  // In SVG, stroke is always centered on the path and there is no\n  // existing property to make it behave like CSS border. So here we\n  // 2x the border width and introduce another clip path to clip the\n  // overflowed part.\n  const rectClipId = `satori_bc-${id}`\n  const defs = buildXMLString(\n    'clipPath',\n    {\n      id: rectClipId,\n      'clip-path': currentClipPathId ? `url(#${currentClipPathId})` : undefined,\n    },\n    buildXMLString(borderType, {\n      x: left,\n      y: top,\n      width,\n      height,\n      d: borderPath ? borderPath : undefined,\n    })\n  )\n\n  return [defs, rectClipId]\n}\n\n/**\n * The region of a group of adjacent sides of a box. Sides are split at the\n * lines from the outer to the inner corners, and extend into the box to\n * include the strokes of rounded corners.\n */\nfunction sidesRegion(\n  sides: boolean[],\n  left: number,\n  top: number,\n  width: number,\n  height: number,\n  style: Record<string, number | string>\n) {\n  const [t, r, b, l] = ['Top', 'Right', 'Bottom', 'Left'].map(\n    (side) => (style[`border${side}Width`] as number) || 0\n  )\n  const scale = Math.min(\n    t + b ? height / (t + b) : Infinity,\n    l + r ? width / (l + r) : Infinity\n  )\n  const right = left + width\n  const bottom = top + height\n  // The corners where each side starts, clockwise from the top left.\n  const outer = [\n    [left, top],\n    [right, top],\n    [right, bottom],\n    [left, bottom],\n  ]\n  // The inner corners, moved towards the center.\n  const inner = [\n    [left + l * scale, top + t * scale],\n    [right - r * scale, top + t * scale],\n    [right - r * scale, bottom - b * scale],\n    [left + l * scale, bottom - b * scale],\n  ]\n\n  // The first side of the group, after a side that isn't in it.\n  const first = sides.findIndex((side, i) => side && !sides[(i + 3) % 4])\n  const count = sides.filter(Boolean).length\n  const points = []\n  for (let i = 0; i <= count; i++) points.push(outer[(first + i) % 4])\n  for (let i = count; i >= 0; i--) points.push(inner[(first + i) % 4])\n  return points.map((point) => point.join(',')).join(' ')\n}\n\n// The squared distances from black of `#202020`, and from white of `#ebebeb`.\n// Colors closer to black are lightened instead of darkened, and colors closer\n// to white aren't lightened.\nconst NEAR_BLACK = 3 * 0x20 ** 2\nconst NEAR_WHITE = 3 * (0xff - 0xeb) ** 2\n\nfunction scaleColor(rgb: number[], multiplier: number) {\n  return rgb.map((c) => Math.floor((c / 255) * multiplier * 255.996))\n}\n\nfunction lighten(rgb: number[]) {\n  const v = Math.max(...rgb) / 255\n  if (v === 0) return [0x54, 0x54, 0x54]\n  return scaleColor(rgb, Math.min(1, v + 0.33) / v)\n}\n\nfunction darken(rgb: number[]) {\n  const v = Math.max(...rgb) / 255\n  if (v === 0) return rgb\n  return scaleColor(rgb, Math.max(0, (v - 0.33) / v))\n}\n\n/**\n * The dark and light shades of a color for the sides of `inset`, `outset`,\n * `groove` and `ridge` borders. CSS leaves them to the user agent, these are\n * the ones of Chrome.\n */\nfunction shadeColor(color: string): [dark: string, light: string] {\n  const parsed = parseColor(color)\n  if (!parsed) return [color, color]\n  const rgb = parsed.slice(0, 3).map(Math.round)\n  const alpha = parsed[3]\n  const distance = (to: number) =>\n    rgb.reduce((sum, c) => sum + (c - to) ** 2, 0)\n  let dark: number[]\n  let light: number[]\n  if (distance(0) <= NEAR_BLACK) {\n    dark = lighten(rgb)\n    light = lighten(dark)\n  } else {\n    dark = darken(rgb)\n    light = distance(255) < NEAR_WHITE ? rgb : lighten(rgb)\n  }\n  const format = ([r, g, b]: number[]) =>\n    alpha < 1 ? `rgba(${r},${g},${b},${alpha})` : `rgb(${r},${g},${b})`\n  return [format(dark), format(light)]\n}\n\ninterface BorderPass {\n  style: Record<string, number | string>\n  /** The inset of the outer edge, `[top, right, bottom, left]`. */\n  offset: number[]\n}\n\n/**\n * Splits a border into passes of solid, dashed and dotted lines: `double`,\n * `groove` and `ridge` borders have an outer and an inner line, and `inset`,\n * `outset`, `groove` and `ridge` sides have shades of their color.\n */\nfunction getBorderPasses(style: Record<string, number | string>) {\n  const outer = { ...style }\n  const inner = { ...style }\n  const offset = [0, 0, 0, 0]\n  let hasInner = false\n  SIDES.forEach((side, i) => {\n    const width = (style[`border${side}Width`] as number) || 0\n    const lineStyle = style[`border${side}Style`] || 'solid'\n    const color = style[`border${side}Color`] as string\n    const isTopLeft = side === 'Top' || side === 'Left'\n    let outerWidth = width\n    let outerStyle = lineStyle\n    let outerColor = color\n    let innerWidth = 0\n    let innerColor = color\n    if (lineStyle === 'none' || lineStyle === 'hidden') {\n      outerWidth = 0\n    } else if (lineStyle === 'double') {\n      // Two lines with a third of the width each, solid if they'd be thinner\n      // than a pixel.\n      outerStyle = 'solid'\n      if (width >= 3) {\n        innerWidth = outerWidth = Math.round(width / 3)\n        offset[i] = width - innerWidth\n      }\n    } else if (lineStyle === 'groove' || lineStyle === 'ridge') {\n      // Two halves with shades of the color, the outer one rounded up. A\n      // line thinner than 2px is solid.\n      outerStyle = 'solid'\n      if (width >= 2) {\n        const [dark, light] = shadeColor(color)\n        const isDarkOutside = (lineStyle === 'groove') === isTopLeft\n        outerWidth = offset[i] = Math.min(width, Math.ceil(width / 2))\n        innerWidth = width - outerWidth\n        outerColor = isDarkOutside ? dark : light\n        innerColor = isDarkOutside ? light : dark\n      }\n    } else if (lineStyle === 'inset' || lineStyle === 'outset') {\n      const [dark, light] = shadeColor(color)\n      outerStyle = 'solid'\n      outerColor = (lineStyle === 'inset') === isTopLeft ? dark : light\n    }\n    outer[`border${side}Width`] = outerWidth\n    outer[`border${side}Style`] = outerStyle\n    outer[`border${side}Color`] = outerColor\n    inner[`border${side}Width`] = innerWidth\n    inner[`border${side}Style`] = 'solid'\n    inner[`border${side}Color`] = innerColor\n    if (innerWidth) hasInner = true\n  })\n  const passes: BorderPass[] = [{ style: outer, offset: [0, 0, 0, 0] }]\n  if (hasInner) passes.push({ style: inner, offset })\n  return passes\n}\n\nconst rectPath = (x: number, y: number, w: number, h: number) =>\n  `M${x},${y}h${w}v${h}h${-w}z`\n\nexport default function border(\n  options: {\n    id?: string\n    left: number\n    top: number\n    width: number\n    height: number\n    props: any\n    asContentMask?: boolean\n    maskBorderOnly?: boolean\n  },\n  style: Record<string, number | string>\n) {\n  if (options.asContentMask) return drawBorder(options, style, style)\n\n  const { id, left, top, width, height, props } = options\n  let result = ''\n  for (const [index, pass] of getBorderPasses(style).entries()) {\n    if (!index) {\n      result += drawBorder(options, pass.style, style)\n      continue\n    }\n    // The inner line is clipped to its outer edge, like the outer line to the\n    // edge of the box.\n    const [t, r, b, l] = pass.offset\n    const clipId = `satori_bc-${id}-inner`\n    const edge =\n      radius(\n        { left, top, width, height },\n        style,\n        undefined,\n        false,\n        pass.offset\n      ) || rectPath(left + l, top + t, width - l - r, height - t - b)\n    result +=\n      buildXMLString(\n        'defs',\n        {},\n        buildXMLString(\n          'clipPath',\n          { id: clipId, 'clip-path': props['clip-path'] },\n          buildXMLString('path', { d: edge })\n        )\n      ) +\n      drawBorder(\n        {\n          ...options,\n          id: `${id}-inner`,\n          props: { ...props, 'clip-path': `url(#${clipId})` },\n        },\n        pass.style,\n        style,\n        pass.offset\n      )\n  }\n  return result\n}\n\n/**\n * The gap between dashes, as close to `gap` as possible, so that an open path\n * starts and ends with a dash, and a closed path has whole dashes and gaps.\n * Like `SelectBestDashGap` of Chrome.\n */\nfunction fitDashGap(length: number, dash: number, gap: number, closed = false) {\n  const fewer = Math.floor((closed ? length : length + gap) / (dash + gap))\n  const fewerGap = (length - fewer * dash) / (closed ? fewer : fewer - 1)\n  const moreGap = (length - (fewer + 1) * dash) / (closed ? fewer + 1 : fewer)\n  return moreGap <= 0 || Math.abs(fewerGap - gap) < Math.abs(moreGap - gap)\n    ? fewerGap\n    : moreGap\n}\n\n// A quarter of the perimeter of an ellipse, by Ramanujan's approximation.\nconst quarterArc = ([x, y]: number[]) =>\n  (Math.PI * (3 * (x + y) - Math.sqrt((3 * x + y) * (x + 3 * y)))) / 4\n\n/**\n * A closed path around a rounded box, inset by `inset`, and the lengths of its\n * sides and corners in order. Like in Chrome, it starts at the left end of the\n * top side and goes clockwise.\n */\nfunction roundedContour(\n  box: { left: number; top: number; width: number; height: number },\n  style: Record<string, number | string>,\n  inset: number[]\n) {\n  const left = box.left + inset[3]\n  const top = box.top + inset[0]\n  const right = box.left + box.width - inset[1]\n  const bottom = box.top + box.height - inset[2]\n  const [tl, tr, br, bl] = (resolveBorderRadii(box, style) || []).map(\n    ([x, y], i) => [\n      Math.max(0, x - inset[i % 3 === 0 ? 3 : 1]),\n      Math.max(0, y - inset[i < 2 ? 0 : 2]),\n    ]\n  )\n  const isRound = ([x, y]: number[]) => x > 0 && y > 0\n  const arc = (corner: number[], toX: number, toY: number) =>\n    isRound(corner)\n      ? `A${corner[0]},${corner[1]} 0 0 1 ${toX},${toY}`\n      : `L${toX},${toY}`\n  const d =\n    `M${left + tl[0]},${top}` +\n    `H${right - tr[0]}` +\n    arc(tr, right, top + tr[1]) +\n    `V${bottom - br[1]}` +\n    arc(br, right - br[0], bottom) +\n    `H${left + bl[0]}` +\n    arc(bl, left, bottom - bl[1]) +\n    `V${top + tl[1]}` +\n    arc(tl, left + tl[0], top) +\n    'Z'\n  const corner = (c: number[]) =>\n    isRound(c) ? quarterArc(c) : Math.hypot(c[0], c[1])\n  const segments = [\n    right - tr[0] - left - tl[0],\n    corner(tr),\n    bottom - br[1] - top - tr[1],\n    corner(br),\n    right - br[0] - left - bl[0],\n    corner(bl),\n    bottom - bl[1] - top - tl[1],\n    corner(tl),\n  ].map((length) => Math.max(0, length))\n  return { d, segments }\n}\n\n/**\n * The dashes of a closed path, like in Chrome: whole dashes and gaps, two\n * smaller dashes on short paths, and a solid line on shorter ones.\n */\nfunction closedDashArray(length: number, dash: number, gap: number) {\n  if (length <= dash * 2) return undefined\n  if (length <= 2 * (dash + gap)) {\n    const scale = length / (2 * (dash + gap))\n    return `${dash * scale} ${gap * scale}`\n  }\n  return `${dash} ${fitDashGap(length, dash, gap, true)}`\n}\n\n/**\n * Draws a dotted or dashed side along the middle of the side. Dots are round,\n * or square if they're smaller than 3px, with a dot at each corner. Dashes are\n * twice as long as the width, or three times if it's smaller than 3px, with a\n * dash at each end, so they cover the corners together with the dashes of the\n * next sides. On rounded borders, dashes go around the whole border instead.\n */\nfunction drawPatternedSide(\n  side: number,\n  lineStyle: 'dotted' | 'dashed',\n  box: { left: number; top: number; width: number; height: number },\n  style: Record<string, number | string>,\n  offset: number[],\n  attributes: Record<string, any>,\n  /** Whether the line is clipped to the area of the border. */\n  clipped = false\n) {\n  const widths = SIDES.map((s) => (style[`border${s}Width`] as number) || 0)\n  const width = widths[side]\n  const sides = [false, false, false, false]\n  sides[side] = true\n\n  if (lineStyle === 'dotted') {\n    const inset = offset.map((o, i) => o + widths[i] / 2)\n    const length =\n      side % 2 === 0\n        ? box.width - inset[1] - inset[3]\n        : box.height - inset[0] - inset[2]\n    const isRound = width >= 3\n    const count = Math.max(1, Math.round(length / (2 * width)))\n    return buildXMLString('path', {\n      ...attributes,\n      fill: 'none',\n      'stroke-width': width,\n      'stroke-linecap': isRound ? 'round' : undefined,\n      'stroke-dasharray': isRound ? `0 ${length / count}` : `${width} ${width}`,\n      // Square dots start at the edge of the box.\n      'stroke-dashoffset': isRound ? undefined : width / 2,\n      d: radius(box, style, sides, false, inset),\n    })\n  }\n\n  const dash = width * (width >= 3 ? 2 : 3)\n  const gap = width * (width >= 3 ? 1 : 2)\n  // A line without room for two dashes is solid.\n  const dasharray = (length: number) =>\n    length > dash * 2 ? `${dash} ${fitDashGap(length, dash, gap)}` : undefined\n\n  // Like in Chrome, dashes of rounded borders go around the whole border, and\n  // each side shows the ones in its region. Chrome dashes a closed path inset\n  // by half the widths rounded down, with its length rounded down, and draws\n  // it wide enough to cover the border, clipped to it. The corners have the\n  // same centers as those of the border, so the dashes are cut along the same\n  // lines as if they were drawn along its middle.\n  if (isRoundedBox(box, style)) {\n    const half = (w: number) => (clipped ? Math.trunc(w / 2) : w / 2)\n    const { d, segments } = roundedContour(\n      box,\n      style,\n      offset.map((o, i) => o + half(widths[i]))\n    )\n    const length = segments.reduce((sum, segment) => sum + segment, 0)\n    return buildXMLString('path', {\n      ...attributes,\n      fill: 'none',\n      'stroke-width': clipped ? 2 * Math.max(...widths) : width,\n      'stroke-dasharray': closedDashArray(Math.trunc(length), dash, gap),\n      d,\n    })\n  }\n\n  const center = offset.map((o, i) => o + widths[i] / 2)\n\n  // Sides with shaped corners go from corner to corner, including the corners,\n  // so the dashes at the ends of adjacent sides cover the corners together.\n  const radii = resolveBorderRadii(box, style)?.map(([x, y], i) => [\n    Math.max(0, x - center[i % 3 === 0 ? 3 : 1]),\n    Math.max(0, y - center[i < 2 ? 0 : 2]),\n  ])\n  const corners = radii ? [radii[side], radii[(side + 1) % 4]] : []\n  if (corners.some(([x, y]) => x > 0 && y > 0)) {\n    const length =\n      (side % 2 === 0 ? box.width : box.height) -\n      center[(side + 3) % 4] -\n      center[(side + 1) % 4] -\n      corners.reduce(\n        (sum, [x, y]) => sum + (side % 2 === 0 ? x : y) - quarterArc([x, y]),\n        0\n      )\n    return buildXMLString('path', {\n      ...attributes,\n      fill: 'none',\n      'stroke-width': width,\n      'stroke-dasharray': dasharray(length),\n      d: radius(box, style, sides, true, center),\n    })\n  }\n\n  const [t, r, b, l] = offset\n  const left = box.left + l\n  const top = box.top + t\n  const right = box.left + box.width - r\n  const bottom = box.top + box.height - b\n  const half = width / 2\n  return buildXMLString('path', {\n    ...attributes,\n    fill: 'none',\n    'stroke-width': width,\n    'stroke-dasharray': dasharray(side % 2 === 0 ? right - left : bottom - top),\n    d: [\n      `M${left},${top + half}H${right}`,\n      `M${right - half},${top}V${bottom}`,\n      `M${right},${bottom - half}H${left}`,\n      `M${left + half},${bottom}V${top}`,\n    ][side],\n  })\n}\n\n/** Whether a box has rounded corners, and none of another shape. */\nconst isRoundedBox = (\n  box: { left: number; top: number; width: number; height: number },\n  style: Record<string, number | string>\n) =>\n  CORNER_SHAPES.every((name) => resolveCornerShape(style[name]) === 1) &&\n  !!resolveBorderRadii(box, style)?.some(([x, y]) => x > 0 && y > 0)\n\nconst CORNER_SHAPES = [\n  'cornerTopLeftShape',\n  'cornerTopRightShape',\n  'cornerBottomRightShape',\n  'cornerBottomLeftShape',\n]\n\nfunction drawBorder(\n  {\n    id,\n    left,\n    top,\n    width,\n    height,\n    props,\n    asContentMask,\n    maskBorderOnly,\n  }: {\n    id?: string\n    left: number\n    top: number\n    width: number\n    height: number\n    props: any\n    asContentMask?: boolean\n    maskBorderOnly?: boolean\n  },\n  style: Record<string, number | string>,\n  /** The style of the whole border, which splits the sides at the corners. */\n  regionStyle: Record<string, number | string>,\n  /** The inset of the outer edge of the line, `[top, right, bottom, left]`. */\n  offset = [0, 0, 0, 0]\n) {\n  const directions = ['borderTop', 'borderRight', 'borderBottom', 'borderLeft']\n  const box = { left, top, width, height }\n\n  // No border\n  if (\n    !asContentMask &&\n    !directions.some((direction) => style[direction + 'Width'])\n  )\n    return ''\n\n  let fullBorder = ''\n\n  // Sides with different styles meet diagonally at the corners, so each\n  // group of sides is clipped to its region.\n  const splitCorners =\n    !asContentMask &&\n    id !== undefined &&\n    directions.some(\n      (d, i) => !compareBorderDirections(d, directions[(i + 1) % 4], style)\n    )\n  let group = 0\n  let ring = ''\n  let ringId = ''\n  let maxWidth = 0\n  // The inner edge of shaped corners isn't known, so their sides keep their\n  // own widths.\n  const roundCorners = CORNER_SHAPES.every(\n    (name) => resolveCornerShape(style[name]) === 1\n  )\n  // Rounded dashed borders are drawn clipped to the area of the border.\n  const roundedDashes =\n    !asContentMask &&\n    id !== undefined &&\n    isRoundedBox(box, style) &&\n    directions.some((d) => style[d + 'Style'] === 'dashed')\n  if ((splitCorners || roundedDashes) && roundCorners) {\n    const widths = SIDES.map(\n      (side) => (style[`border${side}Width`] as number) || 0\n    )\n    maxWidth = Math.max(...widths)\n    const [t, r, b, l] = offset\n    const radiusStyle = style as Record<string, number>\n    const outer =\n      radius(box, radiusStyle, undefined, false, offset) ||\n      rectPath(left + l, top + t, width - l - r, height - t - b)\n    const innerInset = offset.map((o, i) => o + widths[i])\n    const inner =\n      radius(box, radiusStyle, undefined, false, innerInset) ||\n      rectPath(\n        left + innerInset[3],\n        top + innerInset[0],\n        Math.max(0, width - innerInset[1] - innerInset[3]),\n        Math.max(0, height - innerInset[0] - innerInset[2])\n      )\n    // The area of the border, between the outer and inner edges.\n    ringId = `satori_br-${id}`\n    ring = buildXMLString(\n      'clipPath',\n      { id: ringId },\n      buildXMLString('path', {\n        d: `${outer} ${inner}`,\n        'clip-rule': 'evenodd',\n      })\n    )\n  }\n  const clipToRegion = (sides: boolean[], content: string) => {\n    const clipId = `satori_bs-${id}-${group++}`\n    return (\n      buildXMLString(\n        'defs',\n        {},\n        (group === 1 ? ring : '') +\n          buildXMLString(\n            'clipPath',\n            { id: clipId },\n            buildXMLString('polygon', {\n              points: sidesRegion(sides, left, top, width, height, regionStyle),\n            })\n          )\n      ) +\n      buildXMLString(\n        'g',\n        { transform: props.transform, 'clip-path': `url(#${clipId})` },\n        content\n      )\n    )\n  }\n  const drawSides = (sides: boolean[], attributes: Record<string, any>) => {\n    if (!splitCorners) return buildXMLString('path', attributes)\n    const { transform: _transform, ...rest } = attributes\n    // Draw the whole corners, clipped where the sides meet and to the area of\n    // the border, so the width changes along the corners.\n    rest.d = radius(box, style as Record<string, number>, sides, true, offset)\n    if (ringId) rest['stroke-width'] = maxWidth * 2\n    return clipToRegion(\n      sides,\n      ringId\n        ? buildXMLString(\n            'g',\n            { 'clip-path': `url(#${ringId})` },\n            buildXMLString('path', rest)\n          )\n        : buildXMLString('path', rest)\n    )\n  }\n\n  // Draws a group of adjacent sides with the same style.\n  const drawGroup = (sides: boolean[], [lineWidth, lineStyle, color, d]) => {\n    const w =\n      (lineWidth || 0) +\n      (asContentMask && !maskBorderOnly\n        ? style[d.replace('border', 'padding')] || 0\n        : 0)\n    if (!w) return ''\n    if (!asContentMask && (lineStyle === 'dotted' || lineStyle === 'dashed')) {\n      const { transform, ...attributes } = props\n      const clipped =\n        lineStyle === 'dashed' && !!ringId && isRoundedBox(box, style)\n      const clipToRing = (path: string) =>\n        clipped\n          ? buildXMLString('g', { 'clip-path': `url(#${ringId})` }, path)\n          : path\n      // Dashes of rounded borders with the same style on all sides go around\n      // the whole border once.\n      if (\n        lineStyle === 'dashed' &&\n        sides.every(Boolean) &&\n        isRoundedBox(box, style)\n      ) {\n        const path = drawPatternedSide(\n          0,\n          lineStyle,\n          box,\n          style,\n          offset,\n          { ...(clipped ? attributes : props), stroke: color },\n          clipped\n        )\n        return clipped\n          ? buildXMLString('defs', {}, ring) +\n              buildXMLString('g', { transform }, clipToRing(path))\n          : path\n      }\n      let lines = ''\n      for (let side = 0; side < 4; side++) {\n        if (!sides[side]) continue\n        const sideOnly = [false, false, false, false]\n        sideOnly[side] = true\n        const path = drawPatternedSide(\n          side,\n          lineStyle,\n          box,\n          style,\n          offset,\n          { ...(splitCorners ? attributes : props), stroke: color },\n          clipped && splitCorners\n        )\n        lines += splitCorners\n          ? clipToRegion(sideOnly, clipped ? clipToRing(path) : path)\n          : path\n      }\n      return lines\n    }\n    return drawSides(sides, {\n      width,\n      height,\n      ...props,\n      fill: 'none',\n      stroke: asContentMask ? '#000' : color,\n      'stroke-width': w * 2,\n      d: radius(box, style as Record<string, number>, sides, false, offset),\n    })\n  }\n\n  // Start after a change of style, so sides with the same style are drawn\n  // together.\n  let start = 0\n  for (\n    let i = 0;\n    i < 3 &&\n    compareBorderDirections(\n      directions[start],\n      directions[(start + 3) % 4],\n      style\n    );\n    i++\n  ) {\n    start = (start + 3) % 4\n  }\n\n  let partialSides = [false, false, false, false]\n  let currentStyle = []\n  for (let _i = 0; _i < 4; _i++) {\n    const i = (start + _i) % 4\n    const ni = (start + _i + 1) % 4\n\n    const d = directions[i]\n    const nd = directions[ni]\n\n    partialSides[i] = true\n    currentStyle = [\n      style[d + 'Width'],\n      style[d + 'Style'],\n      style[d + 'Color'],\n      d,\n    ]\n\n    if (!compareBorderDirections(d, nd, style)) {\n      fullBorder += drawGroup(partialSides, currentStyle as any)\n      partialSides = [false, false, false, false]\n    }\n  }\n\n  if (partialSides.some(Boolean)) {\n    fullBorder += drawGroup(partialSides, currentStyle as any)\n  }\n\n  return fullBorder\n}\n","/**\n * When there is border radius, the content area should be clipped by the\n * inner path of border + padding. This applies to <img> element as well as any\n * child element inside a `overflow: hidden` container.\n */\n\nimport { buildXMLString } from '../utils.js'\nimport border from './border.js'\n\nexport default function contentMask(\n  {\n    id,\n    left,\n    top,\n    width,\n    height,\n    matrix,\n    borderOnly,\n  }: {\n    id: string\n    left: number\n    top: number\n    width: number\n    height: number\n    matrix: string | undefined\n    borderOnly?: boolean\n  },\n  style: Record<string, number | string>\n) {\n  const offsetLeft =\n    ((style.borderLeftWidth as number) || 0) +\n    (borderOnly ? 0 : (style.paddingLeft as number) || 0)\n  const offsetTop =\n    ((style.borderTopWidth as number) || 0) +\n    (borderOnly ? 0 : (style.paddingTop as number) || 0)\n  const offsetRight =\n    ((style.borderRightWidth as number) || 0) +\n    (borderOnly ? 0 : (style.paddingRight as number) || 0)\n  const offsetBottom =\n    ((style.borderBottomWidth as number) || 0) +\n    (borderOnly ? 0 : (style.paddingBottom as number) || 0)\n\n  const contentArea = {\n    x: left + offsetLeft,\n    y: top + offsetTop,\n    width: width - offsetLeft - offsetRight,\n    height: height - offsetTop - offsetBottom,\n  }\n\n  const _contentMask = buildXMLString(\n    'mask',\n    { id },\n    buildXMLString('rect', {\n      ...contentArea,\n      fill: '#fff',\n      // add transformation matrix to mask if overflow is hidden AND a\n      // transformation style is defined, otherwise children will be clipped\n      // incorrectly\n      transform:\n        style.overflow === 'hidden' && style.transform && matrix\n          ? matrix\n          : undefined,\n      mask: style._inheritedMaskId\n        ? `url(#${style._inheritedMaskId})`\n        : undefined,\n    }) +\n      border(\n        {\n          left,\n          top,\n          width,\n          height,\n          props: {\n            transform: matrix ? matrix : undefined,\n          },\n          asContentMask: true,\n          maskBorderOnly: borderOnly,\n        },\n        style\n      )\n  )\n\n  return _contentMask\n}\n","import { lengthToNumber } from '../utils.js'\nimport { default as buildBorderRadius } from '../builder/border-radius.js'\nimport { getStylesForProperty } from 'css-to-react-native'\nimport { parseShapeFunction } from './shape-function.js'\n\nconst regexMap = {\n  circle: /circle\\((.+)\\)/,\n  ellipse: /ellipse\\((.+)\\)/,\n  path: /path\\((.+)\\)/,\n  polygon: /polygon\\((.+)\\)/,\n  inset: /inset\\((.+)\\)/,\n  shape: /shape\\((.+)\\)/,\n}\n\nexport function createShapeParser(\n  {\n    width,\n    height,\n  }: {\n    width: number\n    height: number\n  },\n  style: Record<string, string | number>,\n  inheritedStyle: Record<string, string | number>\n) {\n  function parseCircle(str: string) {\n    const res = str.match(regexMap['circle'])\n\n    if (!res) return null\n\n    const [, value] = res\n    const [radius, pos = ''] = value.split('at').map((v) => v.trim())\n    const { x, y } = resolvePosition(pos, width, height)\n\n    return {\n      type: 'circle',\n      r: lengthToNumber(\n        radius,\n        inheritedStyle.fontSize as number,\n        Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)) / Math.sqrt(2),\n        inheritedStyle,\n        true\n      ),\n      cx: lengthToNumber(\n        x,\n        inheritedStyle.fontSize as number,\n        width,\n        inheritedStyle,\n        true\n      ),\n      cy: lengthToNumber(\n        y,\n        inheritedStyle.fontSize as number,\n        height,\n        inheritedStyle,\n        true\n      ),\n    }\n  }\n  function parseEllipse(str: string) {\n    const res = str.match(regexMap['ellipse'])\n\n    if (!res) return null\n\n    const [, value] = res\n    const [radius, pos = ''] = value.split('at').map((v) => v.trim())\n    const [rx, ry] = radius.split(' ')\n    const { x, y } = resolvePosition(pos, width, height)\n\n    return {\n      type: 'ellipse',\n      rx: lengthToNumber(\n        rx || '50%',\n        inheritedStyle.fontSize as number,\n        width,\n        inheritedStyle,\n        true\n      ),\n      ry: lengthToNumber(\n        ry || '50%',\n        inheritedStyle.fontSize as number,\n        height,\n        inheritedStyle,\n        true\n      ),\n      cx: lengthToNumber(\n        x,\n        inheritedStyle.fontSize as number,\n        width,\n        inheritedStyle,\n        true\n      ),\n      cy: lengthToNumber(\n        y,\n        inheritedStyle.fontSize as number,\n        height,\n        inheritedStyle,\n        true\n      ),\n    }\n  }\n  function parsePath(str: string) {\n    const res = str.match(regexMap['path'])\n\n    if (!res) return null\n\n    const [fillRule, d] = resolveFillRule(res[1])\n\n    return {\n      type: 'path',\n      d,\n      'fill-rule': fillRule,\n    }\n  }\n  function parsePolygon(str: string) {\n    const res = str.match(regexMap['polygon'])\n\n    if (!res) return null\n\n    const [fillRule, points] = resolveFillRule(res[1])\n\n    return {\n      type: 'polygon',\n      'fill-rule': fillRule,\n      points: points\n        .split(',')\n        .map((v) =>\n          v\n            .split(' ')\n            .map((k, i) =>\n              lengthToNumber(\n                k,\n                inheritedStyle.fontSize as number,\n                i === 0 ? width : height,\n                inheritedStyle,\n                true\n              )\n            )\n            .join(' ')\n        )\n        .join(','),\n    }\n  }\n  function parseInset(str: string) {\n    const res = str.match(regexMap['inset'])\n\n    if (!res) return null\n\n    const [inset, radius] = (\n      res[1].includes('round') ? res[1] : `${res[1].trim()} round 0`\n    ).split('round')\n    const radiusMap = getStylesForProperty('borderRadius', radius, true)\n    const r = Object.values(radiusMap)\n      .map((s) => String(s))\n      .map(\n        (s, i) =>\n          lengthToNumber(\n            s,\n            inheritedStyle.fontSize as number,\n            i === 0 || i === 2 ? height : width,\n            inheritedStyle,\n            true\n          ) || 0\n      )\n    const offsets = Object.values(getStylesForProperty('margin', inset, true))\n      .map((s) => String(s))\n      .map(\n        (s, i) =>\n          lengthToNumber(\n            s,\n            inheritedStyle.fontSize as number,\n            i === 0 || i === 2 ? height : width,\n            inheritedStyle,\n            true\n          ) || 0\n      )\n    const x = offsets[3]\n    const y = offsets[0]\n    const w = width - (offsets[1] + offsets[3])\n    const h = height - (offsets[0] + offsets[2])\n\n    if (r.some((v) => v > 0)) {\n      const d = buildBorderRadius(\n        { left: x, top: y, width: w, height: h },\n        { ...style, ...radiusMap }\n      )\n\n      return { type: 'path', d }\n    }\n\n    return {\n      type: 'rect',\n      x,\n      y,\n      width: w,\n      height: h,\n    }\n  }\n  function parseShape(str: string) {\n    if (!regexMap.shape.test(str)) return null\n    return parseShapeFunction(str, width, height, inheritedStyle)\n  }\n\n  return {\n    parseCircle,\n    parseEllipse,\n    parsePath,\n    parsePolygon,\n    parseInset,\n    parseShape,\n  }\n}\n\nfunction resolveFillRule(str: string) {\n  const [, fillRule = 'nonzero', d] =\n    str.replace(/('|\")/g, '').match(/^(nonzero|evenodd)?,?(.+)/) || []\n\n  return [fillRule, d]\n}\n\nfunction resolvePosition(position: string, xDelta: number, yDelta: number) {\n  const pos = position.split(' ')\n  const res: { x: number | string; y: number | string } = {\n    x: pos[0] || '50%',\n    y: pos[1] || '50%',\n  }\n\n  pos.forEach((v) => {\n    if (v === 'top') {\n      res.y = 0\n    } else if (v === 'bottom') {\n      res.y = yDelta\n    } else if (v === 'left') {\n      res.x = 0\n    } else if (v === 'right') {\n      res.x = xDelta\n    } else if (v === 'center') {\n      res.x = xDelta / 2\n      res.y = yDelta / 2\n    } else {\n      // do nothing\n    }\n  })\n\n  return res\n}\n","import { calcDegree, lengthToNumber, splitEffects } from '../utils.js'\n\ntype Point = [number, number]\n\nconst horizontalKeywords: Record<string, number> = {\n  left: 0,\n  'x-start': 0,\n  center: 0.5,\n  right: 1,\n  'x-end': 1,\n}\n\nconst verticalKeywords: Record<string, number> = {\n  top: 0,\n  'y-start': 0,\n  center: 0.5,\n  bottom: 1,\n  'y-end': 1,\n}\n\nfunction format(value: number) {\n  return Math.round(value * 1000) / 1000\n}\n\nexport function parseShapeFunction(\n  value: string,\n  width: number,\n  height: number,\n  inheritedStyle: Record<string, string | number>\n) {\n  const match = value.match(/^shape\\((.*)\\)$/s)\n  if (!match) return null\n\n  const parts = splitEffects(match[1])\n  const first = parts.shift()\n  if (!first) throw new Error('Invalid `shape()` value.')\n\n  const startMatch = first.match(/^(?:(nonzero|evenodd)\\s+)?from\\s+(.+)$/)\n  if (!startMatch) throw new Error('Invalid `shape()` starting point.')\n\n  const fillRule = startMatch[1] || 'nonzero'\n  let current = resolvePosition(\n    tokenize(startMatch[2]),\n    width,\n    height,\n    inheritedStyle\n  )\n  let subpathStart = current\n  let path = `M${format(current[0])},${format(current[1])}`\n\n  for (const part of parts) {\n    const tokens = tokenize(part)\n    const command = tokens.shift()\n\n    if (command === 'close') {\n      if (tokens.length)\n        throw new Error('Invalid `close` command in `shape()`.')\n      path += ' Z'\n      current = subpathStart\n      continue\n    }\n\n    if (command === 'move' || command === 'line') {\n      const endpoint = resolveEndpoint(\n        tokens,\n        current,\n        width,\n        height,\n        inheritedStyle\n      )\n      path += ` ${command === 'move' ? 'M' : 'L'}${format(\n        endpoint[0]\n      )},${format(endpoint[1])}`\n      current = endpoint\n      if (command === 'move') subpathStart = endpoint\n      continue\n    }\n\n    if (command === 'hline' || command === 'vline') {\n      const axis = command === 'hline' ? 0 : 1\n      const mode = tokens.shift()\n      const token = tokens.shift()\n      if ((mode !== 'to' && mode !== 'by') || !token || tokens.length) {\n        throw new Error(`Invalid \\`${command}\\` command in \\`shape()\\`.`)\n      }\n      const base = axis === 0 ? width : height\n      const keywordMap = axis === 0 ? horizontalKeywords : verticalKeywords\n      const resolved =\n        mode === 'to' && token in keywordMap\n          ? keywordMap[token] * base\n          : resolveLength(token, base, inheritedStyle)\n      current = [...current] as Point\n      current[axis] = mode === 'by' ? current[axis] + resolved : resolved\n      path += ` ${axis === 0 ? 'H' : 'V'}${format(current[axis])}`\n      continue\n    }\n\n    if (command === 'curve' || command === 'smooth') {\n      const withIndex = tokens.indexOf('with')\n      const endpointTokens =\n        withIndex === -1 ? tokens : tokens.slice(0, withIndex)\n      const controlTokens = withIndex === -1 ? [] : tokens.slice(withIndex + 1)\n      const mode = endpointTokens[0]\n      const endpoint = resolveEndpoint(\n        endpointTokens,\n        current,\n        width,\n        height,\n        inheritedStyle\n      )\n\n      if (command === 'curve' && withIndex === -1) {\n        throw new Error('A `curve` command requires a control point.')\n      }\n\n      const controls = splitAtSlash(controlTokens).map((control) =>\n        resolveControlPoint(\n          control,\n          current,\n          endpoint,\n          width,\n          height,\n          inheritedStyle\n        )\n      )\n\n      if (command === 'curve') {\n        if (controls.length === 1) {\n          path += ` Q${pointString(controls[0])} ${pointString(endpoint)}`\n        } else if (controls.length === 2) {\n          path += ` C${pointString(controls[0])} ${pointString(\n            controls[1]\n          )} ${pointString(endpoint)}`\n        } else {\n          throw new Error(\n            'A `curve` command accepts one or two control points.'\n          )\n        }\n      } else if (!controls.length) {\n        path += ` T${pointString(endpoint)}`\n      } else if (controls.length === 1) {\n        path += ` S${pointString(controls[0])} ${pointString(endpoint)}`\n      } else {\n        throw new Error('A `smooth` command accepts at most one control point.')\n      }\n\n      current = endpoint\n      continue\n    }\n\n    if (command === 'arc') {\n      const optionIndex = tokens.findIndex((token) =>\n        ['of', 'cw', 'ccw', 'large', 'small', 'rotate'].includes(token)\n      )\n      const endpointTokens =\n        optionIndex === -1 ? tokens : tokens.slice(0, optionIndex)\n      const options = optionIndex === -1 ? [] : tokens.slice(optionIndex)\n      const endpoint = resolveEndpoint(\n        endpointTokens,\n        current,\n        width,\n        height,\n        inheritedStyle\n      )\n      let rx = 0\n      let ry = 0\n      let rotation = 0\n      let large = 0\n      let sweep = 0\n\n      for (let index = 0; index < options.length; index++) {\n        const option = options[index]\n        if (option === 'of') {\n          const firstRadius = options[++index]\n          if (!firstRadius)\n            throw new Error('Invalid `arc` radius in `shape()`.')\n          const secondRadius = options[index + 1]\n          const hasSecondRadius =\n            secondRadius &&\n            !['cw', 'ccw', 'large', 'small', 'rotate'].includes(secondRadius)\n          if (hasSecondRadius) index++\n          if (hasSecondRadius) {\n            rx = resolveLength(firstRadius, width, inheritedStyle)\n            ry = resolveLength(secondRadius, height, inheritedStyle)\n          } else {\n            const base =\n              Math.sqrt(width * width + height * height) / Math.sqrt(2)\n            rx = ry = resolveLength(firstRadius, base, inheritedStyle)\n          }\n        } else if (option === 'cw' || option === 'ccw') {\n          sweep = option === 'cw' ? 1 : 0\n        } else if (option === 'large' || option === 'small') {\n          large = option === 'large' ? 1 : 0\n        } else if (option === 'rotate') {\n          const angle = options[++index]\n          if (!angle) throw new Error('Invalid `arc` rotation in `shape()`.')\n          const degree = calcDegree(angle)\n          if (typeof degree === 'undefined') {\n            throw new Error('Invalid `arc` rotation in `shape()`.')\n          }\n          rotation = degree\n        } else {\n          throw new Error('Invalid `arc` option in `shape()`.')\n        }\n      }\n\n      path += ` A${format(Math.abs(rx))},${format(Math.abs(ry))} ${format(\n        rotation\n      )} ${large} ${sweep} ${pointString(endpoint)}`\n      current = endpoint\n      continue\n    }\n\n    throw new Error(`Unsupported \\`${command}\\` command in \\`shape()\\`.`)\n  }\n\n  return {\n    type: 'path',\n    d: path,\n    'fill-rule': fillRule,\n  }\n}\n\nfunction tokenize(value: string) {\n  return value.trim().replace(/\\//g, ' / ').split(/\\s+/).filter(Boolean)\n}\n\nfunction splitAtSlash(tokens: string[]) {\n  if (!tokens.length) return []\n  const slash = tokens.indexOf('/')\n  return slash === -1\n    ? [tokens]\n    : [tokens.slice(0, slash), tokens.slice(slash + 1)]\n}\n\nfunction resolveEndpoint(\n  tokens: string[],\n  current: Point,\n  width: number,\n  height: number,\n  inheritedStyle: Record<string, string | number>\n) {\n  const mode = tokens[0]\n  if (mode !== 'to' && mode !== 'by') {\n    throw new Error('A `shape()` command must use `to` or `by`.')\n  }\n  const point = resolvePosition(tokens.slice(1), width, height, inheritedStyle)\n  return mode === 'by'\n    ? ([current[0] + point[0], current[1] + point[1]] as Point)\n    : point\n}\n\nfunction resolveControlPoint(\n  tokens: string[],\n  start: Point,\n  end: Point,\n  width: number,\n  height: number,\n  inheritedStyle: Record<string, string | number>\n) {\n  const fromIndex = tokens.indexOf('from')\n  const pointTokens = fromIndex === -1 ? tokens : tokens.slice(0, fromIndex)\n  const reference = fromIndex === -1 ? undefined : tokens[fromIndex + 1]\n  if (fromIndex !== -1 && (fromIndex + 2 !== tokens.length || !reference)) {\n    throw new Error('Invalid control point reference in `shape()`.')\n  }\n  const point = resolvePosition(\n    pointTokens,\n    width,\n    height,\n    inheritedStyle,\n    true\n  )\n\n  if (reference === 'start' || (!reference && !hasPositionKeyword(tokens))) {\n    return [start[0] + point[0], start[1] + point[1]] as Point\n  }\n  if (reference === 'end') {\n    return [end[0] + point[0], end[1] + point[1]] as Point\n  }\n  if (reference === 'origin') return point\n  return point\n}\n\nfunction resolvePosition(\n  tokens: string[],\n  width: number,\n  height: number,\n  inheritedStyle: Record<string, string | number>,\n  isControlPoint = false\n): Point {\n  if (!tokens.length || tokens.length > 4) {\n    throw new Error('Invalid position in `shape()`.')\n  }\n\n  let x: number | undefined\n  let y: number | undefined\n  const remaining = [...tokens]\n\n  for (let index = 0; index < remaining.length; index++) {\n    const token = remaining[index]\n    if (\n      token === 'left' ||\n      token === 'right' ||\n      token === 'x-start' ||\n      token === 'x-end'\n    ) {\n      const next = remaining[index + 1]\n      if (next && !isPositionKeyword(next)) {\n        const offset = resolveLength(next, width, inheritedStyle)\n        x = token === 'left' || token === 'x-start' ? offset : width - offset\n        index++\n      } else {\n        x = horizontalKeywords[token] * width\n      }\n    } else if (\n      token === 'top' ||\n      token === 'bottom' ||\n      token === 'y-start' ||\n      token === 'y-end'\n    ) {\n      const next = remaining[index + 1]\n      if (next && !isPositionKeyword(next)) {\n        const offset = resolveLength(next, height, inheritedStyle)\n        y = token === 'top' || token === 'y-start' ? offset : height - offset\n        index++\n      } else {\n        y = verticalKeywords[token] * height\n      }\n    } else if (token === 'center') {\n      if (x === undefined) x = width / 2\n      else if (y === undefined) y = height / 2\n      else throw new Error('Invalid position in `shape()`.')\n    } else if (x === undefined) {\n      x = resolveLength(token, width, inheritedStyle)\n    } else if (y === undefined) {\n      y = resolveLength(token, height, inheritedStyle)\n    } else {\n      throw new Error('Invalid position in `shape()`.')\n    }\n  }\n\n  if (!isControlPoint && tokens.length === 1 && y === undefined) y = height / 2\n  return [\n    x ?? (isControlPoint ? 0 : width / 2),\n    y ?? (isControlPoint ? 0 : height / 2),\n  ]\n}\n\nfunction isPositionKeyword(value: string) {\n  return value in horizontalKeywords || value in verticalKeywords\n}\n\nfunction hasPositionKeyword(tokens: string[]) {\n  return tokens.some(isPositionKeyword)\n}\n\nfunction resolveLength(\n  value: string,\n  base: number,\n  inheritedStyle: Record<string, string | number>\n) {\n  const resolved = lengthToNumber(\n    value,\n    inheritedStyle.fontSize as number,\n    base,\n    inheritedStyle,\n    true\n  )\n  if (typeof resolved === 'undefined') {\n    throw new Error(`Invalid length \\`${value}\\` in \\`shape()\\`.`)\n  }\n  return resolved\n}\n\nfunction pointString(point: Point) {\n  return `${format(point[0])},${format(point[1])}`\n}\n","import { buildXMLString } from '../utils.js'\nimport { createShapeParser } from '../parser/shape.js'\n\nexport function genClipPathId(id: string) {\n  return `satori_cp-${id}`\n}\nexport function genClipPath(id: string) {\n  return `url(#${genClipPathId(id)})`\n}\n\nexport function buildClipPath(\n  v: {\n    left: number\n    top: number\n    width: number\n    height: number\n    path: string\n    matrix: string | undefined\n    id: string\n    currentClipPath: string | string\n    src?: string\n  },\n  style: Record<string, string | number>,\n  inheritedStyle: Record<string, string | number>\n) {\n  if (style.clipPath === 'none') return ''\n\n  const parser = createShapeParser(v, style, inheritedStyle)\n  const clipPath = style.clipPath as string\n\n  let tmp: { type: string; [p: string]: string | number } = { type: '' }\n\n  for (const k of Object.keys(parser)) {\n    tmp = parser[k](clipPath)\n    if (tmp) break\n  }\n\n  if (tmp) {\n    const { type, ...rest } = tmp\n    return buildXMLString(\n      'clipPath',\n      {\n        id: genClipPathId(v.id),\n        'clip-path': v.currentClipPath,\n        transform: `translate(${v.left}, ${v.top})`,\n      },\n      buildXMLString(type, rest)\n    )\n  }\n  return ''\n}\n","/**\n * Generate clip path for the given element.\n */\n\nimport { buildXMLString } from '../utils.js'\nimport mask from './content-mask.js'\nimport radius from './border-radius.js'\nimport { buildClipPath, genClipPathId } from './clip-path.js'\n\n// How far the clip region extends on an axis that isn't clipped.\nconst UNBOUNDED = 1e5\n\nconst rectPath = (x: number, y: number, w: number, h: number) =>\n  `M${x},${y}h${w}v${h}h${-w}z`\n\n/**\n * The clip region of `overflow`, if it isn't the padding box: an axis that\n * isn't clipped extends without limit, and `overflow: clip` on both axes is\n * extended by `overflow-clip-margin` from its box.\n * https://drafts.csswg.org/css-overflow-3/#overflow-clip-margin\n */\nfunction clipRegion(\n  box: { left: number; top: number; width: number; height: number },\n  style: Record<string, string | number>\n) {\n  const clipX = style.overflowX !== 'visible'\n  const clipY = style.overflowY !== 'visible'\n  // The margin only applies to `overflow: clip` on both axes.\n  const isClip = style.overflowX === 'clip' && style.overflowY === 'clip'\n  const margin = isClip ? Number(style.overflowClipMargin) || 0 : 0\n  const visualBox = isClip\n    ? style._overflowClipBox || 'padding-box'\n    : 'padding-box'\n  if (clipX && clipY && !margin && visualBox === 'padding-box') return\n\n  const inset = ['Top', 'Right', 'Bottom', 'Left'].map(\n    (side) =>\n      (visualBox === 'border-box'\n        ? 0\n        : (style[`border${side}Width`] as number) || 0) +\n      (visualBox === 'content-box'\n        ? (style[`padding${side}`] as number) || 0\n        : 0) -\n      margin\n  )\n  const { left, top, width, height } = box\n  if (clipX && clipY) {\n    return (\n      radius(box, style, undefined, false, inset) ||\n      rectPath(\n        left + inset[3],\n        top + inset[0],\n        width - inset[1] - inset[3],\n        height - inset[0] - inset[2]\n      )\n    )\n  }\n  const x = clipX ? left + inset[3] : left - UNBOUNDED\n  const y = clipY ? top + inset[0] : top - UNBOUNDED\n  return rectPath(\n    x,\n    y,\n    (clipX ? left + width - inset[1] : left + width + UNBOUNDED) - x,\n    (clipY ? top + height - inset[2] : top + height + UNBOUNDED) - y\n  )\n}\n\nexport default function overflow(\n  {\n    left,\n    top,\n    width,\n    height,\n    path,\n    matrix,\n    id,\n    currentClipPath,\n    src,\n  }: {\n    left: number\n    top: number\n    width: number\n    height: number\n    path: string\n    matrix: string | undefined\n    id: string\n    currentClipPath: string | string\n    src?: string\n  },\n  style: Record<string, string | number>,\n  inheritableStyle: Record<string, string | number>\n) {\n  let overflowClipPath = ''\n  const clipPath =\n    style.clipPath && style.clipPath !== 'none'\n      ? buildClipPath(\n          { left, top, width, height, path, id, matrix, currentClipPath, src },\n          style as Record<string, number>,\n          inheritableStyle\n        )\n      : ''\n\n  const region = src\n    ? undefined\n    : clipRegion({ left, top, width, height }, style)\n  const transform =\n    style.overflow === 'hidden' && style.transform && matrix\n      ? matrix\n      : undefined\n\n  if (style.overflow !== 'hidden' && !src) {\n    overflowClipPath = ''\n  } else if (region) {\n    // The clip path is the whole region, so the mask doesn't clip.\n    return (\n      clipPath +\n      buildXMLString(\n        'clipPath',\n        {\n          id: clipPath ? `satori_ocp-${id}` : genClipPathId(id),\n          'clip-path': currentClipPath,\n        },\n        buildXMLString('path', { d: region, transform })\n      ) +\n      buildXMLString(\n        'mask',\n        { id: `satori_om-${id}` },\n        buildXMLString('path', {\n          d: rectPath(\n            left - UNBOUNDED,\n            top - UNBOUNDED,\n            width + UNBOUNDED * 2,\n            height + UNBOUNDED * 2\n          ),\n          fill: '#fff',\n          mask: style._inheritedMaskId\n            ? `url(#${style._inheritedMaskId})`\n            : undefined,\n        })\n      )\n    )\n  } else {\n    const _id = clipPath ? `satori_ocp-${id}` : genClipPathId(id)\n\n    overflowClipPath = buildXMLString(\n      'clipPath',\n      {\n        id: _id,\n        'clip-path': currentClipPath,\n      },\n      buildXMLString(path ? 'path' : 'rect', {\n        x: left,\n        y: top,\n        width,\n        height,\n        d: path ? path : undefined,\n        // add transformation matrix to clip path if overflow is hidden AND a\n        // transformation style is defined, otherwise children will be clipped\n        // relative to the parent's original plane instead of the transformed\n        // plane\n        transform:\n          style.overflow === 'hidden' && style.transform && matrix\n            ? matrix\n            : undefined,\n      })\n    )\n  }\n\n  const contentMask = mask(\n    {\n      id: `satori_om-${id}`,\n      left,\n      top,\n      width,\n      height,\n      matrix,\n      borderOnly: src ? false : true,\n    },\n    style\n  )\n\n  return clipPath + overflowClipPath + contentMask\n}\n","import { buildXMLString } from '../utils.js'\nimport buildBackgroundImage, { getBoxArea } from './background-image.js'\nimport type { MaskProperty } from '../parser/mask.js'\n\nconst genMaskImageId = (id: string) => `satori_mi-${id}`\n\n/**\n * Paints with white, keeping the alpha. SVG masks use the luminance, but the\n * images of CSS masks use their alpha, unless `mask-mode` is `luminance`.\n * Gradients are already drawn with white for masks.\n */\nconst ALPHA_MASK_FILTER = '0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0'\n\n/** Boxes that SVG and HTML elements share, others are the border box. */\nconst toBox = (box: string) =>\n  box === 'padding-box' || box === 'content-box' ? box : 'border-box'\n\nexport default async function buildMaskImage(\n  v: {\n    id: string\n    left: number\n    top: number\n    width: number\n    height: number\n  },\n  style: Record<string, string | number>,\n  inheritedStyle: Record<string, string | number>\n): Promise<[string, string]> {\n  if (!style.maskImage) return ['', '']\n  const { left, top, width, height, id } = v\n  const maskImage = style.maskImage as unknown as MaskProperty[]\n  const length = maskImage.length\n  if (!length) return ['', '']\n  const miId = genMaskImageId(id)\n  const box = { left, top, width, height }\n\n  // Layers with their boxes, from the bottom one.\n  const layers: { def: string; shape: string; composite: string }[] = []\n  for (let i = 0; i < length; i++) {\n    const m = maskImage[i]\n    const origin = toBox(m.origin)\n    const clip = toBox(m.clip)\n\n    const layer = await buildBackgroundImage(\n      {\n        id: `${miId}-${i}`,\n        ...box,\n        origin:\n          origin === 'border-box' ? undefined : getBoxArea(box, style, origin),\n      },\n      m,\n      inheritedStyle,\n      'mask'\n    )\n    // A `none` layer doesn't mask the element.\n    if (!layer) continue\n    const [_id, def] = layer\n    const area = clip === 'border-box' ? box : getBoxArea(box, style, clip)\n\n    const alpha = /^url\\(/i.test(m.image.trim()) && m.mode !== 'luminance'\n    const filterId = `${miId}-${i}-alpha`\n    layers.push({\n      def: alpha\n        ? def +\n          buildXMLString(\n            'filter',\n            { id: filterId, 'color-interpolation-filters': 'sRGB' },\n            buildXMLString('feColorMatrix', {\n              type: 'matrix',\n              values: ALPHA_MASK_FILTER,\n            })\n          )\n        : def,\n      shape: buildXMLString('rect', {\n        x: area.left,\n        y: area.top,\n        width: area.width,\n        height: area.height,\n        fill: `url(#${_id})`,\n        filter: alpha ? `url(#${filterId})` : undefined,\n      }),\n      composite: m.composite,\n    })\n  }\n\n  if (!layers.length) return ['', '']\n  if (layers.length === 1) {\n    const [{ def, shape }] = layers\n    return [miId, buildXMLString('mask', { id: miId }, def + shape)]\n  }\n\n  // Layers are composited with masks, which renderers support better than\n  // blending in masks. Each layer is a mask, and so is each result of\n  // compositing it with the layers below. Inside them, white masked by\n  // another mask paints that mask.\n  const rectOf = (attrs: Record<string, string>) =>\n    buildXMLString('rect', { x: left, y: top, width, height, ...attrs })\n  const paint = (maskId: string) =>\n    rectOf({ fill: '#fff', mask: `url(#${maskId})` })\n  const masked = (maskId: string, content: string) =>\n    buildXMLString('g', { mask: `url(#${maskId})` }, content)\n\n  let masks = ''\n  const inverses = new Set<string>()\n  const inverse = (maskId: string) => {\n    const inverseId = `${maskId}-inverse`\n    if (!inverses.has(maskId)) {\n      inverses.add(maskId)\n      masks += buildXMLString(\n        'mask',\n        { id: inverseId },\n        rectOf({ fill: '#fff' }) +\n          rectOf({ fill: '#000', mask: `url(#${maskId})` })\n      )\n    }\n    return inverseId\n  }\n\n  let below = ''\n  layers.forEach(({ def, shape, composite }, i) => {\n    const layerId = `${miId}-layer-${i}`\n    masks += buildXMLString('mask', { id: layerId }, def + shape)\n    if (!i) {\n      below = layerId\n      return\n    }\n\n    let content: string\n    if (composite === 'intersect') {\n      content = masked(layerId, paint(below))\n    } else if (composite === 'subtract') {\n      content = masked(inverse(below), paint(layerId))\n    } else if (composite === 'exclude') {\n      // The two parts only overlap where layers are partly transparent, so\n      // this is exact for opaque layers.\n      content =\n        masked(inverse(below), paint(layerId)) +\n        masked(inverse(layerId), paint(below))\n    } else {\n      content = paint(below) + paint(layerId)\n    }\n    const resultId = i === layers.length - 1 ? miId : `${miId}-${i}`\n    masks += buildXMLString('mask', { id: resultId }, content)\n    below = resultId\n  })\n\n  return [miId, masks]\n}\n","import type { BackdropFilter } from '../parser/backdrop-filter.js'\nimport { buildXMLString } from '../utils.js'\n\nexport function backdropFilter({\n  id,\n  left,\n  top,\n  width,\n  height,\n  path,\n  type,\n  matrix,\n  currentClipPath,\n  mask,\n  filters,\n}: {\n  id: string\n  left: number\n  top: number\n  width: number\n  height: number\n  path: string\n  type: 'rect' | 'path'\n  matrix: string | undefined\n  currentClipPath: string | undefined\n  mask: string | undefined\n  filters: BackdropFilter[]\n}) {\n  if (!filters.length) return ['', ''] as const\n\n  const filterId = `satori_bf-${id}`\n  const clipId = `satori_bfc-${id}`\n  const expansion = getExpansion(filters)\n  let input = 'BackgroundImage'\n  let primitives = ''\n\n  filters.forEach((filter, index) => {\n    const result = `${filterId}-${index}`\n    primitives += buildFilterPrimitive(filter, input, result)\n    input = result\n  })\n\n  const definitions =\n    buildXMLString(\n      'filter',\n      {\n        id: filterId,\n        x: left - expansion.left,\n        y: top - expansion.top,\n        width: width + expansion.left + expansion.right,\n        height: height + expansion.top + expansion.bottom,\n        filterUnits: 'userSpaceOnUse',\n        'color-interpolation-filters': 'sRGB',\n      },\n      primitives\n    ) +\n    buildXMLString(\n      'clipPath',\n      {\n        id: clipId,\n        'clip-path': currentClipPath,\n      },\n      buildXMLString(type, {\n        x: left,\n        y: top,\n        width,\n        height,\n        d: path || undefined,\n        transform: matrix || undefined,\n      })\n    )\n\n  const shape = buildXMLString(type, {\n    x: left,\n    y: top,\n    width,\n    height,\n    d: path || undefined,\n    fill: '#000',\n    transform: matrix || undefined,\n    filter: `url(#${filterId})`,\n    'clip-path': `url(#${clipId})`,\n    mask,\n  })\n\n  return [definitions, shape] as const\n}\n\n/**\n * The SVG filter primitives of a filter function. The shadow of `drop-shadow()`\n * is cast by the input, or by the part of it inside the source graphic with\n * `clipToSource`, for backdrops.\n */\nexport function buildFilterPrimitive(\n  filter: BackdropFilter,\n  input: string,\n  result: string,\n  clipToSource = true\n) {\n  if (filter.type === 'blur') {\n    return buildXMLString('feGaussianBlur', {\n      in: input,\n      stdDeviation: filter.value,\n      result,\n    })\n  }\n\n  if (filter.type === 'hue-rotate') {\n    return buildXMLString('feColorMatrix', {\n      in: input,\n      type: 'hueRotate',\n      values: filter.value,\n      result,\n    })\n  }\n\n  if (filter.type === 'saturate' || filter.type === 'grayscale') {\n    return buildXMLString('feColorMatrix', {\n      in: input,\n      type: 'saturate',\n      values: filter.type === 'grayscale' ? 1 - filter.value : filter.value,\n      result,\n    })\n  }\n\n  if (filter.type === 'sepia') {\n    const amount = filter.value\n    const inverse = 1 - amount\n    return buildXMLString('feColorMatrix', {\n      in: input,\n      type: 'matrix',\n      values: [\n        inverse + 0.393 * amount,\n        0.769 * amount,\n        0.189 * amount,\n        0,\n        0,\n        0.349 * amount,\n        inverse + 0.686 * amount,\n        0.168 * amount,\n        0,\n        0,\n        0.272 * amount,\n        0.534 * amount,\n        inverse + 0.131 * amount,\n        0,\n        0,\n        0,\n        0,\n        0,\n        1,\n        0,\n      ].join(' '),\n      result,\n    })\n  }\n\n  if (filter.type === 'drop-shadow') {\n    // Built from primitives instead of `feDropShadow`, which resvg draws with\n    // the wrong color when `color-interpolation-filters` is `sRGB`.\n    const shadowInput = clipToSource ? `${result}-input` : input\n    return (\n      (clipToSource\n        ? buildXMLString('feComposite', {\n            in: input,\n            in2: 'SourceAlpha',\n            operator: 'in',\n            result: shadowInput,\n          })\n        : '') +\n      buildXMLString('feFlood', {\n        'flood-color': filter.color,\n        result: `${result}-flood`,\n      }) +\n      buildXMLString('feComposite', {\n        in: `${result}-flood`,\n        in2: shadowInput,\n        operator: 'in',\n        result: `${result}-shape`,\n      }) +\n      buildXMLString('feGaussianBlur', {\n        in: `${result}-shape`,\n        stdDeviation: filter.blurRadius,\n        result: `${result}-blur`,\n      }) +\n      buildXMLString('feOffset', {\n        in: `${result}-blur`,\n        dx: filter.offsetX,\n        dy: filter.offsetY,\n        result: `${result}-shadow`,\n      }) +\n      buildXMLString(\n        'feMerge',\n        { result },\n        buildXMLString('feMergeNode', { in: `${result}-shadow` }) +\n          buildXMLString('feMergeNode', { in: shadowInput })\n      )\n    )\n  }\n\n  const amount = filter.value\n  const attributes =\n    filter.type === 'brightness'\n      ? { slope: amount }\n      : filter.type === 'contrast'\n      ? { slope: amount, intercept: 0.5 - 0.5 * amount }\n      : filter.type === 'invert'\n      ? { slope: 1 - 2 * amount, intercept: amount }\n      : { slope: amount }\n  const channels = filter.type === 'opacity' ? ['A'] : ['R', 'G', 'B']\n\n  return buildXMLString(\n    'feComponentTransfer',\n    { in: input, result },\n    channels\n      .map((channel) =>\n        buildXMLString(`feFunc${channel}`, {\n          type: 'linear',\n          ...attributes,\n        })\n      )\n      .join('')\n  )\n}\n\n/**\n * How far the filter functions draw outside of their input.\n */\nexport function getExpansion(filters: BackdropFilter[]) {\n  let left = 0\n  let top = 0\n  let right = 0\n  let bottom = 0\n\n  for (const filter of filters) {\n    if (filter.type === 'blur') {\n      const grow = filter.value * 3\n      left = Math.max(left, grow)\n      top = Math.max(top, grow)\n      right = Math.max(right, grow)\n      bottom = Math.max(bottom, grow)\n    } else if (filter.type === 'drop-shadow') {\n      const grow = filter.blurRadius * 3\n      left = Math.max(left, grow - filter.offsetX)\n      top = Math.max(top, grow - filter.offsetY)\n      right = Math.max(right, grow + filter.offsetX)\n      bottom = Math.max(bottom, grow + filter.offsetY)\n    }\n  }\n\n  return { left, top, right, bottom }\n}\n","import type { ParsedTransformOrigin } from '../transform-origin.js'\n\nimport backgroundImage, { getBoxArea } from './background-image.js'\nimport radius, { getBorderRadiusClipPath } from './border-radius.js'\nimport { boxShadow } from './shadow.js'\nimport transform from './transform.js'\nimport overflow from './overflow.js'\nimport { buildXMLString } from '../utils.js'\nimport border, { getBorderClipPath } from './border.js'\nimport { genClipPath } from './clip-path.js'\nimport buildMaskImage from './mask-image.js'\nimport { backdropFilter } from './backdrop-filter.js'\nimport contentMask from './content-mask.js'\nimport type { BackdropFilter } from '../parser/backdrop-filter.js'\nimport CssDimension from '../vendor/parse-css-dimension/index.js'\n\n/**\n * Parse object-position value into [xOffset, yOffset] in pixels.\n * Supports keywords (left, center, right, top, bottom), percentages, and lengths.\n * Similar to background-position parsing.\n */\nfunction parseObjectPosition(\n  position: string,\n  containerWidth: number,\n  containerHeight: number\n): [number, number] {\n  const parts = position.toLowerCase().trim().split(/\\s+/)\n\n  // Convert keyword to percentage\n  const keywordToPercent = (keyword: string, axis: 'x' | 'y'): string => {\n    const map = {\n      left: '0%',\n      center: '50%',\n      right: '100%',\n      top: '0%',\n      bottom: '100%',\n    }\n    return map[keyword] || keyword\n  }\n\n  let xValue: string\n  let yValue: string\n\n  if (parts.length === 1) {\n    const part = parts[0]\n    // Single value\n    if (part === 'left' || part === 'center' || part === 'right') {\n      xValue = keywordToPercent(part, 'x')\n      yValue = '50%' // center\n    } else if (part === 'top' || part === 'bottom') {\n      xValue = '50%' // center\n      yValue = keywordToPercent(part, 'y')\n    } else {\n      // Assume it's x value, y defaults to center\n      xValue = part\n      yValue = '50%'\n    }\n  } else {\n    // Two or more values\n    const first = parts[0]\n    const second = parts[1]\n\n    // Check if first is a y-axis keyword (top/bottom)\n    if (first === 'top' || first === 'bottom') {\n      yValue = keywordToPercent(first, 'y')\n      if (second === 'left' || second === 'right' || second === 'center') {\n        xValue = keywordToPercent(second, 'x')\n      } else {\n        // Second is a length/percentage, default x to center\n        xValue = '50%'\n        yValue =\n          first === 'top' || first === 'bottom'\n            ? keywordToPercent(first, 'y')\n            : second\n      }\n    } else {\n      // Normal order: x then y\n      xValue = keywordToPercent(first, 'x')\n      yValue = keywordToPercent(second, 'y')\n    }\n  }\n\n  // Convert to absolute pixels\n  const parseValue = (value: string, containerSize: number): number => {\n    try {\n      if (value.endsWith('%')) {\n        return (containerSize * parseFloat(value)) / 100\n      }\n      const parsed = new CssDimension(value)\n      if (parsed.type === 'length' || parsed.type === 'number') {\n        return parsed.value\n      }\n      return 0\n    } catch (e) {\n      return 0\n    }\n  }\n\n  return [\n    parseValue(xValue, containerWidth),\n    parseValue(yValue, containerHeight),\n  ]\n}\n\nexport default async function rect(\n  {\n    id,\n    left,\n    top,\n    width,\n    height,\n    isInheritingTransform,\n    src,\n    svgAspectRatio,\n    debug,\n    opacity = 1,\n    drawn,\n  }: {\n    id: string\n    left: number\n    top: number\n    width: number\n    height: number\n    isInheritingTransform: boolean\n    src?: string\n    /**\n     * The `preserveAspectRatio` of an inline SVG, which fits its viewBox in\n     * its box.\n     */\n    svgAspectRatio?: string\n    debug?: boolean\n    /**\n     * The opacity of everything drawn here. Elements with children are drawn\n     * as a group with their opacity instead, see `layout()`.\n     */\n    opacity?: number\n    /** Set to whether shapes are drawn, not just definitions. */\n    drawn?: { shapes: boolean }\n  },\n  style: Record<string, number | string>,\n  inheritableStyle: Record<string, number | string>\n) {\n  if (style.display === 'none') return ''\n\n  const isImage = !!src\n\n  let type: 'rect' | 'path' = 'rect'\n  let matrix = ''\n  let defs = ''\n  let fills: string[] = []\n  // The blend mode of each fill, with the backgrounds below it.\n  const blendModes: (string | undefined)[] = []\n  let extra = ''\n\n  if (style.backgroundColor) {\n    fills.push(style.backgroundColor as string)\n  }\n\n  if (style.transform) {\n    matrix = transform(\n      {\n        left,\n        top,\n        width,\n        height,\n      },\n      style.transform as unknown as number[],\n      isInheritingTransform,\n      style.transformOrigin as ParsedTransformOrigin | undefined\n    )\n  }\n\n  let backgroundShapes = ''\n  if (style.backgroundImage) {\n    const backgrounds: { image: string[]; blendMode?: string }[] = []\n\n    for (\n      let index = 0;\n      index < (style.backgroundImage as any).length;\n      index++\n    ) {\n      const background = (style.backgroundImage as any)[index]\n      const image = await backgroundImage(\n        {\n          id: id + '_' + index,\n          width,\n          height,\n          left,\n          top,\n          origin: getBoxArea(\n            { left, top, width, height },\n            style,\n            background.origin\n          ),\n        },\n        background,\n        inheritableStyle\n      )\n      if (image) {\n        // Background images that come first in the array are rendered last.\n        backgrounds.unshift({ image, blendMode: background.blendMode })\n      }\n    }\n\n    for (const { image, blendMode } of backgrounds) {\n      fills.push(`url(#${image[0]})`)\n      blendModes[fills.length - 1] =\n        blendMode && blendMode !== 'normal' ? blendMode : undefined\n      defs += image[1]\n      if (image[2]) {\n        backgroundShapes += image[2]\n      }\n    }\n  }\n\n  const [miId, mi] = await buildMaskImage(\n    { id, left, top, width, height },\n    style,\n    inheritableStyle\n  )\n\n  defs += mi\n  const maskId = miId\n    ? `url(#${miId})`\n    : style._inheritedMaskId\n    ? `url(#${style._inheritedMaskId})`\n    : undefined\n\n  const path = radius(\n    { left, top, width, height },\n    style as Record<string, number>\n  )\n  if (path) {\n    type = 'path'\n  }\n\n  const clipPathId = style._inheritedClipPathId as number | undefined\n\n  if (debug) {\n    extra = buildXMLString('rect', {\n      x: left,\n      y: top,\n      width,\n      height,\n      fill: 'transparent',\n      stroke: '#ff5757',\n      'stroke-width': 1,\n      transform: matrix || undefined,\n      'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\n    })\n  }\n\n  const { backgroundClip } = style\n\n  const currentClipPath =\n    backgroundClip === 'text'\n      ? `url(#satori_bct-${id})`\n      : clipPathId\n      ? `url(#${clipPathId})`\n      : style.clipPath\n      ? genClipPath(id)\n      : undefined\n\n  // The element's own clip path is only clipped by the ones of its ancestors,\n  // and must not reference itself.\n  const clip = overflow(\n    {\n      left,\n      top,\n      width,\n      height,\n      path,\n      id,\n      matrix,\n      currentClipPath:\n        backgroundClip === 'text' || clipPathId ? currentClipPath : undefined,\n      src,\n    },\n    style as Record<string, number>,\n    inheritableStyle\n  )\n\n  const [backdropDefinitions, backdropShape] = backdropFilter({\n    id,\n    left,\n    top,\n    width,\n    height,\n    path,\n    type,\n    matrix: matrix || undefined,\n    currentClipPath,\n    mask: maskId,\n    filters: (style._backdropFilters as unknown as BackdropFilter[]) || [],\n  })\n  defs += backdropDefinitions\n\n  // When the element is a single plain shape (one background fill, no border,\n  // box shadow, backdrop filter, mask or CSS filter), `opacity` is visually\n  // equivalent to `fill-opacity` since there is nothing to composite as an\n  // isolated group. Using `fill-opacity` avoids emitting a `<g opacity>`\n  // wrapper, which forces rasterizers such as librsvg and resvg to allocate\n  // and composite a temporary surface.\n  const useFillOpacity =\n    opacity !== 1 &&\n    !isImage &&\n    fills.length === 1 &&\n    !backdropShape &&\n    !backgroundShapes &&\n    !maskId &&\n    !style.boxShadow &&\n    !(\n      style.borderTopWidth ||\n      style.borderRightWidth ||\n      style.borderBottomWidth ||\n      style.borderLeftWidth\n    )\n\n  // Each background generates a new rectangle.\n  // @TODO: Not sure if this is the best way to do it, maybe <pattern> with\n  // multiple <image>s is better.\n  let shape = fills\n    .map((fill, index) =>\n      buildXMLString(type, {\n        x: left,\n        y: top,\n        width,\n        height,\n        fill,\n        'fill-opacity': useFillOpacity ? opacity : undefined,\n        d: path ? path : undefined,\n        transform: matrix ? matrix : undefined,\n        'clip-path': style.transform ? undefined : currentClipPath,\n        mask: style.transform ? undefined : maskId,\n        style: blendModes[index]\n          ? `mix-blend-mode:${blendModes[index]}`\n          : undefined,\n      })\n    )\n    .join('')\n  // Background layers only blend with the ones of the element.\n  if (blendModes.some(Boolean)) {\n    shape = buildXMLString('g', { style: 'isolation:isolate' }, shape)\n  }\n\n  // `background-clip: padding-box | content-box` masks the backgrounds with\n  // the inner edge of the border, or of the padding.\n  if (\n    (shape || backgroundShapes) &&\n    (backgroundClip === 'padding-box' || backgroundClip === 'content-box')\n  ) {\n    const sides = ['Top', 'Right', 'Bottom', 'Left']\n    const borderOnly = backgroundClip === 'padding-box'\n    const hasInset = sides.some(\n      (side) =>\n        style[`border${side}Width`] || (!borderOnly && style[`padding${side}`])\n    )\n    if (hasInset) {\n      const backgroundClipMaskId = `satori_bgc-${id}`\n      // The shapes are transformed by themselves, so the mask needs the\n      // transform too.\n      defs += contentMask(\n        {\n          id: backgroundClipMaskId,\n          left,\n          top,\n          width,\n          height,\n          matrix: matrix || undefined,\n          borderOnly,\n        },\n        { ...style, overflow: 'hidden', _inheritedMaskId: undefined }\n      )\n      const mask = { mask: `url(#${backgroundClipMaskId})` }\n      if (shape) shape = buildXMLString('g', mask, shape)\n      if (backgroundShapes) {\n        backgroundShapes = buildXMLString('g', mask, backgroundShapes)\n      }\n    }\n  }\n\n  const borderClip = getBorderClipPath(\n    {\n      id,\n      left,\n      top,\n      width,\n      height,\n      currentClipPathId: clipPathId,\n      borderPath: path,\n      borderType: type,\n    },\n    style\n  )\n\n  // border radius for images with transform property\n  let imageBorderRadius = undefined\n\n  // If it's an image (<img>) tag, we add an extra layer of the image itself.\n  if (isImage) {\n    // We need to subtract the border and padding sizes from the image size.\n    const offsetLeft =\n      ((style.borderLeftWidth as number) || 0) +\n      ((style.paddingLeft as number) || 0)\n    const offsetTop =\n      ((style.borderTopWidth as number) || 0) +\n      ((style.paddingTop as number) || 0)\n    const offsetRight =\n      ((style.borderRightWidth as number) || 0) +\n      ((style.paddingRight as number) || 0)\n    const offsetBottom =\n      ((style.borderBottomWidth as number) || 0) +\n      ((style.paddingBottom as number) || 0)\n\n    const containerInnerWidth = width - offsetLeft - offsetRight\n    const containerInnerHeight = height - offsetTop - offsetBottom\n\n    // Parse object-position\n    const position = (style.objectPosition || 'center').toString()\n    const [objPosX, objPosY] = parseObjectPosition(\n      position,\n      containerInnerWidth,\n      containerInnerHeight\n    )\n\n    // Get natural image dimensions if available\n    const naturalWidth = (style.__naturalWidth as number) || containerInnerWidth\n    const naturalHeight =\n      (style.__naturalHeight as number) || containerInnerHeight\n\n    // Calculate objectFit behavior\n    let preserveAspectRatio: string\n    let imageWidth = containerInnerWidth\n    let imageHeight = containerInnerHeight\n    let imageX = left + offsetLeft\n    let imageY = top + offsetTop\n\n    if (svgAspectRatio) {\n      // Like in browsers, `object-fit` doesn't apply to inline SVGs, which\n      // fit their viewBox in their box themselves.\n      preserveAspectRatio = svgAspectRatio\n    } else if (style.objectFit === 'contain') {\n      // Scale to fit within container while preserving aspect ratio\n      const scaleX = containerInnerWidth / naturalWidth\n      const scaleY = containerInnerHeight / naturalHeight\n      const scale = Math.min(scaleX, scaleY)\n\n      imageWidth = naturalWidth * scale\n      imageHeight = naturalHeight * scale\n\n      // Apply object-position to center the image within the container\n      imageX =\n        left +\n        offsetLeft +\n        objPosX -\n        (imageWidth * objPosX) / containerInnerWidth\n      imageY =\n        top +\n        offsetTop +\n        objPosY -\n        (imageHeight * objPosY) / containerInnerHeight\n\n      preserveAspectRatio = 'none'\n    } else if (style.objectFit === 'cover') {\n      // Scale to cover the container while preserving aspect ratio\n      const scaleX = containerInnerWidth / naturalWidth\n      const scaleY = containerInnerHeight / naturalHeight\n      const scale = Math.max(scaleX, scaleY)\n\n      imageWidth = naturalWidth * scale\n      imageHeight = naturalHeight * scale\n\n      // Apply object-position\n      imageX =\n        left +\n        offsetLeft +\n        objPosX -\n        (imageWidth * objPosX) / containerInnerWidth\n      imageY =\n        top +\n        offsetTop +\n        objPosY -\n        (imageHeight * objPosY) / containerInnerHeight\n\n      preserveAspectRatio = 'none'\n    } else if (style.objectFit === 'fill') {\n      // Stretch to fill (ignore aspect ratio)\n      preserveAspectRatio = 'none'\n    } else if (style.objectFit === 'scale-down') {\n      if (naturalWidth && naturalHeight) {\n        // Calculate if we need to scale down\n        const scaleX = containerInnerWidth / naturalWidth\n        const scaleY = containerInnerHeight / naturalHeight\n        const minScale = Math.min(scaleX, scaleY)\n\n        if (minScale >= 1) {\n          // Image is smaller than or equal to container\n          // Use natural size (don't scale up)\n          imageWidth = naturalWidth\n          imageHeight = naturalHeight\n          preserveAspectRatio = 'none'\n\n          // Apply object-position to position the un-scaled image\n          imageX =\n            left +\n            offsetLeft +\n            objPosX -\n            (imageWidth * objPosX) / containerInnerWidth\n          imageY =\n            top +\n            offsetTop +\n            objPosY -\n            (imageHeight * objPosY) / containerInnerHeight\n        } else {\n          // Image is larger than container, scale down like 'contain'\n          const scale = minScale\n          imageWidth = naturalWidth * scale\n          imageHeight = naturalHeight * scale\n\n          // Apply object-position\n          imageX =\n            left +\n            offsetLeft +\n            objPosX -\n            (imageWidth * objPosX) / containerInnerWidth\n          imageY =\n            top +\n            offsetTop +\n            objPosY -\n            (imageHeight * objPosY) / containerInnerHeight\n\n          preserveAspectRatio = 'none'\n        }\n      } else {\n        // Fall back to 'contain' behavior if natural dimensions are unavailable\n        const scaleX = containerInnerWidth / naturalWidth\n        const scaleY = containerInnerHeight / naturalHeight\n        const scale = Math.min(scaleX, scaleY)\n\n        imageWidth = naturalWidth * scale\n        imageHeight = naturalHeight * scale\n\n        imageX =\n          left +\n          offsetLeft +\n          objPosX -\n          (imageWidth * objPosX) / containerInnerWidth\n        imageY =\n          top +\n          offsetTop +\n          objPosY -\n          (imageHeight * objPosY) / containerInnerHeight\n\n        preserveAspectRatio = 'none'\n      }\n    } else {\n      // Default/none: fill (stretch)\n      preserveAspectRatio = 'none'\n    }\n\n    if (style.transform) {\n      imageBorderRadius = getBorderRadiusClipPath(\n        {\n          id,\n          borderRadiusPath: path,\n          borderType: type,\n          left,\n          top,\n          width,\n          height,\n        },\n        style\n      )\n    }\n\n    // An image without an area draws nothing, and renderers like librsvg\n    // fail to draw it.\n    if (imageWidth > 0 && imageHeight > 0) {\n      shape += buildXMLString('image', {\n        x: imageX,\n        y: imageY,\n        width: imageWidth,\n        height: imageHeight,\n        href: src,\n        preserveAspectRatio,\n        transform: matrix ? matrix : undefined,\n        'clip-path': style.transform\n          ? imageBorderRadius\n            ? `url(#${imageBorderRadius[1]})`\n            : undefined\n          : `url(#satori_cp-${id})`,\n        mask: style.transform\n          ? undefined\n          : miId\n          ? `url(#${miId})`\n          : `url(#satori_om-${id})`,\n      })\n    }\n  }\n\n  if (borderClip) {\n    defs += borderClip[0]\n    const rectClipId = borderClip[1]\n\n    shape += border(\n      {\n        id,\n        left,\n        top,\n        width,\n        height,\n        props: {\n          transform: matrix ? matrix : undefined,\n          // When using `background-clip: text`, we need to draw the extra border because\n          // it shouldn't be clipped by the clip path, so we are not using currentClipPath here.\n          'clip-path': `url(#${rectClipId})`,\n        },\n      },\n      style\n    )\n  }\n\n  // box-shadow.\n  const shadow = boxShadow(\n    {\n      width,\n      height,\n      id,\n      shape: buildXMLString(type, {\n        x: left,\n        y: top,\n        width,\n        height,\n        fill: '#fff',\n        stroke: '#fff',\n        'stroke-width': 0,\n        d: path ? path : undefined,\n        transform: matrix ? matrix : undefined,\n        'clip-path': currentClipPath,\n        mask: maskId,\n      }),\n    },\n    style\n  )\n\n  let content = backdropShape + (backgroundShapes || shape)\n\n  if (style.transform && (currentClipPath || maskId)) {\n    content = buildXMLString(\n      'g',\n      {\n        'clip-path': currentClipPath || undefined,\n        mask: maskId || undefined,\n      },\n      content\n    )\n  }\n\n  // Shadows and content are drawn as a group with the opacity, so e.g. a\n  // shadow under the element doesn't show through it.\n  // A hidden element isn't drawn, but its descendants still use the\n  // definitions, e.g. of its `overflow` clip.\n  let shapes =\n    style.visibility === 'hidden'\n      ? ''\n      : (shadow ? shadow[0] : '') + content + (shadow ? shadow[1] : '')\n  if (drawn) drawn.shapes = !!shapes\n  if (opacity !== 1 && !useFillOpacity) {\n    shapes = buildXMLString('g', { opacity }, shapes)\n  }\n\n  return (\n    (defs ? buildXMLString('defs', {}, defs) : '') +\n    (imageBorderRadius ? imageBorderRadius[0] : '') +\n    clip +\n    shapes +\n    extra\n  )\n}\n","import type { ParsedTransformOrigin } from '../transform-origin.js'\nimport { buildXMLString } from '../utils.js'\nimport border from './border.js'\nimport radius, { resolveBorderRadii } from './border-radius.js'\nimport transform from './transform.js'\n\nconst CORNERS = [\n  'borderTopLeftRadius',\n  'borderTopRightRadius',\n  'borderBottomRightRadius',\n  'borderBottomLeftRadius',\n]\n\n/**\n * Draws the outline of a box: a border outside of its border edge, moved out\n * by `outline-offset`. Rounded corners of the box are rounded by the same\n * distance, and square ones stay square.\n * https://drafts.csswg.org/css-ui-4/#outline-props\n */\nexport default function outline(\n  {\n    id,\n    left,\n    top,\n    width,\n    height,\n    isInheritingTransform,\n  }: {\n    id: string\n    left: number\n    top: number\n    width: number\n    height: number\n    isInheritingTransform: boolean\n  },\n  style: Record<string, any>\n) {\n  const lineStyle = style.outlineStyle\n  const lineWidth =\n    typeof style.outlineWidth === 'number' ? style.outlineWidth : 3\n  if (!lineStyle || lineStyle === 'none' || lineWidth <= 0) return ''\n\n  const offset =\n    typeof style.outlineOffset === 'number' ? style.outlineOffset : 0\n  const spread = offset + lineWidth\n  const box = {\n    left: left - spread,\n    top: top - spread,\n    width: width + spread * 2,\n    height: height + spread * 2,\n  }\n  if (box.width <= 0 || box.height <= 0) return ''\n\n  // `auto` is drawn like `solid`.\n  const sideStyle = lineStyle === 'auto' ? 'solid' : lineStyle\n  const outlineStyle: Record<string, number | string> = {}\n  for (const side of ['Top', 'Right', 'Bottom', 'Left']) {\n    outlineStyle[`border${side}Width`] = lineWidth\n    outlineStyle[`border${side}Style`] = sideStyle\n    outlineStyle[`border${side}Color`] = style.outlineColor ?? style.color\n  }\n  resolveBorderRadii({ width, height }, style)?.forEach(([x, y], i) => {\n    outlineStyle[CORNERS[i]] =\n      x > 0 && y > 0\n        ? `${Math.max(0, x + spread)}px ${Math.max(0, y + spread)}px`\n        : 0\n  })\n\n  const matrix = style.transform\n    ? transform(\n        { left, top, width, height },\n        style.transform,\n        isInheritingTransform,\n        style.transformOrigin as ParsedTransformOrigin | undefined\n      )\n    : ''\n\n  // The outline is clipped by the `overflow` of ancestors, not its own. A\n  // transformed outline is clipped as a group, since the clip paths of\n  // ancestors aren't transformed.\n  const clipPathId = style._inheritedClipPathId as string | undefined\n  const maskId = style._inheritedMaskId as string | undefined\n  const clipId = `satori_oc-${id}`\n  const edge =\n    radius(box, outlineStyle) ||\n    `M${box.left},${box.top}h${box.width}v${box.height}h${-box.width}z`\n  const defs = buildXMLString(\n    'defs',\n    {},\n    buildXMLString(\n      'clipPath',\n      {\n        id: clipId,\n        'clip-path': clipPathId && !matrix ? `url(#${clipPathId})` : undefined,\n      },\n      buildXMLString('path', { d: edge })\n    )\n  )\n  const lines = border(\n    {\n      id: `${id}-outline`,\n      ...box,\n      props: {\n        transform: matrix || undefined,\n        'clip-path': `url(#${clipId})`,\n      },\n    },\n    outlineStyle\n  )\n  if (!lines) return ''\n  return (\n    defs +\n    (maskId || (matrix && clipPathId)\n      ? buildXMLString(\n          'g',\n          {\n            'clip-path':\n              matrix && clipPathId ? `url(#${clipPathId})` : undefined,\n            mask: maskId ? `url(#${maskId})` : undefined,\n          },\n          lines\n        )\n      : lines)\n  )\n}\n","/**\n * Applies the stylesheets of `<style>` elements. They're parsed by\n * `crates/layout/src/css.rs`, then the declarations of the rules that match\n * each element are merged with its inline style in cascade order, so that the\n * rest of Satori handles them like inline styles.\n */\n\nimport type { ReactElement, ReactNode } from 'react'\n\nimport type { LayoutEngine } from '../layout-engine/index.js'\nimport { isReactElement, normalizeChildren } from '../utils.js'\nimport { PLACEHOLDER_PROP } from '../form-control.js'\n\n// The JSON from `crates/layout/src/css.rs`.\ntype Combinator = ' ' | '>' | '+' | '~'\ntype RawSimple = [string, ...any[]]\ntype RawComplex = (RawSimple[] | Combinator)[]\n/** A part of `content`: text, or a function or keyword. */\ntype ContentPart = string | [kind: string, ...args: any[]]\ntype Declaration = [\n  name: string,\n  value: string | ContentPart[],\n  important: 0 | 1\n]\ninterface RawRule {\n  s?: RawComplex[]\n  m?: string\n  u?: string\n  c?: string\n  l?: string[]\n  p?: string\n  b?: Item[]\n}\ntype Item = RawRule | Declaration\n\ntype Simple = [string, ...any[]]\ntype Compound = Simple[]\ninterface Selector {\n  parts: (Compound | Combinator)[]\n  specificity: number\n  /** The pseudo-element it selects, e.g. `before`. */\n  pseudo?: string\n}\n\ninterface Rule {\n  selectors: Selector[]\n  declarations: Declaration[]\n  /** The position in the stylesheets. */\n  order: number\n  layer: string[]\n  /** The precedence of the layer, see `rankLayers()`. */\n  rank: number\n  /** The conditions of the `@container` rules it's in. */\n  containers?: ContainerCondition[]\n}\n\n/** A custom property registered with `@property`. */\ninterface RegisteredProperty {\n  inherits: boolean\n  initial?: string\n}\n\n/** The initial values of registered custom properties, see `cascade()`. */\ninterface InitialValues {\n  all: [name: string, value: string][]\n  notInherited: [name: string, value: string][]\n}\n\n/** What the styles of the rebuilt tree depend on, see `rebuild()`. */\ninterface RebuildContext {\n  invalid: Set<Declaration>\n  initial?: InitialValues\n  /** For container units, see `resolveContainerUnits()`. */\n  units?: { sizes?: Map<number, ContainerSize>; viewport: Viewport }\n}\n\n/** The condition of a `@container` rule, for the container with `name`. */\ninterface ContainerCondition {\n  name?: string\n  query: string\n}\n\nexport interface Viewport {\n  width?: number\n  height?: number\n}\n\n/** The size of the content box of a query container. */\nexport interface ContainerSize {\n  width: number\n  height: number\n}\n\n/**\n * Container queries depend on the size of containers, which is known after\n * layout. Without `sizes`, they don't match, and `queried` is set when they\n * could, so that the tree is laid out again with the sizes of its containers.\n */\nexport interface ContainerQueries {\n  /** The sizes of containers, by their `CONTAINER_PROP`. */\n  sizes?: Map<number, ContainerSize>\n  queried?: boolean\n}\n\n/** The prop of query containers, their index in tree order. */\nexport const CONTAINER_PROP = '__satoriContainer'\n\n/** An element of the tree, for matching selectors. */\ninterface Node {\n  type: string\n  props: Record<string, any>\n  parent: Node | null\n  /** The elements with the same parent, including this one. */\n  siblings: Node[]\n  index: number\n  children: Node[]\n  /** Whether it has text, for `:empty`. */\n  text: boolean\n  classes: string[]\n  lang?: string\n  /** Whether it's in an `<svg>`. */\n  svg: boolean\n  /** Set if it's a query container, see `getContainer()`. */\n  container?: Container\n  /**\n   * The rules that match it, and its `::before` and `::after` if it can have\n   * them, see `matchRules()`.\n   */\n  matched?: Partial<\n    Record<'' | 'before' | 'after' | 'placeholder', MatchedRule[]>\n  >\n  /** The custom properties it declares, see `cascade()`. */\n  custom?: Set<string>\n}\n\ninterface Container {\n  index: number\n  type: 'inline-size' | 'size'\n  names: string[]\n}\n\ninterface MatchedRule {\n  rule: Rule\n  /** The specificity of the most specific selector that matches. */\n  specificity: number\n}\n\n// Specificities are compared as numbers.\nconst ID = 1 << 20\nconst CLASS = 1 << 10\nconst TYPE = 1\n\nconst LOGICAL_PSEUDO_CLASSES = new Set(['is', 'where', 'not', 'has'])\nconst PSEUDO_CLASSES = new Set([\n  'root',\n  'scope',\n  'empty',\n  'first-child',\n  'last-child',\n  'only-child',\n  'first-of-type',\n  'last-of-type',\n  'only-of-type',\n  'link',\n  'any-link',\n  '-webkit-any-link',\n  'defined',\n  'read-only',\n  // These never match, since there are no shadow trees.\n  'host',\n  // These never match, since elements aren't interactive.\n  'hover',\n  'active',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'visited',\n  'target',\n  'target-within',\n  'checked',\n  'indeterminate',\n  'default',\n  'disabled',\n  'enabled',\n  'required',\n  'optional',\n  'valid',\n  'invalid',\n  'user-valid',\n  'user-invalid',\n  'in-range',\n  'out-of-range',\n  'read-write',\n  'placeholder-shown',\n  'autofill',\n  '-webkit-autofill',\n  'playing',\n  'paused',\n  'fullscreen',\n  'modal',\n  'popover-open',\n  'open',\n  'closed',\n])\n\n/**\n * Functional pseudo-classes of shadow trees and custom elements, which never\n * match. Browsers accept them, so rules with them aren't dropped.\n */\nconst NEVER_MATCHING_FUNCTIONS = new Set(['host', 'host-context', 'state'])\n\n/** How the declarations of stylesheets are validated. */\nexport interface Validation {\n  /** The error of a declaration, if its value is invalid or unsupported. */\n  getError: (name: string, value: string) => Promise<Error | undefined>\n  /** Reports the errors of declarations that are dropped. */\n  onError?: (error: Error) => void\n}\n\n/**\n * Applies the stylesheets in the tree, which has no components, see\n * `resolveComponents()`. Without stylesheets, the tree is returned as is.\n */\nexport async function applyStyleSheets(\n  root: ReactNode,\n  engine: LayoutEngine,\n  viewport: Viewport,\n  validation?: Validation,\n  containers?: ContainerQueries\n): Promise<ReactNode> {\n  const sheets: string[] = []\n  collectStyleSheets(root, sheets, viewport)\n  if (!sheets.length) return root\n\n  const parsed: Item[][] = sheets.map((css) => JSON.parse(engine.parseCSS(css)))\n  const state: CompileState = {\n    order: 0,\n    anonymousLayers: 0,\n    layers: new Map(),\n    viewport,\n    properties: new Map(),\n    // Feature queries aren't errors, so they're not reported.\n    supported:\n      validation &&\n      (await checkSupportsDeclarations(parsed, validation.getError)),\n  }\n  const rules: Rule[] = []\n  for (const items of parsed) compileRules(items, null, [], rules, state)\n  rankLayers(rules, state.layers)\n  const initial = getInitialValues(state.properties)\n  if (!rules.length && !initial) return root\n\n  const roots: Node[] = []\n  buildNodes(root, null, roots)\n  // Rules are matched first, so that only the declarations that apply are\n  // validated.\n  const nodes: Node[] = []\n  const sizes = containers?.sizes\n  let containerCount = 0\n  const visit = (node: Node) => {\n    node.matched = { '': matchRules(node, rules, sizes) }\n    // Containers are known before their descendants are matched, and before\n    // their own pseudo-elements, which can query them.\n    if ((state.containerRules || state.containerUnits) && !node.svg) {\n      node.container = getContainer(node, containerCount)\n      if (node.container) containerCount++\n    }\n    if (!node.svg && !NO_GENERATED_CONTENT.has(node.type)) {\n      node.matched.before = matchRules(node, rules, sizes, 'before')\n      node.matched.after = matchRules(node, rules, sizes, 'after')\n    }\n    if (node.type === 'input' && !node.svg) {\n      node.matched.placeholder = matchRules(node, rules, sizes, 'placeholder')\n    }\n    nodes.push(node)\n    node.children.forEach(visit)\n  }\n  roots.forEach(visit)\n  if (containers) containers.queried = containerCount > 0\n  const invalid = validation\n    ? await findInvalidDeclarations(nodes, validation)\n    : new Set<Declaration>()\n\n  const children = rebuild(root, roots, {\n    invalid,\n    initial,\n    units: state.containerUnits ? { sizes, viewport } : undefined,\n  })\n  return isFragment(root)\n    ? {\n        ...(root as ReactElement),\n        props: { ...(root as ReactElement).props, children },\n      }\n    : children[0] ?? root\n}\n\nfunction isFragment(node: ReactNode) {\n  return (\n    isReactElement(node) &&\n    (node as ReactElement).type === (Symbol.for('react.fragment') as any)\n  )\n}\n\nfunction textContent(children: ReactNode) {\n  return normalizeChildren(children)\n    .filter((child) => typeof child === 'string')\n    .join('')\n}\n\n/**\n * Collects the text of `<style>` elements in tree order. Stylesheets inside\n * `<svg>` are drawn with it.\n */\nfunction collectStyleSheets(\n  node: ReactNode,\n  sheets: string[],\n  viewport: Viewport\n) {\n  for (const child of normalizeChildren(node)) {\n    if (!isReactElement(child) || typeof child.type !== 'string') continue\n    const props = child.props || {}\n    if (child.type === 'style') {\n      if (props.media === undefined || matchesMedia(props.media, viewport)) {\n        sheets.push(textContent(props.children))\n      }\n    } else if (child.type !== 'svg') {\n      collectStyleSheets(props.children, sheets, viewport)\n    }\n  }\n}\n\ninterface CompileState {\n  order: number\n  anonymousLayers: number\n  /** The layers in the order they're declared, by name. */\n  layers: Map<string, number>\n  viewport: Viewport\n  /** Whether the declarations of `@supports` are supported. */\n  supported?: Map<string, boolean>\n  /** Whether there are rules in `@container`. */\n  containerRules?: boolean\n  /** Whether declarations have container units, e.g. `cqw`. */\n  containerUnits?: boolean\n  /** The custom properties registered with `@property`, by name. */\n  properties: Map<string, RegisteredProperty>\n}\n\n/**\n * Compiles parsed rules into a flat list. In style rules, declarations after\n * nested rules come after them, with the same selectors.\n */\nfunction compileRules(\n  items: Item[],\n  parent: Selector[] | null,\n  layer: string[],\n  rules: Rule[],\n  state: CompileState,\n  containers: ContainerCondition[] = []\n) {\n  let declarations: Declaration[] = []\n  const flush = () => {\n    if (declarations.length && parent) {\n      rules.push({\n        selectors: parent,\n        declarations,\n        order: state.order++,\n        layer,\n        rank: 0,\n        containers: containers.length ? containers : undefined,\n      })\n    }\n    declarations = []\n  }\n\n  for (const item of items) {\n    if (Array.isArray(item)) {\n      declarations.push(item)\n      if (typeof item[1] === 'string' && CONTAINER_UNIT.test(item[1])) {\n        state.containerUnits = true\n      }\n      continue\n    }\n    flush()\n    if (item.s) {\n      // Like in browsers, a selector list with an invalid selector is invalid.\n      const selectors = item.s.map((selector) =>\n        compileSelector(selector, parent)\n      )\n      if (selectors.every(Boolean)) {\n        compileRules(item.b, selectors, layer, rules, state, containers)\n      }\n    } else if (item.m !== undefined) {\n      if (matchesMedia(item.m, state.viewport)) {\n        compileRules(item.b, parent, layer, rules, state, containers)\n      }\n    } else if (item.u !== undefined) {\n      if (matchesSupports(item.u, state.supported)) {\n        compileRules(item.b, parent, layer, rules, state, containers)\n      }\n    } else if (item.c !== undefined) {\n      state.containerRules = true\n      compileRules(item.b, parent, layer, rules, state, [\n        ...containers,\n        parseContainerPrelude(item.c),\n      ])\n    } else if (item.p !== undefined) {\n      registerProperty(item.p, item.b ?? [], state.properties)\n    } else if (item.l) {\n      if (!item.b) {\n        for (const name of item.l) {\n          declareLayer([...layer, ...name.split('.')], state)\n        }\n        continue\n      }\n      const name = item.l[0]?.split('.') ?? [`\\0${state.anonymousLayers++}`]\n      const nested = [...layer, ...name]\n      declareLayer(nested, state)\n      compileRules(item.b, parent, nested, rules, state, containers)\n    }\n  }\n  flush()\n}\n\n/**\n * Registers a custom property of `@property`, if its descriptors are valid.\n * Like in browsers, the last valid rule for a property wins.\n */\nfunction registerProperty(\n  name: string,\n  descriptors: Item[],\n  properties: Map<string, RegisteredProperty>\n) {\n  const values = new Map<string, string>()\n  for (const item of descriptors) {\n    if (Array.isArray(item)) {\n      values.set(item[0].toLowerCase(), String(item[1]).trim())\n    }\n  }\n  const syntax = values.get('syntax')\n  const inherits = values.get('inherits')?.toLowerCase()\n  const initial = values.get('initial-value')\n  if (syntax === undefined || (inherits !== 'true' && inherits !== 'false')) {\n    return\n  }\n  // Only the universal syntax `\"*\"` doesn't need an initial value.\n  if (initial === undefined && !/^(['\"])\\s*\\*\\s*\\1$/.test(syntax)) return\n  properties.set(name, { inherits: inherits === 'true', initial })\n}\n\n/** The initial values of registered custom properties, if any. */\nfunction getInitialValues(\n  properties: Map<string, RegisteredProperty>\n): InitialValues | undefined {\n  const all: InitialValues['all'] = []\n  const notInherited: InitialValues['notInherited'] = []\n  for (const [name, { inherits, initial }] of properties) {\n    if (initial !== undefined) all.push([name, initial])\n    // Without an initial value, a property that isn't inherited has the\n    // guaranteed-invalid value, `initial`, unless it's declared.\n    if (!inherits) notInherited.push([name, initial ?? 'initial'])\n  }\n  return all.length || notInherited.length ? { all, notInherited } : undefined\n}\n\nfunction declareLayer(layer: string[], state: CompileState) {\n  for (let i = 1; i <= layer.length; i++) {\n    const name = layer.slice(0, i).join('.')\n    if (!state.layers.has(name)) state.layers.set(name, state.layers.size)\n  }\n}\n\n/**\n * Ranks the layers of rules. Layers are ordered by when they're first\n * declared, the rules of a layer come after its sublayers, and rules without\n * a layer come last.\n */\nfunction rankLayers(rules: Rule[], layers: Map<string, number>) {\n  const key = (layer: string[]) => [\n    ...layer.map((_, i) => layers.get(layer.slice(0, i + 1).join('.'))),\n    Infinity,\n  ]\n  const compare = (a: number[], b: number[]) => {\n    for (let i = 0; i < Math.min(a.length, b.length); i++) {\n      if (a[i] !== b[i]) return a[i] - b[i]\n    }\n    return 0\n  }\n  const keys = new Map<string, number[]>()\n  for (const rule of rules) keys.set(rule.layer.join('.'), key(rule.layer))\n  const ranked = [...keys.entries()].sort((a, b) => compare(a[1], b[1]))\n  const ranks = new Map(ranked.map(([name], index) => [name, index]))\n  for (const rule of rules) rule.rank = ranks.get(rule.layer.join('.'))\n}\n\nfunction hasNesting(value: unknown): boolean {\n  if (!Array.isArray(value)) return false\n  if (value.length === 1 && value[0] === '&') return true\n  return value.some(hasNesting)\n}\n\n/**\n * Compiles a selector. In nested rules, selectors without `&` are relative to\n * the parent rule, and `&` matches what the parent rule matches, like\n * `:is()`.\n */\nfunction compileSelector(\n  raw: RawComplex,\n  parent: Selector[] | null\n): Selector | null {\n  let parts = raw\n  if (parent && !hasNesting(raw)) {\n    parts =\n      typeof raw[0] === 'string' ? [[['&']], ...raw] : [[['&']], ' ', ...raw]\n  }\n  return compileParts(parts, parent, true)\n}\n\n/** Compiles a relative selector of `:has()`, anchored at its element. */\nfunction compileRelativeSelector(\n  raw: RawComplex,\n  parent: Selector[] | null\n): Selector | null {\n  return compileParts(\n    typeof raw[0] === 'string' ? [[['@']], ...raw] : [[['@']], ' ', ...raw],\n    parent\n  )\n}\n\n/**\n * Compiles the parts of a selector. A pseudo-element can only end the\n * selector of a rule, and the rest matches its originating element.\n */\nfunction compileParts(\n  raw: RawComplex,\n  parent: Selector[] | null,\n  allowPseudo = false\n): Selector | null {\n  const parts: Selector['parts'] = []\n  let specificity = 0\n  let pseudo: string | undefined\n  for (let i = 0; i < raw.length; i++) {\n    const part = raw[i]\n    if (typeof part === 'string') {\n      parts.push(part)\n      continue\n    }\n    const compound: Compound = []\n    for (let j = 0; j < part.length; j++) {\n      if (part[j][0] === '::') {\n        const last = i === raw.length - 1 && j === part.length - 1\n        if (!allowPseudo || !last) return null\n        pseudo = part[j][1]\n        specificity += TYPE\n        continue\n      }\n      const simple = compileSimple(part[j], parent)\n      if (!simple) return null\n      compound.push(simple)\n      specificity += simpleSpecificity(simple)\n    }\n    parts.push(compound)\n  }\n  return { parts, specificity, pseudo }\n}\n\nfunction compileList(\n  raw: RawComplex[],\n  parent: Selector[] | null,\n  forgiving: boolean,\n  relative = false\n): Selector[] | null {\n  const selectors: Selector[] = []\n  for (const selector of raw) {\n    const compiled = relative\n      ? compileRelativeSelector(selector, parent)\n      : compileParts(selector, parent)\n    if (compiled) selectors.push(compiled)\n    else if (!forgiving) return null\n  }\n  return selectors\n}\n\nfunction compileSimple(\n  simple: RawSimple,\n  parent: Selector[] | null\n): Simple | null {\n  switch (simple[0]) {\n    case 't':\n      return ['t', simple[1].toLowerCase()]\n    case '[':\n      return ['[', simple[1].toLowerCase(), ...simple.slice(2)]\n    case '&':\n      return ['&', parent]\n    case ':': {\n      const name = simple[1]\n      if (LOGICAL_PSEUDO_CLASSES.has(name)) {\n        const forgiving = name === 'is' || name === 'where'\n        const list = compileList(simple[2], parent, forgiving, name === 'has')\n        return list && [':', name, list]\n      }\n      if (name.startsWith('nth-')) {\n        const of = simple[4] && compileList(simple[4], parent, false)\n        if (simple[4] && !of) return null\n        return [':', name, simple[2], simple[3], of]\n      }\n      if (name === 'lang') return simple\n      if (NEVER_MATCHING_FUNCTIONS.has(name)) return [':', name]\n      // Other functional pseudo-classes aren't supported.\n      return simple.length === 2 && PSEUDO_CLASSES.has(name) ? simple : null\n    }\n    default:\n      return simple\n  }\n}\n\nfunction maxSpecificity(selectors: Selector[] | null) {\n  let max = 0\n  for (const selector of selectors || []) {\n    max = Math.max(max, selector.specificity)\n  }\n  return max\n}\n\nfunction simpleSpecificity(simple: Simple): number {\n  switch (simple[0]) {\n    case '#':\n      return ID\n    case '.':\n    case '[':\n      return CLASS\n    case 't':\n      return TYPE\n    case '&':\n      // `&` without a parent rule is `:scope`.\n      return simple[1] ? maxSpecificity(simple[1]) : CLASS\n    case ':':\n      switch (simple[1]) {\n        case 'where':\n          return 0\n        case 'is':\n        case 'not':\n        case 'has':\n          return maxSpecificity(simple[2])\n        default:\n          return simple[1].startsWith('nth-')\n            ? CLASS + maxSpecificity(simple[4])\n            : CLASS\n      }\n    default:\n      return 0\n  }\n}\n\nfunction buildNodes(\n  children: ReactNode,\n  parent: Node | null,\n  siblings: Node[],\n  lang?: string\n) {\n  for (const child of normalizeChildren(children)) {\n    if (typeof child === 'string') {\n      if (parent) parent.text = true\n      continue\n    }\n    if (!isReactElement(child) || typeof child.type !== 'string') continue\n    const props = child.props || {}\n    const className = props.className ?? props.class\n    const node: Node = {\n      type: child.type.toLowerCase(),\n      props,\n      parent,\n      siblings,\n      index: siblings.length,\n      children: [],\n      text: false,\n      classes:\n        typeof className === 'string'\n          ? className.split(/\\s+/).filter(Boolean)\n          : [],\n      lang: props.lang ?? lang,\n      svg: !!parent && (parent.svg || parent.type === 'svg'),\n    }\n    siblings.push(node)\n    buildNodes(props.children, node, node.children, node.lang)\n  }\n}\n\n/**\n * Rebuilds the children with the styles of the stylesheets, and the\n * `::before` and `::after` pseudo-elements.\n */\nfunction rebuild(children: ReactNode, nodes: Node[], context: RebuildContext) {\n  let index = 0\n  return normalizeChildren(children).map((child) => {\n    if (!isReactElement(child) || typeof child.type !== 'string') return child\n    const node = nodes[index++]\n    const props: Record<string, any> = { ...child.props }\n    const style = cascade(node, context)\n    if (style) props.style = style\n    if (node.matched.placeholder?.length) {\n      props[PLACEHOLDER_PROP] = cascade(node, context, 'placeholder')\n    }\n    if (node.container) props[CONTAINER_PROP] = node.container.index\n    let content: ReactNode[] | undefined =\n      props.children === undefined\n        ? undefined\n        : rebuild(props.children, node.children, context)\n    if (node.matched.before) {\n      const before = generateContent(node, context, 'before')\n      const after = generateContent(node, context, 'after')\n      if (before || after) {\n        content = [before, ...(content ?? []), after].filter(Boolean)\n      }\n    }\n    if (content !== undefined) props.children = content\n    return { ...child, props }\n  })\n}\n\n/** Elements without `::before` and `::after`, e.g. replaced elements. */\nconst NO_GENERATED_CONTENT = new Set([\n  'img',\n  'svg',\n  'canvas',\n  'video',\n  'audio',\n  'iframe',\n  'object',\n  'embed',\n  'input',\n  'textarea',\n  'select',\n  'br',\n  'wbr',\n])\n\nconst QUOTES: Record<string, string> = {\n  'open-quote': '\\u201c',\n  'close-quote': '\\u201d',\n  'no-open-quote': '',\n  'no-close-quote': '',\n}\n\nconst element = (type: string, props: Record<string, unknown>) =>\n  ({ type, key: null, props } as unknown as ReactElement)\n\n/**\n * The `::before` or `::after` pseudo-element of an element, unless its\n * `content` is `none` or `normal`. It's a child that selectors don't match.\n * Counters in its content are resolved in layout, at its position in the\n * tree, see `layout()`.\n */\nfunction generateContent(\n  node: Node,\n  context: RebuildContext,\n  pseudo: 'before' | 'after'\n) {\n  const style = cascade(node, context, pseudo)\n  const content = style?.content\n  if (!Array.isArray(content)) return\n  delete style.content\n  const children = (content as ContentPart[]).map((part) => {\n    if (typeof part === 'string') return part\n    switch (part[0]) {\n      case 'attr':\n        return getAttribute(node, part[1].toLowerCase()) ?? part[2] ?? ''\n      case 'quote':\n        return QUOTES[part[1]]\n      case 'url':\n        return element('img', { src: part[1], __naturalSize: true })\n      case 'counter':\n        return element('::counter', {\n          name: part[1],\n          separator: part[2],\n          counterStyle: part[3],\n        })\n    }\n    return ''\n  })\n  return element('::' + pseudo, { style, children })\n}\n\n/** Converts a property name to the camel case of inline styles. */\nfunction toPropertyName(name: string) {\n  if (name.startsWith('--')) return name\n  // `-webkit-line-clamp` is `WebkitLineClamp`, but `-ms-` is `ms`.\n  const vendor = name.startsWith('-') && !name.startsWith('-ms-')\n  const camel = name\n    .replace(/^-/, '')\n    .replace(/-([a-z])/g, (_, c: string) => c.toUpperCase())\n  return vendor ? camel[0].toUpperCase() + camel.slice(1) : camel\n}\n\ninterface Match {\n  declaration: Declaration\n  rule: Rule\n  specificity: number\n}\n\n/**\n * The rules that match an element, or its `pseudo` element. The containers of\n * its ancestors are known, and its own one for its pseudo-elements.\n */\nfunction matchRules(\n  node: Node,\n  rules: Rule[],\n  sizes: Map<number, ContainerSize> | undefined,\n  pseudo?: string\n) {\n  const matched: MatchedRule[] = []\n  for (const rule of rules) {\n    if (\n      rule.containers &&\n      !rule.containers.every((condition) =>\n        matchesContainer(condition, pseudo ? node : node.parent, sizes)\n      )\n    ) {\n      continue\n    }\n    let specificity = -1\n    for (const selector of rule.selectors) {\n      if (\n        selector.pseudo === pseudo &&\n        selector.specificity > specificity &&\n        matches(selector, node)\n      ) {\n        specificity = selector.specificity\n      }\n    }\n    if (specificity >= 0) matched.push({ rule, specificity })\n  }\n  return matched\n}\n\nconst CSS_WIDE_KEYWORDS = /^(inherit|initial|unset|revert|revert-layer)$/i\n\n/**\n * The declarations of matching rules with invalid or unsupported values,\n * which are dropped like in browsers, so that earlier declarations apply\n * instead, and their errors are reported once each, in source order. Like in\n * browsers, values with `var()` or `env()` are valid until they're computed.\n */\nasync function findInvalidDeclarations(\n  nodes: Node[],\n  { getError, onError }: Validation\n) {\n  const byKey = new Map<string, Declaration[]>()\n  for (const node of nodes) {\n    for (const matched of Object.values(node.matched)) {\n      for (const { rule } of matched) {\n        for (const declaration of rule.declarations) {\n          const [name, value] = declaration\n          if (\n            typeof value !== 'string' ||\n            name.startsWith('--') ||\n            CSS_WIDE_KEYWORDS.test(value) ||\n            /var\\(|env\\(/i.test(value)\n          ) {\n            continue\n          }\n          const key = name + ':' + value\n          const declarations = byKey.get(key)\n          if (declarations) declarations.push(declaration)\n          else byKey.set(key, [declaration])\n        }\n      }\n    }\n  }\n  const groups = [...byKey.values()]\n  const errors = await Promise.all(\n    groups.map(async ([[name, value]]) => {\n      // Container units are resolved in the cascade, so they're checked as\n      // lengths.\n      const original = value as string\n      const checked = CONTAINER_UNIT.test(original)\n        ? replaceContainerUnits(original, () => '0px')\n        : original\n      const error = await getError(toPropertyName(name), checked)\n      return error && checked !== original\n        ? new Error(error.message.split(checked).join(original))\n        : error\n    })\n  )\n  const invalid = new Set<Declaration>()\n  groups.forEach((declarations, index) => {\n    const error = errors[index]\n    if (!error) return\n    for (const declaration of declarations) invalid.add(declaration)\n    onError?.(error)\n  })\n  return invalid\n}\n\n/**\n * The style of an element, or of its `pseudo` element, with the matching\n * declarations, in cascade order: normal declarations by layer, specificity\n * and order, then the inline style, then important declarations, where\n * earlier layers win. Then the `initial` values of registered properties it\n * needs, see `initialValuesFor()`.\n */\nfunction cascade(\n  node: Node,\n  { invalid, initial, units }: RebuildContext,\n  pseudo?: 'before' | 'after' | 'placeholder'\n) {\n  const normal: Match[] = []\n  const important: Match[] = []\n  for (const { rule, specificity } of node.matched[pseudo ?? '']) {\n    for (const declaration of rule.declarations) {\n      // `content` only applies to pseudo-elements.\n      if (!pseudo && declaration[0] === 'content') continue\n      if (invalid.has(declaration)) continue\n      ;(declaration[2] ? important : normal).push({\n        declaration,\n        rule,\n        specificity,\n      })\n    }\n  }\n  const values = initial\n    ? initialValuesFor(pseudo ? node : node.parent, initial)\n    : []\n  if (!normal.length && !important.length && !values.length) {\n    if (!pseudo) node.custom = getCustomProperties(node.props.style)\n    return\n  }\n\n  // Sorting is stable, so declarations of a rule stay in order.\n  normal.sort(\n    (a, b) =>\n      a.rule.rank - b.rule.rank ||\n      a.specificity - b.specificity ||\n      a.rule.order - b.rule.order\n  )\n  important.sort(\n    (a, b) =>\n      b.rule.rank - a.rule.rank ||\n      a.specificity - b.specificity ||\n      a.rule.order - b.rule.order\n  )\n\n  // Later properties override earlier ones in order, including shorthands\n  // and their longhands, so overridden ones are moved to the end.\n  const style: Record<string, unknown> = {}\n  const set = (name: string, value: unknown) => {\n    delete style[name]\n    style[name] = value\n  }\n  for (const { declaration } of normal) {\n    set(toPropertyName(declaration[0]), declaration[1])\n  }\n  if (!pseudo) {\n    for (const [name, value] of Object.entries(node.props.style ?? {})) {\n      set(name, value)\n    }\n  }\n  for (const { declaration } of important) {\n    set(toPropertyName(declaration[0]), declaration[1])\n  }\n  if (!pseudo) node.custom = getCustomProperties(style)\n  for (const [name, value] of values) {\n    if (!(name in style)) style[name] = value\n  }\n  if (units) resolveContainerUnits(style, pseudo ? node : node.parent, units)\n  return style\n}\n\n/** A quick check for container units, see `replaceContainerUnits()`. */\nconst CONTAINER_UNIT = /\\d(cqw|cqh|cqi|cqb|cqmin|cqmax)\\b/i\nconst CONTAINER_UNITS = new Set(['cqw', 'cqh', 'cqi', 'cqb', 'cqmin', 'cqmax'])\n\nconst isDigit = (char: string | undefined) =>\n  char !== undefined && char >= '0' && char <= '9'\nconst isNameStart = (char: string | undefined) =>\n  char !== undefined &&\n  ((char >= 'a' && char <= 'z') ||\n    (char >= 'A' && char <= 'Z') ||\n    char === '_' ||\n    char >= '\\u0080')\nconst isName = (char: string | undefined) =>\n  isNameStart(char) || isDigit(char) || char === '-'\n\n/**\n * Replaces the container units in a value, e.g. `1.5cqw`, with the result of\n * `replace`. Like a CSS tokenizer, it skips strings and identifiers, and it\n * reads each character once, as values come from stylesheets: a regular\n * expression could backtrack for a long time on long numbers.\n */\nfunction replaceContainerUnits(\n  value: string,\n  replace: (amount: number, unit: string) => string\n) {\n  let result = ''\n  let i = 0\n  while (i < value.length) {\n    const char = value[i]\n    let end = i + 1\n    if (char === '\"' || char === \"'\") {\n      while (end < value.length && value[end] !== char) {\n        end += value[end] === '\\\\' ? 2 : 1\n      }\n      end = Math.min(end + 1, value.length)\n    } else if (\n      isNameStart(char) ||\n      (char === '-' && (isNameStart(value[i + 1]) || value[i + 1] === '-'))\n    ) {\n      while (isName(value[end])) end++\n    } else {\n      // A number, with a sign, a fraction and an exponent, then its unit.\n      let j = char === '+' || char === '-' ? i + 1 : i\n      if (isDigit(value[j]) || (value[j] === '.' && isDigit(value[j + 1]))) {\n        while (isDigit(value[j])) j++\n        if (value[j] === '.' && isDigit(value[j + 1])) {\n          j++\n          while (isDigit(value[j])) j++\n        }\n        const sign = value[j + 1] === '+' || value[j + 1] === '-' ? 1 : 0\n        if (\n          (value[j] === 'e' || value[j] === 'E') &&\n          isDigit(value[j + 1 + sign])\n        ) {\n          j += 1 + sign\n          while (isDigit(value[j])) j++\n        }\n        end = j\n        while (isName(value[end])) end++\n        const unit = value.slice(j, end).toLowerCase()\n        if (CONTAINER_UNITS.has(unit)) {\n          result += replace(parseFloat(value.slice(i, j)), unit)\n          i = end\n          continue\n        }\n      }\n    }\n    result += value.slice(i, end)\n    i = end\n  }\n  return result\n}\n\n/**\n * Resolves container units to px, with the size of the nearest query\n * container that `start` is in or is, whose type allows the axis. Without\n * one, or before the layout, they're of the viewport, like in browsers.\n * Custom properties are resolved where they're used, so they're kept.\n */\nfunction resolveContainerUnits(\n  style: Record<string, unknown>,\n  start: Node | null,\n  { sizes, viewport }: NonNullable<RebuildContext['units']>\n) {\n  const size = (block: boolean) => {\n    for (let node = start; node; node = node.parent) {\n      const container = node.container\n      if (!container || (block && container.type !== 'size')) continue\n      const containerSize = sizes?.get(container.index)\n      if (containerSize)\n        return block ? containerSize.height : containerSize.width\n      break\n    }\n    return (block ? viewport.height : viewport.width) ?? 0\n  }\n  for (const [name, value] of Object.entries(style)) {\n    if (\n      name.startsWith('--') ||\n      typeof value !== 'string' ||\n      !CONTAINER_UNIT.test(value)\n    ) {\n      continue\n    }\n    style[name] = replaceContainerUnits(value, (amount, unit) => {\n      const inline = size(false)\n      const block = size(true)\n      const base = {\n        cqw: inline,\n        cqi: inline,\n        cqh: block,\n        cqb: block,\n        cqmin: Math.min(inline, block),\n        cqmax: Math.max(inline, block),\n      }[unit]\n      return `${(amount * base) / 100}px`\n    })\n  }\n}\n\nfunction getCustomProperties(style: Record<string, unknown> | undefined) {\n  if (!style) return\n  const names = Object.keys(style).filter((name) => name.startsWith('--'))\n  return names.length ? new Set(names) : undefined\n}\n\n/**\n * The initial values of registered custom properties that an element needs,\n * the child of `parent`. Custom properties are inherited in the layout, so\n * the root needs all of them. Other elements only need the ones that aren't\n * inherited, if their parent declares another value, like in browsers.\n */\nfunction initialValuesFor(parent: Node | null, initial: InitialValues) {\n  if (!parent) return initial.all\n  const custom = parent.custom\n  if (!custom) return []\n  return initial.notInherited.filter(([name]) => custom.has(name))\n}\n\n/** Matches selectors from right to left. */\nfunction matches(selector: Selector, node: Node, anchor?: Node): boolean {\n  return matchesFrom(selector.parts, selector.parts.length - 1, node, anchor)\n}\n\nfunction matchesFrom(\n  parts: Selector['parts'],\n  index: number,\n  node: Node,\n  anchor: Node | undefined\n): boolean {\n  if (!matchesCompound(parts[index] as Compound, node, anchor)) return false\n  if (index === 0) return true\n  const next = (other: Node) => matchesFrom(parts, index - 2, other, anchor)\n  switch (parts[index - 1]) {\n    case '>':\n      return !!node.parent && next(node.parent)\n    case ' ':\n      for (let other = node.parent; other; other = other.parent) {\n        if (next(other)) return true\n      }\n      return false\n    case '+':\n      return node.index > 0 && next(node.siblings[node.index - 1])\n    case '~':\n      for (let i = node.index - 1; i >= 0; i--) {\n        if (next(node.siblings[i])) return true\n      }\n      return false\n  }\n  return false\n}\n\nfunction matchesCompound(\n  compound: Compound,\n  node: Node,\n  anchor: Node | undefined\n) {\n  for (const simple of compound) {\n    switch (simple[0]) {\n      case 't':\n        if (node.type !== simple[1]) return false\n        break\n      case '#':\n        if (node.props.id == null || String(node.props.id) !== simple[1]) {\n          return false\n        }\n        break\n      case '.':\n        if (!node.classes.includes(simple[1])) return false\n        break\n      case '[':\n        if (!matchesAttribute(node, simple)) return false\n        break\n      case '&':\n        // It doesn't represent pseudo-elements of the parent rule.\n        if (\n          simple[1]\n            ? !simple[1].some(\n                (selector: Selector) =>\n                  !selector.pseudo && matches(selector, node)\n              )\n            : node.parent\n        ) {\n          return false\n        }\n        break\n      case '@':\n        if (node !== anchor) return false\n        break\n      case ':':\n        if (!matchesPseudoClass(simple, node)) return false\n        break\n    }\n  }\n  return true\n}\n\n/** The value of an attribute from the props of an element. */\nfunction getAttribute(node: Node, name: string): string | undefined {\n  const { props } = node\n  let value: unknown\n  if (name === 'class') value = props.className ?? props.class\n  else if (name === 'for') value = props.htmlFor ?? props.for\n  else {\n    for (const key in props) {\n      if (key !== 'children' && key.toLowerCase() === name) {\n        value = props[key]\n        break\n      }\n    }\n  }\n  if (value == null || value === false) return\n  if (value === true) return ''\n  if (typeof value === 'object') return name === 'style' ? '' : undefined\n  return String(value)\n}\n\nfunction matchesAttribute(node: Node, [, name, operator, value, flag]: Simple) {\n  let actual = getAttribute(node, name)\n  if (actual === undefined) return false\n  if (!operator) return true\n  let expected: string = value\n  if (flag === 'i') {\n    actual = actual.toLowerCase()\n    expected = expected.toLowerCase()\n  }\n  switch (operator) {\n    case '=':\n      return actual === expected\n    case '~=':\n      return (\n        !!expected &&\n        !/\\s/.test(expected) &&\n        actual.split(/\\s+/).includes(expected)\n      )\n    case '|=':\n      return actual === expected || actual.startsWith(expected + '-')\n    case '^=':\n      return !!expected && actual.startsWith(expected)\n    case '$=':\n      return !!expected && actual.endsWith(expected)\n    case '*=':\n      return !!expected && actual.includes(expected)\n  }\n  return false\n}\n\n/** The position of an element among its siblings that pass `filter`. */\nfunction position(node: Node, fromEnd: boolean, filter: (n: Node) => boolean) {\n  let count = 0\n  const { siblings, index } = node\n  if (fromEnd) {\n    for (let i = siblings.length - 1; i >= index; i--) {\n      if (filter(siblings[i])) count++\n    }\n  } else {\n    for (let i = 0; i <= index; i++) if (filter(siblings[i])) count++\n  }\n  return count\n}\n\nfunction matchesNth(a: number, b: number, index: number) {\n  if (a === 0) return index === b\n  const n = (index - b) / a\n  return Number.isInteger(n) && n >= 0\n}\n\nfunction matchesPseudoClass(simple: Simple, node: Node): boolean {\n  const name: string = simple[1]\n  const sameType = (other: Node) => other.type === node.type\n  switch (name) {\n    case 'root':\n    case 'scope':\n      return !node.parent\n    case 'empty':\n      return !node.children.length && !node.text\n    case 'first-child':\n      return node.index === 0\n    case 'last-child':\n      return node.index === node.siblings.length - 1\n    case 'only-child':\n      return node.siblings.length === 1\n    case 'first-of-type':\n      return position(node, false, sameType) === 1\n    case 'last-of-type':\n      return position(node, true, sameType) === 1\n    case 'only-of-type':\n      return (\n        position(node, false, sameType) === 1 &&\n        position(node, true, sameType) === 1\n      )\n    case 'nth-child':\n    case 'nth-last-child':\n    case 'nth-of-type':\n    case 'nth-last-of-type': {\n      const [, , a, b, of] = simple as [string, string, number, number, any]\n      const filter = name.endsWith('of-type')\n        ? sameType\n        : of\n        ? (other: Node) =>\n            of.some((selector: Selector) => matches(selector, other))\n        : () => true\n      if (!filter(node)) return false\n      return matchesNth(\n        a,\n        b,\n        position(node, name.startsWith('nth-last'), filter)\n      )\n    }\n    case 'not':\n      return !simple[2].some((selector: Selector) => matches(selector, node))\n    case 'is':\n    case 'where':\n      return simple[2].some((selector: Selector) => matches(selector, node))\n    case 'has':\n      return simple[2].some((selector: Selector) => matchesHas(selector, node))\n    case 'link':\n    case 'any-link':\n    case '-webkit-any-link':\n      return (\n        (node.type === 'a' || node.type === 'area') && node.props.href != null\n      )\n    case 'lang':\n      return simple[2].some((range: string) => matchesLang(node.lang, range))\n    case 'defined':\n    case 'read-only':\n      return true\n    default:\n      return false\n  }\n}\n\n/** Matches a relative selector of `:has()`, anchored at the element. */\nfunction matchesHas(selector: Selector, node: Node) {\n  const candidates: Node[] = []\n  const addDescendants = (parent: Node) => {\n    for (const child of parent.children) {\n      candidates.push(child)\n      addDescendants(child)\n    }\n  }\n  const combinator = selector.parts[1]\n  if (combinator === ' ' || combinator === '>') {\n    addDescendants(node)\n  } else {\n    for (let i = node.index + 1; i < node.siblings.length; i++) {\n      candidates.push(node.siblings[i])\n      addDescendants(node.siblings[i])\n    }\n  }\n  return candidates.some((candidate) => matches(selector, candidate, node))\n}\n\nfunction matchesLang(lang: string | undefined, range: string) {\n  if (lang === undefined) return false\n  if (range === '*') return true\n  const value = lang.toLowerCase()\n  const expected = range.toLowerCase()\n  return value === expected || value.startsWith(expected + '-')\n}\n\n/** Splits text at a separator outside of parentheses. */\nfunction splitTopLevel(text: string, separator: string) {\n  const parts: string[] = []\n  let depth = 0\n  let start = 0\n  for (let i = 0; i < text.length; i++) {\n    const c = text[i]\n    if (c === '(') depth++\n    else if (c === ')') depth--\n    else if (c === separator && depth === 0) {\n      parts.push(text.slice(start, i))\n      start = i + 1\n    }\n  }\n  parts.push(text.slice(start))\n  return parts\n}\n\n/**\n * Splits a condition into the parenthesized groups or functions and the\n * keywords between them, or returns `null` if it's invalid.\n */\nfunction splitCondition(text: string) {\n  const groups: string[] = []\n  const keywords: string[] = []\n  let i = 0\n  while (i < text.length) {\n    if (/\\s/.test(text[i])) {\n      i++\n      continue\n    }\n    const word = /^[a-z-]+/i.exec(text.slice(i))?.[0] ?? ''\n    if (text[i + word.length] === '(') {\n      // A group, or a function like `selector()`.\n      let depth = 0\n      let end = i + word.length\n      for (; end < text.length; end++) {\n        if (text[end] === '(') depth++\n        else if (text[end] === ')' && --depth === 0) break\n      }\n      if (depth) return null\n      groups.push(text.slice(i, end + 1))\n      i = end + 1\n    } else if (word) {\n      keywords.push(word.toLowerCase())\n      i += word.length\n    } else {\n      return null\n    }\n  }\n  return { groups, keywords }\n}\n\n/**\n * Evaluates a condition of `@media` or `@supports`, with `not`, `and` and\n * `or`, where `group` evaluates groups in parentheses.\n */\nfunction matchesCondition(\n  text: string,\n  group: (inner: string) => boolean\n): boolean {\n  const split = splitCondition(text.trim())\n  if (!split || !split.groups.length) return false\n  const { groups, keywords } = split\n  const value = (g: string) =>\n    g.startsWith('(') ? group(g.slice(1, -1).trim()) : group(g)\n  if (keywords.length === 1 && keywords[0] === 'not' && groups.length === 1) {\n    return !value(groups[0])\n  }\n  if (keywords.length !== groups.length - 1) return false\n  if (keywords.every((keyword) => keyword === 'and')) {\n    return groups.every(value)\n  }\n  if (keywords.every((keyword) => keyword === 'or')) {\n    return groups.some(value)\n  }\n  return false\n}\n\n/** Evaluates a media query list, e.g. `screen and (width >= 600px)`. */\nexport function matchesMedia(text: string, viewport: Viewport): boolean {\n  if (!text.trim()) return true\n  return splitTopLevel(text.toLowerCase(), ',').some((query) => {\n    query = query.trim()\n    const typed = /^(?:(not|only)\\s+)?([a-z-]+)(?:\\s+and\\s+([^]*))?$/.exec(\n      query\n    )\n    const features: Features = (name) => mediaFeature(name, viewport)\n    if (typed && !['not', 'only', 'and', 'or'].includes(typed[2])) {\n      const result =\n        (typed[2] === 'all' || typed[2] === 'screen') &&\n        (typed[3] === undefined ||\n          matchesCondition(typed[3], (inner) =>\n            matchesMediaGroup(inner, features)\n          ))\n      return typed[1] === 'not' ? !result : result\n    }\n    return matchesCondition(query, (inner) =>\n      matchesMediaGroup(inner, features)\n    )\n  })\n}\n\n/** The values of the features of media or container queries. */\ntype Features = (name: string) => string | number | undefined\n\nfunction matchesMediaGroup(inner: string, features: Features): boolean {\n  if (inner.startsWith('(') || /^not\\b/.test(inner)) {\n    return matchesCondition(inner, (g) => matchesMediaGroup(g, features))\n  }\n  return matchesMediaFeature(inner, features)\n}\n\n/**\n * The name and condition of a `@container` rule. The name is optional, and so\n * is the condition if there's a name.\n */\nfunction parseContainerPrelude(prelude: string): ContainerCondition {\n  const text = prelude.trim()\n  const named = /^(-?[a-z_][\\w-]*)(?![\\w-(])\\s*([^]*)$/i.exec(text)\n  if (named && !/^(not|and|or|none)$/i.test(named[1])) {\n    return { name: named[1], query: named[2].toLowerCase() }\n  }\n  return { query: text.toLowerCase() }\n}\n\n/**\n * The query container of an element, if it's one: its `container-type`, and\n * its `container-name` for named queries.\n */\nfunction getContainer(node: Node, index: number): Container | undefined {\n  const style = cascade(node, { invalid: new Set() }) ?? {}\n  let type = ''\n  let names = ''\n  // The shorthand and longhands override each other in cascade order.\n  for (const [key, value] of Object.entries(style)) {\n    if (key === 'container') {\n      const [name, containerType = 'normal'] = String(value).split('/')\n      names = name\n      type = containerType\n    } else if (key === 'containerType') {\n      type = String(value)\n    } else if (key === 'containerName') {\n      names = String(value)\n    }\n  }\n  type = type.trim().toLowerCase()\n  if (type !== 'inline-size' && type !== 'size') return\n  return {\n    index,\n    type,\n    names: names\n      .trim()\n      .split(/\\s+/)\n      .filter((name) => name && name !== 'none'),\n  }\n}\n\n/**\n * Evaluates a container condition with the nearest container from `start`\n * that has its name and the size it queries. Heights and ratios are only\n * known for `size` containers.\n */\nfunction matchesContainer(\n  { name, query }: ContainerCondition,\n  start: Node | null,\n  sizes: Map<number, ContainerSize> | undefined\n) {\n  const block = /\\b(height|block-size|aspect-ratio|orientation)\\b/.test(query)\n  for (let node = start; node; node = node.parent) {\n    const container = node.container\n    if (!container) continue\n    if (name && !container.names.includes(name)) continue\n    if (block && container.type !== 'size') continue\n    const size = sizes?.get(container.index)\n    if (!size) return false\n    if (!query) return true\n    const features: Features = (feature) => containerFeature(feature, size)\n    return matchesCondition(query, (inner) =>\n      matchesMediaGroup(inner, features)\n    )\n  }\n  return false\n}\n\n/** The value of a size feature of a container. */\nfunction containerFeature(name: string, { width, height }: ContainerSize) {\n  switch (name) {\n    case 'width':\n    case 'inline-size':\n      return width\n    case 'height':\n    case 'block-size':\n      return height\n    case 'aspect-ratio':\n      return height ? width / height : undefined\n    case 'orientation':\n      return height >= width ? 'portrait' : 'landscape'\n  }\n}\n\n/** The value of a media feature, for a static image. */\nfunction mediaFeature(name: string, { width, height }: Viewport) {\n  switch (name) {\n    case 'width':\n      return width\n    case 'height':\n      return height\n    case 'aspect-ratio':\n      return width && height ? width / height : undefined\n    case 'orientation':\n      return width && height\n        ? height >= width\n          ? 'portrait'\n          : 'landscape'\n        : undefined\n    case 'prefers-color-scheme':\n      return 'light'\n    case 'prefers-reduced-motion':\n    case 'prefers-reduced-transparency':\n    case 'prefers-contrast':\n      return 'no-preference'\n    case 'hover':\n    case 'any-hover':\n    case 'pointer':\n    case 'any-pointer':\n    case 'scripting':\n    case 'update':\n      return 'none'\n    case 'color':\n      return 8\n    case 'monochrome':\n    case 'grid':\n      return 0\n  }\n}\n\nfunction parseMediaValue(text: string): number | undefined {\n  const ratio = /^([\\d.]+)\\s*\\/\\s*([\\d.]+)$/.exec(text)\n  if (ratio) return Number(ratio[1]) / Number(ratio[2])\n  const length = /^(-?[\\d.]+)(px|em|rem)?$/.exec(text)\n  if (!length) return\n  return Number(length[1]) * (length[2] && length[2] !== 'px' ? 16 : 1)\n}\n\nfunction compareMedia(\n  name: string,\n  operator: string,\n  text: string,\n  features: Features\n) {\n  const actual = features(name)\n  if (actual === undefined) return false\n  if (typeof actual === 'string') return operator === '=' && actual === text\n  const expected = parseMediaValue(text)\n  if (expected === undefined) return false\n  switch (operator) {\n    case '=':\n      return actual === expected\n    case '<':\n      return actual < expected\n    case '<=':\n      return actual <= expected\n    case '>':\n      return actual > expected\n    case '>=':\n      return actual >= expected\n  }\n  return false\n}\n\nconst FLIPPED: Record<string, string> = {\n  '<': '>',\n  '<=': '>=',\n  '>': '<',\n  '>=': '<=',\n  '=': '=',\n}\n\nfunction matchesMediaFeature(text: string, features: Features): boolean {\n  const range = text.split(/\\s*(<=|>=|<|>|=)\\s*/)\n  if (range.length === 3) {\n    const [left, operator, right] = range\n    return /^[a-z-]+$/.test(left)\n      ? compareMedia(left, operator, right, features)\n      : compareMedia(right, FLIPPED[operator], left, features)\n  }\n  if (range.length === 5) {\n    const [low, lowOperator, name, highOperator, high] = range\n    return (\n      compareMedia(name, FLIPPED[lowOperator], low, features) &&\n      compareMedia(name, highOperator, high, features)\n    )\n  }\n  if (range.length !== 1) return false\n\n  const colon = text.indexOf(':')\n  if (colon < 0) {\n    // In a boolean context, features match unless they're 0 or none.\n    const value = features(text)\n    return (\n      value !== undefined &&\n      value !== 0 &&\n      value !== 'none' &&\n      value !== 'no-preference'\n    )\n  }\n  const name = text.slice(0, colon).trim()\n  const value = text.slice(colon + 1).trim()\n  const prefix = /^(min|max)-/.exec(name)?.[1]\n  return compareMedia(\n    prefix ? name.slice(4) : name,\n    prefix === 'min' ? '>=' : prefix === 'max' ? '<=' : '=',\n    value,\n    features\n  )\n}\n\n/**\n * Evaluates a condition of `@supports`. Declarations are supported if they're\n * in `supported`, or valid if they aren't, and `selector()` is supported.\n */\nexport function matchesSupports(\n  text: string,\n  supported?: Map<string, boolean>\n): boolean {\n  return matchesCondition(text, function group(inner): boolean {\n    if (/^selector\\(/i.test(inner)) return true\n    if (/^[a-z-]+\\(/i.test(inner)) return false\n    if (inner.startsWith('(') || /^not\\b/i.test(inner)) {\n      return matchesCondition(inner, group)\n    }\n    if (!/^--|^[a-z-]+\\s*:/i.test(inner)) return false\n    return supported?.get(inner) ?? true\n  })\n}\n\n/** Collects the declarations in a condition of `@supports`. */\nfunction collectSupportsDeclarations(text: string, declarations: Set<string>) {\n  for (const group of splitCondition(text.trim())?.groups ?? []) {\n    if (!group.startsWith('(')) continue\n    const inner = group.slice(1, -1).trim()\n    if (inner.startsWith('(') || /^not\\b/i.test(inner)) {\n      collectSupportsDeclarations(inner, declarations)\n    } else if (/^[a-z-]+\\s*:/i.test(inner)) {\n      declarations.add(inner)\n    }\n  }\n}\n\n/**\n * Which declarations of `@supports` conditions are supported, as the\n * declarations of stylesheets are validated.\n */\nasync function checkSupportsDeclarations(\n  sheets: Item[][],\n  getError: Validation['getError']\n) {\n  const declarations = new Set<string>()\n  const visit = (items: Item[]) => {\n    for (const item of items) {\n      if (Array.isArray(item)) continue\n      if (item.u !== undefined)\n        collectSupportsDeclarations(item.u, declarations)\n      if (item.b) visit(item.b)\n    }\n  }\n  sheets.forEach(visit)\n  const supported = new Map<string, boolean>()\n  await Promise.all(\n    [...declarations].map(async (declaration) => {\n      const colon = declaration.indexOf(':')\n      const name = toPropertyName(\n        declaration.slice(0, colon).trim().toLowerCase()\n      )\n      const value = declaration.slice(colon + 1).trim()\n      supported.set(declaration, !(await getError(name, value)))\n    })\n  )\n  return supported\n}\n","/**\n * Support for `position: fixed`. A fixed element is positioned and sized\n * relative to the viewport, unless an ancestor establishes a containing block\n * for it, e.g. with a `transform`:\n * https://drafts.csswg.org/css-position/#fixed-positioning-containing-block\n *\n * The layout engine positions an absolute node relative to its parent, so the\n * node of a fixed element is moved into the node of its containing block.\n */\n\nimport { LayoutNode } from './layout-engine/index.js'\n\nexport interface FixedContainingBlock {\n  node: LayoutNode\n  /** Where the containing block is drawn, set once it's laid out. */\n  offset: { left: number; top: number }\n  /**\n   * The clip path and mask of fixed descendants. `clip-path` and `mask-image`\n   * apply to all descendants, but `overflow: hidden` doesn't clip descendants\n   * whose containing block is an ancestor of the element.\n   */\n  clipPathId?: string\n  maskId?: string\n}\n\nexport interface FixedElement {\n  node: LayoutNode\n  containingBlock: FixedContainingBlock\n  /**\n   * On an axis without insets, the element stays at its static position:\n   * where it would be as an absolute child of its parent. The placeholder is a\n   * node in the parent with the element's margins, alignment and size.\n   */\n  placeholder?: LayoutNode\n  staticX: boolean\n  staticY: boolean\n}\n\n/**\n * Insert the node of a fixed element into the node of its containing block.\n * Returns `undefined` without inserting it if it can be laid out like an\n * absolute element in its parent instead: when the parent is the containing\n * block, or when there is none because an ancestor isn't displayed.\n */\nexport function insertFixedNode(\n  node: LayoutNode,\n  parent: LayoutNode,\n  containingBlock: FixedContainingBlock | undefined,\n  fixedElements: FixedElement[]\n): FixedElement | undefined {\n  if (!containingBlock || containingBlock.node === parent) return\n\n  const container = containingBlock.node\n  container.insertChild(node)\n\n  const { left, right, top, bottom } = node.style\n  const staticX = left === undefined && right === undefined\n  const staticY = top === undefined && bottom === undefined\n\n  let placeholder: LayoutNode | undefined\n  if (staticX || staticY) {\n    placeholder = new LayoutNode({\n      position: 'absolute',\n      alignSelf: node.style.alignSelf,\n    })\n    parent.insertChild(placeholder)\n  }\n\n  const element = { node, containingBlock, placeholder, staticX, staticY }\n  fixedElements.push(element)\n  return element\n}\n\n/**\n * Give the static position placeholders the size and margins of their\n * element, once the elements are laid out. Returns whether the layout needs to\n * be calculated again.\n */\nexport function sizeStaticPositionPlaceholders(\n  fixedElements: FixedElement[]\n): boolean {\n  let resized = false\n  for (const { node, placeholder } of fixedElements) {\n    if (!placeholder) continue\n    const { width, height, margin } = node.layout\n    // Percentages resolve against the containing block, not the parent.\n    Object.assign(placeholder.style, {\n      width,\n      height,\n      marginTop: margin.top,\n      marginRight: margin.right,\n      marginBottom: margin.bottom,\n      marginLeft: margin.left,\n    })\n    resized = true\n  }\n  return resized\n}\n\n/**\n * Where the fixed element is drawn, given where its parent is drawn.\n */\nexport function getFixedElementPosition(\n  {\n    node,\n    containingBlock: { offset },\n    placeholder,\n    staticX,\n    staticY,\n  }: FixedElement,\n  parentLeft: number,\n  parentTop: number\n): [left: number, top: number] {\n  return [\n    staticX\n      ? parentLeft + placeholder.layout.left\n      : offset.left + node.layout.left,\n    staticY ? parentTop + placeholder.layout.top : offset.top + node.layout.top,\n  ]\n}\n","import { buildXMLString } from '../utils.js'\n\nexport default function svg({\n  width,\n  height,\n  content,\n}: {\n  width: number\n  height: number\n  content: string\n}) {\n  return buildXMLString(\n    'svg',\n    {\n      width,\n      height,\n      viewBox: `0 0 ${width} ${height}`,\n      xmlns: 'http://www.w3.org/2000/svg',\n      'enable-background': content.includes('in=\"BackgroundImage\"')\n        ? 'new'\n        : undefined,\n    },\n    content\n  )\n}\n","import type { InitInput } from './wasm.external.js'\nimport type { LayoutEngine } from './index.js'\n\nexport type { InitInput }\n\n/**\n * Initializes `satori/standalone` with the `layout.wasm` module. The default\n * build bundles it.\n */\nexport function init(input: InitInput) {\n  if (process.env.SATORI_STANDALONE === '1') {\n    return import('./wasm.external.js').then((mod) => mod.init(input))\n  } else {\n    // Do nothing. It's bundled.\n  }\n}\n\nexport function getLayoutEngine(): Promise<LayoutEngine> {\n  if (process.env.SATORI_STANDALONE === '1') {\n    return import('./wasm.external.js').then((mod) => mod.getLayoutEngine())\n  } else {\n    return import('./wasm.bundled.js').then((mod) => mod.getLayoutEngine())\n  }\n}\n\nif (process.env.SATORI_STANDALONE !== '1') {\n  // Preload the layout engine in bundled mode.\n  import('./wasm.bundled.js')\n}\n","import { Counters } from './list-marker.js'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { TwConfig } from 'twrnc'\nimport type { SatoriNode } from './layout.js'\nimport {\n  getStyleError,\n  ROOT_STYLE,\n  type ReplacedElementHandlers,\n} from './handler/compute.js'\nimport type { ProjectPlane } from './builder/transform.js'\n\nimport layout from './layout.js'\nimport FontLoader, { FontOptions } from './font.js'\nimport svg from './builder/svg.js'\nimport { getLayoutEngine } from './layout-engine/wasm.js'\nimport { LayoutNode, type LayoutEngine } from './layout-engine/index.js'\nimport { detectLanguageCode, LangCode, Locale } from './language.js'\nimport getTw from './handler/tailwind.js'\nimport { preProcessNode } from './handler/preprocess.js'\nimport { resolveComponents } from './handler/components.js'\nimport {\n  applyStyleSheets,\n  type ContainerQueries,\n} from './handler/stylesheet.js'\nimport { cache, inflightRequests } from './handler/image.js'\nimport { segment } from './utils.js'\nimport { initHarfBuzz } from './harfbuzz.js'\nimport type { PaintBounds } from './culling.js'\nimport {\n  sizeStaticPositionPlaceholders,\n  type FixedElement,\n} from './fixed-position.js'\n\n// We don't need to initialize the opentype instances every time.\nconst fontCache = new WeakMap()\n\n// Users often build the `fonts` array inline on every render while reusing\n// the same underlying font data buffers. Identify loaders by the identity of\n// each font's data buffer plus its metadata, so an equivalent inline array\n// still hits the cached FontLoader (and its shaping caches).\nconst fontDataIds = new WeakMap<Buffer | ArrayBuffer, number>()\nlet nextFontDataId = 0\nconst MAX_FONT_LOADERS = 8\nconst fontLoaderCache = new Map<string, FontLoader>()\n\nfunction getFontLoaderKey(fonts: FontOptions[]): string {\n  let key = ''\n  for (const font of fonts) {\n    let id = fontDataIds.get(font.data)\n    if (id === undefined) {\n      id = ++nextFontDataId\n      fontDataIds.set(font.data, id)\n    }\n    key += `${id}:${font.name}:${font.weight ?? ''}:${font.style ?? ''}:${\n      font.lang ?? ''\n    };`\n  }\n  return key\n}\n\nfunction getFontLoader(\n  fonts: FontOptions[],\n  layoutEngine: LayoutEngine\n): FontLoader {\n  // Fast path: the exact same array instance.\n  if (fontCache.has(fonts)) {\n    return fontCache.get(fonts)\n  }\n\n  const key = getFontLoaderKey(fonts)\n  let loader = fontLoaderCache.get(key)\n\n  if (!loader) {\n    loader = new FontLoader(fonts, (data) => layoutEngine.decodeWoff2(data))\n    if (fontLoaderCache.size >= MAX_FONT_LOADERS) {\n      const oldestKey = fontLoaderCache.keys().next().value\n      if (oldestKey !== undefined) fontLoaderCache.delete(oldestKey)\n    }\n    fontLoaderCache.set(key, loader)\n  }\n\n  fontCache.set(fonts, loader)\n  return loader\n}\n\nexport type SatoriOptions = (\n  | {\n      width: number\n      height: number\n    }\n  | {\n      width: number\n    }\n  | {\n      height: number\n    }\n) & {\n  fonts: FontOptions[]\n  embedFont?: boolean\n  debug?: boolean\n  graphemeImages?: Record<string, string>\n  loadAdditionalAsset?: (\n    languageCode: string,\n    segment: string\n  ) => Promise<string | Array<FontOptions>>\n  tailwindConfig?: TwConfig\n  onNodeDetected?: (node: SatoriNode) => void\n  /**\n   * Called with the error of each invalid or unsupported style declaration,\n   * which is then ignored instead of failing the render.\n   */\n  onStyleError?: (error: Error) => void\n  /**\n   * Converts colors that SVG renderers may not support, like `oklch()`,\n   * `lab()` and `color-mix()`, to `rgb()` and `rgba()`. Set it to `false` to\n   * keep them as they are written. Defaults to `true`.\n   */\n  convertColors?: boolean\n  pointScaleFactor?: number\n}\nexport type { SatoriNode }\n\nconst satori: (element: ReactNode, options: SatoriOptions) => Promise<string> =\n  render\nexport default satori\n\n/**\n * @internal Extensions provided by `satori/experimental`.\n */\nexport interface RenderExtensions {\n  /** Elements such as `<canvas>` that are drawn as images. */\n  replacedElements?: ReplacedElementHandlers\n  /** Draws elements with perspective. */\n  projectPlane?: ProjectPlane\n}\n\n/**\n * @internal Render with extensions. Not exported from the root entry.\n */\nexport async function render(\n  element: ReactNode,\n  options: SatoriOptions,\n  { replacedElements, projectPlane }: RenderExtensions = {}\n): Promise<string> {\n  // Initialize the layout and shaping engines together.\n  const [layoutEngine] = await Promise.all([getLayoutEngine(), initHarfBuzz()])\n  if (!layoutEngine) {\n    throw new Error(\n      'Satori is not initialized: expect the layout engine to be loaded, got ' +\n        layoutEngine\n    )\n  }\n\n  options.fonts = options.fonts || []\n\n  const font = getFontLoader(options.fonts, layoutEngine)\n\n  const definedWidth = 'width' in options ? options.width : undefined\n  const definedHeight = 'height' in options ? options.height : undefined\n\n  // Use a null-prototype object so that text matching Object.prototype property\n  // names (e.g. \"constructor\", \"toString\") doesn't inherit truthy values from\n  // the prototype chain when we look it up via `graphemeImages[text]`.\n  const graphemeImages = Object.assign(\n    Object.create(null),\n    options.graphemeImages\n  )\n  // Some Chinese characters have different glyphs in Chinese and\n  // Japanese, but their Unicode is the same. If the user needs to display\n  // the Chinese and Japanese characters simultaneously correctly, the user\n  // needs to download the Chinese and Japanese fonts, respectively.\n  // Assuming that the user has downloaded the corresponding Japanese font,\n  // to let the program realize that the font has not been downloaded in Chinese,\n  // we need to prohibit Japanese as the fallback when executing `engine.has`.\n  //\n  // This causes a problem. Consider a scenario where we need to display Chinese\n  // correctly under tags with `lang=\"ja\"` set. `engine.has` will repeatedly treat\n  // the Chinese as missing font because we have removed the Chinese as a fallback.\n  // To address this situation, we may need to add `processedWordsMissingFont`\n  const processedWordsMissingFonts = new Set()\n\n  // Render the components first, so that the whole tree is known before\n  // layout, including the images to load and the elements that stylesheets\n  // apply to.\n  element = await resolveComponents(element)\n  // Style errors of a first pass, which container queries need, are reported\n  // by the second one instead.\n  let pendingErrors: Error[] | undefined = []\n  const onStyleError =\n    options.onStyleError &&\n    ((error: Error) =>\n      pendingErrors ? pendingErrors.push(error) : options.onStyleError(error))\n\n  cache.clear()\n  inflightRequests.clear()\n\n  const containers: ContainerQueries = {}\n  let pass = await layOut()\n  if (containers.queried) {\n    // Container queries use the content box of containers.\n    containers.sizes = new Map()\n    for (const [index, node] of pass.containerNodes) {\n      const { width, height, padding, border } = node.layout\n      if (!padding || !border) continue\n      containers.sizes.set(index, {\n        width:\n          width - padding.left - padding.right - border.left - border.right,\n        height:\n          height - padding.top - padding.bottom - border.top - border.bottom,\n      })\n    }\n    pendingErrors = undefined\n    pass = await layOut()\n  } else {\n    const errors = pendingErrors\n    pendingErrors = undefined\n    for (const error of errors) options.onStyleError?.(error)\n  }\n\n  // What's entirely outside of the image isn't drawn.\n  pass.paintBounds.width = pass.root.layout.width\n  pass.paintBounds.height = pass.root.layout.height\n  const content = (await pass.handler.next([0, 0])).value as string\n\n  return svg({\n    width: pass.root.layout.width,\n    height: pass.root.layout.height,\n    content,\n  })\n\n  /**\n   * Applies the stylesheets and lays out the tree, which is drawn by the last\n   * step of `handler`.\n   */\n  async function layOut() {\n    // Like in browsers, invalid declarations of stylesheets are dropped.\n    const tree = await applyStyleSheets(\n      element,\n      layoutEngine,\n      { width: definedWidth, height: definedHeight },\n      {\n        getError: (name, value) =>\n          getStyleError({ [name]: value }, options.convertColors ?? true),\n        onError: onStyleError,\n      },\n      containers\n    )\n    const svgFilters = new Map<string, ReactElement>()\n    await preProcessNode(tree, svgFilters)\n\n    // Like the initial containing block, the root element is laid out in a\n    // block formatting context.\n    const root = new LayoutNode({\n      display: 'flow-root',\n      width: definedWidth || 'auto',\n      height: definedHeight || 'auto',\n      overflowX: 'hidden',\n      overflowY: 'hidden',\n    })\n\n    const fixedElements: FixedElement[] = []\n    const containerNodes = new Map<number, LayoutNode>()\n    const paintBounds: PaintBounds = { width: 0, height: 0 }\n    const handler = layout(tree, {\n      id: 'id',\n      parentStyle: {},\n      inheritedStyle: {\n        ...ROOT_STYLE,\n\n        // Special style properties:\n        _viewportWidth: definedWidth,\n        _viewportHeight: definedHeight,\n      },\n      parent: root,\n      font,\n      embedFont: options.embedFont,\n      debug: options.debug,\n      graphemeImages,\n      canLoadAdditionalAssets: !!options.loadAdditionalAsset,\n      onNodeDetected: options.onNodeDetected,\n      onStyleError,\n      convertColors: options.convertColors ?? true,\n      pointScaleFactor: options.pointScaleFactor,\n      replacedElements,\n      projectPlane,\n      // Fixed elements are positioned relative to the viewport by default.\n      fixedContainingBlock: { node: root, offset: { left: 0, top: 0 } },\n      counters: new Counters(),\n      // Sticky elements stick to the viewport by default.\n      parentBox: { node: root, offset: { left: 0, top: 0 } },\n      scrollport: { node: root, offset: { left: 0, top: 0 } },\n      // So are absolutely positioned ones without a positioned ancestor.\n      absoluteContainingBlock: { node: root, offset: { left: 0, top: 0 } },\n      fixedElements,\n      paintBounds,\n      svgFilters,\n      floats: { found: false },\n      formattingContext: 'root',\n      containers: containerNodes,\n      computeLayout: (node, { width, height }) =>\n        layoutEngine.computeLayout(node, {\n          width,\n          height,\n          pointScaleFactor: options.pointScaleFactor,\n        }),\n      getTwStyles: (tw, style) => {\n        const twToStyles = getTw({\n          width: definedWidth,\n          height: definedHeight,\n          config: options.tailwindConfig,\n        })\n        const twStyles = { ...twToStyles([tw] as any) }\n        if (typeof twStyles.lineHeight === 'number') {\n          twStyles.lineHeight =\n            twStyles.lineHeight / (+twStyles.fontSize || style.fontSize || 16)\n        }\n        if (twStyles.shadowColor && twStyles.boxShadow) {\n          twStyles.boxShadow = (twStyles.boxShadow as string).replace(\n            /rgba?\\([^)]+\\)/,\n            twStyles.shadowColor as string\n          )\n        }\n        return twStyles\n      },\n    })\n\n    const segmentsMissingFont = (await handler.next()).value as {\n      word: string\n      locale?: Locale\n    }[]\n\n    if (options.loadAdditionalAsset) {\n      if (segmentsMissingFont.length) {\n        const languageCodes = convertToLanguageCodes(segmentsMissingFont)\n        const fonts: FontOptions[] = []\n        const images: Record<string, string> = {}\n\n        await Promise.all(\n          Object.entries(languageCodes).flatMap(([code, segments]) =>\n            segments.map((_segment) => {\n              const key = `${code}_${_segment}`\n              if (processedWordsMissingFonts.has(key)) {\n                return null\n              }\n              processedWordsMissingFonts.add(key)\n\n              return options\n                .loadAdditionalAsset(code, _segment)\n                .then((asset: any) => {\n                  if (typeof asset === 'string') {\n                    images[_segment] = asset\n                  } else if (asset) {\n                    if (Array.isArray(asset)) {\n                      fonts.push(...asset)\n                    } else {\n                      fonts.push(asset)\n                    }\n                  }\n                })\n            })\n          )\n        )\n\n        // Directly mutate the font provider and the grapheme map.\n        font.addFonts(fonts)\n        Object.assign(graphemeImages, images)\n      }\n    }\n\n    await handler.next()\n    const layoutOptions = {\n      width: definedWidth,\n      height: definedHeight,\n      pointScaleFactor: options.pointScaleFactor,\n    }\n    layoutEngine.computeLayout(root, layoutOptions)\n    // The static position of a fixed element depends on its size.\n    if (sizeStaticPositionPlaceholders(fixedElements)) {\n      layoutEngine.computeLayout(root, layoutOptions)\n    }\n\n    return { root, handler, containerNodes, paintBounds }\n  }\n}\n\nfunction convertToLanguageCodes(\n  segmentsMissingFont: { word: string; locale?: Locale }[]\n): Partial<Record<LangCode, string[]>> {\n  const languageCodes = {}\n  let wordsByCode = {}\n\n  for (const { word, locale } of segmentsMissingFont) {\n    const code = detectLanguageCode(word, locale).join('|')\n    wordsByCode[code] = wordsByCode[code] || ''\n    wordsByCode[code] += word\n  }\n\n  Object.keys(wordsByCode).forEach((code: LangCode) => {\n    languageCodes[code] = languageCodes[code] || []\n    if (code === 'emoji') {\n      languageCodes[code].push(\n        ...unique(segment(wordsByCode[code], 'grapheme'))\n      )\n    } else {\n      languageCodes[code][0] = languageCodes[code][0] || ''\n      languageCodes[code][0] += unique(\n        segment(\n          wordsByCode[code],\n          'grapheme',\n          code === 'unknown' ? undefined : code\n        )\n      ).join('')\n    }\n  })\n\n  return languageCodes\n}\n\nfunction unique<T>(arr: T[]): T[] {\n  return Array.from(new Set(arr))\n}\n","import resolveConfig from 'tailwindcss/resolveConfig';\nimport Cache from './cache';\nimport ClassParser from './ClassParser';\nimport { parseInputs } from './parse-inputs';\nimport { complete, warn } from './helpers';\nimport { getAddedUtilities } from './plugin';\nimport { removeOpacityHelpers } from './resolve/color';\nexport function create(customConfig, platform) {\n    const config = resolveConfig(withContent(customConfig));\n    const device = {};\n    const pluginUtils = getAddedUtilities(config.plugins);\n    const customStringUtils = {};\n    const customStyleUtils = Object.entries(pluginUtils)\n        .map(([util, style]) => {\n        if (typeof style === `string`) {\n            // mutating while mapping, i know - bad form, but for performance sake... ¯\\_(ツ)_/¯\n            customStringUtils[util] = style;\n            return [util, { kind: `null` }];\n        }\n        return [util, complete(style)];\n    })\n        .filter(([, ir]) => ir.kind !== `null`);\n    function deriveCacheGroup() {\n        return ([\n            device.windowDimensions ? `w${device.windowDimensions.width}` : false,\n            device.windowDimensions ? `h${device.windowDimensions.height}` : false,\n            device.fontScale ? `fs${device.fontScale}` : false,\n            device.colorScheme === `dark` ? `dark` : false,\n            device.pixelDensity === 2 ? `retina` : false,\n        ]\n            .filter(Boolean)\n            .join(`--`) || `default`);\n    }\n    let cacheGroup = deriveCacheGroup();\n    const contextCaches = {};\n    function getCache() {\n        const existing = contextCaches[cacheGroup];\n        if (existing) {\n            return existing;\n        }\n        const cache = new Cache(customStyleUtils);\n        contextCaches[cacheGroup] = cache;\n        return cache;\n    }\n    function style(...inputs) {\n        const cache = getCache();\n        let resolved = {};\n        const dependents = [];\n        const ordered = [];\n        const [utilities, userStyle] = parseInputs(inputs);\n        // check if we've seen this full set of classes before\n        // if we have a cached copy, we can skip examining each utility\n        const joined = utilities.join(` `);\n        const cached = cache.getStyle(joined);\n        if (cached) {\n            return { ...cached, ...(userStyle ? userStyle : {}) };\n        }\n        for (const utility of utilities) {\n            let styleIr = cache.getIr(utility);\n            if (!styleIr && utility in customStringUtils) {\n                const customStyle = style(customStringUtils[utility]);\n                cache.setIr(utility, complete(customStyle));\n                resolved = { ...resolved, ...customStyle };\n                continue;\n            }\n            const parser = new ClassParser(utility, config, cache, device, platform);\n            styleIr = parser.parse();\n            switch (styleIr.kind) {\n                case `complete`:\n                    resolved = { ...resolved, ...styleIr.style };\n                    cache.setIr(utility, styleIr);\n                    break;\n                case `dependent`:\n                    dependents.push(styleIr);\n                    break;\n                case `ordered`:\n                    ordered.push(styleIr);\n                    break;\n                case `null`:\n                    cache.setIr(utility, styleIr);\n                    break;\n            }\n        }\n        if (ordered.length > 0) {\n            ordered.sort((a, b) => a.order - b.order);\n            for (const orderedStyle of ordered) {\n                switch (orderedStyle.styleIr.kind) {\n                    case `complete`:\n                        resolved = { ...resolved, ...orderedStyle.styleIr.style };\n                        break;\n                    case `dependent`:\n                        dependents.push(orderedStyle.styleIr);\n                        break;\n                }\n            }\n        }\n        if (dependents.length > 0) {\n            for (const dependent of dependents) {\n                const error = dependent.complete(resolved);\n                if (error) {\n                    warn(error);\n                }\n            }\n            removeOpacityHelpers(resolved);\n        }\n        // cache the full set of classes for future re-renders\n        // it's important we cache BEFORE merging in userStyle below\n        if (joined !== ``) {\n            cache.setStyle(joined, resolved);\n        }\n        if (userStyle) {\n            resolved = { ...resolved, ...userStyle };\n        }\n        return resolved;\n    }\n    function color(utils) {\n        const styleObj = style(utils\n            .split(/\\s+/g)\n            .map((util) => util.replace(/^(bg|text|border)-/, ``))\n            .map((util) => `bg-${util}`)\n            .join(` `));\n        return typeof styleObj.backgroundColor === `string`\n            ? styleObj.backgroundColor\n            : undefined;\n    }\n    // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n    const tailwindFn = (strings, ...values) => {\n        let str = ``;\n        strings.forEach((string, i) => {\n            var _a;\n            str += string + ((_a = values[i]) !== null && _a !== void 0 ? _a : ``);\n        });\n        return style(str);\n    };\n    tailwindFn.style = style;\n    tailwindFn.color = color;\n    tailwindFn.prefixMatch = (...prefixes) => {\n        const joined = prefixes.sort().join(`:`);\n        const cache = getCache();\n        const cached = cache.getPrefixMatch(joined);\n        if (cached !== undefined) {\n            return cached;\n        }\n        const parser = new ClassParser(`${joined}:flex`, config, cache, device, platform);\n        const ir = parser.parse();\n        const prefixMatches = ir.kind !== `null`;\n        cache.setPrefixMatch(joined, prefixMatches);\n        return prefixMatches;\n    };\n    tailwindFn.setWindowDimensions = (newDimensions) => {\n        device.windowDimensions = newDimensions;\n        cacheGroup = deriveCacheGroup();\n    };\n    tailwindFn.setFontScale = (newFontScale) => {\n        device.fontScale = newFontScale;\n        cacheGroup = deriveCacheGroup();\n    };\n    tailwindFn.setPixelDensity = (newPixelDensity) => {\n        device.pixelDensity = newPixelDensity;\n        cacheGroup = deriveCacheGroup();\n    };\n    tailwindFn.setColorScheme = (newColorScheme) => {\n        device.colorScheme = newColorScheme;\n        cacheGroup = deriveCacheGroup();\n    };\n    return tailwindFn;\n}\nexport default create;\nfunction withContent(config) {\n    return {\n        ...config,\n        // prevent warnings from tailwind about not having a `content` prop\n        // we don't need one because we have our own jit parser which\n        // does not rely on knowing content paths to search\n        content: [`_no_warnings_please`],\n    };\n}\n","export const PLATFORMS = [`ios`, `android`, `windows`, `macos`, `web`];\nexport function isPlatform(x) {\n    return PLATFORMS.includes(x);\n}\nexport const ORIENTATIONS = [`portrait`, `landscape`];\nexport function isOrientation(x) {\n    return ORIENTATIONS.includes(x);\n}\nexport var ConfigType;\n(function (ConfigType) {\n    ConfigType[\"fontSize\"] = \"fontSize\";\n    ConfigType[\"lineHeight\"] = \"lineHeight\";\n})(ConfigType || (ConfigType = {}));\nexport var Unit;\n(function (Unit) {\n    Unit[\"rem\"] = \"rem\";\n    Unit[\"em\"] = \"em\";\n    Unit[\"px\"] = \"px\";\n    Unit[\"percent\"] = \"%\";\n    Unit[\"vw\"] = \"vw\";\n    Unit[\"vh\"] = \"vh\";\n    Unit[\"none\"] = \"<no-css-unit>\";\n})(Unit || (Unit = {}));\nexport function isString(value) {\n    return typeof value === `string`;\n}\nexport function isObject(value) {\n    return typeof value === `object`;\n}\n","var _a;\nimport { Unit } from './types';\nexport function complete(style) {\n    return { kind: `complete`, style };\n}\nexport function parseNumericValue(value, context = {}) {\n    const { fractions } = context;\n    if (fractions && value.includes(`/`)) {\n        const [numerator = ``, denominator = ``] = value.split(`/`, 2);\n        const parsedNumerator = parseNumericValue(numerator);\n        const parsedDenominator = parseNumericValue(denominator);\n        if (!parsedNumerator || !parsedDenominator) {\n            return null;\n        }\n        return [parsedNumerator[0] / parsedDenominator[0], parsedDenominator[1]];\n    }\n    const number = parseFloat(value);\n    if (Number.isNaN(number)) {\n        return null;\n    }\n    const match = value.match(/(([a-z]{2,}|%))$/);\n    if (!match) {\n        return [number, Unit.none];\n    }\n    switch (match === null || match === void 0 ? void 0 : match[1]) {\n        case `rem`:\n            return [number, Unit.rem];\n        case `px`:\n            return [number, Unit.px];\n        case `em`:\n            return [number, Unit.em];\n        case `%`:\n            return [number, Unit.percent];\n        case `vw`:\n            return [number, Unit.vw];\n        case `vh`:\n            return [number, Unit.vh];\n        default:\n            return null;\n    }\n}\nexport function getCompleteStyle(prop, value, context = {}) {\n    const styleVal = parseStyleVal(value, context);\n    return styleVal === null ? null : complete({ [prop]: styleVal });\n}\nexport function mergeStyle(prop, value, style) {\n    const styleVal = parseStyleVal(value);\n    if (styleVal !== null) {\n        style[prop] = styleVal;\n    }\n    return style;\n}\nexport function getStyle(prop, value) {\n    const styleVal = parseStyleVal(value);\n    return styleVal === null ? null : { [prop]: styleVal };\n}\nexport function parseStyleVal(value, context = {}) {\n    if (value === undefined) {\n        return null;\n    }\n    const parsed = parseNumericValue(String(value), context);\n    if (parsed) {\n        return toStyleVal(...parsed, context);\n    }\n    else {\n        return null;\n    }\n}\nexport function toStyleVal(number, unit, context = {}) {\n    const { isNegative, device } = context;\n    switch (unit) {\n        case Unit.rem:\n            return number * 16 * (isNegative ? -1 : 1);\n        case Unit.px:\n            return number * (isNegative ? -1 : 1);\n        case Unit.percent:\n            return `${isNegative ? `-` : ``}${number}%`;\n        case Unit.none:\n            return number * (isNegative ? -1 : 1);\n        case Unit.vw:\n            if (!(device === null || device === void 0 ? void 0 : device.windowDimensions)) {\n                warn(`\\`vw\\` CSS unit requires configuration with \\`useDeviceContext()\\``);\n                return null;\n            }\n            return device.windowDimensions.width * (number / 100);\n        case Unit.vh:\n            if (!(device === null || device === void 0 ? void 0 : device.windowDimensions)) {\n                warn(`\\`vh\\` CSS unit requires configuration with \\`useDeviceContext()\\``);\n                return null;\n            }\n            return device.windowDimensions.height * (number / 100);\n        default:\n            return null;\n    }\n}\nexport function toPx(value) {\n    const parsed = parseNumericValue(value);\n    if (!parsed) {\n        return null;\n    }\n    const [number, unit] = parsed;\n    switch (unit) {\n        case Unit.rem:\n            return number * 16;\n        case Unit.px:\n            return number;\n        default:\n            return null;\n    }\n}\nconst DIR_MAP = {\n    t: `Top`,\n    tr: `TopRight`,\n    tl: `TopLeft`,\n    b: `Bottom`,\n    br: `BottomRight`,\n    bl: `BottomLeft`,\n    l: `Left`,\n    r: `Right`,\n    x: `Horizontal`,\n    y: `Vertical`,\n};\nexport function getDirection(string) {\n    return DIR_MAP[string !== null && string !== void 0 ? string : ``] || `All`;\n}\nexport function parseAndConsumeDirection(utilityFragment) {\n    let direction = `All`;\n    const consumed = utilityFragment.replace(/^-(t|b|r|l|tr|tl|br|bl)(-|$)/, (_, dir) => {\n        direction = getDirection(dir);\n        return ``;\n    });\n    return [consumed, direction];\n}\nexport function parseUnconfigged(value, context = {}) {\n    if (value.includes(`/`)) {\n        const style = unconfiggedStyleVal(value, { ...context, fractions: true });\n        if (style)\n            return style;\n    }\n    if (value[0] === `[`) {\n        value = value.slice(1, -1);\n    }\n    return unconfiggedStyleVal(value, context);\n}\nexport function unconfiggedStyle(prop, value, context = {}) {\n    const styleVal = parseUnconfigged(value, context);\n    if (styleVal === null) {\n        return null;\n    }\n    return complete({ [prop]: styleVal });\n}\nfunction unconfiggedStyleVal(value, context = {}) {\n    if (value === `px`) {\n        return 1;\n    }\n    const parsed = parseNumericValue(value, context);\n    if (!parsed) {\n        return null;\n    }\n    let [number, unit] = parsed;\n    if (context.fractions) {\n        unit = Unit.percent;\n        number *= 100;\n    }\n    // not sure if this is the right approach, but this allows arbitrary\n    // non-bracket numbers, like top-73 and it INFERS the meaning to be\n    // tailwind's default scale for spacing, which is 1 = 0.25rem\n    if (unit === Unit.none) {\n        number = number / 4;\n        unit = Unit.rem;\n    }\n    return toStyleVal(number, unit, context);\n}\nfunction consoleWarn(...args) {\n    console.warn(...args);\n}\nfunction noopWarn(..._) {\n    // ¯\\_(ツ)_/¯\n}\nexport const warn = typeof process === `undefined` || ((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a.JEST_WORKER_ID) === undefined\n    ? consoleWarn\n    : noopWarn;\n","import { complete } from './helpers';\nconst defaultStyles = [\n    [`aspect-square`, complete({ aspectRatio: 1 })],\n    [`aspect-video`, complete({ aspectRatio: 16 / 9 })],\n    [`items-center`, complete({ alignItems: `center` })],\n    [`items-start`, complete({ alignItems: `flex-start` })],\n    [`items-end`, complete({ alignItems: `flex-end` })],\n    [`items-baseline`, complete({ alignItems: `baseline` })],\n    [`items-stretch`, complete({ alignItems: `stretch` })],\n    [`justify-start`, complete({ justifyContent: `flex-start` })],\n    [`justify-end`, complete({ justifyContent: `flex-end` })],\n    [`justify-center`, complete({ justifyContent: `center` })],\n    [`justify-between`, complete({ justifyContent: `space-between` })],\n    [`justify-around`, complete({ justifyContent: `space-around` })],\n    [`justify-evenly`, complete({ justifyContent: `space-evenly` })],\n    [`content-start`, complete({ alignContent: `flex-start` })],\n    [`content-end`, complete({ alignContent: `flex-end` })],\n    [`content-between`, complete({ alignContent: `space-between` })],\n    [`content-around`, complete({ alignContent: `space-around` })],\n    [`content-stretch`, complete({ alignContent: `stretch` })],\n    [`content-center`, complete({ alignContent: `center` })],\n    [`self-auto`, complete({ alignSelf: `auto` })],\n    [`self-start`, complete({ alignSelf: `flex-start` })],\n    [`self-end`, complete({ alignSelf: `flex-end` })],\n    [`self-center`, complete({ alignSelf: `center` })],\n    [`self-stretch`, complete({ alignSelf: `stretch` })],\n    [`self-baseline`, complete({ alignSelf: `baseline` })],\n    [`direction-inherit`, complete({ direction: `inherit` })],\n    [`direction-ltr`, complete({ direction: `ltr` })],\n    [`direction-rtl`, complete({ direction: `rtl` })],\n    [`hidden`, complete({ display: `none` })],\n    [`flex`, complete({ display: `flex` })],\n    [`flex-row`, complete({ flexDirection: `row` })],\n    [`flex-row-reverse`, complete({ flexDirection: `row-reverse` })],\n    [`flex-col`, complete({ flexDirection: `column` })],\n    [`flex-col-reverse`, complete({ flexDirection: `column-reverse` })],\n    [`flex-wrap`, complete({ flexWrap: `wrap` })],\n    [`flex-wrap-reverse`, complete({ flexWrap: `wrap-reverse` })],\n    [`flex-nowrap`, complete({ flexWrap: `nowrap` })],\n    [`flex-auto`, complete({ flexGrow: 1, flexShrink: 1, flexBasis: `auto` })],\n    [`flex-initial`, complete({ flexGrow: 0, flexShrink: 1, flexBasis: `auto` })],\n    [`flex-none`, complete({ flexGrow: 0, flexShrink: 0, flexBasis: `auto` })],\n    [`overflow-hidden`, complete({ overflow: `hidden` })],\n    [`overflow-visible`, complete({ overflow: `visible` })],\n    [`overflow-scroll`, complete({ overflow: `scroll` })],\n    [`absolute`, complete({ position: `absolute` })],\n    [`relative`, complete({ position: `relative` })],\n    [`italic`, complete({ fontStyle: `italic` })],\n    [`not-italic`, complete({ fontStyle: `normal` })],\n    [`oldstyle-nums`, fontVariant(`oldstyle-nums`)],\n    [`small-caps`, fontVariant(`small-caps`)],\n    [`lining-nums`, fontVariant(`lining-nums`)],\n    [`tabular-nums`, fontVariant(`tabular-nums`)],\n    [`proportional-nums`, fontVariant(`proportional-nums`)],\n    [`font-thin`, complete({ fontWeight: `100` })],\n    [`font-100`, complete({ fontWeight: `100` })],\n    [`font-extralight`, complete({ fontWeight: `200` })],\n    [`font-200`, complete({ fontWeight: `200` })],\n    [`font-light`, complete({ fontWeight: `300` })],\n    [`font-300`, complete({ fontWeight: `300` })],\n    [`font-normal`, complete({ fontWeight: `normal` })],\n    [`font-400`, complete({ fontWeight: `400` })],\n    [`font-medium`, complete({ fontWeight: `500` })],\n    [`font-500`, complete({ fontWeight: `500` })],\n    [`font-semibold`, complete({ fontWeight: `600` })],\n    [`font-600`, complete({ fontWeight: `600` })],\n    [`font-bold`, complete({ fontWeight: `bold` })],\n    [`font-700`, complete({ fontWeight: `700` })],\n    [`font-extrabold`, complete({ fontWeight: `800` })],\n    [`font-800`, complete({ fontWeight: `800` })],\n    [`font-black`, complete({ fontWeight: `900` })],\n    [`font-900`, complete({ fontWeight: `900` })],\n    [`include-font-padding`, complete({ includeFontPadding: true })],\n    [`remove-font-padding`, complete({ includeFontPadding: false })],\n    // not sure if RN supports `max-width: none;`, but this should be equivalent\n    [`max-w-none`, complete({ maxWidth: `99999%` })],\n    [`text-left`, complete({ textAlign: `left` })],\n    [`text-center`, complete({ textAlign: `center` })],\n    [`text-right`, complete({ textAlign: `right` })],\n    [`text-justify`, complete({ textAlign: `justify` })],\n    [`text-auto`, complete({ textAlign: `auto` })],\n    [`underline`, complete({ textDecorationLine: `underline` })],\n    [`line-through`, complete({ textDecorationLine: `line-through` })],\n    [`no-underline`, complete({ textDecorationLine: `none` })],\n    [`uppercase`, complete({ textTransform: `uppercase` })],\n    [`lowercase`, complete({ textTransform: `lowercase` })],\n    [`capitalize`, complete({ textTransform: `capitalize` })],\n    [`normal-case`, complete({ textTransform: `none` })],\n    [`w-auto`, complete({ width: `auto` })],\n    [`h-auto`, complete({ height: `auto` })],\n    // default box-shadow implementations\n    [\n        `shadow-sm`,\n        complete({\n            shadowOffset: { width: 1, height: 1 },\n            shadowColor: `#000`,\n            shadowRadius: 1,\n            shadowOpacity: 0.025,\n            elevation: 1,\n        }),\n    ],\n    [\n        `shadow`,\n        complete({\n            shadowOffset: { width: 1, height: 1 },\n            shadowColor: `#000`,\n            shadowRadius: 1,\n            shadowOpacity: 0.075,\n            elevation: 2,\n        }),\n    ],\n    [\n        `shadow-md`,\n        complete({\n            shadowOffset: { width: 1, height: 1 },\n            shadowColor: `#000`,\n            shadowRadius: 3,\n            shadowOpacity: 0.125,\n            elevation: 3,\n        }),\n    ],\n    [\n        `shadow-lg`,\n        complete({\n            shadowOffset: { width: 1, height: 1 },\n            shadowColor: `#000`,\n            shadowOpacity: 0.15,\n            shadowRadius: 8,\n            elevation: 8,\n        }),\n    ],\n    [\n        `shadow-xl`,\n        complete({\n            shadowOffset: { width: 1, height: 1 },\n            shadowColor: `#000`,\n            shadowOpacity: 0.19,\n            shadowRadius: 20,\n            elevation: 12,\n        }),\n    ],\n    [\n        `shadow-2xl`,\n        complete({\n            shadowOffset: { width: 1, height: 1 },\n            shadowColor: `#000`,\n            shadowOpacity: 0.25,\n            shadowRadius: 30,\n            elevation: 16,\n        }),\n    ],\n    [\n        `shadow-none`,\n        complete({\n            shadowOffset: { width: 0, height: 0 },\n            shadowColor: `#000`,\n            shadowRadius: 0,\n            shadowOpacity: 0,\n            elevation: 0,\n        }),\n    ],\n];\nexport default defaultStyles;\nfunction fontVariant(type) {\n    return {\n        kind: `dependent`,\n        complete(style) {\n            if (!style.fontVariant || !Array.isArray(style.fontVariant)) {\n                style.fontVariant = [];\n            }\n            style.fontVariant.push(type);\n        },\n    };\n}\n","import defaultStyles from './styles';\nexport default class Cache {\n    constructor(customStyles) {\n        this.ir = new Map(defaultStyles);\n        this.styles = new Map();\n        this.prefixes = new Map();\n        this.ir = new Map([...defaultStyles, ...(customStyles !== null && customStyles !== void 0 ? customStyles : [])]);\n    }\n    getStyle(key) {\n        return this.styles.get(key);\n    }\n    setStyle(key, style) {\n        this.styles.set(key, style);\n    }\n    getIr(key) {\n        return this.ir.get(key);\n    }\n    setIr(key, ir) {\n        this.ir.set(key, ir);\n    }\n    getPrefixMatch(key) {\n        return this.prefixes.get(key);\n    }\n    setPrefixMatch(key, value) {\n        this.prefixes.set(key, value);\n    }\n}\n","import { Unit } from '../types';\nimport { getCompleteStyle, complete, getStyle, mergeStyle, parseNumericValue, unconfiggedStyle, } from '../helpers';\nexport default function fontSize(value, config, context = {}) {\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (!configValue) {\n        return unconfiggedStyle(`fontSize`, value, context);\n    }\n    if (typeof configValue === `string`) {\n        return getCompleteStyle(`fontSize`, configValue);\n    }\n    let style = {};\n    const [fontSize, rest] = configValue;\n    const fontSizeStyle = getStyle(`fontSize`, fontSize);\n    if (fontSizeStyle) {\n        style = fontSizeStyle;\n    }\n    if (typeof rest === `string`) {\n        return complete(mergeStyle(`lineHeight`, calculateLineHeight(rest, style), style));\n    }\n    const { lineHeight, letterSpacing } = rest;\n    if (lineHeight) {\n        mergeStyle(`lineHeight`, calculateLineHeight(lineHeight, style), style);\n    }\n    if (letterSpacing) {\n        mergeStyle(`letterSpacing`, letterSpacing, style);\n    }\n    return complete(style);\n}\n// calculates line-height for relative units\nfunction calculateLineHeight(lineHeight, style) {\n    const parsed = parseNumericValue(lineHeight);\n    if (parsed) {\n        const [number, unit] = parsed;\n        if ((unit === Unit.none || unit === Unit.em) && typeof style.fontSize === `number`) {\n            return style.fontSize * number;\n        }\n    }\n    return lineHeight;\n}\n","import { Unit } from '../types';\nimport { parseNumericValue, complete, toStyleVal } from '../helpers';\nexport default function lineHeight(value, config) {\n    var _a;\n    const parseValue = (_a = config === null || config === void 0 ? void 0 : config[value]) !== null && _a !== void 0 ? _a : (value.startsWith(`[`) ? value.slice(1, -1) : value);\n    const parsed = parseNumericValue(parseValue);\n    if (!parsed) {\n        return null;\n    }\n    const [number, unit] = parsed;\n    if (unit === Unit.none) {\n        // we have a relative line-height like `2` for `leading-loose`\n        return {\n            kind: `dependent`,\n            complete(style) {\n                if (typeof style.fontSize !== `number`) {\n                    return `relative line-height utilities require that font-size be set`;\n                }\n                style.lineHeight = style.fontSize * number;\n            },\n        };\n    }\n    const styleVal = toStyleVal(number, unit);\n    return styleVal !== null ? complete({ lineHeight: styleVal }) : null;\n}\n","import { Unit } from '../types';\nimport { parseNumericValue, parseUnconfigged, toStyleVal } from '../helpers';\nexport default function spacing(type, direction, isNegative, value, config) {\n    let numericValue = ``;\n    if (value[0] === `[`) {\n        numericValue = value.slice(1, -1);\n    }\n    else {\n        const configValue = config === null || config === void 0 ? void 0 : config[value];\n        if (!configValue) {\n            const unconfigged = parseUnconfigged(value);\n            if (unconfigged && typeof unconfigged === `number`) {\n                return spacingStyle(unconfigged, Unit.px, direction, type);\n            }\n            return null;\n        }\n        else {\n            numericValue = configValue;\n        }\n    }\n    if (numericValue === `auto`) {\n        return expand(direction, type, `auto`);\n    }\n    const parsed = parseNumericValue(numericValue);\n    if (!parsed) {\n        return null;\n    }\n    let [number, unit] = parsed;\n    if (isNegative) {\n        number = -number;\n    }\n    return spacingStyle(number, unit, direction, type);\n}\nfunction spacingStyle(number, unit, direction, type) {\n    const pixels = toStyleVal(number, unit);\n    if (pixels === null) {\n        return null;\n    }\n    return expand(direction, type, pixels);\n}\nfunction expand(direction, type, value) {\n    switch (direction) {\n        case `All`:\n            return {\n                kind: `complete`,\n                style: {\n                    [`${type}Top`]: value,\n                    [`${type}Right`]: value,\n                    [`${type}Bottom`]: value,\n                    [`${type}Left`]: value,\n                },\n            };\n        case `Bottom`:\n        case `Top`:\n        case `Left`:\n        case `Right`:\n            return {\n                kind: `complete`,\n                style: {\n                    [`${type}${direction}`]: value,\n                },\n            };\n        case `Vertical`:\n            return {\n                kind: `complete`,\n                style: {\n                    [`${type}Top`]: value,\n                    [`${type}Bottom`]: value,\n                },\n            };\n        case `Horizontal`:\n            return {\n                kind: `complete`,\n                style: {\n                    [`${type}Left`]: value,\n                    [`${type}Right`]: value,\n                },\n            };\n        default:\n            return null;\n    }\n}\n","import { toPx, warn } from './helpers';\nexport default function screens(input) {\n    if (!input) {\n        return {};\n    }\n    const screenData = Object.entries(input).reduce((acc, [screen, value]) => {\n        const data = [0, Infinity, 0];\n        const values = typeof value === `string` ? { min: value } : value;\n        const minPx = values.min ? toPx(values.min) : 0;\n        if (minPx === null) {\n            warn(`invalid screen config value: ${screen}->min: ${values.min}`);\n        }\n        else {\n            data[0] = minPx;\n        }\n        const maxPx = values.max ? toPx(values.max) : Infinity;\n        if (maxPx === null) {\n            warn(`invalid screen config value: ${screen}->max: ${values.max}`);\n        }\n        else {\n            data[1] = maxPx;\n        }\n        acc[screen] = data;\n        return acc;\n    }, {});\n    const values = Object.values(screenData);\n    values.sort((a, b) => {\n        const [minA, maxA] = a;\n        const [minB, maxB] = b;\n        if (maxA === Infinity || maxB === Infinity) {\n            return minA - minB;\n        }\n        return maxA - maxB;\n    });\n    let order = 0;\n    values.forEach((value) => (value[2] = order++));\n    return screenData;\n}\n","import { complete } from '../helpers';\nexport default function fontFamily(value, config) {\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (!configValue) {\n        return null;\n    }\n    if (typeof configValue === `string`) {\n        return complete({ fontFamily: configValue });\n    }\n    const firstFamily = configValue[0];\n    if (!firstFamily) {\n        return null;\n    }\n    return complete({ fontFamily: firstFamily });\n}\n","import { isObject, isString } from '../types';\nimport { warn, complete } from '../helpers';\nexport function color(type, value, config) {\n    if (!config) {\n        return null;\n    }\n    // support opacity shorthand: `bg-red-200/50`\n    let shorthandOpacity = undefined;\n    if (value.includes(`/`)) {\n        [value = ``, shorthandOpacity] = value.split(`/`, 2);\n    }\n    let color = ``;\n    // for arbitrary support: `bg-[#eaeaea]`, `text-[rgba(1, 1, 1, 0.5)]`\n    if (value.startsWith(`[#`) || value.startsWith(`[rgb`)) {\n        color = value.slice(1, -1);\n        // search for color in config\n    }\n    else {\n        color = findColorInConfigRecursive(value, config);\n    }\n    if (!color) {\n        return null;\n    }\n    if (shorthandOpacity) {\n        const opacity = Number(shorthandOpacity);\n        if (!Number.isNaN(opacity)) {\n            color = addOpacity(color, opacity / 100);\n            return complete({ [STYLE_PROPS[type].color]: color });\n        }\n    }\n    // return a dependent style to support merging of classes\n    // like `bg-red-800 bg-opacity-75`\n    return {\n        kind: `dependent`,\n        complete(style) {\n            const opacityProp = STYLE_PROPS[type].opacity;\n            const opacity = style[opacityProp];\n            if (typeof opacity === `number`) {\n                color = addOpacity(color, opacity);\n            }\n            style[STYLE_PROPS[type].color] = color;\n        },\n    };\n}\nexport function colorOpacity(type, value) {\n    const percentage = parseInt(value, 10);\n    if (Number.isNaN(percentage)) {\n        return null;\n    }\n    const opacity = percentage / 100;\n    const style = { [STYLE_PROPS[type].opacity]: opacity };\n    return { kind: `complete`, style };\n}\nfunction addOpacity(color, opacity) {\n    if (color.startsWith(`#`)) {\n        color = hexToRgba(color);\n    }\n    else if (color.startsWith(`rgb(`)) {\n        color = color.replace(/^rgb\\(/, `rgba(`).replace(/\\)$/, `, 1)`);\n    }\n    // @TODO: support hls/hlsa if anyone opens an issue...\n    return color.replace(/, ?\\d*\\.?(\\d+)\\)$/, `, ${opacity})`);\n}\nexport function removeOpacityHelpers(style) {\n    for (const key in style) {\n        if (key.startsWith(`__opacity_`)) {\n            delete style[key];\n        }\n    }\n}\nconst STYLE_PROPS = {\n    bg: { opacity: `__opacity_bg`, color: `backgroundColor` },\n    text: { opacity: `__opacity_text`, color: `color` },\n    border: { opacity: `__opacity_border`, color: `borderColor` },\n    borderTop: { opacity: `__opacity_border`, color: `borderTopColor` },\n    borderBottom: { opacity: `__opacity_border`, color: `borderBottomColor` },\n    borderLeft: { opacity: `__opacity_border`, color: `borderLeftColor` },\n    borderRight: { opacity: `__opacity_border`, color: `borderRightColor` },\n    shadow: { opacity: `__opacity_shadow`, color: `shadowColor` },\n    tint: { opacity: `__opacity_tint`, color: `tintColor` },\n};\nfunction hexToRgba(hex) {\n    const orig = hex;\n    hex = hex.replace(MATCH_SHORT_HEX, (_, r, g, b) => r + r + g + g + b + b);\n    const result = MATCH_FULL_HEX.exec(hex);\n    if (!result) {\n        warn(`invalid config hex color value: ${orig}`);\n        return `rgba(0, 0, 0, 1)`;\n    }\n    const r = parseInt(result[1], 16);\n    const g = parseInt(result[2], 16);\n    const b = parseInt(result[3], 16);\n    return `rgba(${r}, ${g}, ${b}, 1)`;\n}\nfunction findColorInConfigRecursive(colorName, config) {\n    const configColor = config[colorName];\n    // the color is found at the current config level\n    if (isString(configColor)) {\n        return configColor;\n    }\n    else if (isObject(configColor) && isString(configColor.DEFAULT)) {\n        return configColor.DEFAULT;\n    }\n    // search for a matching sub-string at the current config level\n    let [colorNameStart = ``, ...colorNameRest] = colorName.split(`-`);\n    while (colorNameStart !== colorName) {\n        const subConfig = config[colorNameStart];\n        if (isObject(subConfig)) {\n            return findColorInConfigRecursive(colorNameRest.join(`-`), subConfig);\n        }\n        else if (colorNameRest.length === 0) {\n            return ``;\n        }\n        colorNameStart = `${colorNameStart}-${colorNameRest.shift()}`;\n    }\n    return ``;\n}\nconst MATCH_SHORT_HEX = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\nconst MATCH_FULL_HEX = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n","import { parseAndConsumeDirection, complete, getCompleteStyle, unconfiggedStyle, } from '../helpers';\nimport { color } from './color';\nexport function border(value, theme) {\n    let [rest, direction] = parseAndConsumeDirection(value);\n    const widthUtilityMatch = rest.match(/^(-?(\\d)+)?$/);\n    if (widthUtilityMatch) {\n        return borderWidth(rest, direction, theme === null || theme === void 0 ? void 0 : theme.borderWidth);\n    }\n    rest = rest.replace(/^-/, ``);\n    if ([`dashed`, `solid`, `dotted`].includes(rest)) {\n        return complete({ borderStyle: rest });\n    }\n    let colorType = `border`;\n    switch (direction) {\n        case `Bottom`:\n            colorType = `borderBottom`;\n            break;\n        case `Top`:\n            colorType = `borderTop`;\n            break;\n        case `Left`:\n            colorType = `borderLeft`;\n            break;\n        case `Right`:\n            colorType = `borderRight`;\n            break;\n    }\n    const colorStyle = color(colorType, rest, theme === null || theme === void 0 ? void 0 : theme.borderColor);\n    if (colorStyle) {\n        return colorStyle;\n    }\n    // Finally Handling Arbitrary Width Case\n    // border-[20px] or border-[2.5rem]\n    const prop = `border${direction === `All` ? `` : direction}Width`;\n    rest = rest.replace(/^-/, ``);\n    const numericValue = rest.slice(1, -1);\n    const arbitraryWidth = unconfiggedStyle(prop, numericValue);\n    // can't use % for border-radius in RN\n    if (typeof (arbitraryWidth === null || arbitraryWidth === void 0 ? void 0 : arbitraryWidth.style[prop]) !== `number`) {\n        return null;\n    }\n    return arbitraryWidth;\n}\nfunction borderWidth(value, direction, config) {\n    if (!config) {\n        return null;\n    }\n    value = value.replace(/^-/, ``);\n    const key = value === `` ? `DEFAULT` : value;\n    const configValue = config[key];\n    if (configValue === undefined) {\n        return null;\n    }\n    const prop = `border${direction === `All` ? `` : direction}Width`;\n    return getCompleteStyle(prop, configValue);\n}\nexport function borderRadius(value, config) {\n    if (!config) {\n        return null;\n    }\n    let [rest, direction] = parseAndConsumeDirection(value);\n    rest = rest.replace(/^-/, ``);\n    if (rest === ``) {\n        rest = `DEFAULT`;\n    }\n    const prop = `border${direction === `All` ? `` : direction}Radius`;\n    const configValue = config[rest];\n    if (configValue) {\n        return expand(getCompleteStyle(prop, configValue));\n    }\n    const arbitrary = unconfiggedStyle(prop, rest);\n    // can't use % for border-radius in RN\n    if (typeof (arbitrary === null || arbitrary === void 0 ? void 0 : arbitrary.style[prop]) !== `number`) {\n        return null;\n    }\n    return expand(arbitrary);\n}\n// RN only supports `borderRadius` + `border(top|bottom)(left|right)Radius`\nfunction expand(ir) {\n    if ((ir === null || ir === void 0 ? void 0 : ir.kind) !== `complete`)\n        return ir;\n    const top = ir.style.borderTopRadius;\n    if (top !== undefined) {\n        ir.style.borderTopLeftRadius = top;\n        ir.style.borderTopRightRadius = top;\n        delete ir.style.borderTopRadius;\n    }\n    const bottom = ir.style.borderBottomRadius;\n    if (bottom !== undefined) {\n        ir.style.borderBottomLeftRadius = bottom;\n        ir.style.borderBottomRightRadius = bottom;\n        delete ir.style.borderBottomRadius;\n    }\n    const left = ir.style.borderLeftRadius;\n    if (left !== undefined) {\n        ir.style.borderBottomLeftRadius = left;\n        ir.style.borderTopLeftRadius = left;\n        delete ir.style.borderLeftRadius;\n    }\n    const right = ir.style.borderRightRadius;\n    if (right !== undefined) {\n        ir.style.borderBottomRightRadius = right;\n        ir.style.borderTopRightRadius = right;\n        delete ir.style.borderRightRadius;\n    }\n    return ir;\n}\n","import { complete, parseStyleVal, parseUnconfigged } from '../helpers';\nexport function inset(type, value, isNegative, config) {\n    let insetDir = null;\n    if (type === `inset`) {\n        value = value.replace(/^(x|y)-/, (_, dir) => {\n            insetDir = dir === `x` ? `x` : `y`;\n            return ``;\n        });\n    }\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (configValue) {\n        const styleVal = parseStyleVal(configValue, { isNegative });\n        if (styleVal !== null) {\n            return insetStyle(type, insetDir, styleVal);\n        }\n    }\n    const unconfigged = parseUnconfigged(value, { isNegative });\n    if (unconfigged !== null) {\n        return insetStyle(type, insetDir, unconfigged);\n    }\n    return null;\n}\nfunction insetStyle(type, dir, styleVal) {\n    if (type !== `inset`) {\n        return complete({ [type]: styleVal });\n    }\n    switch (dir) {\n        case null:\n            return complete({\n                top: styleVal,\n                left: styleVal,\n                right: styleVal,\n                bottom: styleVal,\n            });\n        case `y`:\n            return complete({\n                top: styleVal,\n                bottom: styleVal,\n            });\n        case `x`:\n            return complete({\n                left: styleVal,\n                right: styleVal,\n            });\n    }\n}\n","import { complete, parseStyleVal } from '../helpers';\nexport function flexGrowShrink(type, value, config) {\n    var _a;\n    value = value.replace(/^-/, ``);\n    const configKey = value === `` ? `DEFAULT` : value;\n    const numericValue = Number((_a = config === null || config === void 0 ? void 0 : config[configKey]) !== null && _a !== void 0 ? _a : value);\n    if (!Number.isNaN(numericValue)) {\n        return complete({ [`flex${type}`]: numericValue });\n    }\n    return null;\n}\nexport function flex(value, config) {\n    var _a, _b;\n    value = (config === null || config === void 0 ? void 0 : config[value]) || value;\n    if ([`min-content`, `revert`, `unset`].includes(value)) {\n        // unsupported\n        return null;\n    }\n    // @see https://developer.mozilla.org/en-US/docs/Web/CSS/flex\n    // MDN: One value, unitless number: flex-grow flex-basis is then equal to 0.\n    if (value.match(/^\\d+(\\.\\d+)?$/)) {\n        return complete({\n            flexGrow: Number(value),\n            flexBasis: `0%`,\n        });\n    }\n    // MDN: Two values (both integers): flex-grow | flex-basis\n    let match = value.match(/^(\\d+)\\s+(\\d+)$/);\n    if (match) {\n        return complete({\n            flexGrow: Number(match[1]),\n            flexShrink: Number(match[2]),\n        });\n    }\n    // MDN: Two values: flex-grow | flex-basis\n    match = value.match(/^(\\d+)\\s+([^ ]+)$/);\n    if (match) {\n        const flexBasis = parseStyleVal((_a = match[2]) !== null && _a !== void 0 ? _a : ``);\n        if (!flexBasis) {\n            return null;\n        }\n        return complete({\n            flexGrow: Number(match[1]),\n            flexBasis,\n        });\n    }\n    // MDN: Three values: flex-grow | flex-shrink | flex-basis\n    match = value.match(/^(\\d+)\\s+(\\d+)\\s+(.+)$/);\n    if (match) {\n        const flexBasis = parseStyleVal((_b = match[3]) !== null && _b !== void 0 ? _b : ``);\n        if (!flexBasis) {\n            return null;\n        }\n        return complete({\n            flexGrow: Number(match[1]),\n            flexShrink: Number(match[2]),\n            flexBasis,\n        });\n    }\n    return null;\n}\n","import { getCompleteStyle, complete, parseStyleVal, unconfiggedStyle } from '../helpers';\nexport function widthHeight(type, value, context = {}, config) {\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (configValue !== undefined) {\n        return getCompleteStyle(type, configValue, context);\n    }\n    return unconfiggedStyle(type, value, context);\n}\nexport function minMaxWidthHeight(type, value, context = {}, config) {\n    const styleVal = parseStyleVal(config === null || config === void 0 ? void 0 : config[value], context);\n    if (styleVal) {\n        return complete({ [type]: styleVal });\n    }\n    if (value === `screen`) {\n        value = type.includes(`Width`) ? `100vw` : `100vh`;\n    }\n    return unconfiggedStyle(type, value, context);\n}\n","import { Unit } from '../types';\nimport { parseNumericValue, complete, toStyleVal, unconfiggedStyle, warn, } from '../helpers';\nexport function letterSpacing(value, isNegative, config) {\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (configValue) {\n        const parsed = parseNumericValue(configValue, { isNegative });\n        if (!parsed) {\n            return null;\n        }\n        const [number, unit] = parsed;\n        if (unit === Unit.em) {\n            return relativeLetterSpacing(number);\n        }\n        // @TODO, if we get a percentage based config value, theoretically we could\n        // make a font-size dependent style as well, wait for someone to raise an issue\n        if (unit === Unit.percent) {\n            warn(`percentage-based letter-spacing configuration currently unsupported, switch to \\`em\\`s, or open an issue if you'd like to see support added.`);\n            return null;\n        }\n        const styleVal = toStyleVal(number, unit, { isNegative });\n        if (styleVal !== null) {\n            return complete({ letterSpacing: styleVal });\n        }\n        return null;\n    }\n    return unconfiggedStyle(`letterSpacing`, value, { isNegative });\n}\nfunction relativeLetterSpacing(ems) {\n    return {\n        kind: `dependent`,\n        complete(style) {\n            const fontSize = style.fontSize;\n            if (typeof fontSize !== `number` || Number.isNaN(fontSize)) {\n                return `tracking-X relative letter spacing classes require font-size to be set`;\n            }\n            style.letterSpacing = Math.round((ems * fontSize + Number.EPSILON) * 100) / 100;\n        },\n    };\n}\n","import { parseNumericValue, complete } from '../helpers';\nexport function opacity(value, config) {\n    const configValue = config === null || config === void 0 ? void 0 : config[value];\n    if (configValue) {\n        const parsedConfig = parseNumericValue(String(configValue));\n        if (parsedConfig) {\n            return complete({ opacity: parsedConfig[0] });\n        }\n    }\n    const parsedArbitrary = parseNumericValue(value);\n    if (parsedArbitrary) {\n        return complete({ opacity: parsedArbitrary[0] / 100 });\n    }\n    return null;\n}\n","import { parseUnconfigged } from '../helpers';\nexport function shadowOpacity(value) {\n    const percentage = parseInt(value, 10);\n    if (Number.isNaN(percentage)) {\n        return null;\n    }\n    return {\n        kind: `complete`,\n        style: { shadowOpacity: percentage / 100 },\n    };\n}\nexport function shadowOffset(value) {\n    if (value.includes(`/`)) {\n        const [widthStr = ``, heightStr = ``] = value.split(`/`, 2);\n        const width = offsetValue(widthStr);\n        const height = offsetValue(heightStr);\n        if (width === null || height === null) {\n            return null;\n        }\n        return {\n            kind: `complete`,\n            style: {\n                shadowOffset: {\n                    width,\n                    height,\n                },\n            },\n        };\n    }\n    const number = offsetValue(value);\n    if (number === null) {\n        return null;\n    }\n    return {\n        kind: `complete`,\n        style: {\n            shadowOffset: {\n                width: number,\n                height: number,\n            },\n        },\n    };\n}\nfunction offsetValue(value) {\n    const parsed = parseUnconfigged(value);\n    return typeof parsed === `number` ? parsed : null;\n}\n","import fontSize from './resolve/font-size';\nimport lineHeight from './resolve/line-height';\nimport spacing from './resolve/spacing';\nimport screens from './screens';\nimport { isOrientation, isPlatform, } from './types';\nimport fontFamily from './resolve/font-family';\nimport { color, colorOpacity } from './resolve/color';\nimport { border, borderRadius } from './resolve/borders';\nimport { getCompleteStyle, getDirection, unconfiggedStyle, warn, complete, parseNumericValue, } from './helpers';\nimport { inset } from './resolve/inset';\nimport { flexGrowShrink, flex } from './resolve/flex';\nimport { widthHeight, minMaxWidthHeight } from './resolve/width-height';\nimport { letterSpacing } from './resolve/letter-spacing';\nimport { opacity } from './resolve/opacity';\nimport { shadowOpacity, shadowOffset } from './resolve/shadow';\nexport default class ClassParser {\n    constructor(input, config = {}, cache, device, platform) {\n        var _a, _b, _c, _d, _e, _f;\n        this.config = config;\n        this.cache = cache;\n        this.position = 0;\n        this.isNull = false;\n        this.isNegative = false;\n        this.context = {};\n        this.context.device = device;\n        const parts = input.trim().split(`:`);\n        let prefixes = [];\n        if (parts.length === 1) {\n            this.string = input;\n        }\n        else {\n            this.string = (_a = parts.pop()) !== null && _a !== void 0 ? _a : ``;\n            prefixes = parts;\n        }\n        this.char = this.string[0];\n        const widthBreakpoints = screens((_b = this.config.theme) === null || _b === void 0 ? void 0 : _b.screens);\n        // loop through the prefixes ONE time, extracting useful info\n        for (const prefix of prefixes) {\n            if (widthBreakpoints[prefix]) {\n                const breakpointOrder = (_c = widthBreakpoints[prefix]) === null || _c === void 0 ? void 0 : _c[2];\n                if (breakpointOrder !== undefined) {\n                    this.order = ((_d = this.order) !== null && _d !== void 0 ? _d : 0) + breakpointOrder;\n                }\n                const windowWidth = (_e = device.windowDimensions) === null || _e === void 0 ? void 0 : _e.width;\n                if (windowWidth) {\n                    const [min, max] = (_f = widthBreakpoints[prefix]) !== null && _f !== void 0 ? _f : [0, 0];\n                    if (windowWidth <= min || windowWidth > max) {\n                        // breakpoint does not match\n                        this.isNull = true;\n                    }\n                }\n                else {\n                    this.isNull = true;\n                }\n            }\n            else if (isPlatform(prefix)) {\n                this.isNull = prefix !== platform;\n            }\n            else if (isOrientation(prefix)) {\n                if (!device.windowDimensions) {\n                    this.isNull = true;\n                }\n                else {\n                    const deviceOrientation = device.windowDimensions.width > device.windowDimensions.height\n                        ? `landscape`\n                        : `portrait`;\n                    if (deviceOrientation !== prefix) {\n                        this.isNull = true;\n                    }\n                    else {\n                        this.incrementOrder();\n                    }\n                }\n            }\n            else if (prefix === `retina`) {\n                if (device.pixelDensity === 2) {\n                    this.incrementOrder();\n                }\n                else {\n                    this.isNull = true;\n                }\n            }\n            else if (prefix === `dark`) {\n                if (device.colorScheme !== `dark`) {\n                    this.isNull = true;\n                }\n                else {\n                    this.incrementOrder();\n                }\n            }\n            else if (!this.handlePossibleArbitraryBreakpointPrefix(prefix)) {\n                this.isNull = true;\n            }\n        }\n    }\n    parse() {\n        if (this.isNull) {\n            return { kind: `null` };\n        }\n        // resolve things like ios:hidden, after prefix removed\n        const cached = this.cache.getIr(this.rest);\n        if (cached) {\n            return cached;\n        }\n        this.parseIsNegative();\n        const ir = this.parseUtility();\n        if (!ir) {\n            return { kind: `null` };\n        }\n        if (this.order !== undefined) {\n            return { kind: `ordered`, order: this.order, styleIr: ir };\n        }\n        return ir;\n    }\n    parseUtility() {\n        var _a, _b, _c, _d, _e;\n        const theme = this.config.theme;\n        let style = null;\n        switch (this.char) {\n            case `m`:\n            case `p`: {\n                const match = this.peekSlice(1, 3).match(/^(t|b|r|l|x|y)?-/);\n                if (match) {\n                    const prop = this.char === `m` ? `margin` : `padding`;\n                    this.advance(((_b = (_a = match[0]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) + 1);\n                    const spacingDirection = getDirection(match[1]);\n                    const style = spacing(prop, spacingDirection, this.isNegative, this.rest, (_c = this.config.theme) === null || _c === void 0 ? void 0 : _c[prop]);\n                    if (style)\n                        return style;\n                }\n            }\n        }\n        if (this.consumePeeked(`h-`)) {\n            style = widthHeight(`height`, this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.height);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`w-`)) {\n            style = widthHeight(`width`, this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.width);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`min-w-`)) {\n            style = minMaxWidthHeight(`minWidth`, this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.minWidth);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`min-h-`)) {\n            style = minMaxWidthHeight(`minHeight`, this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.minHeight);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`max-w-`)) {\n            style = minMaxWidthHeight(`maxWidth`, this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.maxWidth);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`max-h-`)) {\n            style = minMaxWidthHeight(`maxHeight`, this.rest, this.context, theme === null || theme === void 0 ? void 0 : theme.maxHeight);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`leading-`)) {\n            style = lineHeight(this.rest, theme === null || theme === void 0 ? void 0 : theme.lineHeight);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`text-`)) {\n            style = fontSize(this.rest, theme === null || theme === void 0 ? void 0 : theme.fontSize, this.context);\n            if (style)\n                return style;\n            style = color(`text`, this.rest, theme === null || theme === void 0 ? void 0 : theme.textColor);\n            if (style)\n                return style;\n            if (this.consumePeeked(`opacity-`)) {\n                style = colorOpacity(`text`, this.rest);\n                if (style)\n                    return style;\n            }\n        }\n        if (this.consumePeeked(`font-`)) {\n            style = fontFamily(this.rest, theme === null || theme === void 0 ? void 0 : theme.fontFamily);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`aspect-`)) {\n            if (this.consumePeeked(`ratio-`)) {\n                warn(`\\`aspect-ratio-{ratio}\\` is deprecated, use \\`aspect-{ratio}\\` instead`);\n            }\n            style = getCompleteStyle(`aspectRatio`, this.rest, { fractions: true });\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`tint-`)) {\n            style = color(`tint`, this.rest, theme === null || theme === void 0 ? void 0 : theme.colors);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`bg-`)) {\n            style = color(`bg`, this.rest, theme === null || theme === void 0 ? void 0 : theme.backgroundColor);\n            if (style)\n                return style;\n            if (this.consumePeeked(`opacity-`)) {\n                style = colorOpacity(`bg`, this.rest);\n                if (style)\n                    return style;\n            }\n        }\n        if (this.consumePeeked(`border`)) {\n            style = border(this.rest, theme);\n            if (style)\n                return style;\n            if (this.consumePeeked(`-opacity-`)) {\n                style = colorOpacity(`border`, this.rest);\n                if (style)\n                    return style;\n            }\n        }\n        if (this.consumePeeked(`rounded`)) {\n            style = borderRadius(this.rest, theme === null || theme === void 0 ? void 0 : theme.borderRadius);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`bottom-`)) {\n            style = inset(`bottom`, this.rest, this.isNegative, theme === null || theme === void 0 ? void 0 : theme.inset);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`top-`)) {\n            style = inset(`top`, this.rest, this.isNegative, theme === null || theme === void 0 ? void 0 : theme.inset);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`left-`)) {\n            style = inset(`left`, this.rest, this.isNegative, theme === null || theme === void 0 ? void 0 : theme.inset);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`right-`)) {\n            style = inset(`right`, this.rest, this.isNegative, theme === null || theme === void 0 ? void 0 : theme.inset);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`inset-`)) {\n            style = inset(`inset`, this.rest, this.isNegative, theme === null || theme === void 0 ? void 0 : theme.inset);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`flex-`)) {\n            if (this.consumePeeked(`grow`)) {\n                style = flexGrowShrink(`Grow`, this.rest, theme === null || theme === void 0 ? void 0 : theme.flexGrow);\n            }\n            else if (this.consumePeeked(`shrink`)) {\n                style = flexGrowShrink(`Shrink`, this.rest, theme === null || theme === void 0 ? void 0 : theme.flexShrink);\n            }\n            else {\n                style = flex(this.rest, theme === null || theme === void 0 ? void 0 : theme.flex);\n            }\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`grow`)) {\n            style = flexGrowShrink(`Grow`, this.rest, theme === null || theme === void 0 ? void 0 : theme.flexGrow);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`shrink`)) {\n            style = flexGrowShrink(`Shrink`, this.rest, theme === null || theme === void 0 ? void 0 : theme.flexShrink);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`shadow-color-opacity-`)) {\n            style = colorOpacity(`shadow`, this.rest);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`shadow-opacity-`)) {\n            style = shadowOpacity(this.rest);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`shadow-offset-`)) {\n            style = shadowOffset(this.rest);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`shadow-radius-`)) {\n            style = unconfiggedStyle(`shadowRadius`, this.rest);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`shadow-`)) {\n            style = color(`shadow`, this.rest, theme === null || theme === void 0 ? void 0 : theme.colors);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`elevation-`)) {\n            const elevation = parseInt(this.rest, 10);\n            if (!Number.isNaN(elevation)) {\n                return complete({ elevation });\n            }\n        }\n        if (this.consumePeeked(`opacity-`)) {\n            style = opacity(this.rest, theme === null || theme === void 0 ? void 0 : theme.opacity);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`tracking-`)) {\n            style = letterSpacing(this.rest, this.isNegative, theme === null || theme === void 0 ? void 0 : theme.letterSpacing);\n            if (style)\n                return style;\n        }\n        if (this.consumePeeked(`z-`)) {\n            const zIndex = Number((_e = (_d = theme === null || theme === void 0 ? void 0 : theme.zIndex) === null || _d === void 0 ? void 0 : _d[this.rest]) !== null && _e !== void 0 ? _e : this.rest);\n            if (!Number.isNaN(zIndex)) {\n                return complete({ zIndex });\n            }\n        }\n        warn(`\\`${this.rest}\\` unknown or invalid utility`);\n        return null;\n    }\n    handlePossibleArbitraryBreakpointPrefix(prefix) {\n        var _a;\n        // save the expense of running the regex with a quick sniff test\n        if (prefix[0] !== `m`)\n            return false;\n        const match = prefix.match(/^(min|max)-(w|h)-\\[([^\\]]+)\\]$/);\n        if (!match)\n            return false;\n        if (!((_a = this.context.device) === null || _a === void 0 ? void 0 : _a.windowDimensions)) {\n            this.isNull = true;\n            return true;\n        }\n        const windowDims = this.context.device.windowDimensions;\n        const [, type = ``, dir = ``, amount = ``] = match;\n        const checkDimension = dir === `w` ? windowDims.width : windowDims.height;\n        const parsedAmount = parseNumericValue(amount, this.context);\n        if (parsedAmount === null) {\n            this.isNull = true;\n            return true;\n        }\n        const [bound, unit] = parsedAmount;\n        if (unit !== `px`) {\n            this.isNull = true;\n        }\n        if (type === `min` ? checkDimension >= bound : checkDimension <= bound) {\n            this.incrementOrder();\n        }\n        else {\n            this.isNull = true;\n        }\n        return true;\n    }\n    advance(amount = 1) {\n        this.position += amount;\n        this.char = this.string[this.position];\n    }\n    get rest() {\n        return this.peekSlice(0, this.string.length);\n    }\n    peekSlice(begin, end) {\n        return this.string.slice(this.position + begin, this.position + end);\n    }\n    consumePeeked(string) {\n        if (this.peekSlice(0, string.length) === string) {\n            this.advance(string.length);\n            return true;\n        }\n        return false;\n    }\n    parseIsNegative() {\n        if (this.char === `-`) {\n            this.advance();\n            this.isNegative = true;\n            this.context.isNegative = true;\n        }\n    }\n    incrementOrder() {\n        var _a;\n        this.order = ((_a = this.order) !== null && _a !== void 0 ? _a : 0) + 1;\n    }\n}\n","export function parseInputs(inputs) {\n    let classNames = [];\n    let styles = null;\n    inputs.forEach((input) => {\n        if (typeof input === `string`) {\n            classNames = [...classNames, ...split(input)];\n        }\n        else if (Array.isArray(input)) {\n            classNames = [...classNames, ...input.flatMap(split)];\n        }\n        else if (typeof input === `object` && input !== null) {\n            for (const [key, value] of Object.entries(input)) {\n                if (typeof value === `boolean`) {\n                    classNames = [...classNames, ...(value ? split(key) : [])];\n                }\n                else if (styles) {\n                    styles[key] = value;\n                }\n                else {\n                    styles = { [key]: value };\n                }\n            }\n        }\n    });\n    return [classNames.filter(Boolean).filter(unique), styles];\n}\nfunction split(str) {\n    return str.trim().split(/\\s+/);\n}\nfunction unique(className, index, classes) {\n    return classes.indexOf(className) === index;\n}\n","const plugin = (handler) => {\n    return { handler, config: undefined };\n};\nexport default plugin;\nexport function getAddedUtilities(plugins) {\n    var _a;\n    return ((_a = plugins === null || plugins === void 0 ? void 0 : plugins.reduce((utils, plugin) => ({ ...utils, ...callPluginFunction(plugin.handler) }), {})) !== null && _a !== void 0 ? _a : {});\n}\nfunction callPluginFunction(pluginFn) {\n    let added = {};\n    pluginFn({\n        addUtilities: (utilities) => {\n            added = utilities;\n        },\n        ...core,\n    });\n    return added;\n}\nfunction notImplemented(fn) {\n    throw new Error(`tailwindcss plugin function argument object prop \"${fn}\" not implemented`);\n}\nconst core = {\n    addComponents: notImplemented,\n    addBase: notImplemented,\n    addVariant: notImplemented,\n    e: notImplemented,\n    prefix: notImplemented,\n    theme: notImplemented,\n    variants: notImplemented,\n    config: notImplemented,\n    corePlugins: notImplemented,\n    matchUtilities: notImplemented,\n    postcss: null,\n};\n","import type { TwConfig } from 'twrnc'\n\nimport * as twrnc from 'twrnc/create'\n\ntype TwPlugin = TwConfig['plugins'][number]\n\nconst defaultShadows: TwPlugin = {\n  handler: ({ addUtilities }) => {\n    const presets = {\n      'shadow-sm': { boxShadow: '0 1px 2px 0 rgb(0 0 0 / 0.05)' },\n      shadow: {\n        boxShadow:\n          '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n      },\n      'shadow-md': {\n        boxShadow:\n          '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n      },\n      'shadow-lg': {\n        boxShadow:\n          '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n      },\n      'shadow-xl': {\n        boxShadow:\n          '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n      },\n      'shadow-2xl': {\n        boxShadow: '0 25px 50px -12px rgb(0 0 0 / 0.25)',\n      },\n      'shadow-inner': {\n        boxShadow: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',\n      },\n      'shadow-none': { boxShadow: '0 0 #0000' },\n    }\n\n    addUtilities(presets)\n  },\n}\n\nfunction createTw(config?: TwConfig) {\n  return twrnc.create(\n    {\n      ...config,\n      plugins: [...(config?.plugins ?? []), defaultShadows],\n    },\n    'web'\n  )\n}\n\nlet tw\nexport default function getTw({\n  width,\n  height,\n  config,\n}: {\n  width: number\n  height: number\n  config?: TwConfig\n}) {\n  if (!tw) {\n    tw = createTw(config)\n  }\n  tw.setWindowDimensions({ width: +width, height: +height })\n  return tw\n}\n","import type { ReactElement, ReactNode } from 'react'\n\nimport { isClass, isForwardRefComponent, isReactComponent } from '../utils.js'\n\n/** Elements whose content is text, so their inner HTML is text too. */\nconst RAW_TEXT_ELEMENTS = new Set(['style', 'script'])\n\n/**\n * Renders the components of an element tree, so that it only has intrinsic\n * elements, fragments and text. Components are required to be pure, so they\n * can be rendered once before layout, which then knows the whole tree, and\n * sibling components are rendered concurrently.\n */\nexport async function resolveComponents(node: ReactNode): Promise<ReactNode> {\n  if (node === null || typeof node !== 'object') return node\n  if (Array.isArray(node)) return Promise.all(node.map(resolveComponents))\n\n  const element = node as ReactElement\n  const { type, props } = element\n\n  if (isReactComponent(type)) {\n    if (isClass(type as Function)) {\n      throw new Error('Class component is not supported.')\n    }\n    // This is a hack to support React.forwardRef wrapped components.\n    // https://github.com/vercel/satori/issues/600\n    const render = isForwardRefComponent(type) ? (type as any).render : type\n    return resolveComponents(await render(props))\n  }\n\n  if (!props) return element\n\n  if (\n    RAW_TEXT_ELEMENTS.has(type as string) &&\n    props.dangerouslySetInnerHTML !== undefined\n  ) {\n    const { dangerouslySetInnerHTML, ...rest } = props\n    return {\n      ...element,\n      props: {\n        ...rest,\n        children: String(dangerouslySetInnerHTML?.__html ?? ''),\n      },\n    }\n  }\n\n  if (props.children === undefined) return element\n  return {\n    ...element,\n    props: { ...props, children: await resolveComponents(props.children) },\n  }\n}\n"],"mappings":"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GAAAC,GAAAD,GAAA,qBAAAE,KAeO,SAASA,IAAkB,CAChC,OAAOC,EACT,CAjBA,IAOMC,GACAD,GARNE,GAAAC,GAAA,KAIAC,KACAC,KAEMJ,GAASK,GAAmB,EAC5BN,GAAgB,YAAY,YAAYO,GAAQN,GAAO,OAAO,EAAE,KACpE,CAAC,CAAE,SAAAO,CAAS,KACVP,GAAO,YAAYO,CAAQ,EACpBP,GAEX,ICbA,IAAAQ,GAAAC,GAAAC,IAAA,cACA,OAAO,eAAeA,GAAS,aAAc,CACzC,MAAO,EACX,CAAC,EACD,OAAO,eAAeA,GAAS,UAAW,CACtC,WAAY,GACZ,IAAK,IAAIC,EACb,CAAC,EACD,SAASA,GAASC,EAAO,CAErB,GADAA,EAAQ,GAAGA,CAAK,GACZA,IAAU,IACV,MAAO,IAGX,GAAI,4CAA4C,KAAKA,CAAK,EACtD,OAAOA,EAAM,QAAQ,SAAWC,GAAOA,IAAS,IAAM,GAAK,GAAG,EAElE,GAAID,EAAM,SAAS,MAAM,GAAKA,EAAM,SAAS,OAAO,EAChD,MAAO,QAAQA,CAAK,QAE5B,ICpBA,IAAAE,GAAAC,GAAAC,IAAA,cACA,OAAO,eAAeA,GAAS,aAAc,CACzC,MAAO,EACX,CAAC,EACD,OAAO,eAAeA,GAAS,UAAW,CACtC,WAAY,GACZ,IAAK,IAAIC,EACb,CAAC,EACD,IAAMA,GAAW,CACb,YACA,YACA,gBACA,gBACA,aACA,WACA,QACA,YACA,SACA,QACA,aACA,kBACA,gBACA,UACA,eACA,aACA,QACA,QACA,SACA,YACA,UACA,cACA,SACA,YACA,YACA,QACA,WACA,WACA,OACA,aACA,WACA,YACA,cACA,iBACA,gBACA,kBACA,YACA,SACA,OACA,QACA,YACA,YACA,SACA,cACA,aACA,SACA,iBACA,kBACA,iBACA,eACA,gBACA,oBACA,gBACA,aACA,UACA,cACA,cACA,aACA,kBACA,eACA,eACA,sBACA,mBACA,gBACA,WACA,eACA,aACA,eACA,aACA,iBACA,eACA,MACA,QACA,cACA,cACA,cACA,gBACA,YACA,YACA,cACA,WACA,qBACA,iBACA,eACA,aACA,YACA,eACA,cACA,cACA,cACA,gBACA,kBACA,oBACA,kBACA,qBACA,qBACA,iBACA,uBACA,iBACA,qBACA,mBACA,mBACA,OACA,SACA,cACA,YACA,iBACA,UACA,YACA,aACA,gBACA,aACA,WACA,aACA,gBACA,YACA,qBACA,aACA,gBACA,YACA,cACA,iBACA,sBACA,sBACA,0BACA,sBACA,gBACA,mBACA,qBACA,aACA,cACA,UACA,sBACA,eACA,YACA,iBACA,eACA,eACA,gBACA,eACA,YACA,YACA,cACA,kBACA,kBACA,OACA,aACA,WACA,aACA,YACA,YACA,SACA,WACA,QACA,SACA,eACA,qBACA,mBACA,oBACA,oBACA,iBACA,kBACA,mBACA,gBACA,iBACA,qBACA,kBACA,qBACA,2BACA,aACA,SACJ,ICpLA,IAAAC,GAAAC,GAAAC,IAAA,cACA,OAAO,eAAeA,GAAS,aAAc,CACzC,MAAO,EACX,CAAC,EACD,OAAO,eAAeA,GAAS,UAAW,CACtC,WAAY,GACZ,IAAK,IAAIC,EACb,CAAC,EACD,SAASA,GAASC,EAAcC,EAAS,CACrC,OAAID,IAAiB,OACVC,EAES,MAAM,QAAQD,CAAY,EAAIA,EAAe,CAC7D,GAAG,IAAI,IAAIC,EAAQ,OAAQC,GAChBF,IAAiB,IAASA,EAAaE,CAAU,IAAM,EACjE,EAAE,OAAO,OAAO,KAAKF,CAAY,EAAE,OAAQE,GACjCF,EAAaE,CAAU,IAAM,EACvC,CAAC,CAAC,CACP,CAEJ,ICpBA,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,CACAA,GAAO,QAAU,CACf,QAAS,CAAC,EACV,QAAS,CAAC,EACV,SAAU,QACV,MAAO,CACL,QAAS,CACP,GAAI,QACJ,GAAI,QACJ,GAAI,SACJ,GAAI,SACJ,MAAO,QACT,EACA,OAAQ,CAAC,CAAE,OAAAC,CAAO,KAAO,CACvB,QAASA,EAAO,QAChB,QAASA,EAAO,QAChB,YAAaA,EAAO,YACpB,MAAOA,EAAO,MACd,MAAOA,EAAO,MACd,MAAOA,EAAO,MACd,KAAMA,EAAO,KACb,KAAMA,EAAO,KAC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OAAQ,CACN,QAASD,GACT,UAAW,MACX,aAAc,MACd,WAAY,GACZ,YAAa,EACf,EACA,EAAG,CACD,QAASA,GACT,UAAW,MACX,aAAc,KAChB,EACA,IAAK,CACH,QAASA,EACX,EACA,WAAY,CACV,QAASA,GACT,UAAW,MACX,aAAc,MACd,WAAY,GACZ,YAAa,EACf,EACA,OAAQ,CACN,QAASA,GACT,UAAW,QACb,EACA,GAAI,CACF,QAASA,GACT,MAAO,OACP,UAAW,QACX,aAAc,QACd,WAAY,OACZ,YAAa,OACb,YAAa,EACb,YAAa,QACb,SAAU,QACZ,EAEA,GAAI,CACF,QAASA,GACT,SAAU,MACV,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACd,EACA,GAAI,CACF,QAASA,GACT,SAAU,QACV,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACd,EACA,GAAI,CACF,QAASA,GACT,SAAU,SACV,UAAW,MACX,aAAc,MACd,WAAY,EACZ,YAAa,EACb,WAAY,MACd,EACA,GAAI,CACF,QAASA,GACT,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACd,EACA,GAAI,CACF,QAASA,GACT,SAAU,SACV,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACd,EACA,GAAI,CACF,QAASA,GACT,SAAU,SACV,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACd,EAGA,GAAI,CACF,QAASA,GACT,UAAW,MACX,aAAc,MACd,YAAa,EACf,EACA,GAAI,CACF,QAASA,GACT,UAAW,MACX,aAAc,MACd,YAAa,EACf,EACA,KAAM,CACJ,QAASA,GACT,UAAW,MACX,aAAc,MACd,YAAa,EACf,EACA,IAAK,CACH,QAASA,GACT,UAAW,MACX,aAAc,MACd,YAAa,EACf,EACA,GAAI,CAAE,QAAS,WAAY,EAC3B,GAAI,CACF,QAASA,GACT,UAAW,MACX,aAAc,KAChB,EACA,GAAIC,GACJ,GAAI,CACF,QAASD,GACT,WAAY,EACd,EAGA,EAA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","names":["pushLength","data","length","fallback","scale","calcs","value","limit","SIZING_KEYWORD","pushAlignment","alignment","ALIGNMENT","encodeStyle","style","DISPLAY","OVERFLOW","edge","FLEX_DIRECTION","FLEX_WRAP","FLOAT","CLEAR","encodeGridStyle","pushString","string","i","pushLineNames","lineNames","names","name","pushTrackBreadth","breadth","pushTrackSizes","tracks","min","max","pushTrackList","list","track","pushGridLine","line","GRID_AUTO_FLOW","areas","area","lines","encodeTree","root","nodes","contents","childIndices","collectChildren","node","into","child","visit","index","children","a","b","init_encode","__esmMin","zeroEdges","emptyLayout","LayoutNode","init_node","__esmMin","style","child","index","_a","width","padding","border","roundLayouts","nodes","childIndices","scale","round","value","ceil","visit","index","parentLeft","parentTop","roundedParentLeft","roundedParentTop","node","layout","left","top","roundedLeft","roundedTop","right","bottom","child","createLayoutEngine","exports","calcs","basis","knownWidth","knownHeight","availableWidth","availableHeight","exclusionsPointer","exclusionCount","out","values","exclusions","i","width","height","result","instance","root","pointScaleFactor","outerNodes","outerCalcs","outerScale","layoutScale","encoded","encodeTree","data","ptr","output","OUTPUT_STRIDE","edges","offset","emptyLayout","css","input","length","font","init_layout_engine","__esmMin","init_encode","init_node","require_hbjs","__commonJSMin","exports","module","hbjs","Module","utf8Decoder","utf8Encoder","addFunction","removeFunction","stackSave","stackRestore","stackAlloc","freeFuncPtr","ptr","TRACE_PHASE_DONT_STOP","TRACE_PHASE_GSUB","TRACE_PHASE_GPOS","STATIC_ARRAY_SIZE","HB_MEMORY_MODE_WRITABLE","HB_SET_VALUE_INVALID","HB_OT_NAME_ID_INVALID","bufferContentType","bufferSerializeFlags","bufferFlags","_hb_tag","s","_hb_untag","tag","_utf8_ptr_to_string","length","end","_utf16_ptr_to_string","_string_to_ascii_ptr","text","i","char","_string_to_utf8_ptr","_string_to_utf16_ptr","words","_language_to_string","language","_language_from_string","str","languageStr","languagePtr","createBlob","blob","blobPtr","_typed_array_from_set","setPtr","setCount","arrayPtr","arrayOffset","array","createFace","index","upem","table","blobptr","table_string","sp","axis","c","result","_","unicodeSetPtr","tableTag","startOffset","scriptCount","scriptCountPtr","scriptTagsPtr","tags","scriptTags","featureCount","featureCountPtr","featureTagsPtr","scriptIndex","languageCount","languageCountPtr","languageTagsPtr","languageTags","languageIndex","featureTags","glyph","numEntriesPtr","entriesPtr","numEntries","entries","nameId","nameLen","textSizePtr","textPtr","name","featureIndex","labelIdPtr","tooltipIdPtr","sampleIdPtr","numNamedParametersPtr","firstParameterIdPtr","found","names","uiLabelNameId","uiTooltipTextNameId","sampleTextNameId","numNamedParameters","firstParameterId","paramUiLabelNameIds","pathBuffer","createFont","face","drawFuncsPtr","moveToPtr","lineToPtr","cubicToPtr","quadToPtr","closePathPtr","glyphToPath","glyphId","moveTo","dfuncs","draw_data","draw_state","to_x","to_y","user_data","lineTo","cubicTo","c1_x","c1_y","c2_x","c2_y","quadTo","c_x","c_y","closePath","glyphName","strSize","strPtr","extentsPtr","extents","xPtr","yPtr","origin","glyphIdPtr","namePtr","path","x","row","xScale","yScale","variations","vars","entry","fontFuncs","createFontFuncs","func","funcPtr","fontPtr","font_data","font","len","glyphPtr","advance","firstGlyph","secondGlyph","kerning","size","unicode","variationSelector","createBuffer","itemOffset","itemLength","codePoints","codePointsPtr","dir","flags","flagsValue","script","level","traceFunc","bufferPtr","messagePtr","message","buffer","traceFuncPtr","infosPtr32","infosArray","infos","positionsPtr32","positionsArray","positions","out","info","idx","start","format","bufLen","bufPtr","bufConsumedPtr","flag","bufConsumed","buf","json","shape","features","featuresPtr","featuresLen","feature","shapeWithTrace","stop_at","stop_phase","trace","currentPhase","stopping","failure","traceBuf","version","versionPtr","version_string","otTagToScript","hbTag","otTagToLanguage","require_hb","__commonJSMin","exports","module","createHarfBuzz","_a","_scriptName","moduleArg","moduleRtn","Module","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","ENVIRONMENT_IS_NODE","arguments_","thisProgram","quit_","status","toThrow","scriptDirectory","locateFile","path","readAsync","readBinary","fs","filename","isFileURI","ret","binary","url","xhr","resolve","reject","response","out","err","wasmBase64","wasmBinary","c","ABORT","EXITSTATUS","readyPromiseResolve","readyPromiseReject","wasmMemory","HEAP8","HEAPU8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","HEAP64","HEAPU64","runtimeInitialized","updateMemoryViews","b","preRun","addOnPreRun","callRuntimeCallbacks","onPreRuns","initRuntime","wasmExports","postRun","addOnPostRun","onPostRuns","runDependencies","dependenciesFulfilled","addRunDependency","id","removeRunDependency","callback","abort","what","e","wasmBinaryFile","findWasmBinary","getBinarySync","file","getWasmBinary","binaryFile","instantiateArrayBuffer","imports","instance","reason","instantiateAsync","instantiationResult","getWasmImports","wasmImports","createWasm","receiveInstance","wasmTable","assignWasmExports","receiveInstantiationResult","result","info","mod","inst","ExitStatus","callbacks","cb","noExitRuntime","stackRestore","val","__emscripten_stack_restore","stackSave","_emscripten_stack_get_current","__abort_js","runtimeKeepaliveCounter","__emscripten_runtime_keepalive_clear","timers","handleException","keepRuntimeAlive","_proc_exit","code","exitJS","implicit","_exit","maybeExit","callUserCallback","func","_emscripten_get_now","__setitimer_js","which","timeout_ms","__emscripten_timeout","getHeapMax","alignMemory","size","alignment","growMemory","oldHeapSize","pages","_emscripten_resize_heap","requestedSize","oldSize","maxHeapSize","cutDown","overGrownHeapSize","newSize","replacement","uleb128EncodeWithLen","arr","n","wasmTypeCodes","generateTypePack","types","type","convertJsFunctionToWasm","sig","bytes","wrappedFunc","getWasmTableEntry","funcPtr","updateTableMap","offset","count","functionsInTableMap","i","item","getFunctionAddress","freeTableIndexes","getEmptyTableSlot","setWasmTableEntry","idx","addFunction","rtn","wrapped","removeFunction","index","stackAlloc","sz","__emscripten_stack_alloc","_hb_blob_create","_hb_blob_destroy","_hb_blob_get_length","_hb_blob_get_data","_hb_buffer_serialize","_hb_buffer_create","_hb_buffer_reset","_hb_buffer_reference","_hb_buffer_destroy","_hb_buffer_get_content_type","_hb_buffer_set_direction","_hb_buffer_set_script","_hb_buffer_set_language","_hb_buffer_set_flags","_hb_buffer_set_cluster_level","_hb_buffer_clear_contents","_hb_buffer_get_length","_hb_buffer_get_glyph_infos","_hb_buffer_get_glyph_positions","_hb_glyph_info_get_glyph_flags","_hb_buffer_guess_segment_properties","_hb_buffer_add_utf8","_hb_buffer_add_utf16","_hb_buffer_add_codepoints","_hb_buffer_set_message_func","_hb_language_from_string","_hb_language_to_string","_hb_script_from_string","_hb_version","_hb_version_string","_hb_feature_from_string","_malloc","_free","_hb_draw_funcs_set_move_to_func","_hb_draw_funcs_set_line_to_func","_hb_draw_funcs_set_quadratic_to_func","_hb_draw_funcs_set_cubic_to_func","_hb_draw_funcs_set_close_path_func","_hb_draw_funcs_create","_hb_draw_funcs_destroy","_hb_face_create","_hb_face_destroy","_hb_face_reference_table","_hb_face_get_upem","_hb_face_collect_unicodes","_hb_font_funcs_create","_hb_font_funcs_destroy","_hb_font_funcs_set_font_h_extents_func","_hb_font_funcs_set_font_v_extents_func","_hb_font_funcs_set_nominal_glyph_func","_hb_font_funcs_set_nominal_glyphs_func","_hb_font_funcs_set_variation_glyph_func","_hb_font_funcs_set_glyph_h_advance_func","_hb_font_funcs_set_glyph_v_advance_func","_hb_font_funcs_set_glyph_h_advances_func","_hb_font_funcs_set_glyph_v_advances_func","_hb_font_funcs_set_glyph_h_origin_func","_hb_font_funcs_set_glyph_v_origin_func","_hb_font_funcs_set_glyph_h_kerning_func","_hb_font_funcs_set_glyph_extents_func","_hb_font_funcs_set_glyph_name_func","_hb_font_funcs_set_glyph_from_name_func","_hb_font_get_h_extents","_hb_font_get_v_extents","_hb_font_get_glyph_h_advance","_hb_font_get_glyph_v_advance","_hb_font_get_glyph_h_origin","_hb_font_get_glyph_v_origin","_hb_font_get_glyph_extents","_hb_font_get_glyph_from_name","_hb_font_draw_glyph","_hb_font_glyph_to_string","_hb_font_create","_hb_font_set_variations","_hb_font_create_sub_font","_hb_font_reference","_hb_font_destroy","_hb_font_set_funcs","_hb_font_set_scale","_hb_ot_layout_get_glyph_class","_hb_ot_layout_table_get_script_tags","_hb_ot_layout_table_get_feature_tags","_hb_ot_layout_script_get_language_tags","_hb_ot_layout_language_get_feature_tags","_hb_ot_layout_feature_get_name_ids","_hb_ot_name_list_names","_hb_ot_name_get_utf16","_hb_set_create","_hb_set_destroy","_hb_ot_tag_to_script","_hb_ot_tag_to_language","_hb_ot_var_get_axis_infos","_hb_set_get_population","_hb_set_next_many","_hb_shape","run","doRun","preInit","require_harfbuzzjs","__commonJSMin","exports","module","hbjs","hb","resolve","reject","instance","base64","bytes","layout_default","init_layout","__esmMin","char","wasm_bundled_exports","__export","getLayoutEngine","loadingEngine","engine","init_wasm_bundled","__esmMin","init_layout","init_layout_engine","createLayoutEngine","layout_default","instance","require_negateValue","__commonJSMin","exports","_default","value","sign","require_corePluginList","__commonJSMin","exports","_default","require_configurePlugins","__commonJSMin","exports","_default","pluginConfig","plugins","pluginName","require_defaultConfig_stub","__commonJSMin","exports","module","colors","theme","breakpoints","log_exports","__export","log_default","init_log","__esmMin","key","messages","require_colors","__commonJSMin","exports","_default","_log","_interopRequireDefault","obj","warn","version","from","to","require_defaults","__commonJSMin","exports","defaults","target","sources","source","k","ref","k1","ref1","require_toPath","__commonJSMin","exports","toPath","path","openBrackets","closedBrackets","require_normalizeConfig","__commonJSMin","exports","normalizeConfig","_log","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","cacheBabelInterop","cacheNodeInterop","obj","cache","newObj","hasPropertyDescriptor","key","desc","config","path","value","value1","ref","content","purge","safelist","_prefix","extract","ref1","ref2","ref3","ref4","ref5","ref6","ref7","ref8","ref9","extractors","defaultExtractor","extensions","extractor","extension","transform","transformers","file","require_isPlainObject","__commonJSMin","exports","isPlainObject","value","prototype","require_cloneDeep","__commonJSMin","exports","cloneDeep","value","child","k","v","require_unesc","__commonJSMin","exports","module","unesc","gobbleHex","str","lower","hex","spaceTerminated","i","code","valid","codePoint","isSurrogate","CONTAINS_ESCAPE","needToProcess","ret","gobbled","require_getProp","__commonJSMin","exports","module","getProp","obj","_len","props","_key","prop","require_ensureObject","__commonJSMin","exports","module","ensureObject","obj","_len","props","_key","prop","require_stripComments","__commonJSMin","exports","module","stripComments","str","s","commentStart","lastEnd","commentEnd","require_util","__commonJSMin","exports","_unesc","_interopRequireDefault","_getProp","_ensureObject","_stripComments","obj","require_node","__commonJSMin","exports","module","_util","_defineProperties","target","props","i","descriptor","_createClass","Constructor","protoProps","staticProps","cloneNode","obj","parent","cloned","value","type","j","Node","opts","_proto","index","overrides","name","valueEscaped","originalValue","originalEscaped","line","column","rawSpace","raw","require_types","__commonJSMin","exports","TAG","STRING","SELECTOR","ROOT","PSEUDO","NESTING","ID","COMMENT","COMBINATOR","CLASS","ATTRIBUTE","UNIVERSAL","require_container","__commonJSMin","exports","module","_node","_interopRequireDefault","types","_interopRequireWildcard","_getRequireWildcardCache","cache","obj","newObj","hasPropertyDescriptor","key","desc","_createForOfIteratorHelperLoose","o","allowArrayLike","it","_unsupportedIterableToArray","i","minLen","_arrayLikeToArray","n","arr","len","arr2","_defineProperties","target","props","descriptor","_createClass","Constructor","protoProps","staticProps","_inheritsLoose","subClass","superClass","_setPrototypeOf","p","Container","_Node","opts","_this","_proto","selector","index","child","id","_iterator","_step","node","oldNode","newNode","oldIndex","line","col","found","foundChild","callback","result","_this2","_this3","_this4","_this5","_this6","_this7","_this8","_this9","_this10","_this11","current","memo","split","require_root","__commonJSMin","exports","module","_container","_interopRequireDefault","_types","obj","_defineProperties","target","props","i","descriptor","_createClass","Constructor","protoProps","staticProps","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","Root","_Container","opts","_this","_proto","str","memo","selector","message","options","handler","require_selector","__commonJSMin","exports","module","_container","_interopRequireDefault","_types","obj","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","Selector","_Container","opts","_this","require_cssesc","__commonJSMin","exports","module","object","hasOwnProperty","merge","options","defaults","result","key","regexAnySingleEscape","regexSingleEscape","regexExcessiveSpaces","cssesc","string","quote","isIdentifier","firstChar","output","counter","length","character","codePoint","value","extra","$0","$1","$2","require_className","__commonJSMin","exports","module","_cssesc","_interopRequireDefault","_util","_node","_types","obj","_defineProperties","target","props","i","descriptor","_createClass","Constructor","protoProps","staticProps","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","ClassName","_Node","opts","_this","_proto","v","escaped","require_comment","__commonJSMin","exports","module","_node","_interopRequireDefault","_types","obj","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","Comment","_Node","opts","_this","require_id","__commonJSMin","exports","module","_node","_interopRequireDefault","_types","obj","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","ID","_Node","opts","_this","_proto","require_namespace","__commonJSMin","exports","module","_cssesc","_interopRequireDefault","_util","_node","obj","_defineProperties","target","props","i","descriptor","_createClass","Constructor","protoProps","staticProps","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","Namespace","_Node","_proto","value","namespace","escaped","ns","require_tag","__commonJSMin","exports","module","_namespace","_interopRequireDefault","_types","obj","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","Tag","_Namespace","opts","_this","require_string","__commonJSMin","exports","module","_node","_interopRequireDefault","_types","obj","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","String","_Node","opts","_this","require_pseudo","__commonJSMin","exports","module","_container","_interopRequireDefault","_types","obj","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","Pseudo","_Container","opts","_this","_proto","params","require_deprecate","__commonJSMin","exports","module","fn","message","args","require_attribute","__commonJSMin","exports","unescapeValue","_cssesc","_interopRequireDefault","_unesc","_namespace","_types","_CSSESC_QUOTE_OPTIONS","obj","_defineProperties","target","props","i","descriptor","_createClass","Constructor","protoProps","staticProps","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","deprecate","WRAPPED_IN_QUOTES","warnOfDeprecatedValueAssignment","warnOfDeprecatedQuotedAssignment","warnOfDeprecatedConstructor","value","deprecatedUsage","quoteMark","unescaped","m","handleDeprecatedContructorOpts","opts","_unescapeValue","Attribute","_Namespace","_this","_proto","options","cssescopts","CSSESC_QUOTE_OPTIONS","escaped","v","numSingleQuotes","numDoubleQuotes","pref","quote","quoteValue","rawValue","prop","name","attrSpaces","spaces","rawSpaces","spaceName","concat","defaultAttrConcat","count","attributeSpaces","operatorSpaces","operator","valueSpaces","insensitiveSpaces","_this2","selector","attrValue","qm","_unescapeValue2","require_universal","__commonJSMin","exports","module","_namespace","_interopRequireDefault","_types","obj","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","Universal","_Namespace","opts","_this","require_combinator","__commonJSMin","exports","module","_node","_interopRequireDefault","_types","obj","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","Combinator","_Node","opts","_this","require_nesting","__commonJSMin","exports","module","_node","_interopRequireDefault","_types","obj","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","p","Nesting","_Node","opts","_this","require_sortAscending","__commonJSMin","exports","module","sortAscending","list","a","b","require_tokenTypes","__commonJSMin","exports","ampersand","asterisk","at","comma","colon","semicolon","openParenthesis","closeParenthesis","openSquare","closeSquare","dollar","tilde","caret","plus","equals","pipe","greaterThan","space","singleQuote","doubleQuote","slash","bang","backslash","cr","feed","newline","tab","str","comment","word","combinator","require_tokenize","__commonJSMin","exports","tokenize","t","_interopRequireWildcard","_unescapable","_wordDelimiters","_getRequireWildcardCache","cache","obj","newObj","hasPropertyDescriptor","key","desc","unescapable","wordDelimiters","hex","hexChars","i","consumeWord","css","start","next","code","consumeEscape","hexDigits","FIELDS","input","tokens","_css","length","offset","line","end","content","endColumn","endLine","escaped","escapePos","last","lines","nextLine","nextOffset","quote","tokenType","unclosed","what","fix","require_parser","__commonJSMin","exports","module","_root","_interopRequireDefault","_selector","_className","_comment","_id","_tag","_string","_pseudo","_attribute","_interopRequireWildcard","_universal","_combinator","_nesting","_sortAscending","_tokenize","tokens","types","_util","_WHITESPACE_TOKENS","_Object$assign","_getRequireWildcardCache","cache","obj","newObj","hasPropertyDescriptor","key","desc","_defineProperties","target","props","i","descriptor","_createClass","Constructor","protoProps","staticProps","WHITESPACE_TOKENS","WHITESPACE_EQUIV_TOKENS","tokenStart","token","tokenEnd","getSource","startLine","startColumn","endLine","endColumn","getTokenSource","getTokenSourceSpan","startToken","endToken","unescapeProp","node","prop","value","indexesOf","array","item","indexes","uniqs","list","Parser","rule","options","rootSource","selector","_proto","_this","message","errorOptions","attr","startingToken","len","pos","spaceBefore","commentBefore","lastAdded","spaceAfterMeaningfulToken","content","next","prevContent","existingComment","rawValue","oldRawValue","_rawValue","_unescaped","_oldRawValue","oldValue","insensitive","_unescapeValue","unescaped","quoteMark","lastComment","rawLastComment","lastValue","rawLastValue","stopPosition","startPosition","nodes","space","spaces","firstToken","lastToken","requiredSpace","_this2","rawSpace","n","rawSpaceBefore","result","position","nameRaw","name","raws","_this3","nextSigTokenPos","last","_this$convertWhitespa","spaceOrDescendantSelectorNodes","_this$convertWhitespa2","_space","_rawSpace","_this$convertWhitespa3","_space2","_rawSpace2","current","opts","before","nextContent","unbalanced","parenStart","parenValue","parenEnd","_this4","pseudoStr","first","length","namespace","nextToken","firstCallback","_this5","word","hasClass","escapedDot","isKeyframesPercent","hasId","interpolations","hashIndex","indices","ind","index","sourceIndex","source","classNameOpts","idOpts","tagOpts","throwOnParenthesis","description","found","an","required","searchPosition","require_processor","__commonJSMin","exports","module","_parser","_interopRequireDefault","obj","Processor","func","options","_proto","rule","merged","parser","_this","resolve","reject","root","transform","string","result","require_constructors","__commonJSMin","exports","_attribute","_interopRequireDefault","_className","_combinator","_comment","_id","_nesting","_pseudo","_root","_selector","_string","_tag","_universal","obj","attribute","opts","className","combinator","comment","id","nesting","pseudo","root","selector","string","tag","universal","require_guards","__commonJSMin","exports","isNode","isPseudoElement","isPseudoClass","isContainer","isNamespace","_types","_IS_TYPE","IS_TYPE","node","isNodeType","type","isAttribute","isClassName","isCombinator","isComment","isIdentifier","isNesting","isPseudo","isRoot","isSelector","isString","isTag","isUniversal","require_selectors","__commonJSMin","exports","_types","key","_constructors","_guards","require_dist","__commonJSMin","exports","module","_processor","_interopRequireDefault","selectors","_interopRequireWildcard","_getRequireWildcardCache","cache","obj","newObj","hasPropertyDescriptor","key","desc","parser","processor","_default","require_escapeCommas","__commonJSMin","exports","escapeCommas","className","require_color_name","__commonJSMin","exports","module","require_color","__commonJSMin","exports","_export","target","all","name","parseColor","formatColor","_colorName","_interopRequireDefault","obj","HEX","SHORT_HEX","VALUE","SEP","ALPHA_SEP","CUSTOM_PROPERTY","RGB","HSL","value","loose","ref","ref1","v","hex","_","r","g","b","a","ref2","match","color","part","mode","alpha","hasAlpha","require_withAlphaVariable","__commonJSMin","exports","_export","target","all","name","withAlphaValue","withAlphaVariable","_color","color","alphaValue","defaultValue","parsed","property","variable","properties","p","require_regex","__commonJSMin","exports","_export","target","all","name","pattern","withoutCapturing","any","optional","zeroOrMore","nestedBrackets","escape","REGEX_SPECIAL","REGEX_HAS_SPECIAL","toSource","source","item","sources","open","close","depth","string","require_splitAtTopLevelOnly","__commonJSMin","exports","splitAtTopLevelOnly","_regex","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","cacheBabelInterop","cacheNodeInterop","obj","cache","newObj","hasPropertyDescriptor","key","desc","input","separator","SPECIALS","depth","lastIndex","found","separatorIndex","separatorStart","separatorLength","match","matchesSeparator","atEndOfSeparator","matchesFullSeparator","require_parseBoxShadowValue","__commonJSMin","exports","_export","target","all","name","parseBoxShadowValue","formatBoxShadowValue","_splitAtTopLevelOnly","KEYWORDS","SPACE","LENGTH","input","shadow","value","result","parts","seen","part","shadows","require_dataTypes","__commonJSMin","exports","_export","target","all","name","normalize","url","number","percentage","length","lineWidth","shadow","color","image","gradient","position","familyName","genericName","absoluteSize","relativeSize","_color","_parseBoxShadowValue","cssFunctions","COMMA","UNDERSCORE","value","isRoot","part","fullMatch","characterBefore","match","fn","lengthUnits","lengthUnitsPattern","lineWidths","parsedShadows","parsedShadow","colors","images","gradientTypes","type","validPositions","positions","fonts","genericNames","absoluteSizes","relativeSizes","require_pluginUtils","__commonJSMin","exports","_export","target","all","name","updateAllClasses","asValue","parseColorFormat","asColor","asLookupValue","coerceValue","_postcssSelectorParser","_interopRequireDefault","_escapeCommas","_withAlphaVariable","_dataTypes","_negateValue","obj","selectors","updateClass","sel","updatedClass","resolveArbitraryValue","modifier","validate","isArbitraryValue","value","asNegativeValue","lookup","positiveValue","resolved","options","ref","input","splitAlpha","slashIdx","oldValue","opacityValue","tailwindConfig","ref1","color","alpha","ref2","ref3","ref4","ref5","normalizedColor","guess","typeMap","supportedTypes","splitAtFirst","delim","idx","types","arbitraryValue","explicitType","type","result","require_toColorValue","__commonJSMin","exports","toColorValue","maybeFunction","require_resolveConfig","__commonJSMin","exports","resolveConfig","_negateValue","_interopRequireDefault","_corePluginList","_configurePlugins","_defaultConfigStub","_colors","_defaults","_toPath","_normalizeConfig","_isPlainObject","_cloneDeep","_pluginUtils","_withAlphaVariable","_toColorValue","obj","isFunction","input","isObject","mergeWith","target","sources","customizer","source","k","merged","configUtils","scale","key","negativeScale","negativeValue","screens","breakpoints","value","valueToResolve","args","collectExtends","items","extend","mergedValue","extendValue","mergeThemes","themes","theme","mergeExtensionCustomizer","mergeExtensions","themeValue","extensions","resolveThemePath","utils","e","toPaths","path","pattern","matches","prefix","alpha","newPath","resolveFunctionKeys","object","resolvePath","defaultValue","index","val","normalized","resolved","extractPluginConfigs","configs","allConfigs","config","ref","plugins","plugin","resolveCorePlugins","corePluginConfigs","corePluginConfig","resolvePluginLists","pluginLists","pluginList","ref1","t","c","picocolors_exports","__export","picocolors_default","init_picocolors","__esmMin","s","require_featureFlags","__commonJSMin","exports","_export","target","all","name","flagEnabled","issueFlagNotices","_default","_picocolors","_interopRequireDefault","_log","obj","defaults","featureFlags","config","flag","ref","ref1","ref2","ref3","ref4","ref5","experimentalFlagsEnabled","changes","s","require_getAllConfigs","__commonJSMin","exports","getAllConfigs","_defaultConfigStubJs","_interopRequireDefault","_featureFlags","obj","config","ref","configs","preset","features","experimentals","feature","require_resolve_config","__commonJSMin","exports","resolveConfig","_resolveConfig","_interopRequireDefault","_getAllConfigs","obj","configs","defaultConfigs","require_resolveConfig","__commonJSMin","exports","module","resolveConfig","src_exports","__export","satori_default","init","__toCommonJS","DEFAULT_DISPLAY","block","hidden","inlineBlock","presets_default","chars","value","numeric","digits","suffix","alphabetic","letters","additive","range","pairs","tokens","additiveSymbols","i","ROMAN","UPPER_ARMENIAN","LOWER_ARMENIAN","GEORGIAN","HEBREW","CJK_SUFFIX","COUNTER_STYLES","SYMBOL_MARKERS","represent","style","_a","symbols","min","max","n","rest","result","weight","symbol","getMarkerText","listStyleType","string","formatCounter","counterStyle","name","text","pad","length","Counters","name","stack","parent","value","scope","reversed","by","_a","counter","getCounterText","counters","separator","counterStyle","formatCounter","isElement","child","getDisplay","element","_b","style","display","presets_default","parseList","getChanges","increments","sets","resets","amount","tokens","fallback","index","token","next","increment","set","isListItem","resetsCounter","getReversedStart","children","num","first","done","visit","nodes","node","negated","applyCounters","c","span","markerFont","font","key","trailingSpace","spaces","getListMarker","ascent","type","image","outside","url","img","SYMBOL_MARKERS","offset","disclosure","size","top","left","shape","text","getMarkerText","content","MARKER_CONTAINERS","findMarkerTarget","isItemContainer","replaced","SIDES","sides","prefix","suffix","side","LONGHANDS","part","cache","getLonghands","prop","longhands","longhand","nested","isLonghandOf","key","list","isInherited","prop","longhand","getLonghands","inheritable","style","inheritedStyle","import_postcss_value_parser","BOX_SIDE","SIZE","RADIUS","isLogical","property","splitValues","value","valueParser","node","toPhysicalProperties","style","direction","hasLogical","inlineStart","inlineEnd","sides","axis","result","set","box","size","radius","kind","edge","part","start","end","name","side","values","limit","dimension","block","inline","import_css_to_react_native","STRETCH","SIZE_KEYWORDS","NUMBER","LENGTH","MATH","ANGLE","readComponent","value","start","depth","quote","i","char","skipWhitespace","isSize","component","lower","parseFontShorthand","invalid","style","variant","weight","stretch","size","count","end","next","angleEnd","angle","lineHeight","family","import_postcss_value_parser","MATH_FUNCTION","NUMBER","tokenize","input","tokens","i","char","previous","number","name","parseMath","resolveLength","index","peek","expect","kind","_a","sum","_b","node","product","operator","right","left","basis","value","list","nodes","token","unit","px","pick","min","preferred","max","RADIUS","CORNERS","splitRadius","value","valueParser","node","isRadius","component","MATH_FUNCTION","expandBorderRadius","invalid","parts","radii","corners","horizontal","vertical","result","corner","i","import_css_background_parser","import_css_box_shadow","import_parse_css_color","import_postcss_value_parser","import_parse_css_color","multiply","m","a","b","c","row","invert","d","e","f","g","h","i","A","B","C","det","D50","D65_TO_D50","D50_TO_D65","signed","srgbToLinear","srgbFromLinear","REC2020_ALPHA","REC2020_BETA","rgbSpace","matrix","toLinear","fromLinear","d50","RGB_SPACES","XYZ_TO_LMS","LMS_TO_OKLAB","LMS_TO_XYZ","OKLAB_TO_LMS","LAB_EPSILON","LAB_KAPPA","labToXYZD50","l","f1","f0","f2","cube","xyzD50ToLab","xyz","v","toPolar","normalizeHue","fromPolar","hslToSRGB","s","n","k","srgbToHSL","r","max","min","hwbToSRGB","w","gray","srgbToHWB","rgb","toXYZ","space","coords","fromXYZ","lch","oklch","POLAR","analogous","convert","color","from","to","j","toRGBA","alpha","clip","significant","nodes","node","isComma","isSlash","splitArguments","args","child","ANGLE_UNITS","parseNumber","value","channel","parsed","valueParser","number","unit","evaluate","keywords","lower","name","tokens","evaluateSum","arg","items","token","sum","sign","product","operator","item","parseChannel","legacy","ALPHA","clampLightness","clampChroma","HUE","LAYOUTS","PREDEFINED_SPACES","parseRelative","currentColor","_a","origin","parseColorNode","values","_","parseChannels","layout","converted","channels","alphaToken","slash","result","parseColorFunction","relative","spaceToken","HUE_METHODS","parseColorMix","hueMethod","first","method","parseInterpolationMethod","percent","math","p1","p2","mixed","interpolate","colorA","colorB","t","hueIndex","fill","x","y","alphaA","alphaB","coordsA","coordsB","h1","h2","diff","mixColors","keyword","hue","parseColorString","cssColorParse","cache","parseCSSColor","key","parseColor","isColor","round","serializeColor","CONVERTED_FUNCTION","needsConversion","GRADIENT","hasNonLegacyColor","found","addInterpolationMethod","comma","MAYBE_CONVERTED","convertColors","onConvert","changed","before","original","word","import_postcss_value_parser","import_postcss_value_parser","e","t","r","u","k","a","z","v","c","L","w","h","$","y","m","j","b","q","f","p","l","d","s","x","o","O","F","U","E","n","D","i","parseUnit","word","baseFontSize","parsed","U","handleWord","unitIsHorizontal","parsedUnit","parseTransformOrigin","value","words","valueParser","node","z","depth","import_escape_html","import_linebreak","isReactElement","node","type","isClass","f","isForwardRefComponent","isReactComponent","hasDangerouslySetInnerHTMLProp","props","REACT_FRAGMENT","normalizeChildren","children","_a","flattend","res","i","value","DIMENSION","ABSOLUTE_LENGTHS","ANGLES","lengthToNumber","length","baseFontSize","baseLength","inheritedStyle","percentage","match","unit","viewportWidth","viewportHeight","lineHeight","calcDegree","deg","parsed","U","v","field","map","fallback","errorIfNotAllowedForProperty","_v","wordSeparators","point","segmenters","getSegmenter","granularity","locale","key","segmenter","segmentCaches","MAX_SEGMENT_CACHE_SIZE","segment","content","cacheKey","cache","cached","result","seg","segmented","output","s","previousWord","nextWord","splitImages","text","isImage","graphemes","parts","afterImage","grapheme","image","buildXMLString","attrs","assertValidXMLName","attrString","k","escapeXMLAttribute","XML_NAME_START_CHAR","XML_NAME_CHAR","VALID_XML_NAME","validatedXMLNames","name","kind","escapeHTML","escapeXMLText","createLRU","max","store","get","set","firstKey","clear","parseViewBox","viewBox","isString","x","reportInvalidValue","message","onError","forProperty","propertyName","asPointPercentageLength","x","percentageValue","SIZING_KEYWORDS","asSize","value","fitContent","limit","asPointAutoPercentageLength","splitByBreakOpportunities","content","wordBreak","segment","breaker","LineBreaker","last","bk","words","requiredBreaks","word","midline","s","_","letter","splitEffects","input","separator","result","l","parenCount","i","roundUpToLayout","pointScaleFactor","epsilon","VARIANT_FEATURES","isFontVariantProperty","name","EXCLUSIVE","parseFontVariant","value","keywords","keyword","expandFontVariant","longhands","longhand","result","getFontFeatureSettings","style","features","feature","settings","import_css_to_react_native","import_postcss_value_parser","getMaskProperty","style","name","key","IMAGE_FUNCTION","REPEAT_KEYWORDS","BOXES","COMPOSITE_OPERATORS","MODES","WEBKIT_COMPOSITE_OPERATORS","POSITION_KEYWORDS","SIZE_KEYWORDS","isLengthPercentage","word","invalid","value","parseLayer","nodes","_a","image","position","size","repeat","composite","mode","boxes","wordAt","i","node","valueParser","tokens","sizeTokens","expandMask","layerNodes","layers","list","layer","parseMask","maskImage","values","initial","splitEffects","origin","clip","cornerShapeKeywords","parseCornerShapeValue","value","normalized","keyword","match","shape","splitCornerShapeValues","maxValues","values","import_parse_css_color","amountDefaults","parseBackdropFilter","value","inheritedStyle","currentColor","property","filters","splitEffects","filter","match","name","argument","radius","resolveLength","angle","calcDegree","parseDropShadow","url","type","amount","resolveAmount","normalizedAmount","parts","color","lengths","part","cssColorParse","offsetX","offsetY","blurRadius","functionName","resolved","lengthToNumber","percentage","invalid","property","value","tokenize","tokens","i","end","names","j","depth","name","splitArguments","args","result","start","NUMBER","parseBreadth","resolveLength","normalized","math","parseMath","length","isFlex","breadth","parseTrackSize","token","MATH_FUNCTION","min","max","limit","parseTracks","parseRepeat","tracks","lineNames","hasNames","parseGridTrackList","autoRepeats","count","rest","normalizedCount","repeatCount","repeated","parseGridAutoTracks","parseGridAutoFlow","words","direction","word","dense","axis","isCustomIdent","parseGridLine","span","integer","expandGridPlacement","parts","s","maxParts","part","fallback","rowStart","columnStart","rowEnd","columnEnd","parseGridTemplateAreas","_a","rows","_","double","single","columnCount","row","bounds","r","cell","c","area","r0","r1","c0","c1","tokenizeShorthand","char","joinValues","isLineNames","expandGridTemplate","slash","before","after","areas","size","expandGrid","isAutoFlow","autoFlowIndex","reset","t","rowFlow","side","other","flowCount","sizes","implicit","import_postcss_value_parser","import_parse_css_color","IMAGE_FUNCTION","REPEAT_KEYWORDS","ATTACHMENTS","BOXES","POSITION_KEYWORDS","SIZE_KEYWORDS","isLengthPercentage","word","invalid","value","parseLayer","nodes","isFinal","_a","image","position","size","repeat","attachment","color","boxes","wordAt","i","node","valueParser","tokens","sizeTokens","cssColorParse","expandBackground","layerNodes","layers","finalLayer","hasImage","layer","list","key","import_postcss_value_parser","L","LP","N","S","A","FUNCTIONS","name","minArgs","kinds","parseTransform","value","functions","nodes","valueParser","node","definition","args","expectsArgument","arg","MATH_FUNCTION","resolveArgument","kind","toPixels","math","parseMath","expected","dimension","U","calcDegree","resolveTransform","i","resolved","import_postcss_value_parser","extractCustomProperties","style","variables","remainingStyle","prop","INHERITING_KEYWORDS","isGuaranteedInvalid","value","mergeVariables","inherited","current","merged","name","ENVIRONMENT","side","resolveVariables","visitedVars","parsed","valueParser","invalid","node","index","siblings","args","extractVarArgs","varName","fallback","resolved","variableValue","joins","sibling","replaceNode","varNameNode","commaIndex","i","child","fallbackNodes","optOutPx","keepNumber","handleFallbackColor","prop","parsed","rawInput","currentColor","TEXT_DECORATION_LINES","TEXT_DECORATION_STYLES","parseTextDecorationLine","lines","line","isTextDecorationLength","value","LINE_WIDTH_KEYWORDS","parseLineWidth","normalized","BORDER_STYLES","OUTLINE_STYLES","style","checkLineWidth","width","MATH_FUNCTION","checkLineStyle","styles","parseLineShorthand","color","token","splitValues","lower","lineWidth","isColor","purify","name","num","parseCounters","tokens","counters","invalid","canTakeValue","reversed","parseListStyle","position","image","type","nones","ANGLE","parseIndividualTransform","parts","fn","parseTransform","angleIndex","part","angle","axis","_","i","resolveLineHeight","fontSize","inheritedStyle","math","parseMath","length","lengthToNumber","values","depth","current","char","expandEdges","top","right","bottom","left","t","r","b","l","ALIGNMENT_PREFIXES","splitAlignmentValues","RATIO","parseAspectRatio","auto","ratio","match","height","handleSpecialCase","longhands","longhand","longhandValue","parseFontShorthand","align","justify","subject","keywords","keyword","v","x","y","box","margin","rowGap","columnGap","_v","expandBorderRadius","radii","splitRadius","isRadius","splitCornerShapeValues","topLeft","topRight","bottomRight","bottomLeft","cornerSide","first","second","properties","isOutline","purified","full","sides","side","p","property","parseBoxShadow","parseBackdropFilter","expandGrid","expandGridTemplate","expandBackground","expandMask","result","shadows","splitEffects","shadow","k","valueParser","node","expandFontVariant","isFontVariantProperty","parseFontVariant","order","all","BLEND_MODES","modes","mode","rest","expandGridPlacement","decorationStyle","thickness","s","RGB_SLASH","normalizeColor","g","a","SIZES","CALC_LENGTHS","VALID_IMAGE","expand","onStyleError","convertColors","serializedStyle","inheritedVariables","currentVariables","processableStyle","variables","remainingStyle","extractCustomProperties","mergedVariables","mergeVariables","varName","resolveVariables","resolvedColor","convertCurrentColorToActualValue","getCurrentColor","error","resolvedValue","kept","normalizeColorKeywords","preprocess","resolvedStyle","restoreColors","err","checkImages","layers","backgrounds","background","index","masks","parseMask","baseFontSize","calcBaseFontSize","parseTransformOrigin","individualTransforms","functions","fitContent","limit","spaces","len","resolveTransform","textShadowRadius","textShadowOffset","ABSOLUTE_FONT_SIZES","size","inheritedSize","refineHSL","cssColorParse","h","inheritedColor","COLOR_PROPERTY","COLOR_ALIASES","changed","isString","converted","original","restored","item","key","init_layout_engine","IPV4_RE","REDIRECT_STATUS","isUnsafeIpv4","v4","octets","p","n","a","b","c","parseIpv6","ip","address","zone","halves","toGroups","segment","groups","parts","i","part","IPV4_RE","d","head","tail","fill","embeddedIpv4","topZero","g","isUnsafeIpv6","host","isUnsafeIpAddress","normalizeHostname","rawUrl","url","isUnsafeServerFetchUrl","parsed","ssrfError","assertSafeServerFetchUrl","dnsLookup","getDnsLookup","dns","hostname","options","assertSafeServerFetchTarget","lookup","records","cancelBody","res","safeServerFetch","doFetch","currentUrl","response","location","AVIF","WEBP","APNG","PNG","JPEG","GIF","SVG","parseJPEG","buf","view","offset","len","i","next","parseWebP","arrayBuffer","bytes","containerEnd","chunkType","chunkSize","dataOffset","dataEnd","width","height","bits","parseGIF","parsePNG","v","cache","createLRU","inflightRequests","ALLOWED_IMAGE_TYPES","SVG_ATTRS_REGEX","VIEWBOX_REGEX","WIDTH_REGEX","HEIGHT_REGEX","hasIntrinsicSize","src","_a","comma","data","tag","arrayBufferToBase64","buffer","CHUNK_SIZE","binary","chunk","base64ToArrayBuffer","base64","binaryString","parseSvgImageSize","svgMatch","svgTag","viewBoxMatch","widthMatch","heightMatch","viewBox","parseViewBox","size","ratio","arrayBufferToDataUri","responseType","imageSize","imageType","detectContentType","detail","resolveImageData","newSrc","decodedURI","encodingType","dataString","utf8Src","base64Src","cached","url","doFetch","safeServerFetch","promise","res","type","result","err","b","detectAPNG","dv","length","off","isAPNG","chars","PLACEHOLDER_PROP","TEXT_INPUTS","BUTTON_INPUTS","element","type","props","getInputContent","style","font","value","label","text","placeholder","size","width","REACT_FRAGMENT","isSet","textContent","node","_a","collapse","isListBox","getSelectRows","rows","visit","group","child","childProps","options","row","values","option","last","first","ARROW","getSelectContent","line","count","children","i","selected","hasArrow","setReplacedElementSize","node","style","naturalWidth","naturalHeight","attributeWidth","attributeHeight","r","isBorderBox","extraHorizontal","extraVertical","toLength","value","size","attribute","width","height","ITEM_ALIGNMENT","DISPLAY_TYPES","LIST_ELEMENTS","LIST_TYPES","getListPresets","type","props","listDepth","preset","start","ROOT_STYLE","CSS_WIDE_KEYWORDS","resolveKeywords","defined","initial","prop","keyword","affects","key","isLonghandOf","isInherited","getHiddenPreset","hidden","inputType","hasHidden","isHiddenInput","isClosedDialog","getSelectPreset","isListBox","getDirPreset","dir","snapLineWidth","pointScaleFactor","pixels","getStyleError","convertColors","firstError","compute","LayoutNode","error","inheritedStyle","definedStyle","replacedElements","onStyleError","_a","lenient","resolve","fallback","v","field","map","property","presetStyle","presets_default","ownDirection","logicalDirection","toPhysicalProperties","base","resets","expand","aspectRatio","replacesNaturalRatio","resolvedSrc","imageWidth","imageHeight","resolveImageData","svgAspectRatio","viewBox","viewBoxSize","parseViewBox","ratio","lengthToNumber","isAuto","naturalRatio","layout","order","outerDisplay","boxInnerDisplay","innerDisplay","direction","isRTL","fontSize","resolveLength","length","parseGridTrackList","parseGridAutoTracks","parseGridAutoFlow","parseGridTemplateAreas","line","parseGridLine","PHYSICAL","asSize","OVERFLOW","overflowX","overflowY","isScrolling","toScrolling","LAYOUT_OVERFLOW","asPointAutoPercentageLength","side","lineStyle","position","inlineStart","inlineEnd","float","edge","inset","asPointPercentageLength","inheritable","init_layout_engine","resolveInset","value","base","innerBox","node","offset","width","height","border","padding","inset","edge","stickAxis","start","end","marginStart","marginEnd","view","containingBlock","getStickyOffset","box","style","parent","scrollport","port","portWidth","portHeight","top","bottom","left","right","dx","dy","isOutside","bounds","left","top","width","height","margin","grow","getBoxShadowExtent","style","shadows","extent","shadow","blur","getFilterExtent","filters","filter","getOutlineExtent","offset","Fragment","ATTRIBUTE_MAPPING","EMBEDDED_SVG_DATA_URL_SYMBOLS","resolveSVGColors","value","currentColor","convertColors","normalizePathData","data","resolveSVGVariables","variables","resolved","resolveVariables","getSVGVariables","style","inherited","extractCustomProperties","mergeVariables","translateSVGNodeToSVGString","node","inheritedColor","inheritedVariables","n","escapeXMLText","type","children","restProps","color","Fragment","attrs","k","withVariables","resolvedValue","cache","name","declarations","midline","buildXMLString","serializeSVGFilter","id","preProcessNode","filters","set","walk","_node","_a","isReactElement","v","imageSrc","c","s","resolveImageData","SVGNodeToImage","viewBox","viewbox","width","height","className","_transform","viewBoxSize","parseViewBox","ratio","svgTransformToCSS","value","functionPattern","matrix","position","match","args","fn","getMatrix","multiply","n","name","rad","cos","sin","cx","cy","a1","b1","c1","d1","e1","f1","a2","b2","c2","d2","e2","f2","init_layout_engine","import_escape_html","IDENTITY","FLATTEN","multiply","a","b","result","column","row","translate","x","y","z","scale","rotate","degrees","length","radians","c","s","t","skew","xDegrees","yDegrees","perspective","distance","toMatrix","name","args","width","height","resolve","value","size","d","f","aroundOrigin","matrix","left","top","origin","ROOT_TRANSFORM_STATE","w","m","resolveTransformState","functions","box","parent","preserve3d","perspectiveDistance","perspectiveOrigin","canProject","fn","base","local","world","ws","center","isAffine","projection","cx","cy","dxdx","dxdy","dydx","dydy","getDepth","state","determinant3","determinant4","minor","isBackFacing","det","toSVGMatrix","divisor","v","transform","_box","transforms","_isInheritingTransform","_transformOrigin","container","left","top","width","height","isInheritingTransform","style","matrix","transform","getTextFillColor","buildGlyphPaths","path","boldPath","attributes","boldWidth","id","result","buildXMLString","stroke","strokeWidth","strokeLinejoin","paintOrder","fillAttributes","fill","maskId","region","mask","ring","order","part","strokeFirst","getTextStrokeAttributes","buildText","content","filter","image","clipPathId","debug","shape","decorationShape","extra","shapeProps","imageMarkup","textMarkup","escapeHTML","shiftPath","path","dx","dy","_","command","x","y","SCALE","buildDropShadow","id","width","height","style","transparentText","shadowCount","effects","merge","left","right","top","bottom","i","grow","resultId","buildXMLString","boxShadow","shape","shadow","innerShadow","s","shadowStyle","sid","maskId","shapeWithSpread","finalShape","buildSkipInkSegments","start","end","glyphBoxes","y","strokeWidth","baseline","halfStroke","bleed","skipRanges","box","from","to","last","segments","cursor","getDecorationLines","style","line","resolveDecorationLength","value","fontSize","getDecorationThickness","thickness","getUnderlineY","ascender","offset","wavyPath","x1","x2","amplitude","period","d","x","half","direction","buildDecoration","width","left","top","clipPathId","matrix","textDecorationColor","textDecorationStyle","textDecorationSkipInk","color","height","content","buildLine","buildXMLString","dasharray","applySkipInk","extraLine","import_opentype","import_fflate","r","e","emoji_regex_xs_default","emojiRegex","emoji_regex_xs_default","specialCode","code","locales","isValidLocale","x","detectLanguageCode","segment","locale","isTextPresentation","c","languages","lang","index","normalizeLocale","l","import_harfbuzzjs","hb","initPromise","hbFontCache","hbFontFinalizer","font","initHarfBuzz","harfbuzzjsPromise","getHarfBuzzFont","arrayBuffer","blob","face","hbFont","upem","shapeText","text","options","features","language","script","direction","buffer","featuresString","featureStrings","tag","value","parseFontFeatureSettings","parts","s","part","match","valueStr","num","MAX_SHAPED_RUN_CACHE_ENTRIES","isWhitespace","char","splitByFont","content","resolveFont","graphemes","segment","result","currentText","currentFont","grapheme","font","isWoff2","data","bytes","FVAR","withoutVariations","view","isWoff","count","start","size","i","record","copy","woffToSfnt","woff","numTables","sfntSize","sfnt","out","outBytes","entrySelector","searchRange","tableOffset","entry","tag","offset","compLen","origLen","checksum","compressed","SUFFIX_WHEN_LANG_NOT_SET","getSyntheticBoldWidth","fontSize","t","SYNTHETIC_SKEW","isSlanted","fontStyle","oblique","allowsSynthesis","style","keywords","longhand","value","keyword","WORD_SEPARATORS","isWordSeparator","text","index","toWordSpacing","flattenPath","commands","segments","current","addCurve","points","steps","prev","next","evaluateBezier","cmd","working","computeBandBox","band","strokeWidth","bandMin","bandMax","bandHeight","ySamples","yStep","yStart","columnHits","y","intersections","seg","x1","y1","x2","y2","yMin","yMax","x","a","j","from","to","end","col","columns","b","inkRanges","rangeStart","boxes","bleed","minX","maxX","left","right","compareFont","weight","style","matchedWeight","matchedStyle","nextWeight","nextStyle","cachedParsedFont","FontLoader","fontOptions","decodeWoff2","name","fonts","matchedFont","i","weight1","style1","weight2","style2","key","ratio","_a","fontStyle","font","family","average","fontOption","data","lang","isValidLocale","locales","_lang","SUFFIX_WHEN_LANG_NOT_SET","arrayBuffer","isWoff2","decoded","opentype","withoutVariations","bytes","isWoff","woffToSfnt","originalCharToGlyphIndex","char","index","_name","fontSize","lineHeight","fontFamily","fontWeight","synthesisStyle","locale","face","getNormal","getUnknown","keys","specifiedLangFonts","nonSpecifiedLangFonts","additionalFonts","getLangFromFontName","cachedFontResolver","resolveFont","word","fallback","_fonts","code","_font","requestedWeight","allowed","allowsSynthesis","slanted","isSlanted","synthesis","os2","head","ascender","resolvedFont","useOS2Table","_b","descender","height","_lineGap","resolve","s","shapedRunCache","engineKey","getShapedRuns","content","fontFeatureSettings","direction","cached","features","parseFontFeatureSettings","shapedRuns","splitByFont","text","shapeText","MAX_SHAPED_RUN_CACHE_ENTRIES","oldestKey","segment","asc","desc","band","brokenChars","originalStringToGlyphs","args","glyphs","anotherFont","glyph","scale","p","command","scaledCommand","k","g","letterSpacing","wordSpacing","totalWidth","clusterCount","segmentWidth","spacingWidth","separators","WORD_SEPARATORS","toWordSpacing","top","left","boxes","cursorX","cursorY","path","boldPath","extraWordSpacing","runText","bold","italic","skew","SYNTHETIC_SKEW","shapedGlyph","gX","gY","glyphPathData","commands","skewCommands","bandBoxes","computeBandBox","isWordSeparator","y","skewed","round","value","x","px","cx","cy","py","arr","stringFromCode","code","Space","Tab","HorizontalEllipsis","genMeasurer","engine","isImage","style","fontSize","letterSpacing","wordSpacing","fontFeatureSettings","cache","measureTextRun","text","width","measureGrapheme","grapheme","measureGraphemeArray","graphemes","textRun","flushTextRun","measureText","segment","preprocess","content","style","locale","textTransform","whiteSpace","wordBreak","overflowWrap","processTextTransform","processedContent","shouldCollapseTabsAndSpaces","allowSoftWrap","processWhiteSpace","words","requiredBreaks","allowBreakWord","allowBreakWordInMinContent","processWordBreak","lineLimit","blockEllipsis","processTextOverflow","fullWidthForms","getFullWidthForms","range","start","end","_","i","form","base","code","FULL_SIZE_KANA","pair","mapCharacters","map","keywords","segment","word","grapheme","index","forms","char","textOverflow","lineClamp","WebkitLineClamp","WebkitBoxOrient","overflow","display","HorizontalEllipsis","parseLineClamp","canBreakWords","inMinContent","splitByBreakOpportunities","shouldKeepLinebreak","Space","input","regex1","regex2","match1","match2","number","text","resolveTextAlign","textAlign","direction","rtl","getTabWidth","spaceWidth","tabSize","isString","lengthToNumber","getTabAdvance","x","count","tabWidth","advance","RTL","RTL_TEXT","LETTER","ARABIC_NUMBER","NUMBER","hasRTL","text","getBidiClass","number","char","splitByDirection","parts","part","partClass","grapheme","segment","graphemeClass","resolveLevels","classes","baseLevel","base","types","lastStrong","i","direction","type","end","before","after","reorderLine","pieces","levels","lineWidth","lefts","x","highest","level","start","runLeft","runRight","import_parse_css_color","skippedWordWhenFindingMissingFont","Tab","shouldSkipWhenFindingMissingFont","word","isFullyTransparent","color","parsed","cssColorParse","isOpaqueWhite","r","g","b","a","buildTextNodes","content","context","_a","parentStyle","inheritedStyle","parent","font","id","isInheritingTransform","debug","embedFont","graphemeImages","locale","canLoadAdditionalAssets","pointScaleFactor","paintBounds","textAlign","textIndent","lineHeight","textWrap","fontSize","cssFilter","letterSpacing","wordSpacing","_inheritedBackgroundClipTextPath","_inheritedBackgroundClipTextHasBackground","fontFeatureSettings","getFontFeatureSettings","segmentedWords","segmentedRequiredBreaks","allowSoftWrap","allowBreakWord","allowBreakWordInMinContent","processedContent","shouldCollapseTabsAndSpaces","lineLimit","blockEllipsis","preprocess","v","isRTL","align","resolveTextAlign","needsBidi","hasRTL","getIndent","width","indent","lengthToNumber","textContainer","LayoutNode","engine","wordsMissingFont","segment","isImage","s","hasImages","measureGrapheme","measureGraphemeArray","measureText","genMeasurer","tabWidth","getTabWidth","Space","tabAdvance","x","count","getTabAdvance","calc","text","currentWidth","originWidth","part","afterTrimEndWidth","lineWidths","baselines","lastBaseline","lineSegmentNumber","texts","wordPositionInLayout","measuringMinContent","flow","lines","maxWidth","lineIndex","height","currentLineHeight","currentBaselineOffset","words","requiredBreaks","lineIndent","i","prevLineEndingSpacesWidth","forceBreak","w","endingSpacesWidth","_word","lineEndingSpacesWidth","allowedToJustify","willWrap","chars","glyphHeight","_texts","splitImages","splitByDirection","j","_text","_width","_isImage","measuredTextSize","layoutText","containerWidth","l","m","mHeight","roundUpToLayout","adjustedWidth","result","measureCache","flowedWidth","measure","_height","_exclusions","minContent","key","cached","y","backgroundClipDef","clipPathId","overflowMaskId","fillColor","getTextFillColor","containerLeft","containerTop","containerHeight","textIndentNumber","parentContainerInnerWidth","baseLevel","levels","reorderLines","_b","_c","pieceLevels","resolveLevels","_","getBidiClass","start","line","end","pieces","piece","lefts","reorderLine","index","order","isGap","k","gaps","remainingWidth","gutter","placePiece","layout","isJustified","lineLeft","leftOffset","extendedWidth","segments","ellipsisPlan","planEllipsis","HorizontalEllipsis","limit","near","hidden","truncated","pieceText","keepsStart","graphemes","kept","keptWidth","grapheme","next","nextWidth","keptLeft","left","top","matrix","container","filter","textShadowColor","textShadowOffset","textShadowRadius","buildDropShadow","buildXMLString","decorationShape","mergedPath","mergedBoldPath","extra","skippedLine","decorationLines","decorationGlyphs","wordBuffer","bufferedOffset","bufferedRight","lineBounds","lineMargin","nextLayout","path","isLastDisplayedBeforeEllipsis","image","topOffset","shouldCollectDecorationBoxes","getDecorationLines","isOutside","placed","baselineOfLine","baselineOfWord","heightOfWord","baselineDelta","buildUnderlineBand","offset","strokeWidth","getDecorationThickness","getUnderlineY","direction","calcEllipsis","baseWidth","subset","resolvedWidth","char","ellipsisWidth","_blockEllipsis","isNotLastLine","wordSeparators","finalizedSegment","finalizedLeftOffset","finalizedWidth","band","svg","t","shape","buildText","baselineTop","decoration","right","deco","glyphBoxes","buildDecoration","textOpacity","fillOpacity","getTextStrokeAttributes","strokeAttributes","buildGlyphPaths","getSyntheticBoldWidth","p","init_layout_engine","import_parse_css_color","relativeOffset","boxes","width","x","y","style","inset","side","toNumber","COLLAPSIBLE_WHITE_SPACE","SIDES","hasBoxEdges","isZero","value","PRESERVED_LINE_BREAKS","NO_SOFT_WRAP","OBJECT_REPLACEMENT","STRUT","percentageBase","lengthToNumber","isFullyTransparent","color","parsed","cssColorParse","InlineFormatting","container","env","Paragraph","box","run","paragraph","_a","atomic","node","index","i","LayoutNode","_height","exclusions","minContent","last","item","whiteSpace","first","locale","state","engine","graphemeImages","isImage","s","measureText","genMeasurer","getFontFeatureSettings","shift","parentStyle","verticalShift","content","owners","markers","collapsible","removeTrailingSpace","afterCollapsibleSpace","collapse","text","processTextTransform","char","offset","moved","texts","requiredBreaks","splitByBreakOpportunities","start","end","isFirst","isLast","segments","p","here","k","markerIndex","isEmpty","other","lastItem","height","name","cached","computeLayout","root","options","marginWidth","margins","hasWidth","size","layoutWithWidth","borderBoxWidth","padding","border","insets","maxContent","limit","isPercentage","layout","marginBoxHeight","baseline","findBaseline","result","count","low","high","words","containerWidth","measureWord","word","segment","trimmed","placeTabs","spaceWidth","getTabAdvance","getTabWidth","breakWords","canBreakWords","allowBreakWord","indent","strut","strutAscent","strutDescent","textAlign","resolveTextAlign","placeLine","line","top","left","right","exclusion","lines","nextFloatBottom","next","bottom","wrapped","canBreak","finishLine","current","ascent","descent","lineAligned","a","d","align","aligned","newLine","created","parts","splitWord","maxWidth","lineWidth","lineIndent","gap","remaining","wordIndex","fontSize","middle","measuredWidth","roundUpToLayout","_b","open","fragmentStart","addFragment","paddingTop","paddingBottom","lineStart","lastWord","lastText","edge","pieces","marginTop","dx","dy","inheritedStyle","id","embedFont","debug","hasImages","letterSpacing","wordSpacing","fontFeatureSettings","clipPathId","maskId","fillColor","getTextFillColor","matrix","filter","buildXMLString","buildDropShadow","decorationLines","getDecorationLines","skipInk","thickness","getDecorationThickness","path","boldPath","elements","decorations","merged","piece","ascender","glyphTop","band","getUnderlineY","glyphBoxes","pieceX","splitImages","part","partWidth","element","buildText","svg","decorationShape","decoration","buildDecoration","strokeAttributes","getTextStrokeAttributes","shape","buildGlyphPaths","getSyntheticBoldWidth","textOpacity","clipText","parentFontSize","lineHeight","flush","grapheme","segmentGraphemes","child","buildInlineText","context","font","canLoadAdditionalAssets","processedContent","preprocess","delegate","buildTextNodes","import_css_gradient_parser","import_postcss_value_parser","POSITION","MATH_POSITION","expandColorStops","gradient","math","fn","valueParser","args","node","changed","tokens","index","isColor","token","i","MATH_FUNCTION","expanded","color","start","end","extractInterpolationMethod","comma","first","length","method","parseInterpolationMethod","stops","applyHint","t","hint","subdivide","colorAt","t0","c0","t1","c1","add","depth","premultiplied","c","expected","drawn","interpolateStops","currentColor","result","a","convertColors","b","from","parseCSSColor","to","rgbaA","rgbaB","toRGBA","j","mixColors","serializeColor","previous","quarter","resolveMathPositions","inheritedStyle","resolve","position","_a","expression","value","parseMath","part","lengthToNumber","stop","normalizeStops","totalLength","colorStops","repeating","lastColorStop","totalPercentage","lastStop","previousStop","nextStop","interpolated","parseColor","buildLinearGradient","id","width","height","tiles","image","dimensions","offsets","inheritableStyle","from","gradient","method","extractInterpolationMethod","math","parsed","expandColorStops","imageWidth","imageHeight","repeating","points","length","xys","resolveXYFromDirection","l","p","calcNormalPoint","calcDegree","colorStops","resolveMathPositions","calcPercentage","stops","normalizeStops","resolveRepeatingCycle","gradientId","patternId","defs","buildXMLString","stop","last","offset","dir","x1","y1","x2","y2","v","w","h","r","tmp","a","b","dfs","angle","p1","lengthToNumber","p2","sx","sy","ex","ey","import_css_gradient_parser","buildRadialGradient","id","width","height","tiles","image","dimensions","offsets","inheritableStyle","from","_a","gradient","method","extractInterpolationMethod","math","shape","parsedStops","position","size","repeating","withDefaultShape","expandColorStops","colorStops","resolveMathPositions","xDelta","yDelta","cx","cy","pos","calcRadialGradient","colorStopTotalLength","calcColorStopTotalLength","stops","normalizeStops","gradientId","patternId","spread","calcRadius","props","calcRadialGradientProps","stopElements","stop","buildXMLString","lastColor","content","r","scaleY","degenerate","defs","lastStop","lengthToNumber","baseFontSize","style","calcPos","key","dir","rx","ratio","last","radius","endingShape","centerAxis","length","fx","fy","isSizeAllLength","v","patchSpread","f2r","mfx","mfy","mrx","mry","mr","ry","s","import_css_gradient_parser","buildConicGradient","id","width","height","tiles","image","dimensions","offsets","inheritableStyle","from","angle","position","colorStops","repeating","expandColorStops","extractInterpolationMethod","method","w","h","cx","cy","resolveCenter","startAngle","calcDegree","stops","resolveStops","colorAt","createColorAt","breaks","turn","stopPositions","sortedBreaks","a","b","segments","i","start","end","difference","c","count","j","radius","point","radians","round","wedge","d","steps","overlap","base","colors","buildXMLString","gray","hex","alphas","antialiasedColors","antialiasedAlphas","translucent","draw","color","antialias","fill","shape","alpha","index","before","after","patternId","maskId","content","defs","value","r","style","tokens","x","y","keywords","resolve","token","lengthToNumber","lengths","keyword","parseColor","parsed","g","resolvePosition","offset","stop","parseCSSColor","max","next","first","period","positions","all","startRepeat","endRepeat","k","last","p","length","t","applyHint","blue","mixColors","channel","resolveLength","value","base","style","lengthToNumber","resolveSize","size","areaWidth","areaHeight","imageWidth","imageHeight","hasSize","hasRatio","scale","widthValue","heightValue","width","height","resolvePosition","position","freeWidth","freeHeight","tokens","isX","token","isY","isKeyword","x","y","keywordOffset","start","first","second","assignedX","assignedY","i","keyword","offset","resolve","edge","free","getBoxArea","left","top","box","inset","side","borderWidth","padding","backgroundImage","id","origin","image","repeat","inheritableStyle","from","repeatX","repeatY","keywords","isGradient","buildColorLayer","src","resolveImageData","area","dimensions","hasIntrinsicSize","roundSize","imageSize","areaSize","rounded","resolvedPosition","tile","areaOffset","boxSize","count","offsetX","tileX","offsetY","tileY","offsets","tiles","buildConicGradient","buildLinearGradient","buildRadialGradient","resolvedWidth","resolvedHeight","buildXMLString","isColor","color","svgArcCenterOffset","rx","ry","resolveSize","a","b","limit","makeSmaller","arr","resolveRadius","v","width","height","fontSize","style","_a","sides","splitRadius","parse","side","basis","MATH_FUNCTION","parseMath","length","lengthToNumber","resolve","math","singleValue","radiusZeroOrNull","_radius","resolveCornerShape","value","parseCornerShapeValue","cornerPoints","start","end","outer","center","shape","curveCenter","exponent","points","segments","i","angle","x","y","pointString","point","oppositeRadiiScale","first","second","shapedRadiusPath","left","top","radii","shapes","partialSides","fullCorners","right","bottom","topLeft","topRight","bottomRight","bottomLeft","corners","middle","corner","firstCorner","firstMiddle","path","currentCorner","currentMiddle","nextCorner","isLast","nextMiddle","getBorderRadiusClipPath","id","borderRadiusPath","borderType","rectClipId","buildXMLString","resolveBorderRadii","keepSquare","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","cornerShapes","singleAbsValueTopLeftCorner","singleAbsValueTopRightCorner","singleAbsValueBottomLeftCorner","singleAbsValueBottomRightCorner","scale","radius","inset","t","r","l","reduce","p","T","R","B","L","getArc","c0","result","arc0","cornerStart","len","arc1","SIDES","compareBorderDirections","a","b","style","getBorderClipPath","id","currentClipPathId","borderPath","borderType","left","top","width","height","rectClipId","buildXMLString","sidesRegion","sides","t","r","l","side","scale","right","bottom","outer","inner","first","i","count","points","point","NEAR_BLACK","NEAR_WHITE","scaleColor","rgb","multiplier","c","lighten","v","darken","shadeColor","color","parsed","parseColor","alpha","distance","to","sum","dark","light","format","g","getBorderPasses","offset","hasInner","lineStyle","isTopLeft","outerWidth","outerStyle","outerColor","innerWidth","innerColor","isDarkOutside","passes","rectPath","x","y","w","h","border","options","drawBorder","props","result","index","pass","clipId","edge","radius","fitDashGap","length","dash","gap","closed","fewer","fewerGap","moreGap","quarterArc","roundedContour","box","inset","tl","tr","br","bl","resolveBorderRadii","isRound","arc","corner","toX","toY","d","segments","closedDashArray","drawPatternedSide","attributes","clipped","_a","widths","s","o","dasharray","isRoundedBox","half","segment","center","radii","corners","CORNER_SHAPES","name","resolveCornerShape","asContentMask","maskBorderOnly","regionStyle","directions","direction","fullBorder","splitCorners","group","ring","ringId","maxWidth","roundCorners","roundedDashes","radiusStyle","innerInset","clipToRegion","content","drawSides","_transform","rest","drawGroup","lineWidth","transform","clipToRing","path","lines","sideOnly","start","partialSides","currentStyle","_i","ni","nd","contentMask","id","left","top","width","height","matrix","borderOnly","style","offsetLeft","offsetTop","offsetRight","offsetBottom","contentArea","buildXMLString","border","import_css_to_react_native","horizontalKeywords","verticalKeywords","format","value","parseShapeFunction","width","height","inheritedStyle","match","parts","splitEffects","first","startMatch","fillRule","current","resolvePosition","tokenize","subpathStart","path","part","tokens","command","endpoint","resolveEndpoint","axis","mode","token","base","keywordMap","resolved","resolveLength","withIndex","endpointTokens","controlTokens","controls","splitAtSlash","control","resolveControlPoint","pointString","optionIndex","options","rx","ry","rotation","large","sweep","index","option","firstRadius","secondRadius","hasSecondRadius","angle","degree","calcDegree","slash","point","start","end","fromIndex","pointTokens","reference","hasPositionKeyword","isControlPoint","x","y","remaining","next","isPositionKeyword","offset","lengthToNumber","regexMap","createShapeParser","width","height","style","inheritedStyle","parseCircle","str","res","value","radius","pos","v","x","y","resolvePosition","lengthToNumber","parseEllipse","rx","ry","parsePath","fillRule","d","resolveFillRule","parsePolygon","points","k","i","parseInset","inset","radiusMap","r","s","offsets","w","h","parseShape","parseShapeFunction","position","xDelta","yDelta","genClipPathId","id","genClipPath","buildClipPath","v","style","inheritedStyle","parser","createShapeParser","clipPath","tmp","k","type","rest","buildXMLString","UNBOUNDED","rectPath","x","y","w","h","clipRegion","box","style","clipX","clipY","isClip","margin","visualBox","inset","side","left","top","width","height","radius","overflow","path","matrix","id","currentClipPath","src","inheritableStyle","overflowClipPath","clipPath","buildClipPath","region","transform","buildXMLString","genClipPathId","_id","contentMask","genMaskImageId","id","ALPHA_MASK_FILTER","toBox","box","buildMaskImage","v","style","inheritedStyle","left","top","width","height","maskImage","length","miId","layers","i","m","origin","clip","layer","backgroundImage","getBoxArea","_id","def","area","alpha","filterId","buildXMLString","shape","rectOf","attrs","paint","maskId","masked","content","masks","inverses","inverse","inverseId","below","composite","layerId","resultId","backdropFilter","id","left","top","width","height","path","type","matrix","currentClipPath","mask","filters","filterId","clipId","expansion","getExpansion","input","primitives","filter","index","result","buildFilterPrimitive","definitions","buildXMLString","shape","clipToSource","amount","inverse","shadowInput","attributes","channels","channel","right","bottom","grow","parseObjectPosition","position","containerWidth","containerHeight","parts","keywordToPercent","keyword","axis","xValue","yValue","part","first","second","parseValue","value","containerSize","parsed","U","rect","id","left","top","width","height","isInheritingTransform","src","svgAspectRatio","debug","opacity","drawn","style","inheritableStyle","isImage","type","matrix","defs","fills","blendModes","extra","transform","backgroundShapes","backgrounds","index","background","image","backgroundImage","getBoxArea","blendMode","miId","mi","buildMaskImage","maskId","path","radius","clipPathId","buildXMLString","backgroundClip","currentClipPath","genClipPath","clip","overflow","backdropDefinitions","backdropShape","backdropFilter","useFillOpacity","shape","fill","sides","borderOnly","side","backgroundClipMaskId","contentMask","mask","borderClip","getBorderClipPath","imageBorderRadius","offsetLeft","offsetTop","offsetRight","offsetBottom","containerInnerWidth","containerInnerHeight","objPosX","objPosY","naturalWidth","naturalHeight","preserveAspectRatio","imageWidth","imageHeight","imageX","imageY","scaleX","scaleY","scale","minScale","getBorderRadiusClipPath","rectClipId","border","shadow","boxShadow","content","shapes","CORNERS","outline","id","left","top","width","height","isInheritingTransform","style","_a","lineStyle","lineWidth","spread","box","sideStyle","outlineStyle","side","resolveBorderRadii","x","y","i","matrix","transform","clipPathId","maskId","clipId","edge","radius","defs","buildXMLString","lines","border","CONTAINER_PROP","ID","CLASS","TYPE","LOGICAL_PSEUDO_CLASSES","PSEUDO_CLASSES","NEVER_MATCHING_FUNCTIONS","applyStyleSheets","root","engine","viewport","validation","containers","sheets","collectStyleSheets","parsed","css","state","checkSupportsDeclarations","rules","items","compileRules","rankLayers","initial","getInitialValues","roots","buildNodes","nodes","sizes","containerCount","visit","node","matchRules","getContainer","NO_GENERATED_CONTENT","invalid","findInvalidDeclarations","children","rebuild","isFragment","isReactElement","textContent","normalizeChildren","child","props","matchesMedia","parent","layer","_a","declarations","flush","item","CONTAINER_UNIT","selectors","selector","compileSelector","matchesSupports","parseContainerPrelude","registerProperty","name","declareLayer","nested","descriptors","properties","values","syntax","inherits","all","notInherited","i","layers","key","_","compare","a","b","keys","rule","ranked","ranks","index","hasNesting","value","raw","parts","compileParts","compileRelativeSelector","allowPseudo","specificity","pseudo","part","compound","j","last","simple","compileSimple","simpleSpecificity","compileList","forgiving","relative","compiled","list","of","maxSpecificity","max","siblings","lang","className","context","style","cascade","PLACEHOLDER_PROP","content","before","generateContent","after","QUOTES","element","type","getAttribute","toPropertyName","vendor","camel","c","matched","condition","matchesContainer","matches","CSS_WIDE_KEYWORDS","getError","onError","byKey","declaration","groups","errors","original","checked","replaceContainerUnits","error","units","normal","important","initialValuesFor","getCustomProperties","set","resolveContainerUnits","CONTAINER_UNITS","isDigit","char","isNameStart","isName","replace","result","end","sign","unit","start","size","block","container","containerSize","amount","inline","base","names","custom","anchor","matchesFrom","matchesCompound","next","other","matchesAttribute","matchesPseudoClass","operator","flag","actual","expected","position","fromEnd","filter","count","matchesNth","n","sameType","matchesHas","range","matchesLang","candidates","addDescendants","combinator","candidate","splitTopLevel","text","separator","depth","splitCondition","keywords","word","matchesCondition","group","split","g","keyword","query","typed","features","mediaFeature","inner","matchesMediaGroup","matchesMediaFeature","prelude","named","containerType","feature","containerFeature","width","height","parseMediaValue","ratio","length","compareMedia","FLIPPED","left","right","low","lowOperator","highOperator","high","colon","prefix","supported","collectSupportsDeclarations","init_layout_engine","insertFixedNode","node","parent","containingBlock","fixedElements","left","right","top","bottom","staticX","staticY","placeholder","LayoutNode","element","sizeStaticPositionPlaceholders","resized","width","height","margin","getFixedElementPosition","offset","parentLeft","parentTop","paintStackingContext","layers","content","a","b","svg","i","fragmentRect","box","fragment","left","top","paragraph","dx","dy","relativeOffset","reportHiddenDescendants","children","context","onNodeDetected","replacedElements","child","normalizeChildren","isReactElement","element","isFragment","descendants","CONTAINER_PROP","_container","PLACEHOLDER_PROP","_placeholder","props","type","layout","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","id","inheritedStyle","parent","font","debug","locale","embedFont","graphemeImages","canLoadAdditionalAssets","getTwStyles","iter","buildInlineText","buildTextNodes","offset","$type","hasDangerouslySetInnerHTMLProp","style","tw","_newLocale","newLocale","normalizeLocale","twStyles","transform","svgTransformToCSS","node","LayoutNode","computedStyle","newInheritableStyle","compute","chRatio","getInputContent","getSelectContent","countersHidden","applyCounters","getCounterText","isOutOfFlow","outerDisplay","isFloat","isReplacedElement","isInlineBox","atomicInline","isContents","inlineBox","outOfFlowContainingBlock","fixedElement","insertFixedNode","clipPathId","maskId","s","opacity","preserve3d","perspective","isFixedContainingBlock","isInheritingTransform","filterExtent","getFilterExtent","planes","hasClipPath","fixedContainingBlock","fixedClip","absoluteContainingBlock","isScrollContainer","overflow","parentBox","scrollport","isPositioned","zIndex","mixBlendMode","isStackingContext","stackingContext","mutateRefValue","isReplaced","normalizedChildren","iterators","markers","engine","getListMarker","markerTarget","isItemContainer","target","findMarkerTarget","isBlockContainer","childInline","InlineFormatting","childFormattingContext","childParent","segmentsMissingFont","childOrders","index","childCount","added","x","y","width","height","getFixedElementPosition","getStickyOffset","containingBlock","layer","childrenRenderResult","baseRenderResult","depsRenderResult","childrenNode","restProps","detected","rects","minLeft","r","minTop","transformList","resolveTransformState","ROOT_TRANSFORM_STATE","transformState","isHidden","isBackFacing","plane","contextPlanes","depth","getDepth","groupOpacity","rectOpacity","drawn","paintBounds","definesClip","cullMargin","shadowExtent","getBoxShadowExtent","isCulled","area","isOutside","isBoxCulled","src","rect","currentColor","variables","key","SVGNodeToImage","aspectRatio","fragmentStyle","fragmentBox","fragmentDrawn","paintOrder","_","outlineResult","getOutlineExtent","outline","buildXMLString","result","filters","isMissing","filter","count","functions","applyFunctions","filterId","expansion","getExpansion","primitives","buildFilterPrimitive","borderBox","serializeSVGFilter","isolate","svg","width","height","content","buildXMLString","init","input","getLayoutEngine","mod","init_layout_engine","import_resolveConfig","PLATFORMS","isPlatform","x","ORIENTATIONS","isOrientation","ConfigType","Unit","isString","value","isObject","_a","complete","style","parseNumericValue","value","context","fractions","numerator","denominator","parsedNumerator","parsedDenominator","number","match","Unit","getCompleteStyle","prop","styleVal","parseStyleVal","mergeStyle","getStyle","parsed","toStyleVal","unit","isNegative","device","warn","toPx","DIR_MAP","getDirection","string","parseAndConsumeDirection","utilityFragment","direction","_","dir","parseUnconfigged","unconfiggedStyleVal","unconfiggedStyle","consoleWarn","args","noopWarn","defaultStyles","complete","fontVariant","styles_default","type","style","Cache","customStyles","styles_default","key","style","ir","value","fontSize","value","config","context","configValue","unconfiggedStyle","getCompleteStyle","style","rest","fontSizeStyle","getStyle","complete","mergeStyle","calculateLineHeight","lineHeight","letterSpacing","parsed","parseNumericValue","number","unit","Unit","lineHeight","value","config","_a","parseValue","parsed","parseNumericValue","number","unit","Unit","style","styleVal","toStyleVal","complete","spacing","type","direction","isNegative","value","config","numericValue","configValue","unconfigged","parseUnconfigged","spacingStyle","Unit","expand","parsed","parseNumericValue","number","unit","pixels","toStyleVal","screens","input","screenData","acc","screen","value","data","values","minPx","toPx","warn","maxPx","a","b","minA","maxA","minB","maxB","order","fontFamily","value","config","configValue","complete","firstFamily","color","type","value","config","shorthandOpacity","findColorInConfigRecursive","opacity","addOpacity","complete","STYLE_PROPS","style","opacityProp","colorOpacity","percentage","hexToRgba","removeOpacityHelpers","key","hex","orig","MATCH_SHORT_HEX","_","r","g","b","result","MATCH_FULL_HEX","warn","colorName","configColor","isString","isObject","colorNameStart","colorNameRest","subConfig","border","value","theme","rest","direction","parseAndConsumeDirection","borderWidth","complete","colorType","colorStyle","color","prop","numericValue","arbitraryWidth","unconfiggedStyle","config","configValue","getCompleteStyle","borderRadius","expand","arbitrary","ir","top","bottom","left","right","inset","type","value","isNegative","config","insetDir","_","dir","configValue","styleVal","parseStyleVal","insetStyle","unconfigged","parseUnconfigged","complete","flexGrowShrink","type","value","config","_a","configKey","numericValue","complete","flex","_b","match","flexBasis","parseStyleVal","widthHeight","type","value","context","config","configValue","getCompleteStyle","unconfiggedStyle","minMaxWidthHeight","styleVal","parseStyleVal","complete","letterSpacing","value","isNegative","config","configValue","parsed","parseNumericValue","number","unit","Unit","relativeLetterSpacing","warn","styleVal","toStyleVal","complete","unconfiggedStyle","ems","style","fontSize","opacity","value","config","configValue","parsedConfig","parseNumericValue","complete","parsedArbitrary","shadowOpacity","value","percentage","shadowOffset","widthStr","heightStr","width","offsetValue","height","number","parsed","parseUnconfigged","ClassParser","input","config","cache","device","platform","_a","_b","_c","_d","_e","_f","parts","prefixes","widthBreakpoints","screens","prefix","breakpointOrder","windowWidth","min","max","isPlatform","isOrientation","cached","ir","theme","style","match","prop","spacingDirection","getDirection","spacing","widthHeight","minMaxWidthHeight","lineHeight","fontSize","color","colorOpacity","fontFamily","warn","getCompleteStyle","border","borderRadius","inset","flexGrowShrink","flex","shadowOpacity","shadowOffset","unconfiggedStyle","elevation","complete","opacity","letterSpacing","zIndex","windowDims","type","dir","amount","checkDimension","parsedAmount","parseNumericValue","bound","unit","begin","end","string","parseInputs","inputs","classNames","styles","input","split","key","value","unique","str","className","index","classes","getAddedUtilities","plugins","_a","utils","plugin","callPluginFunction","pluginFn","added","utilities","core","notImplemented","fn","create","customConfig","platform","config","resolveConfig","withContent","device","pluginUtils","getAddedUtilities","customStringUtils","customStyleUtils","util","style","complete","ir","deriveCacheGroup","cacheGroup","contextCaches","getCache","existing","cache","Cache","inputs","resolved","dependents","ordered","utilities","userStyle","parseInputs","joined","cached","utility","styleIr","customStyle","ClassParser","a","b","orderedStyle","dependent","error","warn","removeOpacityHelpers","color","utils","styleObj","tailwindFn","strings","values","str","string","i","_a","prefixes","prefixMatches","newDimensions","newFontScale","newPixelDensity","newColorScheme","withContent","config","defaultShadows","addUtilities","createTw","config","create","tw","getTw","width","height","RAW_TEXT_ELEMENTS","resolveComponents","node","element","type","props","isReactComponent","isClass","render","isForwardRefComponent","dangerouslySetInnerHTML","rest","fontCache","fontDataIds","nextFontDataId","MAX_FONT_LOADERS","fontLoaderCache","getFontLoaderKey","fonts","key","font","id","getFontLoader","layoutEngine","loader","FontLoader","data","oldestKey","satori","render","satori_default","element","options","replacedElements","projectPlane","_a","getLayoutEngine","initHarfBuzz","definedWidth","definedHeight","graphemeImages","processedWordsMissingFonts","resolveComponents","pendingErrors","onStyleError","error","cache","inflightRequests","containers","pass","layOut","index","node","width","height","padding","border","errors","content","svg","tree","applyStyleSheets","name","value","getStyleError","svgFilters","preProcessNode","root","LayoutNode","fixedElements","containerNodes","paintBounds","handler","layout","ROOT_STYLE","Counters","tw","style","twStyles","getTw","segmentsMissingFont","languageCodes","convertToLanguageCodes","images","code","segments","_segment","asset","layoutOptions","sizeStaticPositionPlaceholders","wordsByCode","word","locale","detectLanguageCode","unique","segment","arr"]}