nostr-components 0.2.6 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +105 -185
  2. package/dist/assets/{base-styles-CBypR3FR.js → base-styles-DC0ilu4S.js} +2 -2
  3. package/dist/assets/{base-styles-CBypR3FR.js.map → base-styles-DC0ilu4S.js.map} +1 -1
  4. package/dist/assets/{copy-delegation-C4uvRTVM.js → copy-delegation-CcagQMIW.js} +2 -2
  5. package/dist/assets/{copy-delegation-C4uvRTVM.js.map → copy-delegation-CcagQMIW.js.map} +1 -1
  6. package/dist/assets/{dialog-component-Da1ZIYh9.js → dialog-component-Dqg0QU9I.js} +2 -7
  7. package/dist/assets/dialog-component-Dqg0QU9I.js.map +1 -0
  8. package/dist/assets/{dialog-likers-BjiCHFan.js → dialog-likers-D3c7WIMp.js} +5 -5
  9. package/dist/assets/dialog-likers-D3c7WIMp.js.map +1 -0
  10. package/dist/assets/index.esm-ByUtE_cm.js +2159 -0
  11. package/dist/assets/index.esm-ByUtE_cm.js.map +1 -0
  12. package/dist/assets/nip05-utils-BNBHUmkr.js.map +1 -1
  13. package/dist/assets/nostr-login-service-D2FmscPI.js +2 -0
  14. package/dist/assets/nostr-login-service-D2FmscPI.js.map +1 -0
  15. package/dist/assets/nostr-service-m3Hgc5Xx.js +266 -0
  16. package/dist/assets/nostr-service-m3Hgc5Xx.js.map +1 -0
  17. package/dist/assets/nostr-user-component-XEnanH-d.js +2 -0
  18. package/dist/assets/nostr-user-component-XEnanH-d.js.map +1 -0
  19. package/dist/assets/{pure-jrVhRVpB.js → pure-laCRX9eG.js} +2 -2
  20. package/dist/assets/pure-laCRX9eG.js.map +1 -0
  21. package/dist/assets/theme-C1r1Zw8r.js.map +1 -1
  22. package/dist/assets/{user-resolver-C-E6KdwY.js → user-resolver-DqI5KGh6.js} +2 -2
  23. package/dist/assets/{user-resolver-C-E6KdwY.js.map → user-resolver-DqI5KGh6.js.map} +1 -1
  24. package/dist/assets/utils--bxLbhGF.js.map +1 -1
  25. package/dist/assets/zap-utils-BZcaCsT_.js +2 -0
  26. package/dist/assets/zap-utils-BZcaCsT_.js.map +1 -0
  27. package/dist/components/nostr-comment.es.js +26 -26
  28. package/dist/components/nostr-comment.es.js.map +1 -1
  29. package/dist/components/nostr-dm.es.js +2 -2
  30. package/dist/components/nostr-dm.es.js.map +1 -1
  31. package/dist/components/nostr-follow-button.es.js +6 -7
  32. package/dist/components/nostr-follow-button.es.js.map +1 -1
  33. package/dist/components/nostr-like.es.js +16 -16
  34. package/dist/components/nostr-like.es.js.map +1 -1
  35. package/dist/components/nostr-live-chat.es.js +2 -2
  36. package/dist/components/nostr-live-chat.es.js.map +1 -1
  37. package/dist/components/nostr-post.es.js +19 -19
  38. package/dist/components/nostr-post.es.js.map +1 -1
  39. package/dist/components/nostr-profile-badge.es.js +1 -1
  40. package/dist/components/nostr-profile-badge.es.js.map +1 -1
  41. package/dist/components/nostr-profile.es.js +1 -1
  42. package/dist/components/nostr-profile.es.js.map +1 -1
  43. package/dist/components/nostr-zap.es.js +24 -24
  44. package/dist/components/nostr-zap.es.js.map +1 -1
  45. package/dist/nostr-components.es.js +1 -1
  46. package/dist/nostr-components.umd.js +2644 -305
  47. package/dist/nostr-components.umd.js.map +1 -1
  48. package/package.json +5 -2
  49. package/dist/assets/dark-nostrich-running.gif +0 -0
  50. package/dist/assets/default_dp-NQ3TGrtT.png +0 -0
  51. package/dist/assets/default_dp.png +0 -0
  52. package/dist/assets/default_dp_32.png +0 -0
  53. package/dist/assets/dialog-component-Da1ZIYh9.js.map +0 -1
  54. package/dist/assets/dialog-likers-BjiCHFan.js.map +0 -1
  55. package/dist/assets/light-nostrich-running.gif +0 -0
  56. package/dist/assets/nostr-service-pr_crY62.js +0 -78
  57. package/dist/assets/nostr-service-pr_crY62.js.map +0 -1
  58. package/dist/assets/nostr-user-component-BOdux8_6.js +0 -2
  59. package/dist/assets/nostr-user-component-BOdux8_6.js.map +0 -1
  60. package/dist/assets/pure-jrVhRVpB.js.map +0 -1
  61. package/dist/assets/zap-utils-B1sz0Abx.js +0 -2
  62. package/dist/assets/zap-utils-B1sz0Abx.js.map +0 -1
  63. package/dist/index.d.ts +0 -6
  64. package/dist/nostr-comment.d.ts +0 -4
  65. package/dist/nostr-dm.d.ts +0 -4
  66. package/dist/nostr-follow-button.d.ts +0 -4
  67. package/dist/nostr-like.d.ts +0 -4
  68. package/dist/nostr-live-chat.d.ts +0 -4
  69. package/dist/nostr-post.d.ts +0 -4
  70. package/dist/nostr-profile-badge.d.ts +0 -4
  71. package/dist/nostr-profile.d.ts +0 -4
  72. package/dist/nostr-zap.d.ts +0 -4
  73. package/dist/src/base/base-component/nostr-base-component.d.ts +0 -116
  74. package/dist/src/base/copy-delegation.d.ts +0 -5
  75. package/dist/src/base/dialog-component/dialog-component.d.ts +0 -67
  76. package/dist/src/base/dialog-component/style.d.ts +0 -5
  77. package/dist/src/base/event-component/nostr-event-component.d.ts +0 -53
  78. package/dist/src/base/render-options.d.ts +0 -5
  79. package/dist/src/base/resolvers/event-resolver.d.ts +0 -20
  80. package/dist/src/base/resolvers/user-resolver.d.ts +0 -19
  81. package/dist/src/base/text-row/render-name.d.ts +0 -7
  82. package/dist/src/base/text-row/render-nip05.d.ts +0 -1
  83. package/dist/src/base/text-row/render-npub.d.ts +0 -1
  84. package/dist/src/base/text-row/render-text-row.d.ts +0 -9
  85. package/dist/src/base/user-component/nostr-user-component.d.ts +0 -43
  86. package/dist/src/common/base-styles.d.ts +0 -44
  87. package/dist/src/common/constants.d.ts +0 -4
  88. package/dist/src/common/date-utils.d.ts +0 -9
  89. package/dist/src/common/icons.d.ts +0 -7
  90. package/dist/src/common/nip05-utils.d.ts +0 -13
  91. package/dist/src/common/nostr-service.d.ts +0 -40
  92. package/dist/src/common/theme.d.ts +0 -4
  93. package/dist/src/common/types.d.ts +0 -1
  94. package/dist/src/common/utils.d.ts +0 -34
  95. package/dist/src/index.d.ts +0 -32
  96. package/dist/src/nostr-comment/nostr-comment.d.ts +0 -60
  97. package/dist/src/nostr-comment/render.d.ts +0 -15
  98. package/dist/src/nostr-comment/utils.d.ts +0 -81
  99. package/dist/src/nostr-dm/nostr-dm.d.ts +0 -34
  100. package/dist/src/nostr-dm/render.d.ts +0 -15
  101. package/dist/src/nostr-follow-button/nostr-follow-button.d.ts +0 -24
  102. package/dist/src/nostr-follow-button/render.d.ts +0 -11
  103. package/dist/src/nostr-follow-button/style.d.ts +0 -1
  104. package/dist/src/nostr-like/dialog-help-style.d.ts +0 -1
  105. package/dist/src/nostr-like/dialog-help.d.ts +0 -2
  106. package/dist/src/nostr-like/dialog-likers-style.d.ts +0 -1
  107. package/dist/src/nostr-like/dialog-likers.d.ts +0 -24
  108. package/dist/src/nostr-like/like-utils.d.ts +0 -52
  109. package/dist/src/nostr-like/nostr-like.d.ts +0 -49
  110. package/dist/src/nostr-like/render.d.ts +0 -10
  111. package/dist/src/nostr-like/style.d.ts +0 -1
  112. package/dist/src/nostr-live-chat/nostr-live-chat.d.ts +0 -65
  113. package/dist/src/nostr-live-chat/render.d.ts +0 -31
  114. package/dist/src/nostr-post/nostr-post.d.ts +0 -25
  115. package/dist/src/nostr-post/parse-text.d.ts +0 -8
  116. package/dist/src/nostr-post/render-content.d.ts +0 -5
  117. package/dist/src/nostr-post/render.d.ts +0 -19
  118. package/dist/src/nostr-post/style.d.ts +0 -1
  119. package/dist/src/nostr-profile/nostr-profile.d.ts +0 -24
  120. package/dist/src/nostr-profile/render-stats.d.ts +0 -1
  121. package/dist/src/nostr-profile/render.d.ts +0 -22
  122. package/dist/src/nostr-profile/style.d.ts +0 -1
  123. package/dist/src/nostr-profile-badge/nostr-profile-badge.d.ts +0 -34
  124. package/dist/src/nostr-profile-badge/render.d.ts +0 -11
  125. package/dist/src/nostr-profile-badge/style.d.ts +0 -1
  126. package/dist/src/nostr-zap/dialog-help-style.d.ts +0 -5
  127. package/dist/src/nostr-zap/dialog-help.d.ts +0 -2
  128. package/dist/src/nostr-zap/dialog-zap-style.d.ts +0 -6
  129. package/dist/src/nostr-zap/dialog-zap.d.ts +0 -31
  130. package/dist/src/nostr-zap/dialog-zappers-style.d.ts +0 -1
  131. package/dist/src/nostr-zap/dialog-zappers.d.ts +0 -25
  132. package/dist/src/nostr-zap/nostr-zap.d.ts +0 -45
  133. package/dist/src/nostr-zap/render.d.ts +0 -9
  134. package/dist/src/nostr-zap/style.d.ts +0 -1
  135. package/dist/src/nostr-zap/zap-utils.d.ts +0 -53
  136. package/dist/vite.config.d.ts +0 -2
  137. package/dist/vite.config.esm.d.ts +0 -2
  138. package/dist/vite.config.umd.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"nostr-post.es.js","sources":["../../node_modules/@glidejs/glide/dist/glide.esm.js","../../node_modules/entities/dist/esm/generated/decode-data-html.js","../../node_modules/entities/dist/esm/generated/decode-data-xml.js","../../node_modules/entities/dist/esm/decode-codepoint.js","../../node_modules/entities/dist/esm/decode.js","../../node_modules/htmlparser2/dist/esm/Tokenizer.js","../../node_modules/htmlparser2/dist/esm/Parser.js","../../node_modules/domutils/node_modules/domelementtype/lib/esm/index.js","../../node_modules/domutils/node_modules/domhandler/lib/esm/node.js","../../node_modules/dom-serializer/node_modules/domelementtype/lib/esm/index.js","../../node_modules/dom-serializer/node_modules/entities/lib/esm/escape.js","../../node_modules/dom-serializer/lib/esm/foreignNames.js","../../node_modules/dom-serializer/lib/esm/index.js","../../node_modules/domutils/lib/esm/stringify.js","../../node_modules/domutils/lib/esm/querying.js","../../node_modules/domelementtype/index.js","../../node_modules/domhandler/lib/node.js","../../node_modules/domhandler/lib/element.js","../../node_modules/domhandler/index.js","../../src/nostr-post/render.ts","../../src/nostr-post/parse-text.ts","../../src/common/date-utils.ts","../../src/nostr-post/render-content.ts","../../src/base/resolvers/event-resolver.ts","../../src/base/event-component/nostr-event-component.ts","../../src/nostr-post/style.ts","../../src/nostr-post/nostr-post.ts"],"sourcesContent":["/*!\n * Glide.js v3.7.1\n * (c) 2013-2024 Jędrzej Chałubek (https://github.com/jedrzejchalubek/)\n * Released under the MIT License.\n */\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nfunction _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n}\n\nvar defaults = {\n /**\n * Type of the movement.\n *\n * Available types:\n * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n *\n * @type {String}\n */\n type: 'slider',\n\n /**\n * Start at specific slide number defined with zero-based index.\n *\n * @type {Number}\n */\n startAt: 0,\n\n /**\n * A number of slides visible on the single viewport.\n *\n * @type {Number}\n */\n perView: 1,\n\n /**\n * Focus currently active slide at a specified position in the track.\n *\n * Available inputs:\n * `center` - Current slide will be always focused at the center of a track.\n * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n *\n * @type {String|Number}\n */\n focusAt: 0,\n\n /**\n * A size of the gap added between slides.\n *\n * @type {Number}\n */\n gap: 10,\n\n /**\n * Change slides after a specified interval. Use `false` for turning off autoplay.\n *\n * @type {Number|Boolean}\n */\n autoplay: false,\n\n /**\n * Stop autoplay on mouseover event.\n *\n * @type {Boolean}\n */\n hoverpause: true,\n\n /**\n * Allow for changing slides with left and right keyboard arrows.\n *\n * @type {Boolean}\n */\n keyboard: true,\n\n /**\n * Stop running `perView` number of slides from the end. Use this\n * option if you don't want to have an empty space after\n * a slider. Works only with `slider` type and a\n * non-centered `focusAt` setting.\n *\n * @type {Boolean}\n */\n bound: false,\n\n /**\n * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n *\n * @type {Number|Boolean}\n */\n swipeThreshold: 80,\n\n /**\n * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n *\n * @type {Number|Boolean}\n */\n dragThreshold: 120,\n\n /**\n * A number of slides moved on single swipe.\n *\n * Available types:\n * `` - Moves slider by one slide per swipe\n * `|` - Moves slider between views per swipe (number of slides defined in `perView` options)\n *\n * @type {String}\n */\n perSwipe: '',\n\n /**\n * Moving distance ratio of the slides on a swiping and dragging.\n *\n * @type {Number}\n */\n touchRatio: 0.5,\n\n /**\n * Angle required to activate slides moving on swiping or dragging.\n *\n * @type {Number}\n */\n touchAngle: 45,\n\n /**\n * Duration of the animation in milliseconds.\n *\n * @type {Number}\n */\n animationDuration: 400,\n\n /**\n * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n *\n * @type {Boolean}\n */\n rewind: true,\n\n /**\n * Duration of the rewinding animation of the `slider` type in milliseconds.\n *\n * @type {Number}\n */\n rewindDuration: 800,\n\n /**\n * Easing function for the animation.\n *\n * @type {String}\n */\n animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n /**\n * Wait for the animation to finish until the next user input can be processed\n *\n * @type {boolean}\n */\n waitForTransition: true,\n\n /**\n * Throttle costly events at most once per every wait milliseconds.\n *\n * @type {Number}\n */\n throttle: 10,\n\n /**\n * Moving direction mode.\n *\n * Available inputs:\n * - 'ltr' - left to right movement,\n * - 'rtl' - right to left movement.\n *\n * @type {String}\n */\n direction: 'ltr',\n\n /**\n * The distance value of the next and previous viewports which\n * have to peek in the current view. Accepts number and\n * pixels as a string. Left and right peeking can be\n * set up separately with a directions object.\n *\n * For example:\n * `100` - Peek 100px on the both sides.\n * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n *\n * @type {Number|String|Object}\n */\n peek: 0,\n\n /**\n * Defines how many clones of current viewport will be generated.\n *\n * @type {Number}\n */\n cloningRatio: 1,\n\n /**\n * Collection of options applied at specified media breakpoints.\n * For example: display two slides per view under 800px.\n * `{\n * '800px': {\n * perView: 2\n * }\n * }`\n */\n breakpoints: {},\n\n /**\n * Collection of internally used HTML classes.\n *\n * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n * @type {Object}\n */\n classes: {\n swipeable: 'glide--swipeable',\n dragging: 'glide--dragging',\n direction: {\n ltr: 'glide--ltr',\n rtl: 'glide--rtl'\n },\n type: {\n slider: 'glide--slider',\n carousel: 'glide--carousel'\n },\n slide: {\n clone: 'glide__slide--clone',\n active: 'glide__slide--active'\n },\n arrow: {\n disabled: 'glide__arrow--disabled'\n },\n nav: {\n active: 'glide__bullet--active'\n }\n }\n};\n\n/**\n * Outputs warning message to the bowser console.\n *\n * @param {String} msg\n * @return {Void}\n */\nfunction warn(msg) {\n console.error(\"[Glide warn]: \".concat(msg));\n}\n\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toInt(value) {\n return parseInt(value);\n}\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\nfunction toFloat(value) {\n return parseFloat(value);\n}\n/**\n * Indicates whether the specified value is a string.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isString(value) {\n return typeof value === 'string';\n}\n/**\n * Indicates whether the specified value is an object.\n *\n * @param {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction isObject(value) {\n var type = _typeof(value);\n\n return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n/**\n * Indicates whether the specified value is a function.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n/**\n * Indicates whether the specified value is an array.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isArray(value) {\n return value.constructor === Array;\n}\n\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\n\nfunction mount(glide, extensions, events) {\n var components = {};\n\n for (var name in extensions) {\n if (isFunction(extensions[name])) {\n components[name] = extensions[name](glide, components, events);\n } else {\n warn('Extension must be a function');\n }\n }\n\n for (var _name in components) {\n if (isFunction(components[_name].mount)) {\n components[_name].mount();\n }\n }\n\n return components;\n}\n\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param {Object} obj Object where property has to be defined.\n * @param {String} prop Name of the defined property.\n * @param {Object} definition Get and set definitions for the property.\n * @return {Void}\n */\nfunction define(obj, prop, definition) {\n Object.defineProperty(obj, prop, definition);\n}\n/**\n * Sorts aphabetically object keys.\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction sortKeys(obj) {\n return Object.keys(obj).sort().reduce(function (r, k) {\n r[k] = obj[k];\n return r[k], r;\n }, {});\n}\n/**\n * Merges passed settings object with default options.\n *\n * @param {Object} defaults\n * @param {Object} settings\n * @return {Object}\n */\n\nfunction mergeOptions(defaults, settings) {\n var options = Object.assign({}, defaults, settings); // `Object.assign` do not deeply merge objects, so we\n // have to do it manually for every nested object\n // in options. Although it does not look smart,\n // it's smaller and faster than some fancy\n // merging deep-merge algorithm script.\n\n if (settings.hasOwnProperty('classes')) {\n options.classes = Object.assign({}, defaults.classes, settings.classes);\n var properties = ['direction', 'type', 'slide', 'arrow', 'nav'];\n properties.forEach(function (property) {\n if (settings.classes.hasOwnProperty(property)) {\n options.classes[property] = _objectSpread2(_objectSpread2({}, defaults.classes[property]), settings.classes[property]);\n }\n });\n }\n\n if (settings.hasOwnProperty('breakpoints')) {\n options.breakpoints = Object.assign({}, defaults.breakpoints, settings.breakpoints);\n }\n\n return options;\n}\n\nvar EventsBus = /*#__PURE__*/function () {\n /**\n * Construct a EventBus instance.\n *\n * @param {Object} events\n */\n function EventsBus() {\n var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBus);\n\n this.events = events;\n this.hop = events.hasOwnProperty;\n }\n /**\n * Adds listener to the specifed event.\n *\n * @param {String|Array} event\n * @param {Function} handler\n */\n\n\n _createClass(EventsBus, [{\n key: \"on\",\n value: function on(event, handler) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.on(event[i], handler);\n }\n\n return;\n } // Create the event's object if not yet created\n\n\n if (!this.hop.call(this.events, event)) {\n this.events[event] = [];\n } // Add the handler to queue\n\n\n var index = this.events[event].push(handler) - 1; // Provide handle back for removal of event\n\n return {\n remove: function remove() {\n delete this.events[event][index];\n }\n };\n }\n /**\n * Runs registered handlers for specified event.\n *\n * @param {String|Array} event\n * @param {Object=} context\n */\n\n }, {\n key: \"emit\",\n value: function emit(event, context) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.emit(event[i], context);\n }\n\n return;\n } // If the event doesn't exist, or there's no handlers in queue, just leave\n\n\n if (!this.hop.call(this.events, event)) {\n return;\n } // Cycle through events queue, fire!\n\n\n this.events[event].forEach(function (item) {\n item(context || {});\n });\n }\n }]);\n\n return EventsBus;\n}();\n\nvar Glide$1 = /*#__PURE__*/function () {\n /**\r\n * Construct glide.\r\n *\r\n * @param {String} selector\r\n * @param {Object} options\r\n */\n function Glide(selector) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Glide);\n\n this._c = {};\n this._t = [];\n this._e = new EventsBus();\n this.disabled = false;\n this.selector = selector;\n this.settings = mergeOptions(defaults, options);\n this.index = this.settings.startAt;\n }\n /**\r\n * Initializes glide.\r\n *\r\n * @param {Object} extensions Collection of extensions to initialize.\r\n * @return {Glide}\r\n */\n\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount$1() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._e.emit('mount.before');\n\n if (isObject(extensions)) {\n this._c = mount(this, extensions, this._e);\n } else {\n warn('You need to provide a object on `mount()`');\n }\n\n this._e.emit('mount.after');\n\n return this;\n }\n /**\r\n * Collects an instance `translate` transformers.\r\n *\r\n * @param {Array} transformers Collection of transformers.\r\n * @return {Void}\r\n */\n\n }, {\n key: \"mutate\",\n value: function mutate() {\n var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (isArray(transformers)) {\n this._t = transformers;\n } else {\n warn('You need to provide a array on `mutate()`');\n }\n\n return this;\n }\n /**\r\n * Updates glide with specified settings.\r\n *\r\n * @param {Object} settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"update\",\n value: function update() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.settings = mergeOptions(this.settings, settings);\n\n if (settings.hasOwnProperty('startAt')) {\n this.index = settings.startAt;\n }\n\n this._e.emit('update');\n\n return this;\n }\n /**\r\n * Change slide with specified pattern. A pattern must be in the special format:\r\n * `>` - Move one forward\r\n * `<` - Move one backward\r\n * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\r\n * `>>` - Rewinds to end (last slide)\r\n * `<<` - Rewinds to start (first slide)\r\n * `|>` - Move one viewport forward\r\n * `|<` - Move one viewport backward\r\n *\r\n * @param {String} pattern\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"go\",\n value: function go(pattern) {\n this._c.Run.make(pattern);\n\n return this;\n }\n /**\r\n * Move track by specified distance.\r\n *\r\n * @param {String} distance\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"move\",\n value: function move(distance) {\n this._c.Transition.disable();\n\n this._c.Move.make(distance);\n\n return this;\n }\n /**\r\n * Destroy instance and revert all changes done by this._c.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this._e.emit('destroy');\n\n return this;\n }\n /**\r\n * Start instance autoplaying.\r\n *\r\n * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"play\",\n value: function play() {\n var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (interval) {\n this.settings.autoplay = interval;\n }\n\n this._e.emit('play');\n\n return this;\n }\n /**\r\n * Stop instance autoplaying.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"pause\",\n value: function pause() {\n this._e.emit('pause');\n\n return this;\n }\n /**\r\n * Sets glide into a idle status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"disable\",\n value: function disable() {\n this.disabled = true;\n return this;\n }\n /**\r\n * Sets glide into a active status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"enable\",\n value: function enable() {\n this.disabled = false;\n return this;\n }\n /**\r\n * Adds cuutom event listener with handler.\r\n *\r\n * @param {String|Array} event\r\n * @param {Function} handler\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"on\",\n value: function on(event, handler) {\n this._e.on(event, handler);\n\n return this;\n }\n /**\r\n * Checks if glide is a precised type.\r\n *\r\n * @param {String} name\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"isType\",\n value: function isType(name) {\n return this.settings.type === name;\n }\n /**\r\n * Gets value of the core options.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: \"settings\",\n get: function get() {\n return this._o;\n }\n /**\r\n * Sets value of the core options.\r\n *\r\n * @param {Object} o\r\n * @return {Void}\r\n */\n ,\n set: function set(o) {\n if (isObject(o)) {\n this._o = o;\n } else {\n warn('Options must be an `object` instance.');\n }\n }\n /**\r\n * Gets current index of the slider.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: \"index\",\n get: function get() {\n return this._i;\n }\n /**\r\n * Sets current index a slider.\r\n *\r\n * @return {Object}\r\n */\n ,\n set: function set(i) {\n this._i = toInt(i);\n }\n /**\r\n * Gets type name of the slider.\r\n *\r\n * @return {String}\r\n */\n\n }, {\n key: \"type\",\n get: function get() {\n return this.settings.type;\n }\n /**\r\n * Gets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"disabled\",\n get: function get() {\n return this._d;\n }\n /**\r\n * Sets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n ,\n set: function set(status) {\n this._d = !!status;\n }\n }]);\n\n return Glide;\n}();\n\nfunction Run (Glide, Components, Events) {\n var Run = {\n /**\n * Initializes autorunning of the glide.\n *\n * @return {Void}\n */\n mount: function mount() {\n this._o = false;\n },\n\n /**\n * Makes glides running based on the passed moving schema.\n *\n * @param {String} move\n */\n make: function make(move) {\n var _this = this;\n\n if (!Glide.disabled) {\n !Glide.settings.waitForTransition || Glide.disable();\n this.move = move;\n Events.emit('run.before', this.move);\n this.calculate();\n Events.emit('run', this.move);\n Components.Transition.after(function () {\n if (_this.isStart()) {\n Events.emit('run.start', _this.move);\n }\n\n if (_this.isEnd()) {\n Events.emit('run.end', _this.move);\n }\n\n if (_this.isOffset()) {\n _this._o = false;\n Events.emit('run.offset', _this.move);\n }\n\n Events.emit('run.after', _this.move);\n Glide.enable();\n });\n }\n },\n\n /**\n * Calculates current index based on defined move.\n *\n * @return {Number|Undefined}\n */\n calculate: function calculate() {\n var move = this.move,\n length = this.length;\n var steps = move.steps,\n direction = move.direction; // By default assume that size of view is equal to one slide\n\n var viewSize = 1; // While direction is `=` we want jump to\n // a specified index described in steps.\n\n if (direction === '=') {\n // Check if bound is true, \n // as we want to avoid whitespaces.\n if (Glide.settings.bound && toInt(steps) > length) {\n Glide.index = length;\n return;\n }\n\n Glide.index = steps;\n return;\n } // When pattern is equal to `>>` we want\n // fast forward to the last slide.\n\n\n if (direction === '>' && steps === '>') {\n Glide.index = length;\n return;\n } // When pattern is equal to `<<` we want\n // fast forward to the first slide.\n\n\n if (direction === '<' && steps === '<') {\n Glide.index = 0;\n return;\n } // pagination movement\n\n\n if (direction === '|') {\n viewSize = Glide.settings.perView || 1;\n } // we are moving forward\n\n\n if (direction === '>' || direction === '|' && steps === '>') {\n var index = calculateForwardIndex(viewSize);\n\n if (index > length) {\n this._o = true;\n }\n\n Glide.index = normalizeForwardIndex(index, viewSize);\n return;\n } // we are moving backward\n\n\n if (direction === '<' || direction === '|' && steps === '<') {\n var _index = calculateBackwardIndex(viewSize);\n\n if (_index < 0) {\n this._o = true;\n }\n\n Glide.index = normalizeBackwardIndex(_index, viewSize);\n return;\n }\n\n warn(\"Invalid direction pattern [\".concat(direction).concat(steps, \"] has been used\"));\n },\n\n /**\n * Checks if we are on the first slide.\n *\n * @return {Boolean}\n */\n isStart: function isStart() {\n return Glide.index <= 0;\n },\n\n /**\n * Checks if we are on the last slide.\n *\n * @return {Boolean}\n */\n isEnd: function isEnd() {\n return Glide.index >= this.length;\n },\n\n /**\n * Checks if we are making a offset run.\n *\n * @param {String} direction\n * @return {Boolean}\n */\n isOffset: function isOffset() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n if (!direction) {\n return this._o;\n }\n\n if (!this._o) {\n return false;\n } // did we view to the right?\n\n\n if (direction === '|>') {\n return this.move.direction === '|' && this.move.steps === '>';\n } // did we view to the left?\n\n\n if (direction === '|<') {\n return this.move.direction === '|' && this.move.steps === '<';\n }\n\n return this.move.direction === direction;\n },\n\n /**\n * Checks if bound mode is active\n *\n * @return {Boolean}\n */\n isBound: function isBound() {\n return Glide.isType('slider') && Glide.settings.focusAt !== 'center' && Glide.settings.bound;\n }\n };\n /**\n * Returns index value to move forward/to the right\n *\n * @param viewSize\n * @returns {Number}\n */\n\n function calculateForwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index + viewSize;\n }\n\n return index + (viewSize - index % viewSize);\n }\n /**\n * Normalizes the given forward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {Number}\n */\n\n\n function normalizeForwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index <= length) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index - (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on the last possible index value given by bound\n if (Run.isBound() && !Run.isEnd()) {\n return length;\n }\n\n return 0;\n }\n\n if (Run.isBound()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n /**\n * Calculates index value to move backward/to the left\n *\n * @param viewSize\n * @returns {Number}\n */\n\n\n function calculateBackwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index - viewSize;\n } // ensure our back navigation results in the same index as a forward navigation\n // to experience a homogeneous paging\n\n\n var view = Math.ceil(index / viewSize);\n return (view - 1) * viewSize;\n }\n /**\n * Normalizes the given backward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {*}\n */\n\n\n function normalizeBackwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index >= 0) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index + (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on first possible index value before we to rewind to the length given by bound\n if (Run.isBound() && Run.isStart()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n\n return 0;\n }\n\n define(Run, 'move', {\n /**\n * Gets value of the move schema.\n *\n * @returns {Object}\n */\n get: function get() {\n return this._m;\n },\n\n /**\n * Sets value of the move schema.\n *\n * @returns {Object}\n */\n set: function set(value) {\n var step = value.substr(1);\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 0\n };\n }\n });\n define(Run, 'length', {\n /**\n * Gets value of the running distance based\n * on zero-indexing number of slides.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n var length = Components.Html.slides.length; // If the `bound` option is active, a maximum running distance should be\n // reduced by `perView` and `focusAt` settings. Running distance\n // should end before creating an empty space after instance.\n\n if (this.isBound()) {\n return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n }\n\n return length - 1;\n }\n });\n define(Run, 'offset', {\n /**\n * Gets status of the offsetting flag.\n *\n * @return {Boolean}\n */\n get: function get() {\n return this._o;\n }\n });\n return Run;\n}\n\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\nfunction now() {\n return new Date().getTime();\n}\n\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction throttle(func, wait) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var timeout, context, args, result;\n var previous = 0;\n\n var later = function later() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function throttled() {\n var at = now();\n if (!previous && options.leading === false) previous = at;\n var remaining = wait - (at - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = at;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n\nvar MARGIN_TYPE = {\n ltr: ['marginLeft', 'marginRight'],\n rtl: ['marginRight', 'marginLeft']\n};\nfunction Gaps (Glide, Components, Events) {\n var Gaps = {\n /**\n * Applies gaps between slides. First and last\n * slides do not receive it's edge margins.\n *\n * @param {HTMLCollection} slides\n * @return {Void}\n */\n apply: function apply(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n var direction = Components.Direction.value;\n\n if (i !== 0) {\n style[MARGIN_TYPE[direction][0]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][0]] = '';\n }\n\n if (i !== slides.length - 1) {\n style[MARGIN_TYPE[direction][1]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][1]] = '';\n }\n }\n },\n\n /**\n * Removes gaps from the slides.\n *\n * @param {HTMLCollection} slides\n * @returns {Void}\n */\n remove: function remove(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n style.marginLeft = '';\n style.marginRight = '';\n }\n }\n };\n define(Gaps, 'value', {\n /**\n * Gets value of the gap.\n *\n * @returns {Number}\n */\n get: function get() {\n return toInt(Glide.settings.gap);\n }\n });\n define(Gaps, 'grow', {\n /**\n * Gets additional dimensions value caused by gaps.\n * Used to increase width of the slides wrapper.\n *\n * @returns {Number}\n */\n get: function get() {\n return Gaps.value * Components.Sizes.length;\n }\n });\n define(Gaps, 'reductor', {\n /**\n * Gets reduction value caused by gaps.\n * Used to subtract width of the slides.\n *\n * @returns {Number}\n */\n get: function get() {\n var perView = Glide.settings.perView;\n return Gaps.value * (perView - 1) / perView;\n }\n });\n /**\n * Apply calculated gaps:\n * - after building, so slides (including clones) will receive proper margins\n * - on updating via API, to recalculate gaps with new options\n */\n\n Events.on(['build.after', 'update'], throttle(function () {\n Gaps.apply(Components.Html.wrapper.children);\n }, 30));\n /**\n * Remove gaps:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Gaps.remove(Components.Html.wrapper.children);\n });\n return Gaps;\n}\n\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param {Element} node\n * @return {Array}\n */\nfunction siblings(node) {\n if (node && node.parentNode) {\n var n = node.parentNode.firstChild;\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== node) {\n matched.push(n);\n }\n }\n\n return matched;\n }\n\n return [];\n}\n/**\n * Coerces a NodeList to an Array.\n *\n * @param {NodeList} nodeList\n * @return {Array}\n */\n\nfunction toArray(nodeList) {\n return Array.prototype.slice.call(nodeList);\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\nfunction Html (Glide, Components, Events) {\n var Html = {\n /**\n * Setup slider HTML nodes.\n *\n * @param {Glide} glide\n */\n mount: function mount() {\n this.root = Glide.selector;\n this.track = this.root.querySelector(TRACK_SELECTOR);\n this.collectSlides();\n },\n\n /**\n * Collect slides\n */\n collectSlides: function collectSlides() {\n this.slides = toArray(this.wrapper.children).filter(function (slide) {\n return !slide.classList.contains(Glide.settings.classes.slide.clone);\n });\n }\n };\n define(Html, 'root', {\n /**\n * Gets node of the glide main element.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._r;\n },\n\n /**\n * Sets node of the glide main element.\n *\n * @return {Object}\n */\n set: function set(r) {\n if (isString(r)) {\n r = document.querySelector(r);\n }\n\n if (r !== null) {\n Html._r = r;\n } else {\n warn('Root element must be a existing Html node');\n }\n }\n });\n define(Html, 'track', {\n /**\n * Gets node of the glide track with slides.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._t;\n },\n\n /**\n * Sets node of the glide track with slides.\n *\n * @return {Object}\n */\n set: function set(t) {\n Html._t = t;\n }\n });\n define(Html, 'wrapper', {\n /**\n * Gets node of the slides wrapper.\n *\n * @return {Object}\n */\n get: function get() {\n return Html.track.children[0];\n }\n });\n /**\n * Add/remove/reorder dynamic slides\n */\n\n Events.on('update', function () {\n Html.collectSlides();\n });\n return Html;\n}\n\nfunction Peek (Glide, Components, Events) {\n var Peek = {\n /**\n * Setups how much to peek based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.peek;\n }\n };\n define(Peek, 'value', {\n /**\n * Gets value of the peek.\n *\n * @returns {Number|Object}\n */\n get: function get() {\n return Peek._v;\n },\n\n /**\n * Sets value of the peek.\n *\n * @param {Number|Object} value\n * @return {Void}\n */\n set: function set(value) {\n if (isObject(value)) {\n value.before = toInt(value.before);\n value.after = toInt(value.after);\n } else {\n value = toInt(value);\n }\n\n Peek._v = value;\n }\n });\n define(Peek, 'reductor', {\n /**\n * Gets reduction value caused by peek.\n *\n * @returns {Number}\n */\n get: function get() {\n var value = Peek.value;\n var perView = Glide.settings.perView;\n\n if (isObject(value)) {\n return value.before / perView + value.after / perView;\n }\n\n return value * 2 / perView;\n }\n });\n /**\n * Recalculate peeking sizes on:\n * - when resizing window to update to proper percents\n */\n\n Events.on(['resize', 'update'], function () {\n Peek.mount();\n });\n return Peek;\n}\n\nfunction Move (Glide, Components, Events) {\n var Move = {\n /**\n * Constructs move component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n this._o = 0;\n },\n\n /**\n * Calculates a movement value based on passed offset and currently active index.\n *\n * @param {Number} offset\n * @return {Void}\n */\n make: function make() {\n var _this = this;\n\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this.offset = offset;\n Events.emit('move', {\n movement: this.value\n });\n Components.Transition.after(function () {\n Events.emit('move.after', {\n movement: _this.value\n });\n });\n }\n };\n define(Move, 'offset', {\n /**\n * Gets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n get: function get() {\n return Move._o;\n },\n\n /**\n * Sets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n set: function set(value) {\n Move._o = !isUndefined(value) ? toInt(value) : 0;\n }\n });\n define(Move, 'translate', {\n /**\n * Gets a raw movement value.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Sizes.slideWidth * Glide.index;\n }\n });\n define(Move, 'value', {\n /**\n * Gets an actual movement value corrected by offset.\n *\n * @return {Number}\n */\n get: function get() {\n var offset = this.offset;\n var translate = this.translate;\n\n if (Components.Direction.is('rtl')) {\n return translate + offset;\n }\n\n return translate - offset;\n }\n });\n /**\n * Make movement to proper slide on:\n * - before build, so glide will start at `startAt` index\n * - on each standard run to move to newly calculated index\n */\n\n Events.on(['build.before', 'run'], function () {\n Move.make();\n });\n return Move;\n}\n\nfunction Sizes (Glide, Components, Events) {\n var Sizes = {\n /**\n * Setups dimensions of slides.\n *\n * @return {Void}\n */\n setupSlides: function setupSlides() {\n var width = \"\".concat(this.slideWidth, \"px\");\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = width;\n }\n },\n\n /**\n * Setups dimensions of slides wrapper.\n *\n * @return {Void}\n */\n setupWrapper: function setupWrapper() {\n Components.Html.wrapper.style.width = \"\".concat(this.wrapperSize, \"px\");\n },\n\n /**\n * Removes applied styles from HTML elements.\n *\n * @returns {Void}\n */\n remove: function remove() {\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = '';\n }\n\n Components.Html.wrapper.style.width = '';\n }\n };\n define(Sizes, 'length', {\n /**\n * Gets count number of the slides.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.slides.length;\n }\n });\n define(Sizes, 'width', {\n /**\n * Gets width value of the slider (visible area).\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.track.offsetWidth;\n }\n });\n define(Sizes, 'wrapperSize', {\n /**\n * Gets size of the slides wrapper.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n }\n });\n define(Sizes, 'slideWidth', {\n /**\n * Gets width value of a single slide.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n }\n });\n /**\n * Apply calculated glide's dimensions:\n * - before building, so other dimensions (e.g. translate) will be calculated propertly\n * - when resizing window to recalculate sildes dimensions\n * - on updating via API, to calculate dimensions based on new options\n */\n\n Events.on(['build.before', 'resize', 'update'], function () {\n Sizes.setupSlides();\n Sizes.setupWrapper();\n });\n /**\n * Remove calculated glide's dimensions:\n * - on destoting to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Sizes.remove();\n });\n return Sizes;\n}\n\nfunction Build (Glide, Components, Events) {\n var Build = {\n /**\n * Init glide building. Adds classes, sets\n * dimensions and setups initial state.\n *\n * @return {Void}\n */\n mount: function mount() {\n Events.emit('build.before');\n this.typeClass();\n this.activeClass();\n Events.emit('build.after');\n },\n\n /**\n * Adds `type` class to the glide element.\n *\n * @return {Void}\n */\n typeClass: function typeClass() {\n Components.Html.root.classList.add(Glide.settings.classes.type[Glide.settings.type]);\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n activeClass: function activeClass() {\n var classes = Glide.settings.classes;\n var slide = Components.Html.slides[Glide.index];\n\n if (slide) {\n slide.classList.add(classes.slide.active);\n siblings(slide).forEach(function (sibling) {\n sibling.classList.remove(classes.slide.active);\n });\n }\n },\n\n /**\n * Removes HTML classes applied at building.\n *\n * @return {Void}\n */\n removeClasses: function removeClasses() {\n var _Glide$settings$class = Glide.settings.classes,\n type = _Glide$settings$class.type,\n slide = _Glide$settings$class.slide;\n Components.Html.root.classList.remove(type[Glide.settings.type]);\n Components.Html.slides.forEach(function (sibling) {\n sibling.classList.remove(slide.active);\n });\n }\n };\n /**\n * Clear building classes:\n * - on destroying to bring HTML to its initial state\n * - on updating to remove classes before remounting component\n */\n\n Events.on(['destroy', 'update'], function () {\n Build.removeClasses();\n });\n /**\n * Remount component:\n * - on resizing of the window to calculate new dimensions\n * - on updating settings via API\n */\n\n Events.on(['resize', 'update'], function () {\n Build.mount();\n });\n /**\n * Swap active class of current slide:\n * - after each move to the new index\n */\n\n Events.on('move.after', function () {\n Build.activeClass();\n });\n return Build;\n}\n\nfunction Clones (Glide, Components, Events) {\n var Clones = {\n /**\n * Create pattern map and collect slides to be cloned.\n */\n mount: function mount() {\n this.items = [];\n\n if (Glide.isType('carousel')) {\n this.items = this.collect();\n }\n },\n\n /**\n * Collect clones with pattern.\n *\n * @return {[]}\n */\n collect: function collect() {\n var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var slides = Components.Html.slides;\n var _Glide$settings = Glide.settings,\n perView = _Glide$settings.perView,\n classes = _Glide$settings.classes,\n cloningRatio = _Glide$settings.cloningRatio;\n\n if (slides.length > 0) {\n var peekIncrementer = +!!Glide.settings.peek;\n var cloneCount = perView + peekIncrementer + Math.round(perView / 2);\n var append = slides.slice(0, cloneCount).reverse();\n var prepend = slides.slice(cloneCount * -1);\n\n for (var r = 0; r < Math.max(cloningRatio, Math.floor(perView / slides.length)); r++) {\n for (var i = 0; i < append.length; i++) {\n var clone = append[i].cloneNode(true);\n clone.classList.add(classes.slide.clone);\n items.push(clone);\n }\n\n for (var _i = 0; _i < prepend.length; _i++) {\n var _clone = prepend[_i].cloneNode(true);\n\n _clone.classList.add(classes.slide.clone);\n\n items.unshift(_clone);\n }\n }\n }\n\n return items;\n },\n\n /**\n * Append cloned slides with generated pattern.\n *\n * @return {Void}\n */\n append: function append() {\n var items = this.items;\n var _Components$Html = Components.Html,\n wrapper = _Components$Html.wrapper,\n slides = _Components$Html.slides;\n var half = Math.floor(items.length / 2);\n var prepend = items.slice(0, half).reverse();\n var append = items.slice(half * -1).reverse();\n var width = \"\".concat(Components.Sizes.slideWidth, \"px\");\n\n for (var i = 0; i < append.length; i++) {\n wrapper.appendChild(append[i]);\n }\n\n for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n wrapper.insertBefore(prepend[_i2], slides[0]);\n }\n\n for (var _i3 = 0; _i3 < items.length; _i3++) {\n items[_i3].style.width = width;\n }\n },\n\n /**\n * Remove all cloned slides.\n *\n * @return {Void}\n */\n remove: function remove() {\n var items = this.items;\n\n for (var i = 0; i < items.length; i++) {\n Components.Html.wrapper.removeChild(items[i]);\n }\n }\n };\n define(Clones, 'grow', {\n /**\n * Gets additional dimensions value caused by clones.\n *\n * @return {Number}\n */\n get: function get() {\n return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n }\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('update', function () {\n Clones.remove();\n Clones.mount();\n Clones.append();\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('build.before', function () {\n if (Glide.isType('carousel')) {\n Clones.append();\n }\n });\n /**\n * Remove clones HTMLElements:\n * - on destroying, to bring HTML to its initial state\n */\n\n Events.on('destroy', function () {\n Clones.remove();\n });\n return Clones;\n}\n\nvar EventsBinder = /*#__PURE__*/function () {\n /**\n * Construct a EventsBinder instance.\n */\n function EventsBinder() {\n var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBinder);\n\n this.listeners = listeners;\n }\n /**\n * Adds events listeners to arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Function} closure\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n\n _createClass(EventsBinder, [{\n key: \"on\",\n value: function on(events, el, closure) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n this.listeners[events[i]] = closure;\n el.addEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Removes event listeners from arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n }, {\n key: \"off\",\n value: function off(events, el) {\n var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n el.removeEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Destroy collected listeners.\n *\n * @returns {Void}\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n delete this.listeners;\n }\n }]);\n\n return EventsBinder;\n}();\n\nfunction Resize (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Resize = {\n /**\n * Initializes window bindings.\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `rezsize` listener to the window.\n * It's a costly event, so we are debouncing it.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('resize', window, throttle(function () {\n Events.emit('resize');\n }, Glide.settings.throttle));\n },\n\n /**\n * Unbinds listeners from the window.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('resize', window);\n }\n };\n /**\n * Remove bindings from window:\n * - on destroying, to remove added EventListener\n */\n\n Events.on('destroy', function () {\n Resize.unbind();\n Binder.destroy();\n });\n return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n '>': '<',\n '<': '>',\n '=': '='\n};\nfunction Direction (Glide, Components, Events) {\n var Direction = {\n /**\n * Setups gap value based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.direction;\n },\n\n /**\n * Resolves pattern based on direction value\n *\n * @param {String} pattern\n * @returns {String}\n */\n resolve: function resolve(pattern) {\n var token = pattern.slice(0, 1);\n\n if (this.is('rtl')) {\n return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n }\n\n return pattern;\n },\n\n /**\n * Checks value of direction mode.\n *\n * @param {String} direction\n * @returns {Boolean}\n */\n is: function is(direction) {\n return this.value === direction;\n },\n\n /**\n * Applies direction class to the root HTML element.\n *\n * @return {Void}\n */\n addClass: function addClass() {\n Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n },\n\n /**\n * Removes direction class from the root HTML element.\n *\n * @return {Void}\n */\n removeClass: function removeClass() {\n Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n }\n };\n define(Direction, 'value', {\n /**\n * Gets value of the direction.\n *\n * @returns {Number}\n */\n get: function get() {\n return Direction._v;\n },\n\n /**\n * Sets value of the direction.\n *\n * @param {String} value\n * @return {Void}\n */\n set: function set(value) {\n if (VALID_DIRECTIONS.indexOf(value) > -1) {\n Direction._v = value;\n } else {\n warn('Direction value must be `ltr` or `rtl`');\n }\n }\n });\n /**\n * Clear direction class:\n * - on destroy to bring HTML to its initial state\n * - on update to remove class before reappling bellow\n */\n\n Events.on(['destroy', 'update'], function () {\n Direction.removeClass();\n });\n /**\n * Remount component:\n * - on update to reflect changes in direction value\n */\n\n Events.on('update', function () {\n Direction.mount();\n });\n /**\n * Apply direction class:\n * - before building to apply class for the first time\n * - on updating to reapply direction class that may changed\n */\n\n Events.on(['build.before', 'update'], function () {\n Direction.addClass();\n });\n return Direction;\n}\n\n/**\n * Reflects value of glide movement.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Rtl (Glide, Components) {\n return {\n /**\n * Negates the passed translate if glide is in RTL option.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Components.Direction.is('rtl')) {\n return -translate;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Gap (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with number in the `gap` settings.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var multiplier = Math.floor(translate / Components.Sizes.slideWidth);\n return translate + Components.Gaps.value * multiplier;\n }\n };\n}\n\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Grow (Glide, Components) {\n return {\n /**\n * Adds to the passed translate width of the half of clones.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Clones.grow / 2;\n }\n };\n}\n\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\nfunction Peeking (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with a `peek` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Glide.settings.focusAt >= 0) {\n var peek = Components.Peek.value;\n\n if (isObject(peek)) {\n return translate - peek.before;\n }\n\n return translate - peek;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Focusing (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with index in the `focusAt` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var gap = Components.Gaps.value;\n var width = Components.Sizes.width;\n var focusAt = Glide.settings.focusAt;\n var slideWidth = Components.Sizes.slideWidth;\n\n if (focusAt === 'center') {\n return translate - (width / 2 - slideWidth / 2);\n }\n\n return translate - slideWidth * focusAt - gap * focusAt;\n }\n };\n}\n\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\nfunction mutator (Glide, Components, Events) {\n /**\n * Merge instance transformers with collection of default transformers.\n * It's important that the Rtl component be last on the list,\n * so it reflects all previous transformations.\n *\n * @type {Array}\n */\n var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n return {\n /**\n * Piplines translate value with registered transformers.\n *\n * @param {Number} translate\n * @return {Number}\n */\n mutate: function mutate(translate) {\n for (var i = 0; i < TRANSFORMERS.length; i++) {\n var transformer = TRANSFORMERS[i];\n\n if (isFunction(transformer) && isFunction(transformer().modify)) {\n translate = transformer(Glide, Components, Events).modify(translate);\n } else {\n warn('Transformer should be a function that returns an object with `modify()` method');\n }\n }\n\n return translate;\n }\n };\n}\n\nfunction Translate (Glide, Components, Events) {\n var Translate = {\n /**\n * Sets value of translate on HTML element.\n *\n * @param {Number} value\n * @return {Void}\n */\n set: function set(value) {\n var transform = mutator(Glide, Components).mutate(value);\n var translate3d = \"translate3d(\".concat(-1 * transform, \"px, 0px, 0px)\");\n Components.Html.wrapper.style.mozTransform = translate3d; // needed for supported Firefox 10-15\n\n Components.Html.wrapper.style.webkitTransform = translate3d; // needed for supported Chrome 10-35, Safari 5.1-8, and Opera 15-22\n\n Components.Html.wrapper.style.transform = translate3d;\n },\n\n /**\n * Removes value of translate from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transform = '';\n },\n\n /**\n * @return {number}\n */\n getStartIndex: function getStartIndex() {\n var length = Components.Sizes.length;\n var index = Glide.index;\n var perView = Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n return length + (index - perView);\n } // \"modulo length\" converts an index that equals length to zero\n\n\n return (index + perView) % length;\n },\n\n /**\n * @return {number}\n */\n getTravelDistance: function getTravelDistance() {\n var travelDistance = Components.Sizes.slideWidth * Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n // reverse travel distance so that we don't have to change subtract operations\n return travelDistance * -1;\n }\n\n return travelDistance;\n }\n };\n /**\n * Set new translate value:\n * - on move to reflect index change\n * - on updating via API to reflect possible changes in options\n */\n\n Events.on('move', function (context) {\n if (!Glide.isType('carousel') || !Components.Run.isOffset()) {\n return Translate.set(context.movement);\n }\n\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n Translate.set(Components.Sizes.slideWidth * Glide.index);\n });\n var startWidth = Components.Sizes.slideWidth * Components.Translate.getStartIndex();\n return Translate.set(startWidth - Components.Translate.getTravelDistance());\n });\n /**\n * Remove translate:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Translate.remove();\n });\n return Translate;\n}\n\nfunction Transition (Glide, Components, Events) {\n /**\n * Holds inactivity status of transition.\n * When true transition is not applied.\n *\n * @type {Boolean}\n */\n var disabled = false;\n var Transition = {\n /**\n * Composes string of the CSS transition.\n *\n * @param {String} property\n * @return {String}\n */\n compose: function compose(property) {\n var settings = Glide.settings;\n\n if (disabled) {\n return \"\".concat(property, \" 0ms \").concat(settings.animationTimingFunc);\n }\n\n return \"\".concat(property, \" \").concat(this.duration, \"ms \").concat(settings.animationTimingFunc);\n },\n\n /**\n * Sets value of transition on HTML element.\n *\n * @param {String=} property\n * @return {Void}\n */\n set: function set() {\n var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n Components.Html.wrapper.style.transition = this.compose(property);\n },\n\n /**\n * Removes value of transition from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transition = '';\n },\n\n /**\n * Runs callback after animation.\n *\n * @param {Function} callback\n * @return {Void}\n */\n after: function after(callback) {\n setTimeout(function () {\n callback();\n }, this.duration);\n },\n\n /**\n * Enable transition.\n *\n * @return {Void}\n */\n enable: function enable() {\n disabled = false;\n this.set();\n },\n\n /**\n * Disable transition.\n *\n * @return {Void}\n */\n disable: function disable() {\n disabled = true;\n this.set();\n }\n };\n define(Transition, 'duration', {\n /**\n * Gets duration of the transition based\n * on currently running animation type.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n\n if (Glide.isType('slider') && Components.Run.offset) {\n return settings.rewindDuration;\n }\n\n return settings.animationDuration;\n }\n });\n /**\n * Set transition `style` value:\n * - on each moving, because it may be cleared by offset move\n */\n\n Events.on('move', function () {\n Transition.set();\n });\n /**\n * Disable transition:\n * - before initial build to avoid transitioning from `0` to `startAt` index\n * - while resizing window and recalculating dimensions\n * - on jumping from offset transition at start and end edges in `carousel` type\n */\n\n Events.on(['build.before', 'resize', 'translate.jump'], function () {\n Transition.disable();\n });\n /**\n * Enable transition:\n * - on each running, because it may be disabled by offset move\n */\n\n Events.on('run', function () {\n Transition.enable();\n });\n /**\n * Remove transition:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Transition.remove();\n });\n return Transition;\n}\n\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\nvar supportsPassive = false;\n\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\n\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\nfunction Swipe (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var swipeSin = 0;\n var swipeStartX = 0;\n var swipeStartY = 0;\n var disabled = false;\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Swipe = {\n /**\n * Initializes swipe bindings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bindSwipeStart();\n },\n\n /**\n * Handler for `swipestart` event. Calculates entry points of the user's tap.\n *\n * @param {Object} event\n * @return {Void}\n */\n start: function start(event) {\n if (!disabled && !Glide.disabled) {\n this.disable();\n var swipe = this.touches(event);\n swipeSin = null;\n swipeStartX = toInt(swipe.pageX);\n swipeStartY = toInt(swipe.pageY);\n this.bindSwipeMove();\n this.bindSwipeEnd();\n Events.emit('swipe.start');\n }\n },\n\n /**\n * Handler for `swipemove` event. Calculates user's tap angle and distance.\n *\n * @param {Object} event\n */\n move: function move(event) {\n if (!Glide.disabled) {\n var _Glide$settings = Glide.settings,\n touchAngle = _Glide$settings.touchAngle,\n touchRatio = _Glide$settings.touchRatio,\n classes = _Glide$settings.classes;\n var swipe = this.touches(event);\n var subExSx = toInt(swipe.pageX) - swipeStartX;\n var subEySy = toInt(swipe.pageY) - swipeStartY;\n var powEX = Math.abs(subExSx << 2);\n var powEY = Math.abs(subEySy << 2);\n var swipeHypotenuse = Math.sqrt(powEX + powEY);\n var swipeCathetus = Math.sqrt(powEY);\n swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n if (swipeSin * 180 / Math.PI < touchAngle) {\n event.stopPropagation();\n Components.Move.make(subExSx * toFloat(touchRatio));\n Components.Html.root.classList.add(classes.dragging);\n Events.emit('swipe.move');\n } else {\n return false;\n }\n }\n },\n\n /**\n * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n *\n * @param {Object} event\n * @return {Void}\n */\n end: function end(event) {\n if (!Glide.disabled) {\n var _Glide$settings2 = Glide.settings,\n perSwipe = _Glide$settings2.perSwipe,\n touchAngle = _Glide$settings2.touchAngle,\n classes = _Glide$settings2.classes;\n var swipe = this.touches(event);\n var threshold = this.threshold(event);\n var swipeDistance = swipe.pageX - swipeStartX;\n var swipeDeg = swipeSin * 180 / Math.PI;\n this.enable();\n\n if (swipeDistance > threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\n } else if (swipeDistance < -threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n } else {\n // While swipe don't reach distance apply previous transform.\n Components.Move.make();\n }\n\n Components.Html.root.classList.remove(classes.dragging);\n this.unbindSwipeMove();\n this.unbindSwipeEnd();\n Events.emit('swipe.end');\n }\n },\n\n /**\n * Binds swipe's starting event.\n *\n * @return {Void}\n */\n bindSwipeStart: function bindSwipeStart() {\n var _this = this;\n\n var _Glide$settings3 = Glide.settings,\n swipeThreshold = _Glide$settings3.swipeThreshold,\n dragThreshold = _Glide$settings3.dragThreshold;\n\n if (swipeThreshold) {\n Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n\n if (dragThreshold) {\n Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n },\n\n /**\n * Unbinds swipe's starting event.\n *\n * @return {Void}\n */\n unbindSwipeStart: function unbindSwipeStart() {\n Binder.off(START_EVENTS[0], Components.Html.wrapper, capture);\n Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's moving event.\n *\n * @return {Void}\n */\n bindSwipeMove: function bindSwipeMove() {\n var _this2 = this;\n\n Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n _this2.move(event);\n }, Glide.settings.throttle), capture);\n },\n\n /**\n * Unbinds swipe's moving event.\n *\n * @return {Void}\n */\n unbindSwipeMove: function unbindSwipeMove() {\n Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's ending event.\n *\n * @return {Void}\n */\n bindSwipeEnd: function bindSwipeEnd() {\n var _this3 = this;\n\n Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n _this3.end(event);\n });\n },\n\n /**\n * Unbinds swipe's ending event.\n *\n * @return {Void}\n */\n unbindSwipeEnd: function unbindSwipeEnd() {\n Binder.off(END_EVENTS, Components.Html.wrapper);\n },\n\n /**\n * Normalizes event touches points accorting to different types.\n *\n * @param {Object} event\n */\n touches: function touches(event) {\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return event;\n }\n\n return event.touches[0] || event.changedTouches[0];\n },\n\n /**\n * Gets value of minimum swipe distance settings based on event type.\n *\n * @return {Number}\n */\n threshold: function threshold(event) {\n var settings = Glide.settings;\n\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return settings.dragThreshold;\n }\n\n return settings.swipeThreshold;\n },\n\n /**\n * Enables swipe event.\n *\n * @return {self}\n */\n enable: function enable() {\n disabled = false;\n Components.Transition.enable();\n return this;\n },\n\n /**\n * Disables swipe event.\n *\n * @return {self}\n */\n disable: function disable() {\n disabled = true;\n Components.Transition.disable();\n return this;\n }\n };\n /**\n * Add component class:\n * - after initial building\n */\n\n Events.on('build.after', function () {\n Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n });\n /**\n * Remove swiping bindings:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Swipe.unbindSwipeStart();\n Swipe.unbindSwipeMove();\n Swipe.unbindSwipeEnd();\n Binder.destroy();\n });\n return Swipe;\n}\n\nfunction Images (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Images = {\n /**\n * Binds listener to glide wrapper.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `dragstart` event on wrapper to prevent dragging images.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n },\n\n /**\n * Unbinds `dragstart` event on wrapper.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('dragstart', Components.Html.wrapper);\n },\n\n /**\n * Event handler. Prevents dragging.\n *\n * @return {Void}\n */\n dragstart: function dragstart(event) {\n event.preventDefault();\n }\n };\n /**\n * Remove bindings from images:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Images.unbind();\n Binder.destroy();\n });\n return Images;\n}\n\nfunction Anchors (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds detaching status of anchors.\n * Prevents detaching of already detached anchors.\n *\n * @private\n * @type {Boolean}\n */\n\n var detached = false;\n /**\n * Holds preventing status of anchors.\n * If `true` redirection after click will be disabled.\n *\n * @private\n * @type {Boolean}\n */\n\n var prevented = false;\n var Anchors = {\n /**\n * Setups a initial state of anchors component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n /**\n * Holds collection of anchors elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._a = Components.Html.wrapper.querySelectorAll('a');\n this.bind();\n },\n\n /**\n * Binds events to anchors inside a track.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('click', Components.Html.wrapper, this.click);\n },\n\n /**\n * Unbinds events attached to anchors inside a track.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('click', Components.Html.wrapper);\n },\n\n /**\n * Handler for click event. Prevents clicks when glide is in `prevent` status.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n if (prevented) {\n event.stopPropagation();\n event.preventDefault();\n }\n },\n\n /**\n * Detaches anchors click event inside glide.\n *\n * @return {self}\n */\n detach: function detach() {\n prevented = true;\n\n if (!detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = false;\n }\n\n detached = true;\n }\n\n return this;\n },\n\n /**\n * Attaches anchors click events inside glide.\n *\n * @return {self}\n */\n attach: function attach() {\n prevented = false;\n\n if (detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = true;\n }\n\n detached = false;\n }\n\n return this;\n }\n };\n define(Anchors, 'items', {\n /**\n * Gets collection of the arrows HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Anchors._a;\n }\n });\n /**\n * Detach anchors inside slides:\n * - on swiping, so they won't redirect to its `href` attributes\n */\n\n Events.on('swipe.move', function () {\n Anchors.detach();\n });\n /**\n * Attach anchors inside slides:\n * - after swiping and transitions ends, so they can redirect after click again\n */\n\n Events.on('swipe.end', function () {\n Components.Transition.after(function () {\n Anchors.attach();\n });\n });\n /**\n * Unbind anchors inside slides:\n * - on destroying, to bring anchors to its initial state\n */\n\n Events.on('destroy', function () {\n Anchors.attach();\n Anchors.unbind();\n Binder.destroy();\n });\n return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\nvar PREVIOUS_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\"<\\\"]\");\nvar NEXT_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\">\\\"]\");\nfunction Controls (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Controls = {\n /**\n * Inits arrows. Binds events listeners\n * to the arrows HTML elements.\n *\n * @return {Void}\n */\n mount: function mount() {\n /**\n * Collection of navigation HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n /**\n * Collection of controls HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n\n this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n /**\n * Collection of arrow control HTML elements.\n *\n * @private\n * @type {Object}\n */\n\n this._arrowControls = {\n previous: Components.Html.root.querySelectorAll(PREVIOUS_CONTROLS_SELECTOR),\n next: Components.Html.root.querySelectorAll(NEXT_CONTROLS_SELECTOR)\n };\n this.addBindings();\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n setActive: function setActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.addClass(this._n[i].children);\n }\n },\n\n /**\n * Removes active class to current slide.\n *\n * @return {Void}\n */\n removeActive: function removeActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.removeClass(this._n[i].children);\n }\n },\n\n /**\n * Toggles active class on items inside navigation.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n addClass: function addClass(controls) {\n var settings = Glide.settings;\n var item = controls[Glide.index];\n\n if (!item) {\n return;\n }\n\n item.classList.add(settings.classes.nav.active);\n siblings(item).forEach(function (sibling) {\n sibling.classList.remove(settings.classes.nav.active);\n });\n },\n\n /**\n * Removes active class from active control.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n removeClass: function removeClass(controls) {\n var item = controls[Glide.index];\n item === null || item === void 0 ? void 0 : item.classList.remove(Glide.settings.classes.nav.active);\n },\n\n /**\n * Calculates, removes or adds `Glide.settings.classes.disabledArrow` class on the control arrows\n */\n setArrowState: function setArrowState() {\n if (Glide.settings.rewind) {\n return;\n }\n\n var next = Controls._arrowControls.next;\n var previous = Controls._arrowControls.previous;\n this.resetArrowState(next, previous);\n\n if (Glide.index === 0) {\n this.disableArrow(previous);\n }\n\n if (Glide.index === Components.Run.length) {\n this.disableArrow(next);\n }\n },\n\n /**\n * Removes `Glide.settings.classes.disabledArrow` from given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n resetArrowState: function resetArrowState() {\n var settings = Glide.settings;\n\n for (var _len = arguments.length, lists = new Array(_len), _key = 0; _key < _len; _key++) {\n lists[_key] = arguments[_key];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.remove(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds `Glide.settings.classes.disabledArrow` to given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n disableArrow: function disableArrow() {\n var settings = Glide.settings;\n\n for (var _len2 = arguments.length, lists = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n lists[_key2] = arguments[_key2];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.add(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds handles to the each group of controls.\n *\n * @return {Void}\n */\n addBindings: function addBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.bind(this._c[i].children);\n }\n },\n\n /**\n * Removes handles from the each group of controls.\n *\n * @return {Void}\n */\n removeBindings: function removeBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.unbind(this._c[i].children);\n }\n },\n\n /**\n * Binds events to arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n bind: function bind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.on('click', elements[i], this.click);\n Binder.on('touchstart', elements[i], this.click, capture);\n }\n },\n\n /**\n * Unbinds events binded to the arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n unbind: function unbind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.off(['click', 'touchstart'], elements[i]);\n }\n },\n\n /**\n * Handles `click` event on the arrows HTML elements.\n * Moves slider in direction given via the\n * `data-glide-dir` attribute.\n *\n * @param {Object} event\n * @return {void}\n */\n click: function click(event) {\n if (!supportsPassive$1 && event.type === 'touchstart') {\n event.preventDefault();\n }\n\n var direction = event.currentTarget.getAttribute('data-glide-dir');\n Components.Run.make(Components.Direction.resolve(direction));\n }\n };\n define(Controls, 'items', {\n /**\n * Gets collection of the controls HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Controls._c;\n }\n });\n /**\n * Swap active class of current navigation item:\n * - after mounting to set it to initial index\n * - after each move to the new index\n */\n\n Events.on(['mount.after', 'move.after'], function () {\n Controls.setActive();\n });\n /**\n * Add or remove disabled class of arrow elements\n */\n\n Events.on(['mount.after', 'run'], function () {\n Controls.setArrowState();\n });\n /**\n * Remove bindings and HTML Classes:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Controls.removeBindings();\n Controls.removeActive();\n Binder.destroy();\n });\n return Controls;\n}\n\nfunction Keyboard (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Keyboard = {\n /**\n * Binds keyboard events on component mount.\n *\n * @return {Void}\n */\n mount: function mount() {\n if (Glide.settings.keyboard) {\n this.bind();\n }\n },\n\n /**\n * Adds keyboard press events.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('keyup', document, this.press);\n },\n\n /**\n * Removes keyboard press events.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('keyup', document);\n },\n\n /**\n * Handles keyboard's arrows press and moving glide foward and backward.\n *\n * @param {Object} event\n * @return {Void}\n */\n press: function press(event) {\n var perSwipe = Glide.settings.perSwipe;\n var arrowSymbols = {\n ArrowRight: '>',\n ArrowLeft: '<'\n };\n\n if (['ArrowRight', 'ArrowLeft'].includes(event.code)) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe).concat(arrowSymbols[event.code])));\n }\n }\n };\n /**\n * Remove bindings from keyboard:\n * - on destroying to remove added events\n * - on updating to remove events before remounting\n */\n\n Events.on(['destroy', 'update'], function () {\n Keyboard.unbind();\n });\n /**\n * Remount component\n * - on updating to reflect potential changes in settings\n */\n\n Events.on('update', function () {\n Keyboard.mount();\n });\n /**\n * Destroy binder:\n * - on destroying to remove listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Keyboard;\n}\n\nfunction Autoplay (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Autoplay = {\n /**\n * Initializes autoplaying and events.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.enable();\n this.start();\n\n if (Glide.settings.hoverpause) {\n this.bind();\n }\n },\n\n /**\n * Enables autoplaying\n *\n * @returns {Void}\n */\n enable: function enable() {\n this._e = true;\n },\n\n /**\n * Disables autoplaying.\n *\n * @returns {Void}\n */\n disable: function disable() {\n this._e = false;\n },\n\n /**\n * Starts autoplaying in configured interval.\n *\n * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n * @return {Void}\n */\n start: function start() {\n var _this = this;\n\n if (!this._e) {\n return;\n }\n\n this.enable();\n\n if (Glide.settings.autoplay) {\n if (isUndefined(this._i)) {\n this._i = setInterval(function () {\n _this.stop();\n\n Components.Run.make('>');\n\n _this.start();\n\n Events.emit('autoplay');\n }, this.time);\n }\n }\n },\n\n /**\n * Stops autorunning of the glide.\n *\n * @return {Void}\n */\n stop: function stop() {\n this._i = clearInterval(this._i);\n },\n\n /**\n * Stops autoplaying while mouse is over glide's area.\n *\n * @return {Void}\n */\n bind: function bind() {\n var _this2 = this;\n\n Binder.on('mouseover', Components.Html.root, function () {\n if (_this2._e) {\n _this2.stop();\n }\n });\n Binder.on('mouseout', Components.Html.root, function () {\n if (_this2._e) {\n _this2.start();\n }\n });\n },\n\n /**\n * Unbind mouseover events.\n *\n * @returns {Void}\n */\n unbind: function unbind() {\n Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n }\n };\n define(Autoplay, 'time', {\n /**\n * Gets time period value for the autoplay interval. Prioritizes\n * times in `data-glide-autoplay` attrubutes over options.\n *\n * @return {Number}\n */\n get: function get() {\n var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n if (autoplay) {\n return toInt(autoplay);\n }\n\n return toInt(Glide.settings.autoplay);\n }\n });\n /**\n * Stop autoplaying and unbind events:\n * - on destroying, to clear defined interval\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['destroy', 'update'], function () {\n Autoplay.unbind();\n });\n /**\n * Stop autoplaying:\n * - before each run, to restart autoplaying\n * - on pausing via API\n * - on destroying, to clear defined interval\n * - while starting a swipe\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['run.before', 'swipe.start', 'update'], function () {\n Autoplay.stop();\n });\n Events.on(['pause', 'destroy'], function () {\n Autoplay.disable();\n Autoplay.stop();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['run.after', 'swipe.end'], function () {\n Autoplay.start();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['play'], function () {\n Autoplay.enable();\n Autoplay.start();\n });\n /**\n * Remount autoplaying:\n * - on updating via API to reset interval that may changed\n */\n\n Events.on('update', function () {\n Autoplay.mount();\n });\n /**\n * Destroy a binder:\n * - on destroying glide instance to clearup listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Autoplay;\n}\n\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\n\nfunction sortBreakpoints(points) {\n if (isObject(points)) {\n return sortKeys(points);\n } else {\n warn(\"Breakpoints option must be an object\");\n }\n\n return {};\n}\n\nfunction Breakpoints (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds reference to settings.\n *\n * @type {Object}\n */\n\n var settings = Glide.settings;\n /**\n * Holds reference to breakpoints object in settings. Sorts breakpoints\n * from smaller to larger. It is required in order to proper\n * matching currently active breakpoint settings.\n *\n * @type {Object}\n */\n\n var points = sortBreakpoints(settings.breakpoints);\n /**\n * Cache initial settings before overwritting.\n *\n * @type {Object}\n */\n\n var defaults = Object.assign({}, settings);\n var Breakpoints = {\n /**\n * Matches settings for currectly matching media breakpoint.\n *\n * @param {Object} points\n * @returns {Object}\n */\n match: function match(points) {\n if (typeof window.matchMedia !== 'undefined') {\n for (var point in points) {\n if (points.hasOwnProperty(point)) {\n if (window.matchMedia(\"(max-width: \".concat(point, \"px)\")).matches) {\n return points[point];\n }\n }\n }\n }\n\n return defaults;\n }\n };\n /**\n * Overwrite instance settings with currently matching breakpoint settings.\n * This happens right after component initialization.\n */\n\n Object.assign(settings, Breakpoints.match(points));\n /**\n * Update glide with settings of matched brekpoint:\n * - window resize to update slider\n */\n\n Binder.on('resize', window, throttle(function () {\n Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n }, Glide.settings.throttle));\n /**\n * Resort and update default settings:\n * - on reinit via API, so breakpoint matching will be performed with options\n */\n\n Events.on('update', function () {\n points = sortBreakpoints(points);\n defaults = Object.assign({}, settings);\n });\n /**\n * Unbind resize listener:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Binder.off('resize', window);\n });\n return Breakpoints;\n}\n\nvar COMPONENTS = {\n // Required\n Html: Html,\n Translate: Translate,\n Transition: Transition,\n Direction: Direction,\n Peek: Peek,\n Sizes: Sizes,\n Gaps: Gaps,\n Move: Move,\n Clones: Clones,\n Resize: Resize,\n Build: Build,\n Run: Run,\n // Optional\n Swipe: Swipe,\n Images: Images,\n Anchors: Anchors,\n Controls: Controls,\n Keyboard: Keyboard,\n Autoplay: Autoplay,\n Breakpoints: Breakpoints\n};\n\nvar Glide = /*#__PURE__*/function (_Core) {\n _inherits(Glide, _Core);\n\n var _super = _createSuper(Glide);\n\n function Glide() {\n _classCallCheck(this, Glide);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return _get(_getPrototypeOf(Glide.prototype), \"mount\", this).call(this, Object.assign({}, COMPONENTS, extensions));\n }\n }]);\n\n return Glide;\n}(Glide$1);\n\nexport { Glide as default };\n","// Generated using scripts/write-decode-map.ts\nexport const htmlDecodeTree = /* #__PURE__ */ new Uint16Array(\n// prettier-ignore\n/* #__PURE__ */ \"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map","// Generated using scripts/write-decode-map.ts\nexport const xmlDecodeTree = /* #__PURE__ */ new Uint16Array(\n// prettier-ignore\n/* #__PURE__ */ \"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-xml.js.map","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n [0, 65533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n let output = \"\";\n if (codePoint > 65535) {\n codePoint -= 65536;\n output += String.fromCharCode(((codePoint >>> 10) & 1023) | 55296);\n codePoint = 56320 | (codePoint & 1023);\n }\n output += String.fromCharCode(codePoint);\n return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n var _a;\n if ((codePoint >= 55296 && codePoint <= 57343) ||\n codePoint > 1114111) {\n return 65533;\n }\n return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport function decodeCodePoint(codePoint) {\n return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode-codepoint.js.map","import { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { replaceCodePoint, fromCodePoint } from \"./decode-codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 32;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n /** The current state of the decoder. */\n this.state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n this.consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n this.result = 0;\n /** The current index in the decode tree. */\n this.treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n this.excess = 1;\n /** The mode in which the decoder is operating. */\n this.decodeMode = DecodingMode.Strict;\n }\n /** Resets the instance to make it reusable. */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericStart(input, offset) {\n if (offset >= input.length) {\n return -1;\n }\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n addToNumericResult(input, start, end, base) {\n if (start !== end) {\n const digitCount = end - start;\n this.result =\n this.result * Math.pow(base, digitCount) +\n Number.parseInt(input.substr(start, digitCount), base);\n this.consumed += digitCount;\n }\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(input, offset) {\n const startIndex = offset;\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(input, startIndex, offset, 16);\n return this.emitNumericEntity(char, 3);\n }\n }\n this.addToNumericResult(input, startIndex, offset, 16);\n return -1;\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(input, offset) {\n const startIndex = offset;\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(input, startIndex, offset, 10);\n return this.emitNumericEntity(char, 2);\n }\n }\n this.addToNumericResult(input, startIndex, offset, 10);\n return -1;\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n var _a;\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(input, offset) {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The mask is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n for (; offset < input.length; offset++, this.excess++) {\n const char = input.charCodeAt(offset);\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n }\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n var _a;\n const { result, decodeTree } = this;\n const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n end() {\n var _a;\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n let returnValue = \"\";\n const decoder = new EntityDecoder(decodeTree, (data) => (returnValue += fromCodePoint(data)));\n return function decodeWithTrie(input, decodeMode) {\n let lastIndex = 0;\n let offset = 0;\n while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n returnValue += input.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n const length = decoder.write(input, \n // Skip the \"&\"\n offset + 1);\n if (length < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + length;\n // If `length` is 0, skip the current `&` and continue.\n offset = length === 0 ? lastIndex + 1 : lastIndex;\n }\n const result = returnValue + input.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n returnValue = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIndex, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIndex + value] - 1;\n }\n // Case 3: Multiple branches encoded in dictionary\n // Binary search for the character.\n let lo = nodeIndex;\n let hi = lo + branchCount - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const midValue = decodeTree[mid];\n if (midValue < char) {\n lo = mid + 1;\n }\n else if (midValue > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[mid + branchCount];\n }\n }\n return -1;\n}\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(htmlString, mode = DecodingMode.Legacy) {\n return htmlDecoder(htmlString, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute) {\n return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString) {\n return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString) {\n return xmlDecoder(xmlString, DecodingMode.Strict);\n}\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nexport { decodeCodePoint, replaceCodePoint, fromCodePoint, } from \"./decode-codepoint.js\";\n//# sourceMappingURL=decode.js.map","import { EntityDecoder, DecodingMode, htmlDecodeTree, xmlDecodeTree, } from \"entities/decode\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"Tab\"] = 9] = \"Tab\";\n CharCodes[CharCodes[\"NewLine\"] = 10] = \"NewLine\";\n CharCodes[CharCodes[\"FormFeed\"] = 12] = \"FormFeed\";\n CharCodes[CharCodes[\"CarriageReturn\"] = 13] = \"CarriageReturn\";\n CharCodes[CharCodes[\"Space\"] = 32] = \"Space\";\n CharCodes[CharCodes[\"ExclamationMark\"] = 33] = \"ExclamationMark\";\n CharCodes[CharCodes[\"Number\"] = 35] = \"Number\";\n CharCodes[CharCodes[\"Amp\"] = 38] = \"Amp\";\n CharCodes[CharCodes[\"SingleQuote\"] = 39] = \"SingleQuote\";\n CharCodes[CharCodes[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n CharCodes[CharCodes[\"Dash\"] = 45] = \"Dash\";\n CharCodes[CharCodes[\"Slash\"] = 47] = \"Slash\";\n CharCodes[CharCodes[\"Zero\"] = 48] = \"Zero\";\n CharCodes[CharCodes[\"Nine\"] = 57] = \"Nine\";\n CharCodes[CharCodes[\"Semi\"] = 59] = \"Semi\";\n CharCodes[CharCodes[\"Lt\"] = 60] = \"Lt\";\n CharCodes[CharCodes[\"Eq\"] = 61] = \"Eq\";\n CharCodes[CharCodes[\"Gt\"] = 62] = \"Gt\";\n CharCodes[CharCodes[\"Questionmark\"] = 63] = \"Questionmark\";\n CharCodes[CharCodes[\"UpperA\"] = 65] = \"UpperA\";\n CharCodes[CharCodes[\"LowerA\"] = 97] = \"LowerA\";\n CharCodes[CharCodes[\"UpperF\"] = 70] = \"UpperF\";\n CharCodes[CharCodes[\"LowerF\"] = 102] = \"LowerF\";\n CharCodes[CharCodes[\"UpperZ\"] = 90] = \"UpperZ\";\n CharCodes[CharCodes[\"LowerZ\"] = 122] = \"LowerZ\";\n CharCodes[CharCodes[\"LowerX\"] = 120] = \"LowerX\";\n CharCodes[CharCodes[\"OpeningSquareBracket\"] = 91] = \"OpeningSquareBracket\";\n})(CharCodes || (CharCodes = {}));\n/** All the states the tokenizer can be in. */\nvar State;\n(function (State) {\n State[State[\"Text\"] = 1] = \"Text\";\n State[State[\"BeforeTagName\"] = 2] = \"BeforeTagName\";\n State[State[\"InTagName\"] = 3] = \"InTagName\";\n State[State[\"InSelfClosingTag\"] = 4] = \"InSelfClosingTag\";\n State[State[\"BeforeClosingTagName\"] = 5] = \"BeforeClosingTagName\";\n State[State[\"InClosingTagName\"] = 6] = \"InClosingTagName\";\n State[State[\"AfterClosingTagName\"] = 7] = \"AfterClosingTagName\";\n // Attributes\n State[State[\"BeforeAttributeName\"] = 8] = \"BeforeAttributeName\";\n State[State[\"InAttributeName\"] = 9] = \"InAttributeName\";\n State[State[\"AfterAttributeName\"] = 10] = \"AfterAttributeName\";\n State[State[\"BeforeAttributeValue\"] = 11] = \"BeforeAttributeValue\";\n State[State[\"InAttributeValueDq\"] = 12] = \"InAttributeValueDq\";\n State[State[\"InAttributeValueSq\"] = 13] = \"InAttributeValueSq\";\n State[State[\"InAttributeValueNq\"] = 14] = \"InAttributeValueNq\";\n // Declarations\n State[State[\"BeforeDeclaration\"] = 15] = \"BeforeDeclaration\";\n State[State[\"InDeclaration\"] = 16] = \"InDeclaration\";\n // Processing instructions\n State[State[\"InProcessingInstruction\"] = 17] = \"InProcessingInstruction\";\n // Comments & CDATA\n State[State[\"BeforeComment\"] = 18] = \"BeforeComment\";\n State[State[\"CDATASequence\"] = 19] = \"CDATASequence\";\n State[State[\"InSpecialComment\"] = 20] = \"InSpecialComment\";\n State[State[\"InCommentLike\"] = 21] = \"InCommentLike\";\n // Special tags\n State[State[\"BeforeSpecialS\"] = 22] = \"BeforeSpecialS\";\n State[State[\"BeforeSpecialT\"] = 23] = \"BeforeSpecialT\";\n State[State[\"SpecialStartSequence\"] = 24] = \"SpecialStartSequence\";\n State[State[\"InSpecialTag\"] = 25] = \"InSpecialTag\";\n State[State[\"InEntity\"] = 26] = \"InEntity\";\n})(State || (State = {}));\nfunction isWhitespace(c) {\n return (c === CharCodes.Space ||\n c === CharCodes.NewLine ||\n c === CharCodes.Tab ||\n c === CharCodes.FormFeed ||\n c === CharCodes.CarriageReturn);\n}\nfunction isEndOfTagSection(c) {\n return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);\n}\nfunction isASCIIAlpha(c) {\n return ((c >= CharCodes.LowerA && c <= CharCodes.LowerZ) ||\n (c >= CharCodes.UpperA && c <= CharCodes.UpperZ));\n}\nexport var QuoteType;\n(function (QuoteType) {\n QuoteType[QuoteType[\"NoValue\"] = 0] = \"NoValue\";\n QuoteType[QuoteType[\"Unquoted\"] = 1] = \"Unquoted\";\n QuoteType[QuoteType[\"Single\"] = 2] = \"Single\";\n QuoteType[QuoteType[\"Double\"] = 3] = \"Double\";\n})(QuoteType || (QuoteType = {}));\n/**\n * Sequences used to match longer strings.\n *\n * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End\n * sequences with an increased offset.\n */\nconst Sequences = {\n Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]), // CDATA[\n CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]), // ]]>\n CommentEnd: new Uint8Array([0x2d, 0x2d, 0x3e]), // `-->`\n ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]), // `</script`\n StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]), // `</style`\n TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]), // `</title`\n TextareaEnd: new Uint8Array([\n 0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61,\n ]), // `</textarea`\n XmpEnd: new Uint8Array([0x3c, 0x2f, 0x78, 0x6d, 0x70]), // `</xmp`\n};\nexport default class Tokenizer {\n constructor({ xmlMode = false, decodeEntities = true, }, cbs) {\n this.cbs = cbs;\n /** The current state the tokenizer is in. */\n this.state = State.Text;\n /** The read buffer. */\n this.buffer = \"\";\n /** The beginning of the section that is currently being read. */\n this.sectionStart = 0;\n /** The index within the buffer that we are currently looking at. */\n this.index = 0;\n /** The start of the last entity. */\n this.entityStart = 0;\n /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n this.baseState = State.Text;\n /** For special parsing behavior inside of script and style tags. */\n this.isSpecial = false;\n /** Indicates whether the tokenizer has been paused. */\n this.running = true;\n /** The offset of the current buffer. */\n this.offset = 0;\n this.currentSequence = undefined;\n this.sequenceIndex = 0;\n this.xmlMode = xmlMode;\n this.decodeEntities = decodeEntities;\n this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));\n }\n reset() {\n this.state = State.Text;\n this.buffer = \"\";\n this.sectionStart = 0;\n this.index = 0;\n this.baseState = State.Text;\n this.currentSequence = undefined;\n this.running = true;\n this.offset = 0;\n }\n write(chunk) {\n this.offset += this.buffer.length;\n this.buffer = chunk;\n this.parse();\n }\n end() {\n if (this.running)\n this.finish();\n }\n pause() {\n this.running = false;\n }\n resume() {\n this.running = true;\n if (this.index < this.buffer.length + this.offset) {\n this.parse();\n }\n }\n stateText(c) {\n if (c === CharCodes.Lt ||\n (!this.decodeEntities && this.fastForwardTo(CharCodes.Lt))) {\n if (this.index > this.sectionStart) {\n this.cbs.ontext(this.sectionStart, this.index);\n }\n this.state = State.BeforeTagName;\n this.sectionStart = this.index;\n }\n else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n stateSpecialStartSequence(c) {\n const isEnd = this.sequenceIndex === this.currentSequence.length;\n const isMatch = isEnd\n ? // If we are at the end of the sequence, make sure the tag name has ended\n isEndOfTagSection(c)\n : // Otherwise, do a case-insensitive comparison\n (c | 0x20) === this.currentSequence[this.sequenceIndex];\n if (!isMatch) {\n this.isSpecial = false;\n }\n else if (!isEnd) {\n this.sequenceIndex++;\n return;\n }\n this.sequenceIndex = 0;\n this.state = State.InTagName;\n this.stateInTagName(c);\n }\n /** Look for an end tag. For <title> tags, also decode entities. */\n stateInSpecialTag(c) {\n if (this.sequenceIndex === this.currentSequence.length) {\n if (c === CharCodes.Gt || isWhitespace(c)) {\n const endOfText = this.index - this.currentSequence.length;\n if (this.sectionStart < endOfText) {\n // Spoof the index so that reported locations match up.\n const actualIndex = this.index;\n this.index = endOfText;\n this.cbs.ontext(this.sectionStart, endOfText);\n this.index = actualIndex;\n }\n this.isSpecial = false;\n this.sectionStart = endOfText + 2; // Skip over the `</`\n this.stateInClosingTagName(c);\n return; // We are done; skip the rest of the function.\n }\n this.sequenceIndex = 0;\n }\n if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {\n this.sequenceIndex += 1;\n }\n else if (this.sequenceIndex === 0) {\n if (this.currentSequence === Sequences.TitleEnd) {\n // We have to parse entities in <title> tags.\n if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n else if (this.fastForwardTo(CharCodes.Lt)) {\n // Outside of <title> tags, we can fast-forward.\n this.sequenceIndex = 1;\n }\n }\n else {\n // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.\n this.sequenceIndex = Number(c === CharCodes.Lt);\n }\n }\n stateCDATASequence(c) {\n if (c === Sequences.Cdata[this.sequenceIndex]) {\n if (++this.sequenceIndex === Sequences.Cdata.length) {\n this.state = State.InCommentLike;\n this.currentSequence = Sequences.CdataEnd;\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n }\n }\n else {\n this.sequenceIndex = 0;\n this.state = State.InDeclaration;\n this.stateInDeclaration(c); // Reconsume the character\n }\n }\n /**\n * When we wait for one specific character, we can speed things up\n * by skipping through the buffer until we find it.\n *\n * @returns Whether the character was found.\n */\n fastForwardTo(c) {\n while (++this.index < this.buffer.length + this.offset) {\n if (this.buffer.charCodeAt(this.index - this.offset) === c) {\n return true;\n }\n }\n /*\n * We increment the index at the end of the `parse` loop,\n * so set it to `buffer.length - 1` here.\n *\n * TODO: Refactor `parse` to increment index before calling states.\n */\n this.index = this.buffer.length + this.offset - 1;\n return false;\n }\n /**\n * Comments and CDATA end with `-->` and `]]>`.\n *\n * Their common qualities are:\n * - Their end sequences have a distinct character they start with.\n * - That character is then repeated, so we have to check multiple repeats.\n * - All characters but the start character of the sequence can be skipped.\n */\n stateInCommentLike(c) {\n if (c === this.currentSequence[this.sequenceIndex]) {\n if (++this.sequenceIndex === this.currentSequence.length) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, this.index, 2);\n }\n else {\n this.cbs.oncomment(this.sectionStart, this.index, 2);\n }\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n this.state = State.Text;\n }\n }\n else if (this.sequenceIndex === 0) {\n // Fast-forward to the first character of the sequence\n if (this.fastForwardTo(this.currentSequence[0])) {\n this.sequenceIndex = 1;\n }\n }\n else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n // Allow long sequences, eg. --->, ]]]>\n this.sequenceIndex = 0;\n }\n }\n /**\n * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.\n *\n * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).\n * We allow anything that wouldn't end the tag.\n */\n isTagStartChar(c) {\n return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);\n }\n startSpecial(sequence, offset) {\n this.isSpecial = true;\n this.currentSequence = sequence;\n this.sequenceIndex = offset;\n this.state = State.SpecialStartSequence;\n }\n stateBeforeTagName(c) {\n if (c === CharCodes.ExclamationMark) {\n this.state = State.BeforeDeclaration;\n this.sectionStart = this.index + 1;\n }\n else if (c === CharCodes.Questionmark) {\n this.state = State.InProcessingInstruction;\n this.sectionStart = this.index + 1;\n }\n else if (this.isTagStartChar(c)) {\n const lower = c | 0x20;\n this.sectionStart = this.index;\n if (this.xmlMode) {\n this.state = State.InTagName;\n }\n else if (lower === Sequences.ScriptEnd[2]) {\n this.state = State.BeforeSpecialS;\n }\n else if (lower === Sequences.TitleEnd[2] ||\n lower === Sequences.XmpEnd[2]) {\n this.state = State.BeforeSpecialT;\n }\n else {\n this.state = State.InTagName;\n }\n }\n else if (c === CharCodes.Slash) {\n this.state = State.BeforeClosingTagName;\n }\n else {\n this.state = State.Text;\n this.stateText(c);\n }\n }\n stateInTagName(c) {\n if (isEndOfTagSection(c)) {\n this.cbs.onopentagname(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n }\n stateBeforeClosingTagName(c) {\n if (isWhitespace(c)) {\n // Ignore\n }\n else if (c === CharCodes.Gt) {\n this.state = State.Text;\n }\n else {\n this.state = this.isTagStartChar(c)\n ? State.InClosingTagName\n : State.InSpecialComment;\n this.sectionStart = this.index;\n }\n }\n stateInClosingTagName(c) {\n if (c === CharCodes.Gt || isWhitespace(c)) {\n this.cbs.onclosetag(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.AfterClosingTagName;\n this.stateAfterClosingTagName(c);\n }\n }\n stateAfterClosingTagName(c) {\n // Skip everything until \">\"\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeAttributeName(c) {\n if (c === CharCodes.Gt) {\n this.cbs.onopentagend(this.index);\n if (this.isSpecial) {\n this.state = State.InSpecialTag;\n this.sequenceIndex = 0;\n }\n else {\n this.state = State.Text;\n }\n this.sectionStart = this.index + 1;\n }\n else if (c === CharCodes.Slash) {\n this.state = State.InSelfClosingTag;\n }\n else if (!isWhitespace(c)) {\n this.state = State.InAttributeName;\n this.sectionStart = this.index;\n }\n }\n stateInSelfClosingTag(c) {\n if (c === CharCodes.Gt) {\n this.cbs.onselfclosingtag(this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n this.isSpecial = false; // Reset special state, in case of self-closing special tags\n }\n else if (!isWhitespace(c)) {\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n }\n stateInAttributeName(c) {\n if (c === CharCodes.Eq || isEndOfTagSection(c)) {\n this.cbs.onattribname(this.sectionStart, this.index);\n this.sectionStart = this.index;\n this.state = State.AfterAttributeName;\n this.stateAfterAttributeName(c);\n }\n }\n stateAfterAttributeName(c) {\n if (c === CharCodes.Eq) {\n this.state = State.BeforeAttributeValue;\n }\n else if (c === CharCodes.Slash || c === CharCodes.Gt) {\n this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n this.sectionStart = -1;\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n else if (!isWhitespace(c)) {\n this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n this.state = State.InAttributeName;\n this.sectionStart = this.index;\n }\n }\n stateBeforeAttributeValue(c) {\n if (c === CharCodes.DoubleQuote) {\n this.state = State.InAttributeValueDq;\n this.sectionStart = this.index + 1;\n }\n else if (c === CharCodes.SingleQuote) {\n this.state = State.InAttributeValueSq;\n this.sectionStart = this.index + 1;\n }\n else if (!isWhitespace(c)) {\n this.sectionStart = this.index;\n this.state = State.InAttributeValueNq;\n this.stateInAttributeValueNoQuotes(c); // Reconsume token\n }\n }\n handleInAttributeValue(c, quote) {\n if (c === quote ||\n (!this.decodeEntities && this.fastForwardTo(quote))) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(quote === CharCodes.DoubleQuote\n ? QuoteType.Double\n : QuoteType.Single, this.index + 1);\n this.state = State.BeforeAttributeName;\n }\n else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n stateInAttributeValueDoubleQuotes(c) {\n this.handleInAttributeValue(c, CharCodes.DoubleQuote);\n }\n stateInAttributeValueSingleQuotes(c) {\n this.handleInAttributeValue(c, CharCodes.SingleQuote);\n }\n stateInAttributeValueNoQuotes(c) {\n if (isWhitespace(c) || c === CharCodes.Gt) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(QuoteType.Unquoted, this.index);\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n stateBeforeDeclaration(c) {\n if (c === CharCodes.OpeningSquareBracket) {\n this.state = State.CDATASequence;\n this.sequenceIndex = 0;\n }\n else {\n this.state =\n c === CharCodes.Dash\n ? State.BeforeComment\n : State.InDeclaration;\n }\n }\n stateInDeclaration(c) {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.ondeclaration(this.sectionStart, this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n stateInProcessingInstruction(c) {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeComment(c) {\n if (c === CharCodes.Dash) {\n this.state = State.InCommentLike;\n this.currentSequence = Sequences.CommentEnd;\n // Allow short comments (eg. <!-->)\n this.sequenceIndex = 2;\n this.sectionStart = this.index + 1;\n }\n else {\n this.state = State.InDeclaration;\n }\n }\n stateInSpecialComment(c) {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.oncomment(this.sectionStart, this.index, 0);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeSpecialS(c) {\n const lower = c | 0x20;\n if (lower === Sequences.ScriptEnd[3]) {\n this.startSpecial(Sequences.ScriptEnd, 4);\n }\n else if (lower === Sequences.StyleEnd[3]) {\n this.startSpecial(Sequences.StyleEnd, 4);\n }\n else {\n this.state = State.InTagName;\n this.stateInTagName(c); // Consume the token again\n }\n }\n stateBeforeSpecialT(c) {\n const lower = c | 0x20;\n switch (lower) {\n case Sequences.TitleEnd[3]: {\n this.startSpecial(Sequences.TitleEnd, 4);\n break;\n }\n case Sequences.TextareaEnd[3]: {\n this.startSpecial(Sequences.TextareaEnd, 4);\n break;\n }\n case Sequences.XmpEnd[3]: {\n this.startSpecial(Sequences.XmpEnd, 4);\n break;\n }\n default: {\n this.state = State.InTagName;\n this.stateInTagName(c); // Consume the token again\n }\n }\n }\n startEntity() {\n this.baseState = this.state;\n this.state = State.InEntity;\n this.entityStart = this.index;\n this.entityDecoder.startEntity(this.xmlMode\n ? DecodingMode.Strict\n : this.baseState === State.Text ||\n this.baseState === State.InSpecialTag\n ? DecodingMode.Legacy\n : DecodingMode.Attribute);\n }\n stateInEntity() {\n const length = this.entityDecoder.write(this.buffer, this.index - this.offset);\n // If `length` is positive, we are done with the entity.\n if (length >= 0) {\n this.state = this.baseState;\n if (length === 0) {\n this.index = this.entityStart;\n }\n }\n else {\n // Mark buffer as consumed.\n this.index = this.offset + this.buffer.length - 1;\n }\n }\n /**\n * Remove data that has already been consumed from the buffer.\n */\n cleanup() {\n // If we are inside of text or attributes, emit what we already have.\n if (this.running && this.sectionStart !== this.index) {\n if (this.state === State.Text ||\n (this.state === State.InSpecialTag && this.sequenceIndex === 0)) {\n this.cbs.ontext(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n else if (this.state === State.InAttributeValueDq ||\n this.state === State.InAttributeValueSq ||\n this.state === State.InAttributeValueNq) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n }\n }\n shouldContinue() {\n return this.index < this.buffer.length + this.offset && this.running;\n }\n /**\n * Iterates through the buffer, calling the function corresponding to the current state.\n *\n * States that are more likely to be hit are higher up, as a performance improvement.\n */\n parse() {\n while (this.shouldContinue()) {\n const c = this.buffer.charCodeAt(this.index - this.offset);\n switch (this.state) {\n case State.Text: {\n this.stateText(c);\n break;\n }\n case State.SpecialStartSequence: {\n this.stateSpecialStartSequence(c);\n break;\n }\n case State.InSpecialTag: {\n this.stateInSpecialTag(c);\n break;\n }\n case State.CDATASequence: {\n this.stateCDATASequence(c);\n break;\n }\n case State.InAttributeValueDq: {\n this.stateInAttributeValueDoubleQuotes(c);\n break;\n }\n case State.InAttributeName: {\n this.stateInAttributeName(c);\n break;\n }\n case State.InCommentLike: {\n this.stateInCommentLike(c);\n break;\n }\n case State.InSpecialComment: {\n this.stateInSpecialComment(c);\n break;\n }\n case State.BeforeAttributeName: {\n this.stateBeforeAttributeName(c);\n break;\n }\n case State.InTagName: {\n this.stateInTagName(c);\n break;\n }\n case State.InClosingTagName: {\n this.stateInClosingTagName(c);\n break;\n }\n case State.BeforeTagName: {\n this.stateBeforeTagName(c);\n break;\n }\n case State.AfterAttributeName: {\n this.stateAfterAttributeName(c);\n break;\n }\n case State.InAttributeValueSq: {\n this.stateInAttributeValueSingleQuotes(c);\n break;\n }\n case State.BeforeAttributeValue: {\n this.stateBeforeAttributeValue(c);\n break;\n }\n case State.BeforeClosingTagName: {\n this.stateBeforeClosingTagName(c);\n break;\n }\n case State.AfterClosingTagName: {\n this.stateAfterClosingTagName(c);\n break;\n }\n case State.BeforeSpecialS: {\n this.stateBeforeSpecialS(c);\n break;\n }\n case State.BeforeSpecialT: {\n this.stateBeforeSpecialT(c);\n break;\n }\n case State.InAttributeValueNq: {\n this.stateInAttributeValueNoQuotes(c);\n break;\n }\n case State.InSelfClosingTag: {\n this.stateInSelfClosingTag(c);\n break;\n }\n case State.InDeclaration: {\n this.stateInDeclaration(c);\n break;\n }\n case State.BeforeDeclaration: {\n this.stateBeforeDeclaration(c);\n break;\n }\n case State.BeforeComment: {\n this.stateBeforeComment(c);\n break;\n }\n case State.InProcessingInstruction: {\n this.stateInProcessingInstruction(c);\n break;\n }\n case State.InEntity: {\n this.stateInEntity();\n break;\n }\n }\n this.index++;\n }\n this.cleanup();\n }\n finish() {\n if (this.state === State.InEntity) {\n this.entityDecoder.end();\n this.state = this.baseState;\n }\n this.handleTrailingData();\n this.cbs.onend();\n }\n /** Handle any trailing data. */\n handleTrailingData() {\n const endIndex = this.buffer.length + this.offset;\n // If there is no remaining data, we are done.\n if (this.sectionStart >= endIndex) {\n return;\n }\n if (this.state === State.InCommentLike) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, endIndex, 0);\n }\n else {\n this.cbs.oncomment(this.sectionStart, endIndex, 0);\n }\n }\n else if (this.state === State.InTagName ||\n this.state === State.BeforeAttributeName ||\n this.state === State.BeforeAttributeValue ||\n this.state === State.AfterAttributeName ||\n this.state === State.InAttributeName ||\n this.state === State.InAttributeValueSq ||\n this.state === State.InAttributeValueDq ||\n this.state === State.InAttributeValueNq ||\n this.state === State.InClosingTagName) {\n /*\n * If we are currently in an opening or closing tag, us not calling the\n * respective callback signals that the tag should be ignored.\n */\n }\n else {\n this.cbs.ontext(this.sectionStart, endIndex);\n }\n }\n emitCodePoint(cp, consumed) {\n if (this.baseState !== State.Text &&\n this.baseState !== State.InSpecialTag) {\n if (this.sectionStart < this.entityStart) {\n this.cbs.onattribdata(this.sectionStart, this.entityStart);\n }\n this.sectionStart = this.entityStart + consumed;\n this.index = this.sectionStart - 1;\n this.cbs.onattribentity(cp);\n }\n else {\n if (this.sectionStart < this.entityStart) {\n this.cbs.ontext(this.sectionStart, this.entityStart);\n }\n this.sectionStart = this.entityStart + consumed;\n this.index = this.sectionStart - 1;\n this.cbs.ontextentity(cp, this.sectionStart);\n }\n }\n}\n//# sourceMappingURL=Tokenizer.js.map","import Tokenizer, { QuoteType } from \"./Tokenizer.js\";\nimport { fromCodePoint } from \"entities/decode\";\nconst formTags = new Set([\n \"input\",\n \"option\",\n \"optgroup\",\n \"select\",\n \"button\",\n \"datalist\",\n \"textarea\",\n]);\nconst pTag = new Set([\"p\"]);\nconst tableSectionTags = new Set([\"thead\", \"tbody\"]);\nconst ddtTags = new Set([\"dd\", \"dt\"]);\nconst rtpTags = new Set([\"rt\", \"rp\"]);\nconst openImpliesClose = new Map([\n [\"tr\", new Set([\"tr\", \"th\", \"td\"])],\n [\"th\", new Set([\"th\"])],\n [\"td\", new Set([\"thead\", \"th\", \"td\"])],\n [\"body\", new Set([\"head\", \"link\", \"script\"])],\n [\"li\", new Set([\"li\"])],\n [\"p\", pTag],\n [\"h1\", pTag],\n [\"h2\", pTag],\n [\"h3\", pTag],\n [\"h4\", pTag],\n [\"h5\", pTag],\n [\"h6\", pTag],\n [\"select\", formTags],\n [\"input\", formTags],\n [\"output\", formTags],\n [\"button\", formTags],\n [\"datalist\", formTags],\n [\"textarea\", formTags],\n [\"option\", new Set([\"option\"])],\n [\"optgroup\", new Set([\"optgroup\", \"option\"])],\n [\"dd\", ddtTags],\n [\"dt\", ddtTags],\n [\"address\", pTag],\n [\"article\", pTag],\n [\"aside\", pTag],\n [\"blockquote\", pTag],\n [\"details\", pTag],\n [\"div\", pTag],\n [\"dl\", pTag],\n [\"fieldset\", pTag],\n [\"figcaption\", pTag],\n [\"figure\", pTag],\n [\"footer\", pTag],\n [\"form\", pTag],\n [\"header\", pTag],\n [\"hr\", pTag],\n [\"main\", pTag],\n [\"nav\", pTag],\n [\"ol\", pTag],\n [\"pre\", pTag],\n [\"section\", pTag],\n [\"table\", pTag],\n [\"ul\", pTag],\n [\"rt\", rtpTags],\n [\"rp\", rtpTags],\n [\"tbody\", tableSectionTags],\n [\"tfoot\", tableSectionTags],\n]);\nconst voidElements = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\nconst foreignContextElements = new Set([\"math\", \"svg\"]);\nconst htmlIntegrationElements = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignobject\",\n \"desc\",\n \"title\",\n]);\nconst reNameEnd = /\\s|\\//;\nexport class Parser {\n constructor(cbs, options = {}) {\n var _a, _b, _c, _d, _e, _f;\n this.options = options;\n /** The start index of the last event. */\n this.startIndex = 0;\n /** The end index of the last event. */\n this.endIndex = 0;\n /**\n * Store the start index of the current open tag,\n * so we can update the start index for attributes.\n */\n this.openTagStart = 0;\n this.tagname = \"\";\n this.attribname = \"\";\n this.attribvalue = \"\";\n this.attribs = null;\n this.stack = [];\n this.buffers = [];\n this.bufferOffset = 0;\n /** The index of the last written buffer. Used when resuming after a `pause()`. */\n this.writeIndex = 0;\n /** Indicates whether the parser has finished running / `.end` has been called. */\n this.ended = false;\n this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};\n this.htmlMode = !this.options.xmlMode;\n this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== void 0 ? _a : this.htmlMode;\n this.lowerCaseAttributeNames =\n (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;\n this.recognizeSelfClosing =\n (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;\n this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);\n this.foreignContext = [!this.htmlMode];\n (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);\n }\n // Tokenizer event handlers\n /** @internal */\n ontext(start, endIndex) {\n var _a, _b;\n const data = this.getSlice(start, endIndex);\n this.endIndex = endIndex - 1;\n (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, data);\n this.startIndex = endIndex;\n }\n /** @internal */\n ontextentity(cp, endIndex) {\n var _a, _b;\n this.endIndex = endIndex - 1;\n (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, fromCodePoint(cp));\n this.startIndex = endIndex;\n }\n /**\n * Checks if the current tag is a void element. Override this if you want\n * to specify your own additional void elements.\n */\n isVoidElement(name) {\n return this.htmlMode && voidElements.has(name);\n }\n /** @internal */\n onopentagname(start, endIndex) {\n this.endIndex = endIndex;\n let name = this.getSlice(start, endIndex);\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n this.emitOpenTag(name);\n }\n emitOpenTag(name) {\n var _a, _b, _c, _d;\n this.openTagStart = this.startIndex;\n this.tagname = name;\n const impliesClose = this.htmlMode && openImpliesClose.get(name);\n if (impliesClose) {\n while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {\n const element = this.stack.shift();\n (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, true);\n }\n }\n if (!this.isVoidElement(name)) {\n this.stack.unshift(name);\n if (this.htmlMode) {\n if (foreignContextElements.has(name)) {\n this.foreignContext.unshift(true);\n }\n else if (htmlIntegrationElements.has(name)) {\n this.foreignContext.unshift(false);\n }\n }\n }\n (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);\n if (this.cbs.onopentag)\n this.attribs = {};\n }\n endOpenTag(isImplied) {\n var _a, _b;\n this.startIndex = this.openTagStart;\n if (this.attribs) {\n (_b = (_a = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a, this.tagname, this.attribs, isImplied);\n this.attribs = null;\n }\n if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {\n this.cbs.onclosetag(this.tagname, true);\n }\n this.tagname = \"\";\n }\n /** @internal */\n onopentagend(endIndex) {\n this.endIndex = endIndex;\n this.endOpenTag(false);\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n onclosetag(start, endIndex) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n this.endIndex = endIndex;\n let name = this.getSlice(start, endIndex);\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n if (this.htmlMode &&\n (foreignContextElements.has(name) ||\n htmlIntegrationElements.has(name))) {\n this.foreignContext.shift();\n }\n if (!this.isVoidElement(name)) {\n const pos = this.stack.indexOf(name);\n if (pos !== -1) {\n for (let index = 0; index <= pos; index++) {\n const element = this.stack.shift();\n // We know the stack has sufficient elements.\n (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, index !== pos);\n }\n }\n else if (this.htmlMode && name === \"p\") {\n // Implicit open before close\n this.emitOpenTag(\"p\");\n this.closeCurrentTag(true);\n }\n }\n else if (this.htmlMode && name === \"br\") {\n // We can't use `emitOpenTag` for implicit open, as `br` would be implicitly closed.\n (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, \"br\");\n (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, \"br\", {}, true);\n (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, \"br\", false);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n onselfclosingtag(endIndex) {\n this.endIndex = endIndex;\n if (this.recognizeSelfClosing || this.foreignContext[0]) {\n this.closeCurrentTag(false);\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n else {\n // Ignore the fact that the tag is self-closing.\n this.onopentagend(endIndex);\n }\n }\n closeCurrentTag(isOpenImplied) {\n var _a, _b;\n const name = this.tagname;\n this.endOpenTag(isOpenImplied);\n // Self-closing tags will be on the top of the stack\n if (this.stack[0] === name) {\n // If the opening tag isn't implied, the closing tag has to be implied.\n (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, name, !isOpenImplied);\n this.stack.shift();\n }\n }\n /** @internal */\n onattribname(start, endIndex) {\n this.startIndex = start;\n const name = this.getSlice(start, endIndex);\n this.attribname = this.lowerCaseAttributeNames\n ? name.toLowerCase()\n : name;\n }\n /** @internal */\n onattribdata(start, endIndex) {\n this.attribvalue += this.getSlice(start, endIndex);\n }\n /** @internal */\n onattribentity(cp) {\n this.attribvalue += fromCodePoint(cp);\n }\n /** @internal */\n onattribend(quote, endIndex) {\n var _a, _b;\n this.endIndex = endIndex;\n (_b = (_a = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a, this.attribname, this.attribvalue, quote === QuoteType.Double\n ? '\"'\n : quote === QuoteType.Single\n ? \"'\"\n : quote === QuoteType.NoValue\n ? undefined\n : null);\n if (this.attribs &&\n !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {\n this.attribs[this.attribname] = this.attribvalue;\n }\n this.attribvalue = \"\";\n }\n getInstructionName(value) {\n const index = value.search(reNameEnd);\n let name = index < 0 ? value : value.substr(0, index);\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n return name;\n }\n /** @internal */\n ondeclaration(start, endIndex) {\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex);\n if (this.cbs.onprocessinginstruction) {\n const name = this.getInstructionName(value);\n this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n onprocessinginstruction(start, endIndex) {\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex);\n if (this.cbs.onprocessinginstruction) {\n const name = this.getInstructionName(value);\n this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n oncomment(start, endIndex, offset) {\n var _a, _b, _c, _d;\n this.endIndex = endIndex;\n (_b = (_a = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a, this.getSlice(start, endIndex - offset));\n (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n oncdata(start, endIndex, offset) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex - offset);\n if (!this.htmlMode || this.options.recognizeCDATA) {\n (_b = (_a = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a);\n (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);\n (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);\n }\n else {\n (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);\n (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n onend() {\n var _a, _b;\n if (this.cbs.onclosetag) {\n // Set the end index for all remaining tags\n this.endIndex = this.startIndex;\n for (let index = 0; index < this.stack.length; index++) {\n this.cbs.onclosetag(this.stack[index], true);\n }\n }\n (_b = (_a = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n /**\n * Resets the parser to a blank state, ready to parse a new HTML document\n */\n reset() {\n var _a, _b, _c, _d;\n (_b = (_a = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a);\n this.tokenizer.reset();\n this.tagname = \"\";\n this.attribname = \"\";\n this.attribs = null;\n this.stack.length = 0;\n this.startIndex = 0;\n this.endIndex = 0;\n (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);\n this.buffers.length = 0;\n this.foreignContext.length = 0;\n this.foreignContext.unshift(!this.htmlMode);\n this.bufferOffset = 0;\n this.writeIndex = 0;\n this.ended = false;\n }\n /**\n * Resets the parser, then parses a complete document and\n * pushes it to the handler.\n *\n * @param data Document to parse.\n */\n parseComplete(data) {\n this.reset();\n this.end(data);\n }\n getSlice(start, end) {\n while (start - this.bufferOffset >= this.buffers[0].length) {\n this.shiftBuffer();\n }\n let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);\n while (end - this.bufferOffset > this.buffers[0].length) {\n this.shiftBuffer();\n slice += this.buffers[0].slice(0, end - this.bufferOffset);\n }\n return slice;\n }\n shiftBuffer() {\n this.bufferOffset += this.buffers[0].length;\n this.writeIndex--;\n this.buffers.shift();\n }\n /**\n * Parses a chunk of data and calls the corresponding callbacks.\n *\n * @param chunk Chunk to parse.\n */\n write(chunk) {\n var _a, _b;\n if (this.ended) {\n (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".write() after done!\"));\n return;\n }\n this.buffers.push(chunk);\n if (this.tokenizer.running) {\n this.tokenizer.write(chunk);\n this.writeIndex++;\n }\n }\n /**\n * Parses the end of the buffer and clears the stack, calls onend.\n *\n * @param chunk Optional final chunk to parse.\n */\n end(chunk) {\n var _a, _b;\n if (this.ended) {\n (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".end() after done!\"));\n return;\n }\n if (chunk)\n this.write(chunk);\n this.ended = true;\n this.tokenizer.end();\n }\n /**\n * Pauses parsing. The parser won't emit events until `resume` is called.\n */\n pause() {\n this.tokenizer.pause();\n }\n /**\n * Resumes parsing after `pause` was called.\n */\n resume() {\n this.tokenizer.resume();\n while (this.tokenizer.running &&\n this.writeIndex < this.buffers.length) {\n this.tokenizer.write(this.buffers[this.writeIndex++]);\n }\n if (this.ended)\n this.tokenizer.end();\n }\n /**\n * Alias of `write`, for backwards compatibility.\n *\n * @param chunk Chunk to parse.\n * @deprecated\n */\n parseChunk(chunk) {\n this.write(chunk);\n }\n /**\n * Alias of `end`, for backwards compatibility.\n *\n * @param chunk Optional final chunk to parse.\n * @deprecated\n */\n done(chunk) {\n this.end(chunk);\n }\n}\n//# sourceMappingURL=Parser.js.map","/** Types of elements found in htmlparser2's DOM */\nexport var ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nexport function isTag(elem) {\n return (elem.type === ElementType.Tag ||\n elem.type === ElementType.Script ||\n elem.type === ElementType.Style);\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexport const Root = ElementType.Root;\n/** Type for Text */\nexport const Text = ElementType.Text;\n/** Type for <? ... ?> */\nexport const Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexport const Comment = ElementType.Comment;\n/** Type for <script> tags */\nexport const Script = ElementType.Script;\n/** Type for <style> tags */\nexport const Style = ElementType.Style;\n/** Type for Any tag */\nexport const Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexport const CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexport const Doctype = ElementType.Doctype;\n","import { ElementType, isTag as isTagRaw } from \"domelementtype\";\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nexport class Node {\n constructor() {\n /** Parent of the node */\n this.parent = null;\n /** Previous sibling */\n this.prev = null;\n /** Next sibling */\n this.next = null;\n /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n this.startIndex = null;\n /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n this.endIndex = null;\n }\n // Read-write aliases for properties\n /**\n * Same as {@link parent}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get parentNode() {\n return this.parent;\n }\n set parentNode(parent) {\n this.parent = parent;\n }\n /**\n * Same as {@link prev}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get previousSibling() {\n return this.prev;\n }\n set previousSibling(prev) {\n this.prev = prev;\n }\n /**\n * Same as {@link next}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nextSibling() {\n return this.next;\n }\n set nextSibling(next) {\n this.next = next;\n }\n /**\n * Clone this node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\n cloneNode(recursive = false) {\n return cloneNode(this, recursive);\n }\n}\n/**\n * A node that contains some data.\n */\nexport class DataNode extends Node {\n /**\n * @param data The content of the data node\n */\n constructor(data) {\n super();\n this.data = data;\n }\n /**\n * Same as {@link data}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nodeValue() {\n return this.data;\n }\n set nodeValue(data) {\n this.data = data;\n }\n}\n/**\n * Text within the document.\n */\nexport class Text extends DataNode {\n constructor() {\n super(...arguments);\n this.type = ElementType.Text;\n }\n get nodeType() {\n return 3;\n }\n}\n/**\n * Comments within the document.\n */\nexport class Comment extends DataNode {\n constructor() {\n super(...arguments);\n this.type = ElementType.Comment;\n }\n get nodeType() {\n return 8;\n }\n}\n/**\n * Processing instructions, including doc types.\n */\nexport class ProcessingInstruction extends DataNode {\n constructor(name, data) {\n super(data);\n this.name = name;\n this.type = ElementType.Directive;\n }\n get nodeType() {\n return 1;\n }\n}\n/**\n * A `Node` that can have children.\n */\nexport class NodeWithChildren extends Node {\n /**\n * @param children Children of the node. Only certain node types can have children.\n */\n constructor(children) {\n super();\n this.children = children;\n }\n // Aliases\n /** First child of the node. */\n get firstChild() {\n var _a;\n return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n }\n /** Last child of the node. */\n get lastChild() {\n return this.children.length > 0\n ? this.children[this.children.length - 1]\n : null;\n }\n /**\n * Same as {@link children}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get childNodes() {\n return this.children;\n }\n set childNodes(children) {\n this.children = children;\n }\n}\nexport class CDATA extends NodeWithChildren {\n constructor() {\n super(...arguments);\n this.type = ElementType.CDATA;\n }\n get nodeType() {\n return 4;\n }\n}\n/**\n * The root node of the document.\n */\nexport class Document extends NodeWithChildren {\n constructor() {\n super(...arguments);\n this.type = ElementType.Root;\n }\n get nodeType() {\n return 9;\n }\n}\n/**\n * An element within the DOM.\n */\nexport class Element extends NodeWithChildren {\n /**\n * @param name Name of the tag, eg. `div`, `span`.\n * @param attribs Object mapping attribute names to attribute values.\n * @param children Children of the node.\n */\n constructor(name, attribs, children = [], type = name === \"script\"\n ? ElementType.Script\n : name === \"style\"\n ? ElementType.Style\n : ElementType.Tag) {\n super(children);\n this.name = name;\n this.attribs = attribs;\n this.type = type;\n }\n get nodeType() {\n return 1;\n }\n // DOM Level 1 aliases\n /**\n * Same as {@link name}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get tagName() {\n return this.name;\n }\n set tagName(name) {\n this.name = name;\n }\n get attributes() {\n return Object.keys(this.attribs).map((name) => {\n var _a, _b;\n return ({\n name,\n value: this.attribs[name],\n namespace: (_a = this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n prefix: (_b = this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n });\n });\n }\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nexport function isTag(node) {\n return isTagRaw(node);\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nexport function isCDATA(node) {\n return node.type === ElementType.CDATA;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nexport function isText(node) {\n return node.type === ElementType.Text;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nexport function isComment(node) {\n return node.type === ElementType.Comment;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDirective(node) {\n return node.type === ElementType.Directive;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDocument(node) {\n return node.type === ElementType.Root;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nexport function hasChildren(node) {\n return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nexport function cloneNode(node, recursive = false) {\n let result;\n if (isText(node)) {\n result = new Text(node.data);\n }\n else if (isComment(node)) {\n result = new Comment(node.data);\n }\n else if (isTag(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Element(node.name, { ...node.attribs }, children);\n children.forEach((child) => (child.parent = clone));\n if (node.namespace != null) {\n clone.namespace = node.namespace;\n }\n if (node[\"x-attribsNamespace\"]) {\n clone[\"x-attribsNamespace\"] = { ...node[\"x-attribsNamespace\"] };\n }\n if (node[\"x-attribsPrefix\"]) {\n clone[\"x-attribsPrefix\"] = { ...node[\"x-attribsPrefix\"] };\n }\n result = clone;\n }\n else if (isCDATA(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new CDATA(children);\n children.forEach((child) => (child.parent = clone));\n result = clone;\n }\n else if (isDocument(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Document(children);\n children.forEach((child) => (child.parent = clone));\n if (node[\"x-mode\"]) {\n clone[\"x-mode\"] = node[\"x-mode\"];\n }\n result = clone;\n }\n else if (isDirective(node)) {\n const instruction = new ProcessingInstruction(node.name, node.data);\n if (node[\"x-name\"] != null) {\n instruction[\"x-name\"] = node[\"x-name\"];\n instruction[\"x-publicId\"] = node[\"x-publicId\"];\n instruction[\"x-systemId\"] = node[\"x-systemId\"];\n }\n result = instruction;\n }\n else {\n throw new Error(`Not implemented yet: ${node.type}`);\n }\n result.startIndex = node.startIndex;\n result.endIndex = node.endIndex;\n if (node.sourceCodeLocation != null) {\n result.sourceCodeLocation = node.sourceCodeLocation;\n }\n return result;\n}\nfunction cloneChildren(childs) {\n const children = childs.map((child) => cloneNode(child, true));\n for (let i = 1; i < children.length; i++) {\n children[i].prev = children[i - 1];\n children[i - 1].next = children[i];\n }\n return children;\n}\n","/** Types of elements found in htmlparser2's DOM */\nexport var ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nexport function isTag(elem) {\n return (elem.type === ElementType.Tag ||\n elem.type === ElementType.Script ||\n elem.type === ElementType.Style);\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexport const Root = ElementType.Root;\n/** Type for Text */\nexport const Text = ElementType.Text;\n/** Type for <? ... ?> */\nexport const Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexport const Comment = ElementType.Comment;\n/** Type for <script> tags */\nexport const Script = ElementType.Script;\n/** Type for <style> tags */\nexport const Style = ElementType.Style;\n/** Type for Any tag */\nexport const Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexport const CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexport const Doctype = ElementType.Doctype;\n","export const xmlReplacer = /[\"&'<>$\\x80-\\uFFFF]/g;\nconst xmlCodeMap = new Map([\n [34, \"&quot;\"],\n [38, \"&amp;\"],\n [39, \"&apos;\"],\n [60, \"&lt;\"],\n [62, \"&gt;\"],\n]);\n// For compatibility with node < 4, we wrap `codePointAt`\nexport const getCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.prototype.codePointAt != null\n ? (str, index) => str.codePointAt(index)\n : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n (c, index) => (c.charCodeAt(index) & 0xfc00) === 0xd800\n ? (c.charCodeAt(index) - 0xd800) * 0x400 +\n c.charCodeAt(index + 1) -\n 0xdc00 +\n 0x10000\n : c.charCodeAt(index);\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nexport function encodeXML(str) {\n let ret = \"\";\n let lastIdx = 0;\n let match;\n while ((match = xmlReplacer.exec(str)) !== null) {\n const i = match.index;\n const char = str.charCodeAt(i);\n const next = xmlCodeMap.get(char);\n if (next !== undefined) {\n ret += str.substring(lastIdx, i) + next;\n lastIdx = i + 1;\n }\n else {\n ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;\n // Increase by 1 if we have a surrogate pair\n lastIdx = xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);\n }\n }\n return ret + str.substr(lastIdx);\n}\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `&#xfc;`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n *\n * @param data String to escape.\n */\nexport const escape = encodeXML;\n/**\n * Creates a function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n *\n * @param regex Regular expression to match characters to escape.\n * @param map Map of characters to escape to their entities.\n *\n * @returns Function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n */\nfunction getEscaper(regex, map) {\n return function escape(data) {\n let match;\n let lastIdx = 0;\n let result = \"\";\n while ((match = regex.exec(data))) {\n if (lastIdx !== match.index) {\n result += data.substring(lastIdx, match.index);\n }\n // We know that this character will be in the map.\n result += map.get(match[0].charCodeAt(0));\n // Every match will be of length 1\n lastIdx = match.index + 1;\n }\n return result + data.substring(lastIdx);\n };\n}\n/**\n * Encodes all characters not valid in XML documents using XML entities.\n *\n * Note that the output will be character-set dependent.\n *\n * @param data String to escape.\n */\nexport const escapeUTF8 = getEscaper(/[&<>'\"]/g, xmlCodeMap);\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeAttribute = getEscaper(/[\"&\\u00A0]/g, new Map([\n [34, \"&quot;\"],\n [38, \"&amp;\"],\n [160, \"&nbsp;\"],\n]));\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeText = getEscaper(/[&<>\\u00A0]/g, new Map([\n [38, \"&amp;\"],\n [60, \"&lt;\"],\n [62, \"&gt;\"],\n [160, \"&nbsp;\"],\n]));\n//# sourceMappingURL=escape.js.map","export const elementNames = new Map([\n \"altGlyph\",\n \"altGlyphDef\",\n \"altGlyphItem\",\n \"animateColor\",\n \"animateMotion\",\n \"animateTransform\",\n \"clipPath\",\n \"feBlend\",\n \"feColorMatrix\",\n \"feComponentTransfer\",\n \"feComposite\",\n \"feConvolveMatrix\",\n \"feDiffuseLighting\",\n \"feDisplacementMap\",\n \"feDistantLight\",\n \"feDropShadow\",\n \"feFlood\",\n \"feFuncA\",\n \"feFuncB\",\n \"feFuncG\",\n \"feFuncR\",\n \"feGaussianBlur\",\n \"feImage\",\n \"feMerge\",\n \"feMergeNode\",\n \"feMorphology\",\n \"feOffset\",\n \"fePointLight\",\n \"feSpecularLighting\",\n \"feSpotLight\",\n \"feTile\",\n \"feTurbulence\",\n \"foreignObject\",\n \"glyphRef\",\n \"linearGradient\",\n \"radialGradient\",\n \"textPath\",\n].map((val) => [val.toLowerCase(), val]));\nexport const attributeNames = new Map([\n \"definitionURL\",\n \"attributeName\",\n \"attributeType\",\n \"baseFrequency\",\n \"baseProfile\",\n \"calcMode\",\n \"clipPathUnits\",\n \"diffuseConstant\",\n \"edgeMode\",\n \"filterUnits\",\n \"glyphRef\",\n \"gradientTransform\",\n \"gradientUnits\",\n \"kernelMatrix\",\n \"kernelUnitLength\",\n \"keyPoints\",\n \"keySplines\",\n \"keyTimes\",\n \"lengthAdjust\",\n \"limitingConeAngle\",\n \"markerHeight\",\n \"markerUnits\",\n \"markerWidth\",\n \"maskContentUnits\",\n \"maskUnits\",\n \"numOctaves\",\n \"pathLength\",\n \"patternContentUnits\",\n \"patternTransform\",\n \"patternUnits\",\n \"pointsAtX\",\n \"pointsAtY\",\n \"pointsAtZ\",\n \"preserveAlpha\",\n \"preserveAspectRatio\",\n \"primitiveUnits\",\n \"refX\",\n \"refY\",\n \"repeatCount\",\n \"repeatDur\",\n \"requiredExtensions\",\n \"requiredFeatures\",\n \"specularConstant\",\n \"specularExponent\",\n \"spreadMethod\",\n \"startOffset\",\n \"stdDeviation\",\n \"stitchTiles\",\n \"surfaceScale\",\n \"systemLanguage\",\n \"tableValues\",\n \"targetX\",\n \"targetY\",\n \"textLength\",\n \"viewBox\",\n \"viewTarget\",\n \"xChannelSelector\",\n \"yChannelSelector\",\n \"zoomAndPan\",\n].map((val) => [val.toLowerCase(), val]));\n","/*\n * Module dependencies\n */\nimport * as ElementType from \"domelementtype\";\nimport { encodeXML, escapeAttribute, escapeText } from \"entities\";\n/**\n * Mixed-case SVG and MathML tags & attributes\n * recognized by the HTML parser.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n */\nimport { elementNames, attributeNames } from \"./foreignNames.js\";\nconst unencodedElements = new Set([\n \"style\",\n \"script\",\n \"xmp\",\n \"iframe\",\n \"noembed\",\n \"noframes\",\n \"plaintext\",\n \"noscript\",\n]);\nfunction replaceQuotes(value) {\n return value.replace(/\"/g, \"&quot;\");\n}\n/**\n * Format attributes\n */\nfunction formatAttributes(attributes, opts) {\n var _a;\n if (!attributes)\n return;\n const encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false\n ? replaceQuotes\n : opts.xmlMode || opts.encodeEntities !== \"utf8\"\n ? encodeXML\n : escapeAttribute;\n return Object.keys(attributes)\n .map((key) => {\n var _a, _b;\n const value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : \"\";\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case attribute names */\n key = (_b = attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;\n }\n if (!opts.emptyAttrs && !opts.xmlMode && value === \"\") {\n return key;\n }\n return `${key}=\"${encode(value)}\"`;\n })\n .join(\" \");\n}\n/**\n * Self-enclosing tags\n */\nconst singleTag = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n/**\n * Renders a DOM node or an array of DOM nodes to a string.\n *\n * Can be thought of as the equivalent of the `outerHTML` of the passed node(s).\n *\n * @param node Node to be rendered.\n * @param options Changes serialization behavior\n */\nexport function render(node, options = {}) {\n const nodes = \"length\" in node ? node : [node];\n let output = \"\";\n for (let i = 0; i < nodes.length; i++) {\n output += renderNode(nodes[i], options);\n }\n return output;\n}\nexport default render;\nfunction renderNode(node, options) {\n switch (node.type) {\n case ElementType.Root:\n return render(node.children, options);\n // @ts-expect-error We don't use `Doctype` yet\n case ElementType.Doctype:\n case ElementType.Directive:\n return renderDirective(node);\n case ElementType.Comment:\n return renderComment(node);\n case ElementType.CDATA:\n return renderCdata(node);\n case ElementType.Script:\n case ElementType.Style:\n case ElementType.Tag:\n return renderTag(node, options);\n case ElementType.Text:\n return renderText(node, options);\n }\n}\nconst foreignModeIntegrationPoints = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignObject\",\n \"desc\",\n \"title\",\n]);\nconst foreignElements = new Set([\"svg\", \"math\"]);\nfunction renderTag(elem, opts) {\n var _a;\n // Handle SVG / MathML in HTML\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case element names */\n elem.name = (_a = elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;\n /* Exit foreign mode at integration points */\n if (elem.parent &&\n foreignModeIntegrationPoints.has(elem.parent.name)) {\n opts = { ...opts, xmlMode: false };\n }\n }\n if (!opts.xmlMode && foreignElements.has(elem.name)) {\n opts = { ...opts, xmlMode: \"foreign\" };\n }\n let tag = `<${elem.name}`;\n const attribs = formatAttributes(elem.attribs, opts);\n if (attribs) {\n tag += ` ${attribs}`;\n }\n if (elem.children.length === 0 &&\n (opts.xmlMode\n ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags\n opts.selfClosingTags !== false\n : // User explicitly asked for self-closing tags, even in HTML mode\n opts.selfClosingTags && singleTag.has(elem.name))) {\n if (!opts.xmlMode)\n tag += \" \";\n tag += \"/>\";\n }\n else {\n tag += \">\";\n if (elem.children.length > 0) {\n tag += render(elem.children, opts);\n }\n if (opts.xmlMode || !singleTag.has(elem.name)) {\n tag += `</${elem.name}>`;\n }\n }\n return tag;\n}\nfunction renderDirective(elem) {\n return `<${elem.data}>`;\n}\nfunction renderText(elem, opts) {\n var _a;\n let data = elem.data || \"\";\n // If entities weren't decoded, no need to encode them back\n if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false &&\n !(!opts.xmlMode &&\n elem.parent &&\n unencodedElements.has(elem.parent.name))) {\n data =\n opts.xmlMode || opts.encodeEntities !== \"utf8\"\n ? encodeXML(data)\n : escapeText(data);\n }\n return data;\n}\nfunction renderCdata(elem) {\n return `<![CDATA[${elem.children[0].data}]]>`;\n}\nfunction renderComment(elem) {\n return `<!--${elem.data}-->`;\n}\n","import { isTag, isCDATA, isText, hasChildren, isComment, } from \"domhandler\";\nimport renderHTML from \"dom-serializer\";\nimport { ElementType } from \"domelementtype\";\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the outer HTML of.\n * @param options Options for serialization.\n * @returns `node`'s outer HTML.\n */\nexport function getOuterHTML(node, options) {\n return renderHTML(node, options);\n}\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the inner HTML of.\n * @param options Options for serialization.\n * @returns `node`'s inner HTML.\n */\nexport function getInnerHTML(node, options) {\n return hasChildren(node)\n ? node.children.map((node) => getOuterHTML(node, options)).join(\"\")\n : \"\";\n}\n/**\n * Get a node's inner text. Same as `textContent`, but inserts newlines for `<br>` tags. Ignores comments.\n *\n * @category Stringify\n * @deprecated Use `textContent` instead.\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n */\nexport function getText(node) {\n if (Array.isArray(node))\n return node.map(getText).join(\"\");\n if (isTag(node))\n return node.name === \"br\" ? \"\\n\" : getText(node.children);\n if (isCDATA(node))\n return getText(node.children);\n if (isText(node))\n return node.data;\n return \"\";\n}\n/**\n * Get a node's text content. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the text content of.\n * @returns `node`'s text content.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent}\n */\nexport function textContent(node) {\n if (Array.isArray(node))\n return node.map(textContent).join(\"\");\n if (hasChildren(node) && !isComment(node)) {\n return textContent(node.children);\n }\n if (isText(node))\n return node.data;\n return \"\";\n}\n/**\n * Get a node's inner text, ignoring `<script>` and `<style>` tags. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/innerText}\n */\nexport function innerText(node) {\n if (Array.isArray(node))\n return node.map(innerText).join(\"\");\n if (hasChildren(node) && (node.type === ElementType.Tag || isCDATA(node))) {\n return innerText(node.children);\n }\n if (isText(node))\n return node.data;\n return \"\";\n}\n//# sourceMappingURL=stringify.js.map","import { isTag, hasChildren } from \"domhandler\";\n/**\n * Search a node and its children for nodes passing a test function. If `node` is not an array, it will be wrapped in one.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param node Node to search. Will be included in the result set if it matches.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nexport function filter(test, node, recurse = true, limit = Infinity) {\n return find(test, Array.isArray(node) ? node : [node], recurse, limit);\n}\n/**\n * Search an array of nodes and their children for nodes passing a test function.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nexport function find(test, nodes, recurse, limit) {\n const result = [];\n /** Stack of the arrays we are looking at. */\n const nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];\n /** Stack of the indices within the arrays. */\n const indexStack = [0];\n for (;;) {\n // First, check if the current array has any more elements to look at.\n if (indexStack[0] >= nodeStack[0].length) {\n // If we have no more arrays to look at, we are done.\n if (indexStack.length === 1) {\n return result;\n }\n // Otherwise, remove the current array from the stack.\n nodeStack.shift();\n indexStack.shift();\n // Loop back to the start to continue with the next array.\n continue;\n }\n const elem = nodeStack[0][indexStack[0]++];\n if (test(elem)) {\n result.push(elem);\n if (--limit <= 0)\n return result;\n }\n if (recurse && hasChildren(elem) && elem.children.length > 0) {\n /*\n * Add the children to the stack. We are depth-first, so this is\n * the next array we look at.\n */\n indexStack.unshift(0);\n nodeStack.unshift(elem.children);\n }\n }\n}\n/**\n * Finds the first element inside of an array that matches a test function. This is an alias for `Array.prototype.find`.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns The first node in the array that passes `test`.\n * @deprecated Use `Array.prototype.find` directly.\n */\nexport function findOneChild(test, nodes) {\n return nodes.find(test);\n}\n/**\n * Finds one element in a tree that passes a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Node or array of nodes to search.\n * @param recurse Also consider child nodes.\n * @returns The first node that passes `test`.\n */\nexport function findOne(test, nodes, recurse = true) {\n const searchedNodes = Array.isArray(nodes) ? nodes : [nodes];\n for (let i = 0; i < searchedNodes.length; i++) {\n const node = searchedNodes[i];\n if (isTag(node) && test(node)) {\n return node;\n }\n if (recurse && hasChildren(node) && node.children.length > 0) {\n const found = findOne(test, node.children, true);\n if (found)\n return found;\n }\n }\n return null;\n}\n/**\n * Checks if a tree of nodes contains at least one node passing a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns Whether a tree of nodes contains at least one node passing the test.\n */\nexport function existsOne(test, nodes) {\n return (Array.isArray(nodes) ? nodes : [nodes]).some((node) => (isTag(node) && test(node)) ||\n (hasChildren(node) && existsOne(test, node.children)));\n}\n/**\n * Search an array of nodes and their children for elements passing a test function.\n *\n * Same as `find`, but limited to elements and with less options, leading to reduced complexity.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns All nodes passing `test`.\n */\nexport function findAll(test, nodes) {\n const result = [];\n const nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];\n const indexStack = [0];\n for (;;) {\n if (indexStack[0] >= nodeStack[0].length) {\n if (nodeStack.length === 1) {\n return result;\n }\n // Otherwise, remove the current array from the stack.\n nodeStack.shift();\n indexStack.shift();\n // Loop back to the start to continue with the next array.\n continue;\n }\n const elem = nodeStack[0][indexStack[0]++];\n if (isTag(elem) && test(elem))\n result.push(elem);\n if (hasChildren(elem) && elem.children.length > 0) {\n indexStack.unshift(0);\n nodeStack.unshift(elem.children);\n }\n }\n}\n//# sourceMappingURL=querying.js.map","//Types of elements found in the DOM\nmodule.exports = {\n\tText: \"text\", //Text\n\tDirective: \"directive\", //<? ... ?>\n\tComment: \"comment\", //<!-- ... -->\n\tScript: \"script\", //<script> tags\n\tStyle: \"style\", //<style> tags\n\tTag: \"tag\", //Any tag\n\tCDATA: \"cdata\", //<![CDATA[ ... ]]>\n\tDoctype: \"doctype\",\n\n\tisTag: function(elem){\n\t\treturn elem.type === \"tag\" || elem.type === \"script\" || elem.type === \"style\";\n\t}\n};\n","// This object will be used as the prototype for Nodes when creating a\n// DOM-Level-1-compliant structure.\nvar NodePrototype = module.exports = {\n\tget firstChild() {\n\t\tvar children = this.children;\n\t\treturn children && children[0] || null;\n\t},\n\tget lastChild() {\n\t\tvar children = this.children;\n\t\treturn children && children[children.length - 1] || null;\n\t},\n\tget nodeType() {\n\t\treturn nodeTypes[this.type] || nodeTypes.element;\n\t}\n};\n\nvar domLvl1 = {\n\ttagName: \"name\",\n\tchildNodes: \"children\",\n\tparentNode: \"parent\",\n\tpreviousSibling: \"prev\",\n\tnextSibling: \"next\",\n\tnodeValue: \"data\"\n};\n\nvar nodeTypes = {\n\telement: 1,\n\ttext: 3,\n\tcdata: 4,\n\tcomment: 8\n};\n\nObject.keys(domLvl1).forEach(function(key) {\n\tvar shorthand = domLvl1[key];\n\tObject.defineProperty(NodePrototype, key, {\n\t\tget: function() {\n\t\t\treturn this[shorthand] || null;\n\t\t},\n\t\tset: function(val) {\n\t\t\tthis[shorthand] = val;\n\t\t\treturn val;\n\t\t}\n\t});\n});\n","// DOM-Level-1-compliant structure\nvar NodePrototype = require('./node');\nvar ElementPrototype = module.exports = Object.create(NodePrototype);\n\nvar domLvl1 = {\n\ttagName: \"name\"\n};\n\nObject.keys(domLvl1).forEach(function(key) {\n\tvar shorthand = domLvl1[key];\n\tObject.defineProperty(ElementPrototype, key, {\n\t\tget: function() {\n\t\t\treturn this[shorthand] || null;\n\t\t},\n\t\tset: function(val) {\n\t\t\tthis[shorthand] = val;\n\t\t\treturn val;\n\t\t}\n\t});\n});\n","var ElementType = require(\"domelementtype\");\n\nvar re_whitespace = /\\s+/g;\nvar NodePrototype = require(\"./lib/node\");\nvar ElementPrototype = require(\"./lib/element\");\n\nfunction DomHandler(callback, options, elementCB){\n\tif(typeof callback === \"object\"){\n\t\telementCB = options;\n\t\toptions = callback;\n\t\tcallback = null;\n\t} else if(typeof options === \"function\"){\n\t\telementCB = options;\n\t\toptions = defaultOpts;\n\t}\n\tthis._callback = callback;\n\tthis._options = options || defaultOpts;\n\tthis._elementCB = elementCB;\n\tthis.dom = [];\n\tthis._done = false;\n\tthis._tagStack = [];\n\tthis._parser = this._parser || null;\n}\n\n//default options\nvar defaultOpts = {\n\tnormalizeWhitespace: false, //Replace all whitespace with single spaces\n\twithStartIndices: false, //Add startIndex properties to nodes\n\twithEndIndices: false, //Add endIndex properties to nodes\n};\n\nDomHandler.prototype.onparserinit = function(parser){\n\tthis._parser = parser;\n};\n\n//Resets the handler back to starting state\nDomHandler.prototype.onreset = function(){\n\tDomHandler.call(this, this._callback, this._options, this._elementCB);\n};\n\n//Signals the handler that parsing is done\nDomHandler.prototype.onend = function(){\n\tif(this._done) return;\n\tthis._done = true;\n\tthis._parser = null;\n\tthis._handleCallback(null);\n};\n\nDomHandler.prototype._handleCallback =\nDomHandler.prototype.onerror = function(error){\n\tif(typeof this._callback === \"function\"){\n\t\tthis._callback(error, this.dom);\n\t} else {\n\t\tif(error) throw error;\n\t}\n};\n\nDomHandler.prototype.onclosetag = function(){\n\t//if(this._tagStack.pop().name !== name) this._handleCallback(Error(\"Tagname didn't match!\"));\n\t\n\tvar elem = this._tagStack.pop();\n\n\tif(this._options.withEndIndices && elem){\n\t\telem.endIndex = this._parser.endIndex;\n\t}\n\n\tif(this._elementCB) this._elementCB(elem);\n};\n\nDomHandler.prototype._createDomElement = function(properties){\n\tif (!this._options.withDomLvl1) return properties;\n\n\tvar element;\n\tif (properties.type === \"tag\") {\n\t\telement = Object.create(ElementPrototype);\n\t} else {\n\t\telement = Object.create(NodePrototype);\n\t}\n\n\tfor (var key in properties) {\n\t\tif (properties.hasOwnProperty(key)) {\n\t\t\telement[key] = properties[key];\n\t\t}\n\t}\n\n\treturn element;\n};\n\nDomHandler.prototype._addDomElement = function(element){\n\tvar parent = this._tagStack[this._tagStack.length - 1];\n\tvar siblings = parent ? parent.children : this.dom;\n\tvar previousSibling = siblings[siblings.length - 1];\n\n\telement.next = null;\n\n\tif(this._options.withStartIndices){\n\t\telement.startIndex = this._parser.startIndex;\n\t}\n\tif(this._options.withEndIndices){\n\t\telement.endIndex = this._parser.endIndex;\n\t}\n\n\tif(previousSibling){\n\t\telement.prev = previousSibling;\n\t\tpreviousSibling.next = element;\n\t} else {\n\t\telement.prev = null;\n\t}\n\n\tsiblings.push(element);\n\telement.parent = parent || null;\n};\n\nDomHandler.prototype.onopentag = function(name, attribs){\n\tvar properties = {\n\t\ttype: name === \"script\" ? ElementType.Script : name === \"style\" ? ElementType.Style : ElementType.Tag,\n\t\tname: name,\n\t\tattribs: attribs,\n\t\tchildren: []\n\t};\n\n\tvar element = this._createDomElement(properties);\n\n\tthis._addDomElement(element);\n\n\tthis._tagStack.push(element);\n};\n\nDomHandler.prototype.ontext = function(data){\n\t//the ignoreWhitespace is officially dropped, but for now,\n\t//it's an alias for normalizeWhitespace\n\tvar normalize = this._options.normalizeWhitespace || this._options.ignoreWhitespace;\n\n\tvar lastTag;\n\n\tif(!this._tagStack.length && this.dom.length && (lastTag = this.dom[this.dom.length-1]).type === ElementType.Text){\n\t\tif(normalize){\n\t\t\tlastTag.data = (lastTag.data + data).replace(re_whitespace, \" \");\n\t\t} else {\n\t\t\tlastTag.data += data;\n\t\t}\n\t} else {\n\t\tif(\n\t\t\tthis._tagStack.length &&\n\t\t\t(lastTag = this._tagStack[this._tagStack.length - 1]) &&\n\t\t\t(lastTag = lastTag.children[lastTag.children.length - 1]) &&\n\t\t\tlastTag.type === ElementType.Text\n\t\t){\n\t\t\tif(normalize){\n\t\t\t\tlastTag.data = (lastTag.data + data).replace(re_whitespace, \" \");\n\t\t\t} else {\n\t\t\t\tlastTag.data += data;\n\t\t\t}\n\t\t} else {\n\t\t\tif(normalize){\n\t\t\t\tdata = data.replace(re_whitespace, \" \");\n\t\t\t}\n\n\t\t\tvar element = this._createDomElement({\n\t\t\t\tdata: data,\n\t\t\t\ttype: ElementType.Text\n\t\t\t});\n\n\t\t\tthis._addDomElement(element);\n\t\t}\n\t}\n};\n\nDomHandler.prototype.oncomment = function(data){\n\tvar lastTag = this._tagStack[this._tagStack.length - 1];\n\n\tif(lastTag && lastTag.type === ElementType.Comment){\n\t\tlastTag.data += data;\n\t\treturn;\n\t}\n\n\tvar properties = {\n\t\tdata: data,\n\t\ttype: ElementType.Comment\n\t};\n\n\tvar element = this._createDomElement(properties);\n\n\tthis._addDomElement(element);\n\tthis._tagStack.push(element);\n};\n\nDomHandler.prototype.oncdatastart = function(){\n\tvar properties = {\n\t\tchildren: [{\n\t\t\tdata: \"\",\n\t\t\ttype: ElementType.Text\n\t\t}],\n\t\ttype: ElementType.CDATA\n\t};\n\n\tvar element = this._createDomElement(properties);\n\n\tthis._addDomElement(element);\n\tthis._tagStack.push(element);\n};\n\nDomHandler.prototype.oncommentend = DomHandler.prototype.oncdataend = function(){\n\tthis._tagStack.pop();\n};\n\nDomHandler.prototype.onprocessinginstruction = function(name, data){\n\tvar element = this._createDomElement({\n\t\tname: name,\n\t\tdata: data,\n\t\ttype: ElementType.Directive\n\t});\n\n\tthis._addDomElement(element);\n};\n\nmodule.exports = DomHandler;\n","// SPDX-License-Identifier: MIT\n\nimport { Parser } from 'htmlparser2';\nimport { DomHandler } from 'domhandler';\nimport * as DomUtils from 'domutils';\nimport { replyIcon, heartIcon } from '../common/icons';\nimport { IRenderOptions } from '../base/render-options';\nimport { NDKUserProfile } from '@nostr-dev-kit/ndk';\nimport { escapeHtml } from '../common/utils';\n\nexport interface RenderPostOptions extends IRenderOptions {\n author: NDKUserProfile | null| undefined;\n date: string;\n shouldShowStats: boolean;\n stats: {\n replies: number;\n likes: number;\n } | null;\n statsLoading: boolean;\n htmlToRender: string;\n}\n\nexport function renderPost(options: RenderPostOptions): string {\n const {\n isLoading,\n isError,\n errorMessage,\n author,\n date,\n shouldShowStats,\n stats,\n statsLoading,\n htmlToRender,\n } = options;\n\n if (isError) {\n return renderError(errorMessage || '');\n }\n\n return `\n <div class=\"nostr-post-container\">\n ${renderPostHeader(isLoading, author, date)}\n ${renderPostBody(isLoading, htmlToRender)}\n ${shouldShowStats ? renderPostFooter(isLoading, stats, statsLoading) : ''}\n </div>\n `;\n}\n\nfunction renderPostHeader(\n isLoading: boolean,\n author:\n | {\n image?: string;\n displayName?: string;\n nip05?: string;\n }\n | null\n | undefined,\n date: string\n): string {\n if (isLoading) {\n return `\n <div class=\"post-header\">\n <div class=\"post-header-left\">\n <div class=\"author-picture\">\n <div style=\"width: 35px; height: 35px; border-radius: 50%;\" class=\"skeleton\"></div>\n </div>\n </div>\n <div class=\"post-header-middle\">\n <div style=\"width: 70%; height: 10px; border-radius: 10px;\" class=\"skeleton\"></div>\n <div style=\"width: 80%; height: 8px; border-radius: 10px; margin-top: 5px;\" class=\"skeleton\"></div>\n </div>\n <div class=\"post-header-right\">\n <div style=\"width: 100px; height: 10px; border-radius: 10px;\" class=\"skeleton\"></div>\n </div>\n </div>\n `;\n }\n\n return `\n <div class=\"post-header\">\n <div class=\"post-header-left\">\n <div class=\"author-picture\">\n ${author?.image ? `<img src=\"${author.image}\" alt=\"Author\" />` : ''}\n </div>\n </div>\n <div class=\"post-header-middle\">\n ${author?.displayName ? `<span class=\"author-name\">${author.displayName}</span>` : ''}\n ${author?.nip05 ? `<span class=\"author-username\">${author.nip05}</span>` : ''}\n </div>\n <div class=\"post-header-right\">\n <span class=\"post-date\">${date}</span>\n </div>\n </div>\n `;\n}\n\nfunction renderPostBody(\n isLoading: boolean,\n htmlToRender: string\n): string {\n if (isLoading) {\n return `\n <div class=\"post-body\">\n <div style=\"width: 100%; height: 10px; border-radius: 10px; margin-bottom: 15px;\" class=\"skeleton\"></div>\n <div style=\"width: 100%; height: 10px; border-radius: 10px; margin-bottom: 15px;\" class=\"skeleton\"></div>\n <div style=\"width: 30%; height: 10px; border-radius: 10px;\" class=\"skeleton\"></div>\n </div>\n `;\n }\n\n return `\n <div class=\"post-body\">\n ${htmlToRender}\n </div>\n `;\n}\n\nfunction renderPostFooter(\n isLoading: boolean,\n stats: { replies: number; likes: number } | null,\n statsLoading: boolean\n): string {\n if (isLoading || statsLoading) {\n return `\n <div class=\"post-footer\">\n <div class='stats-container'>\n <div class=\"stat\">\n <div style=\"width: 16px; height: 16px; border-radius: 4px;\" class=\"skeleton\"></div>\n <div style=\"width: 20px; height: 16px; border-radius: 4px;\" class=\"skeleton\"></div>\n </div>\n <div class=\"stat\">\n <div style=\"width: 16px; height: 16px; border-radius: 4px;\" class=\"skeleton\"></div>\n <div style=\"width: 20px; height: 16px; border-radius: 4px;\" class=\"skeleton\"></div>\n </div>\n </div>\n </div>\n `;\n }\n\n return `\n <div class=\"post-footer\">\n <div class='stats-container'>\n <div class=\"stat\">\n ${replyIcon}\n <span>${stats?.replies ?? 0}</span>\n </div>\n <div class=\"stat\">\n ${heartIcon}\n <span>${stats?.likes ?? 0}</span>\n </div>\n </div>\n </div>\n `;\n}\n\nexport function renderEmbeddedPost(\n noteId: string,\n authorProfile:\n | {\n displayName?: string;\n image?: string;\n nip05?: string;\n }\n | undefined,\n date: string,\n content: string\n): string {\n const authorDisplayName = authorProfile?.displayName || '';\n\n // Process media items from content\n const mediaItems: { type: 'image' | 'video'; url: string }[] = [];\n let processedContent = content;\n\n try {\n // Create a handler to collect DOM elements\n const dom: any[] = [];\n const handler = new DomHandler(\n (error, parsedDom) => {\n if (error) {\n throw error;\n }\n dom.push(...parsedDom);\n },\n {\n normalizeWhitespace: false,\n withEndIndices: false,\n withStartIndices: false,\n }\n );\n\n const parser = new Parser(handler);\n\n // Parse the HTML content\n parser.write(content);\n parser.end();\n\n // Find all image and video elements\n const mediaElements = DomUtils.findAll((elem: any) => {\n return (\n elem.type === 'tag' &&\n (elem.name === 'img' || elem.name === 'video') &&\n elem.attribs?.src\n );\n }, dom) as any[];\n\n // Extract media items and remove them from the DOM\n mediaElements.forEach(elem => {\n if (elem.attribs?.src) {\n const type = elem.name === 'img' ? 'image' : 'video';\n mediaItems.push({ type, url: elem.attribs.src });\n\n // Remove the element from its parent\n const parent = elem.parent;\n if (parent?.children) {\n parent.children = parent.children.filter(\n (child: any) => child !== elem\n );\n }\n }\n });\n\n // Reconstruct the HTML without media elements\n processedContent = dom\n .map((node: any) => DomUtils.getOuterHTML(node))\n .join('');\n } catch (error) {\n console.error('Error processing HTML content:', error);\n // Fall back to original content if parsing fails\n processedContent = content;\n }\n\n // Generate media HTML if there are media items\n let mediaHtml = '';\n if (mediaItems.length > 0) {\n mediaHtml = '<div class=\"embedded-media-list\">';\n for (const item of mediaItems) {\n if (item.type === 'image') {\n mediaHtml += `<div class=\"embedded-media-item\"><img src=\"${item.url}\" alt=\"Embedded image\" loading=\"lazy\" /></div>`;\n } else if (item.type === 'video') {\n mediaHtml += `<div class=\"embedded-media-item\"><video src=\"${item.url}\" controls preload=\"none\"></video></div>`;\n }\n }\n mediaHtml += '</div>';\n }\n\n return `\n <div class=\"embedded-post\" data-note-id=\"${noteId}\">\n <div class=\"embedded-post-header\">\n <div class=\"embedded-author-avatar\" style=\"cursor: pointer;\">\n ${authorProfile?.image ? `<img src=\"${authorProfile.image}\" alt=\"Profile\">` : ''}\n </div>\n <div class=\"embedded-author-info\" style=\"cursor: pointer;\">\n <span class=\"embedded-author-name\">${authorDisplayName}</span>\n ${authorProfile?.nip05 ? `<span class=\"embedded-author-username\">${authorProfile.nip05}</span>` : ''}\n </div>\n <div class=\"embedded-post-date\">${date}</div>\n </div>\n <div class=\"embedded-post-content\">\n ${processedContent}\n ${mediaHtml ? `<div class=\"embedded-post-media\">${mediaHtml}</div>` : ''}\n </div>\n </div>\n `;\n}\n\nfunction renderError(errorMessage: string): string {\n return `\n <div class=\"nostr-post-container\">\n <div class=\"post-header\">\n <div class=\"error-icon\">⚠</div>\n </div>\n <div class=\"post-body\">\n ${escapeHtml(errorMessage)}\n </div>\n </div>\n `;\n}","// SPDX-License-Identifier: MIT\n\nimport { NDKEvent, ProfilePointer } from \"@nostr-dev-kit/ndk\";\nimport { NostrService } from \"../common/nostr-service\";\nimport { nip21 } from 'nostr-tools';\n\nexport type ContentItem = {\n type: 'text' | 'image' | 'gif' | 'video' | 'link' | 'embedded-note';\n value?: string;\n noteId?: string;\n};\n \nexport async function parseText(text: string, post: NDKEvent | null, embeddedPosts: Map<string, NDKEvent>, nostrService: NostrService): Promise<ContentItem[]> {\n let textContent = text;\n let embeddedNotes: { id: string; position: number }[] = [];\n\n // First capture embedded note references before other processing\n // Example note1abcdef... or nostr:note1abcdef... or nevent1abcdef...\n const noteRegex = /(nostr:)?(note[a-zA-Z0-9]{59,60}|nevent[a-zA-Z0-9]{58,})/g;\n const noteMatches = [...textContent.matchAll(noteRegex)];\n\n for (const match of noteMatches) {\n const fullMatch = match[0];\n const noteId = match[2];\n const position = match.index || 0;\n\n // Store the note ID and its position for later processing\n embeddedNotes.push({\n id: noteId,\n position: position,\n });\n\n // Fetch the embedded post\n try {\n if (!embeddedPosts.has(noteId)) {\n const embeddedPost = await nostrService.getPost(noteId);\n if (embeddedPost) {\n embeddedPosts.set(noteId, embeddedPost);\n }\n }\n } catch (error) {\n console.error(`Failed to fetch embedded post ${noteId}:`, error);\n }\n\n // Remove the note reference from the text to prevent @ symbols being added\n textContent = textContent.replace(fullMatch, ' ');\n }\n\n // Handle Nostr URI schema for mentions - batch process to avoid multiple async operations\n const nostrURISchemaMatches = [...textContent.matchAll(new RegExp(nip21.NOSTR_URI_REGEX, 'g'))];\n const uriReplacements: { original: string; replacement: string }[] = [];\n\n // Process all URIs concurrently\n const uriPromises = nostrURISchemaMatches.map(async (match) => {\n try {\n const parsedNostrURI = nip21.parse(match[0]);\n const decordedData = parsedNostrURI.decoded.data;\n\n let pubkey = '';\n if (typeof decordedData === 'string') {\n pubkey = decordedData;\n } else {\n pubkey = (decordedData as ProfilePointer).pubkey;\n }\n\n if (pubkey) {\n const user = nostrService.getNDK().getUser({ pubkey });\n const profile = await user.fetchProfile();\n const name = profile?.displayName || '';\n\n uriReplacements.push({\n original: match[0],\n replacement: `<a href=\"https://njump.me/${parsedNostrURI.value}\" target=\"_blank\">@${name}</a>`\n });\n }\n } catch (error) {\n console.error('Failed to process Nostr URI:', error);\n }\n });\n\n await Promise.all(uriPromises);\n\n // Apply all replacements at once\n for (const replacement of uriReplacements) {\n textContent = textContent.replace(replacement.original, replacement.replacement);\n }\n\n // Handle Twitter-like mentions (@username) - batch process\n const mentionRegex = /(\\s|^)@(\\w+)/g;\n const mentionMatches = [...textContent.matchAll(mentionRegex)];\n const mentionReplacements: { original: string; replacement: string }[] = [];\n\n for (const match of mentionMatches) {\n const fullMatch = match[0];\n const username = match[2];\n\n mentionReplacements.push({\n original: fullMatch,\n replacement: `${match[1]}<span class=\"nostr-mention\" data-username=\"${username}\">@${username}</span>`\n });\n }\n\n // Apply all mention replacements at once\n for (const replacement of mentionReplacements) {\n textContent = textContent.replace(replacement.original, replacement.replacement);\n }\n\n const result: ContentItem[] = [];\n\n // First, check for Nostr attachments in the post\n if (post) {\n const videoTags = post.getMatchingTags('a');\n for (const tag of videoTags) {\n const mimeType = tag[1] as string;\n const url = tag[2] as string;\n if (mimeType?.startsWith('video/') && url) {\n result.push({ type: 'video', value: url });\n }\n }\n }\n\n // Then handle URLs in the text - optimized with single pass\n const urlRegex = /(https:\\/\\/(?!njump\\.me)[\\w.-]+(?:\\.[\\w.-]+)+(?:\\/[^\\s]*)?)/g;\n const urlMatches = [...textContent.matchAll(urlRegex)];\n\n if (urlMatches.length > 0) {\n let lastIndex = 0;\n \n for (const match of urlMatches) {\n const startIndex = match.index!;\n const endIndex = startIndex + match[0].length;\n\n // Add text before URL\n if (startIndex > lastIndex) {\n result.push({\n type: 'text',\n value: textContent.substring(lastIndex, startIndex),\n });\n }\n\n // Determine URL type efficiently\n const url = match[0];\n const pathname = new URL(url).pathname.toLowerCase();\n let type: 'image' | 'gif' | 'video' | 'link';\n\n if (pathname.match(/\\.(jpg|jpeg|png)$/)) {\n type = 'image';\n } else if (pathname.endsWith('.gif')) {\n type = 'gif';\n } else if (pathname.match(/\\.(mp4|webm|mov)$/)) {\n type = 'video';\n } else {\n type = 'link';\n }\n\n result.push({ type, value: url });\n lastIndex = endIndex;\n }\n\n // Add remaining text\n if (lastIndex < textContent.length) {\n result.push({ type: 'text', value: textContent.substring(lastIndex) });\n }\n } else {\n result.push({ type: 'text', value: textContent });\n }\n\n // Add embedded notes to the result\n // TODO: Embedded notes lose their original position in text and are appended at the end,\n // losing their inline context. Consider inserting embedded notes at their original \n // positions using the captured position data to maintain content flow and semantic meaning.\n // See: https://github.com/saiy2k/nostr-components/pull/23#discussion_r2238652376\n if (embeddedNotes.length > 0) {\n // Sort by position in descending order to avoid affecting earlier positions\n embeddedNotes.sort((a, b) => b.position - a.position);\n\n for (const note of embeddedNotes) {\n result.push({\n type: 'embedded-note',\n noteId: note.id,\n });\n }\n }\n\n return result;\n }\n","// SPDX-License-Identifier: MIT\n\n/**\n * Shared date formatting utilities for Nostr components\n */\n\n/**\n * Formats a Unix timestamp to a readable date string\n * @param createdAt Unix timestamp in seconds\n * @returns Formatted date string (e.g., \"Jan 15, 2024\")\n */\nexport function formatEventDate(createdAt: number | undefined): string {\n if (createdAt === undefined) return '';\n \n return new Date(createdAt * 1000).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n}\n","// SPDX-License-Identifier: MIT\n\n import { ContentItem } from './parse-text';\n import { isValidUrl } from '../common/utils';\n import { NDKEvent, NDKUserProfile } from '@nostr-dev-kit/ndk';\n import { parseText } from './parse-text';\n import { renderEmbeddedPost } from './render';\n import { formatEventDate } from '../common/date-utils';\n\n export function renderContent(content: ContentItem[]): string {\n const html: string[] = [];\n let mediaCount = 0;\n let textBuffer = '';\n\n for (const item of content) {\n if (item.type === 'text') {\n textBuffer += (item.value ?? '');\n } else if (item.type === 'embedded-note') {\n // Handle embedded note placeholder\n if (textBuffer) {\n html.push(\n `<span class=\"text-content\">${textBuffer.replace(/\\n/g, '<br />')}</span>`\n );\n textBuffer = '';\n }\n\n html.push(\n `<div class=\"embedded-post-placeholder\" data-note-id=\"${item.noteId}\"></div>`\n );\n } else {\n if (textBuffer) {\n html.push(\n `<span class=\"text-content\">${textBuffer.replace(/\\n/g, '<br />')}</span>`\n );\n textBuffer = '';\n }\n\n const url = item.value ?? \"\";\n if (!isValidUrl(url)) continue;\n switch (item.type) {\n case 'image':\n html.push(\n `<img class=\"post-media-item\" src=\"${url}\" alt=\"User uploaded image\" loading=\"lazy\">`\n );\n mediaCount++;\n break;\n case 'gif':\n html.push(\n `<img class=\"post-media-item\" src=\"${url}\" alt=\"User uploaded GIF\" loading=\"lazy\">`\n );\n mediaCount++;\n break;\n case 'video':\n html.push(\n `<video class=\"post-media-item\" src=\"${url}\" controls></video>`\n );\n mediaCount++;\n break;\n case 'link':\n html.push(`<a href=\"${url}\">${url}</a>`);\n break;\n }\n }\n }\n\n if (textBuffer) {\n html.push(\n `<span class=\"text-content\">${textBuffer.replace(/\\n/g, '<br />')}</span>`\n );\n }\n\n if (mediaCount > 1) {\n const carouselHtml: string[] = [];\n const bullets: string[] = [];\n let slideIndex = 0;\n let firstMediaIndex = -1;\n\n // First pass: collect media items and track first media position\n for (let i = 0; i < html.length; i++) {\n const item = html[i];\n if (item.startsWith('<img') || item.startsWith('<video')) {\n if (firstMediaIndex === -1) {\n firstMediaIndex = i;\n }\n carouselHtml.push(`<li class=\"glide__slide\">${item}</li>`);\n bullets.push(`<button class=\"glide__bullet\" data-glide-dir=\"=${slideIndex}\"></button>`);\n slideIndex++;\n }\n }\n\n // Remove media items from html array (filter in-place)\n const filteredHtml = html.filter(item => \n !item.startsWith('<img') && !item.startsWith('<video')\n );\n\n // Build carousel string\n const carouselString = `\n <div class=\"glide\" style=\"margin-top: 20px\">\n <div class=\"glide__track\" data-glide-el=\"track\">\n <ul class=\"glide__slides\">\n ${carouselHtml.join('')}\n </ul>\n </div>\n\n <div class=\"glide__bullets\" data-glide-el=\"controls[nav]\">\n ${bullets.join('')}\n </div>\n </div>\n `;\n\n // Replace html with filtered content and splice carousel at first media position\n html.length = 0;\n html.push(...filteredHtml);\n html.splice(firstMediaIndex, 0, carouselString);\n }\n\n return html.join('');\n };\n\n export async function replaceEmbeddedPostPlaceholders(\n shadowRoot: ShadowRoot | null,\n embeddedPosts: Map<string, NDKEvent>,\n event: NDKEvent | null,\n nostrService: any\n ) {\n const placeholders = shadowRoot?.querySelectorAll('.embedded-post-placeholder');\n\n if (!placeholders) return;\n\n for (const placeholder of placeholders) {\n const noteId = placeholder.getAttribute('data-note-id');\n if (noteId) {\n const embedHtml = await renderEmbeddedPostContent(noteId, embeddedPosts, event, nostrService);\n\n const temp = document.createElement('div');\n temp.innerHTML = embedHtml;\n\n // Replace the placeholder with the embedded post\n placeholder.parentNode?.replaceChild(\n temp.firstElementChild!,\n placeholder\n );\n }\n }\n }\n\n export async function renderEmbeddedPostContent(\n noteId: string,\n embeddedPosts: Map<string, NDKEvent>,\n event: NDKEvent | null,\n nostrService: any\n ): Promise<string> {\n const post = embeddedPosts.get(noteId);\n if (!post) return '<div class=\"embedded-post-error\">Post not found</div>';\n\n let authorProfile: NDKUserProfile | null = null;\n try {\n authorProfile = await post.author.fetchProfile();\n } catch (error) {\n console.error(\n `Failed to fetch profile for embedded post ${noteId}:`,\n error\n );\n }\n\n const date = formatEventDate(post.created_at);\n\n // Process the post content\n const content = await parseText(post.content, post, embeddedPosts, nostrService);\n const renderedContent = renderContent(content);\n\n const sanitizedProfile = authorProfile\n ? {\n displayName: authorProfile.displayName || '',\n image: isValidUrl(authorProfile.picture || '') ? authorProfile.picture : '',\n nip05: authorProfile.nip05 || '',\n }\n : undefined;\n\n // Use the renderEmbeddedPost function from the render module\n return renderEmbeddedPost(\n noteId,\n sanitizedProfile,\n date,\n renderedContent\n );\n }","// SPDX-License-Identifier: MIT\n\nimport { NDKEvent } from '@nostr-dev-kit/ndk';\nimport { nip19 } from 'nostr-tools';\nimport { NostrService } from '../../common/nostr-service';\nimport { isValidHex, validateNoteId, validateEventId } from '../../common/utils';\n\nexport class EventResolver {\n constructor(private nostrService: NostrService) { }\n\n validateInputs({ hex, noteid, eventid }: { hex?: string | null; noteid?: string | null; eventid?: string | null }): string | null {\n if (!hex && !noteid && !eventid) {\n return \"Provide hex, noteid, or eventid attribute\";\n }\n \n if (hex && !isValidHex(hex)) return `Invalid hex: ${hex}`;\n if (noteid && !validateNoteId(noteid)) return `Invalid noteid: ${noteid}`;\n if (eventid && !validateEventId(eventid)) return `Invalid eventid: ${eventid}`;\n \n return null;\n }\n\n /**\n * Normalize bech32 identifiers to hex format\n */\n private normalizeToHex(identifier: string): string | null {\n try {\n const decoded = nip19.decode(identifier);\n \n if (decoded.type === 'note') {\n return decoded.data;\n } else if (decoded.type === 'nevent') {\n return decoded.data.id;\n }\n \n return null;\n } catch {\n // Not bech32; accept only if it is valid hex\n return isValidHex(identifier) ? identifier : null;\n }\n }\n\n async resolveEvent({ hex, noteid, eventid }: { hex?: string | null; noteid?: string | null; eventid?: string | null }): Promise<NDKEvent> {\n // Normalize all identifiers to hex format\n let normalizedHex: string | null = null;\n \n if (noteid) {\n normalizedHex = this.normalizeToHex(noteid);\n } else if (hex) {\n normalizedHex = hex;\n } else if (eventid) {\n normalizedHex = this.normalizeToHex(eventid);\n }\n \n if (!normalizedHex) {\n throw new Error(\"Unable to normalize identifier to hex format\");\n }\n if (!isValidHex(normalizedHex)) {\n throw new Error(`Invalid hex: ${normalizedHex}`);\n }\n \n const event = await this.nostrService.resolveNDKEvent({ hex: normalizedHex });\n if (!event) throw new Error(\"Unable to resolve event from provided identifier\");\n\n return event;\n }\n}\n","// SPDX-License-Identifier: MIT\n\nimport { NDKEvent, NDKUser, NDKUserProfile } from '@nostr-dev-kit/ndk';\nimport { NostrBaseComponent, NCStatus } from '../base-component/nostr-base-component';\nimport { EventResolver } from '../resolvers/event-resolver';\nimport { UserResolver } from '../resolvers/user-resolver';\nimport { formatEventDate } from '../../common/date-utils';\n\nconst EVT_EVENT = 'nc:event';\n\n/**\n * NostrEventComponent\n * ==================\n * Extension of `NostrBaseComponent` that resolves and manages a Nostr Event.\n *\n * Overview\n * - Accepts identity attributes (`hex`, `noteid`, or `eventid`) and validates them.\n * - Resolves an `NDKEvent` via the shared `nostrService` and fetches the event.\n * - Exposes resolved `event` to subclasses for rendering or logic.\n * - Emits lifecycle events for status and event readiness.\n *\n * Observed attributes\n * - `hex` — raw hex-encoded event ID\n * - `noteid` — bech32-encoded event ID starting with 'note1...'\n * - `eventid` — bech32-encoded event pointer starting with 'nevent1...' (encodes extra metadata)\n *\n * Events\n * - `nc:status` — from base, reflects connection and event loading status\n * - `nc:event` — fired when an event is successfully resolved\n */\n\nexport class NostrEventComponent extends NostrBaseComponent {\n\n protected event: NDKEvent | null = null;\n protected author: NDKUser | null = null;\n protected authorProfile: NDKUserProfile | null = null;\n protected formattedDate: string = '';\n\n protected eventStatus = this.channel('event');\n protected authorStatus = this.channel('author');\n\n // guard to ignore stale event fetches\n private loadSeq = 0;\n\n private eventResolver!: EventResolver;\n private userResolver!: UserResolver;\n\n constructor(shadow: boolean = true) {\n super(shadow);\n this.initChannelStatus('event', NCStatus.Loading, { reflectOverall: false });\n this.initChannelStatus('author', NCStatus.Loading, { reflectOverall: false });\n this.eventResolver = new EventResolver(this.nostrService);\n this.userResolver = new UserResolver(this.nostrService);\n }\n\n /** Lifecycle methods */\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n 'hex',\n 'noteid',\n 'eventid',\n ];\n }\n\n connectedCallback() {\n super.connectedCallback?.();\n\n if (this.validateInputs()) {\n this.resolveEventAndLoad().catch(e => {\n console.error('[NostrEventComponent] init failed:', e);\n });\n }\n }\n\n attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null\n ) {\n if (oldValue === newValue) return;\n super.attributeChangedCallback?.(name, oldValue, newValue);\n\n if (name === 'hex' || name === 'noteid' || name === 'eventid') {\n if (this.validateInputs()) {\n void this.resolveEventAndLoad();\n }\n }\n }\n\n /** Protected methods */\n protected validateInputs(): boolean {\n\n if (!super.validateInputs()) {\n this.eventStatus.set(NCStatus.Idle);\n this.authorStatus.set(NCStatus.Idle);\n return false;\n }\n\n const hex = this.getAttribute(\"hex\");\n const noteid = this.getAttribute(\"noteid\");\n const eventid = this.getAttribute(\"eventid\");\n const tagName = this.tagName.toLowerCase();\n\n const err = this.eventResolver.validateInputs({\n hex: hex,\n noteid: noteid,\n eventid: eventid,\n });\n\n if (err) {\n this.eventStatus.set(NCStatus.Error, err);\n this.authorStatus.set(NCStatus.Error, err);\n console.error(`Nostr-Components: ${tagName}: ${err}`);\n this.errorMessage = err;\n return false;\n }\n\n this.errorMessage = \"\";\n return true;\n\n }\n\n // TODO: Parallalize loading of event and author profile\n // and render once any of them is ready\n protected async resolveEventAndLoad(): Promise<void> {\n const seq = ++this.loadSeq; // token to prevent stale writes\n\n // Ensure relays are connected; handle failure inside to avoid unhandled rejection\n try {\n await this.ensureNostrConnected();\n } catch (e) {\n if (seq !== this.loadSeq) return; // stale\n // Base already set status=Error, but make the failure explicit here too\n console.error('[NostrEventComponent] Relay connect failed before event load:', e);\n return;\n }\n\n this.eventStatus.set(NCStatus.Loading);\n this.authorStatus.set(NCStatus.Loading);\n this.event = null;\n this.author = null;\n this.authorProfile = null;\n\n try {\n const hex = this.getAttribute('hex');\n const noteid = this.getAttribute('noteid');\n const eventid = this.getAttribute('eventid');\n\n const event = await this.eventResolver.resolveEvent({\n hex: hex,\n noteid: noteid,\n eventid: eventid,\n });\n\n // stale call check\n if (seq !== this.loadSeq) return;\n\n this.event = event;\n this.formattedDate = this.formatEventDate(event);\n this.eventStatus.set(NCStatus.Ready);\n\n this.loadAuthorProfile(event.pubkey, seq);\n\n this.dispatchEvent(new CustomEvent(EVT_EVENT, {\n detail: { event: this.event },\n bubbles: true,\n composed: true,\n }));\n\n // Check if both event and author are ready\n this.checkEventAndAuthorReady();\n } catch (err) {\n if (seq !== this.loadSeq) return; // stale\n const msg = err instanceof Error ? err.message : 'Failed to load event';\n console.error('[NostrEventComponent] ' + msg, err);\n this.eventStatus.set(NCStatus.Error, msg);\n }\n }\n\n private async loadAuthorProfile(pubkey: string, seq: number): Promise<void> {\n try {\n const { user, profile } = await this.userResolver.resolveUser({ pubkey });\n \n // stale call check\n if (seq !== this.loadSeq) return;\n\n this.author = user;\n this.authorProfile = profile;\n this.authorStatus.set(NCStatus.Ready);\n\n // Check if both event and author are ready\n this.checkEventAndAuthorReady();\n } catch (err) {\n if (seq !== this.loadSeq) return; // stale\n const msg = err instanceof Error ? err.message : 'Failed to load author profile';\n console.error('[NostrEventComponent] ' + msg, err);\n this.authorStatus.set(NCStatus.Error, msg);\n }\n }\n\n // TODO: Allow event to render if event is ready, regardless of author status\n // Update post render to handle this\n private checkEventAndAuthorReady(): void {\n const eventReady = this.eventStatus.get() === NCStatus.Ready;\n const authorReady = this.authorStatus.get() === NCStatus.Ready;\n \n if (eventReady && authorReady && this.event) {\n this.onEventReady(this.event);\n }\n }\n\n private formatEventDate(event: NDKEvent): string {\n return formatEventDate(event.created_at);\n }\n\n protected renderContent() { }\n\n /** Hook for subclasses to react when event is ready (e.g., render). */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected onEventReady(_event: NDKEvent) { }\n}\n","// SPDX-License-Identifier: MIT\n\nimport { getComponentStyles } from '../common/base-styles';\n\nexport function getPostStyles(): string {\n const customStyles = `\n /* === POST CSS VARIABLES === */\n :host {\n --nostrc-post-bg: var(--nostrc-theme-bg, #ffffff);\n --nostrc-post-text-primary: var(--nostrc-theme-text-primary, #333333);\n --nostrc-post-text-secondary: var(--nostrc-theme-text-secondary, #666666);\n --nostrc-post-border: var(--nostrc-border-width) solid var(--nostrc-color-border);\n --nostrc-post-font-family: var(--nostrc-font-family-primary);\n --nostrc-post-font-size: var(--nostrc-font-size-base);\n \n /* Hover state variables */\n --nostrc-post-hover-bg: var(--nostrc-theme-hover-bg, rgba(0, 0, 0, 0.05));\n --nostrc-post-hover-color: var(--nostrc-theme-text-primary, #333333);\n --nostrc-post-hover-border: var(--nostrc-border-width) solid var(--nostrc-theme-border, var(--nostrc-color-border));\n\n /* Make the host the visual post surface */\n display: block;\n background: var(--nostrc-post-bg);\n color: var(--nostrc-post-text-primary);\n border: var(--nostrc-post-border);\n border-radius: var(--nostrc-border-radius-md);\n font-family: var(--nostrc-post-font-family);\n font-size: var(--nostrc-post-font-size);\n transition: background-color var(--nostrc-transition-duration) var(--nostrc-transition-timing);\n }\n\n /* === POST CONTAINER PATTERN === */\n .nostr-post-container {\n display: flex;\n flex-direction: column;\n gap: var(--nostrc-spacing-lg);\n padding: var(--nostrc-spacing-md);\n min-height: 100px;\n }\n\n /* Hover state */\n :host(.is-clickable:hover) {\n background: var(--nostrc-post-hover-bg);\n color: var(--nostrc-post-hover-color);\n border: var(--nostrc-post-hover-border);\n }\n\n :host(.is-clickable) {\n cursor: pointer;\n }\n\n :host(.is-error) .nostr-post-container {\n justify-content: center;\n align-items: center;\n color: var(--nostrc-color-error-text);\n border: var(--nostrc-border-width) solid var(--nostrc-color-error-text);\n }\n\n /* === POST HEADER PATTERN === */\n .post-header {\n display: flex;\n gap: var(--nostrc-spacing-sm);\n }\n \n .post-body {\n display: block;\n width: 100%;\n }\n\n .post-header-left {\n width: 35px;\n flex-shrink: 0;\n }\n\n .post-header-left img {\n width: 35px;\n height: 35px;\n border-radius: var(--nostrc-border-radius-full);\n object-fit: cover;\n }\n\n .post-header-middle {\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: var(--nostrc-spacing-xs);\n }\n\n .post-header-right {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: end;\n }\n\n /* === AUTHOR INFO STYLES === */\n .author-name {\n color: var(--nostrc-post-text-primary);\n font-weight: var(--nostrc-font-weight-bold);\n word-break: break-word;\n }\n\n .author-username {\n font-weight: var(--nostrc-font-weight-normal);\n color: var(--nostrc-post-text-secondary);\n font-size: var(--nostrc-font-size-sm);\n word-break: break-all;\n }\n\n .post-date {\n font-weight: var(--nostrc-font-weight-normal);\n color: var(--nostrc-post-text-secondary);\n font-size: var(--nostrc-font-size-sm);\n }\n\n .text-content {\n word-break: break-word;\n }\n\n /* === POST FOOTER PATTERN === */\n .post-footer {\n margin-top: var(--nostrc-spacing-lg);\n display: block;\n width: 100%;\n }\n\n .stats-container {\n display: flex;\n gap: var(--nostrc-spacing-lg);\n }\n\n .stat {\n display: flex;\n gap: var(--nostrc-spacing-xs);\n color: var(--nostrc-post-text-secondary);\n }\n\n /* === MEDIA STYLING === */\n .post-media-item {\n max-width: 100%;\n max-height: 500px;\n width: auto;\n height: auto;\n object-fit: contain;\n border-radius: var(--nostrc-border-radius-md);\n display: block;\n margin: var(--nostrc-spacing-sm) 0;\n }\n\n /* === EMBEDDED MEDIA STYLING === */\n .embedded-media-item {\n width: 100%;\n border-radius: var(--nostrc-border-radius-sm);\n overflow: hidden;\n margin: var(--nostrc-spacing-xs) 0;\n }\n\n .embedded-media-item img,\n .embedded-media-item video {\n width: 100%;\n max-height: 500px;\n object-fit: contain;\n display: block;\n }\n\n /* === GLIDE CAROUSEL STYLES === */\n .glide {\n position: relative;\n width: 100%;\n box-sizing: border-box;\n }\n .glide * {\n box-sizing: inherit;\n }\n .glide__track {\n overflow: hidden;\n }\n .glide__slides {\n position: relative;\n width: 100%;\n list-style: none;\n backface-visibility: hidden;\n transform-style: preserve-3d;\n touch-action: pan-Y;\n overflow: hidden;\n margin: 0;\n padding: 0;\n white-space: nowrap;\n display: flex;\n flex-wrap: nowrap;\n will-change: transform;\n }\n .glide__slide {\n width: 100%;\n height: 100%;\n flex-shrink: 0;\n white-space: normal;\n user-select: none;\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: transparent;\n }\n .glide__slide * {\n border-radius: var(--nostrc-border-radius-md);\n }\n .glide__bullets {\n -webkit-touch-callout: none;\n user-select: none;\n display: flex;\n justify-content: center;\n gap: 8px;\n margin-top: 12px;\n }\n .glide__bullet {\n background-color: rgba(0, 0, 0, 0.3);\n border: none;\n border-radius: 50%;\n width: 8px;\n height: 8px;\n cursor: pointer;\n transition: background-color 0.2s ease;\n }\n .glide__bullet:hover,\n .glide__bullet--active {\n background-color: rgba(0, 0, 0, 0.7);\n }\n\n /* === MENTION STYLES === */\n .nostr-mention {\n color: var(--nostrc-post-accent);\n font-weight: var(--nostrc-font-weight-medium);\n cursor: pointer;\n }\n \n /* === EMBEDDED POST STYLES === */\n .embedded-post {\n margin: var(--nostrc-spacing-sm) 0;\n padding: var(--nostrc-spacing-sm);\n border: var(--nostrc-post-border);\n border-radius: var(--nostrc-border-radius-md);\n background: var(--nostrc-color-background-secondary);\n }\n \n .embedded-post-header {\n display: flex;\n align-items: center;\n margin-bottom: var(--nostrc-spacing-xs);\n }\n \n .embedded-author-avatar {\n width: 24px;\n height: 24px;\n border-radius: var(--nostrc-border-radius-full);\n overflow: hidden;\n margin-right: var(--nostrc-spacing-xs);\n }\n \n .embedded-author-avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n \n .embedded-author-info {\n display: flex;\n flex-direction: column;\n flex: 1;\n }\n \n .embedded-author-name {\n font-weight: var(--nostrc-font-weight-bold);\n font-size: var(--nostrc-font-size-sm);\n color: var(--nostrc-post-text-primary);\n }\n \n .embedded-author-username {\n font-size: var(--nostrc-font-size-xs);\n color: var(--nostrc-post-text-secondary);\n }\n \n .embedded-post-date {\n font-size: var(--nostrc-font-size-xs);\n color: var(--nostrc-post-text-secondary);\n }\n \n .embedded-post-content {\n font-size: var(--nostrc-font-size-sm);\n color: var(--nostrc-post-text-primary);\n line-height: 1.4;\n white-space: pre-line;\n }\n \n .embedded-post-media {\n margin-top: var(--nostrc-spacing-sm);\n }\n \n .embedded-media-list {\n display: flex;\n flex-direction: column;\n gap: var(--nostrc-spacing-xs);\n }\n \n .embedded-media-item {\n width: 100%;\n border-radius: var(--nostrc-border-radius-sm);\n overflow: hidden;\n }\n \n .embedded-media-item img,\n .embedded-media-item video {\n width: 100%;\n max-height: 300px;\n object-fit: contain;\n display: block;\n }\n \n .embedded-post-error {\n padding: var(--nostrc-spacing-sm);\n color: var(--nostrc-color-error-text);\n background-color: var(--nostrc-color-error-background);\n border: var(--nostrc-post-border);\n border-radius: var(--nostrc-border-radius-sm);\n font-size: var(--nostrc-font-size-sm);\n }\n\n :host(.is-error) .post-body {\n text-align: center;\n }\n `;\n \n // Use component styles - includes design tokens + utilities + custom styles\n return getComponentStyles(customStyles);\n}","// SPDX-License-Identifier: MIT\n\nimport { NDKEvent } from '@nostr-dev-kit/ndk';\nimport Glide from '@glidejs/glide';\nimport { getPostStats, Stats } from '../common/utils';\nimport { renderPost, RenderPostOptions } from './render';\nimport { parseText } from './parse-text';\nimport { renderContent, replaceEmbeddedPostPlaceholders } from './render-content';\nimport { NostrEventComponent } from '../base/event-component/nostr-event-component';\nimport { NCStatus } from '../base/base-component/nostr-base-component';\nimport { getPostStyles } from './style';\n\nconst EVT_POST = 'nc:post';\nconst EVT_AUTHOR = 'nc:author';\nconst EVT_MENTION = 'nc:mention';\n\nexport default class NostrPost extends NostrEventComponent {\n\n protected stats: Stats | null = null;\n protected statsLoading: boolean = false;\n protected embeddedPosts: Map<string, NDKEvent> = new Map();\n private glideInitialized: boolean = false;\n private cachedParsedContent: string | null = null;\n private cachedHtmlToRender: string | null = null;\n\n async connectedCallback() {\n super.connectedCallback?.();\n this.attachDelegatedListeners();\n this.render();\n }\n\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n 'show-stats',\n ];\n }\n\n attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null\n ) {\n if (oldValue === newValue) return;\n super.attributeChangedCallback?.(name, oldValue, newValue);\n if (name === 'show-stats') {\n this.render();\n }\n }\n\n /** Base class functions */\n protected onStatusChange(_status: NCStatus) {\n this.render();\n }\n\n protected async onEventReady(_event: any) {\n this.invalidateCache();\n this.getPostStats();\n this.render();\n }\n\n private invalidateCache() {\n this.cachedParsedContent = null;\n this.cachedHtmlToRender = null;\n this.glideInitialized = false;\n }\n\n async getPostStats() {\n try {\n const shouldShowStats = this.getAttribute('show-stats') === 'true';\n\n if (this.event && shouldShowStats) {\n this.statsLoading = true;\n this.render();\n \n const stats = await getPostStats(\n this.nostrService.getNDK(),\n this.event.id\n );\n if (stats) {\n this.stats = stats;\n }\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Failed to load post stats';\n console.error('[NostrPostComponent] ' + msg, err);\n this.eventStatus.set(NCStatus.Error, msg);\n } finally {\n this.statsLoading = false;\n this.render();\n }\n }\n\n private onPostClick() {\n const id = this.getAttribute('id') || this.event?.id;\n if (id) {\n this.handleNjumpClick(EVT_POST, this.event, id);\n }\n }\n\n private onAuthorClick() {\n const key =\n this.author?.npub ||\n this.authorProfile?.nip05;\n\n if (key) {\n this.handleNjumpClick(EVT_AUTHOR, {\n author: this.author,\n authorProfile: this.authorProfile,\n npub: this.author?.npub\n }, key);\n }\n }\n\n private onMentionClick(username: string) {\n this.handleNjumpClick(EVT_MENTION, { username }, `p/${username}`);\n }\n\n private attachDelegatedListeners() {\n // Click anywhere on the post container (except interactive elements)\n this.delegateEvent('click', '.nostr-post-container', (_e: Event) => {\n const target = _e.target as HTMLElement;\n if (!target.closest('a, .nostr-mention, video, img, .nc-copy-btn, .post-header-left, .post-header-middle')) {\n this.onPostClick();\n }\n });\n\n // Click on author avatar\n this.delegateEvent('click', '.post-header-left', (_e: Event) => {\n this.onAuthorClick();\n });\n\n // Click on author info (name/username area)\n this.delegateEvent('click', '.post-header-middle', (_e: Event) => {\n this.onAuthorClick();\n });\n\n // Click on mentions\n this.delegateEvent('click', '.nostr-mention', (e: Event) => {\n const target = e.target as HTMLElement;\n const username = target.getAttribute('data-username') || target.textContent?.slice(1);\n if (username) {\n this.onMentionClick(username);\n }\n });\n }\n\n protected async renderContent() {\n\n const isLoading = this.computeOverall() == NCStatus.Loading;\n const isError = this.computeOverall() === NCStatus.Error;\n const date = this.formattedDate;\n const content = this.event?.content || '';\n \n // Cache parsed content to avoid re-parsing on every render\n if (!this.cachedParsedContent || !this.cachedHtmlToRender) {\n const parsedContent = await parseText(content, this.event, this.embeddedPosts, this.nostrService);\n this.cachedParsedContent = JSON.stringify(parsedContent);\n this.cachedHtmlToRender = renderContent(parsedContent);\n }\n \n const htmlToRender = this.cachedHtmlToRender;\n const errorMessage = this.errorMessage;\n\n const shouldShowStats = this.getAttribute('show-stats') === 'true';\n\n const renderOptions: RenderPostOptions = {\n isLoading: isLoading,\n isError: isError,\n errorMessage: errorMessage,\n author: this.authorProfile,\n date,\n shouldShowStats,\n stats: this.stats,\n statsLoading: this.statsLoading,\n htmlToRender,\n };\n\n this.shadowRoot!.innerHTML = `\n ${getPostStyles()}\n ${renderPost(renderOptions)}\n `;\n\n if(htmlToRender.includes('glide') && !this.glideInitialized) {\n // Wait for DOM to be ready\n setTimeout(() => {\n const glideElement = this.shadowRoot?.querySelector('.glide');\n if (glideElement) {\n new Glide(glideElement as HTMLElement).mount();\n this.glideInitialized = true;\n }\n }, 0);\n }\n\n // Process embedded post placeholders asynchronously after render\n // TODO: This is super bad!\n if (htmlToRender.includes('embedded-post-placeholder')) {\n setTimeout(() => {\n replaceEmbeddedPostPlaceholders(\n this.shadowRoot, \n this.embeddedPosts, \n this.event, \n this.nostrService\n );\n }, 0);\n }\n }\n}\n\ncustomElements.define('nostr-post', NostrPost);\n"],"names":["ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","target","i","source","key","_defineProperty","_typeof","obj","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","_createClass","protoProps","staticProps","value","_inherits","subClass","superClass","_setPrototypeOf","_getPrototypeOf","o","p","_isNativeReflectConstruct","_assertThisInitialized","self","_possibleConstructorReturn","call","_createSuper","Derived","hasNativeReflectConstruct","Super","result","NewTarget","_superPropBase","property","_get","receiver","base","desc","defaults","warn","msg","toInt","toFloat","isString","isObject","type","isFunction","isUndefined","isArray","mount","glide","extensions","events","components","name","_name","define","prop","definition","sortKeys","r","k","mergeOptions","settings","options","properties","EventsBus","event","handler","index","context","item","Glide$1","Glide","selector","transformers","pattern","distance","interval","status","Run","Components","Events","move","_this","length","steps","direction","viewSize","calculateForwardIndex","normalizeForwardIndex","_index","calculateBackwardIndex","normalizeBackwardIndex","view","step","now","throttle","func","wait","timeout","args","previous","later","throttled","at","remaining","MARGIN_TYPE","Gaps","slides","len","style","perView","siblings","node","n","matched","toArray","nodeList","TRACK_SELECTOR","Html","slide","t","Peek","Move","offset","translate","Sizes","width","Build","classes","sibling","_Glide$settings$class","Clones","items","_Glide$settings","cloningRatio","peekIncrementer","cloneCount","append","prepend","clone","_i","_clone","_Components$Html","wrapper","half","_i2","_i3","EventsBinder","listeners","el","closure","capture","Resize","Binder","VALID_DIRECTIONS","FLIPED_MOVEMENTS","Direction","token","Rtl","Gap","multiplier","Grow","Peeking","peek","Focusing","gap","focusAt","slideWidth","mutator","TRANSFORMERS","transformer","Translate","transform","translate3d","travelDistance","startWidth","Transition","disabled","callback","supportsPassive","opts","supportsPassive$1","START_EVENTS","MOVE_EVENTS","END_EVENTS","MOUSE_EVENTS","Swipe","swipeSin","swipeStartX","swipeStartY","swipe","touchAngle","touchRatio","subExSx","subEySy","powEX","powEY","swipeHypotenuse","swipeCathetus","_Glide$settings2","perSwipe","threshold","swipeDistance","swipeDeg","_Glide$settings3","swipeThreshold","dragThreshold","_this2","_this3","Images","Anchors","detached","prevented","NAV_SELECTOR","CONTROLS_SELECTOR","PREVIOUS_CONTROLS_SELECTOR","NEXT_CONTROLS_SELECTOR","Controls","controls","next","_len","lists","_key","list","element","_len2","_key2","elements","Keyboard","arrowSymbols","Autoplay","autoplay","sortBreakpoints","points","Breakpoints","point","COMPONENTS","_Core","_super","htmlDecodeTree","c","xmlDecodeTree","_a","decodeMap","fromCodePoint","codePoint","output","replaceCodePoint","CharCodes","TO_LOWER_BIT","BinTrieFlags","isNumber","code","isHexadecimalCharacter","isAsciiAlphaNumeric","isEntityInAttributeInvalidEnd","EntityDecoderState","DecodingMode","EntityDecoder","decodeTree","emitCodePoint","errors","decodeMode","input","start","end","digitCount","startIndex","char","lastCp","expectedLength","current","valueLength","determineBranch","consumed","nodeIndex","branchCount","jumpOffset","lo","hi","mid","midValue","State","isWhitespace","isEndOfTagSection","isASCIIAlpha","QuoteType","Sequences","Tokenizer","xmlMode","decodeEntities","cbs","cp","chunk","isEnd","endOfText","actualIndex","sequence","lower","quote","endIndex","formTags","pTag","tableSectionTags","ddtTags","rtpTags","openImpliesClose","voidElements","foreignContextElements","htmlIntegrationElements","reNameEnd","Parser","_b","_c","_d","_e","_f","data","impliesClose","isImplied","_g","_h","pos","isOpenImplied","_j","_k","slice","ElementType","isTag","elem","isTagRaw","hasChildren","Root","Text","Directive","Comment","Script","Style","Tag","CDATA","Doctype","xmlReplacer","xmlCodeMap","getCodePoint","str","encodeXML","ret","lastIdx","match","getEscaper","regex","map","escapeAttribute","escapeText","elementNames","val","attributeNames","unencodedElements","replaceQuotes","formatAttributes","attributes","encode","singleTag","render","nodes","renderNode","ElementType.Root","ElementType.Doctype","ElementType.Directive","renderDirective","ElementType.Comment","renderComment","ElementType.CDATA","renderCdata","ElementType.Script","ElementType.Style","ElementType.Tag","renderTag","ElementType.Text","renderText","foreignModeIntegrationPoints","foreignElements","tag","attribs","getOuterHTML","renderHTML","findAll","test","nodeStack","indexStack","domelementtype","nodeModule","children","nodeTypes","domLvl1","NodePrototype","require$$0","ElementPrototype","elementModule","shorthand","re_whitespace","require$$1","require$$2","DomHandler","elementCB","defaultOpts","parser","error","parent","previousSibling","normalize","lastTag","domhandler","renderPost","isLoading","isError","errorMessage","author","date","shouldShowStats","stats","statsLoading","htmlToRender","renderError","renderPostHeader","renderPostBody","renderPostFooter","replyIcon","heartIcon","renderEmbeddedPost","noteId","authorProfile","content","authorDisplayName","mediaItems","processedContent","dom","parsedDom","DomUtils.findAll","child","DomUtils.getOuterHTML","mediaHtml","escapeHtml","parseText","text","post","embeddedPosts","nostrService","textContent","embeddedNotes","noteRegex","noteMatches","fullMatch","position","embeddedPost","nostrURISchemaMatches","nip21","uriReplacements","uriPromises","parsedNostrURI","decordedData","pubkey","profile","replacement","mentionRegex","mentionMatches","mentionReplacements","username","videoTags","mimeType","url","urlRegex","urlMatches","lastIndex","pathname","a","b","note","formatEventDate","createdAt","renderContent","html","mediaCount","textBuffer","isValidUrl","carouselHtml","bullets","slideIndex","firstMediaIndex","filteredHtml","carouselString","replaceEmbeddedPostPlaceholders","shadowRoot","placeholders","placeholder","embedHtml","renderEmbeddedPostContent","temp","renderedContent","sanitizedProfile","EventResolver","hex","noteid","eventid","isValidHex","validateNoteId","validateEventId","identifier","decoded","nip19","normalizedHex","EVT_EVENT","NostrEventComponent","NostrBaseComponent","shadow","__publicField","NCStatus","UserResolver","e","oldValue","newValue","tagName","err","seq","user","eventReady","authorReady","_event","getPostStyles","getComponentStyles","EVT_POST","EVT_AUTHOR","EVT_MENTION","NostrPost","_status","getPostStats","id","parsedContent","renderOptions","glideElement"],"mappings":"idAAA;AAAA;AAAA;AAAA;AAAA,GAMA,SAASA,GAAQC,EAAQC,EAAgB,CACvC,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAE7B,GAAI,OAAO,sBAAuB,CAChC,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAE7CC,IACFE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CACtC,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAC5D,CAAO,GAGHF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CACjC,CAEE,OAAOD,CACT,CAEA,SAASG,GAAeC,EAAQ,CAC9B,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CACzC,IAAIC,EAAS,UAAUD,CAAC,GAAK,KAAO,UAAUA,CAAC,EAAI,CAAE,EAEjDA,EAAI,EACNR,GAAQ,OAAOS,CAAM,EAAG,EAAI,EAAE,QAAQ,SAAUC,EAAK,CACnDC,GAAgBJ,EAAQG,EAAKD,EAAOC,CAAG,CAAC,CAChD,CAAO,EACQ,OAAO,0BAChB,OAAO,iBAAiBH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAExET,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUC,EAAK,CAC7C,OAAO,eAAeH,EAAQG,EAAK,OAAO,yBAAyBD,EAAQC,CAAG,CAAC,CACvF,CAAO,CAEP,CAEE,OAAOH,CACT,CAEA,SAASK,EAAQC,EAAK,CACpB,0BAEA,OAAI,OAAO,QAAW,YAAc,OAAO,OAAO,UAAa,SAC7DD,EAAU,SAAUC,EAAK,CACvB,OAAO,OAAOA,CACf,EAEDD,EAAU,SAAUC,EAAK,CACvB,OAAOA,GAAO,OAAO,QAAW,YAAcA,EAAI,cAAgB,QAAUA,IAAQ,OAAO,UAAY,SAAW,OAAOA,CAC1H,EAGID,EAAQC,CAAG,CACpB,CAEA,SAASC,EAAgBC,EAAUC,EAAa,CAC9C,GAAI,EAAED,aAAoBC,GACxB,MAAM,IAAI,UAAU,mCAAmC,CAE3D,CAEA,SAASC,GAAkBV,EAAQW,EAAO,CACxC,QAASV,EAAI,EAAGA,EAAIU,EAAM,OAAQV,IAAK,CACrC,IAAIW,EAAaD,EAAMV,CAAC,EACxBW,EAAW,WAAaA,EAAW,YAAc,GACjDA,EAAW,aAAe,GACtB,UAAWA,IAAYA,EAAW,SAAW,IACjD,OAAO,eAAeZ,EAAQY,EAAW,IAAKA,CAAU,CAC5D,CACA,CAEA,SAASC,GAAaJ,EAAaK,EAAYC,EAAa,CAC1D,OAAID,GAAYJ,GAAkBD,EAAY,UAAWK,CAAU,EAE5DL,CACT,CAEA,SAASL,GAAgBE,EAAKH,EAAKa,EAAO,CACxC,OAAIb,KAAOG,EACT,OAAO,eAAeA,EAAKH,EAAK,CAC9B,MAAOa,EACP,WAAY,GACZ,aAAc,GACd,SAAU,EAChB,CAAK,EAEDV,EAAIH,CAAG,EAAIa,EAGNV,CACT,CAEA,SAASW,GAAUC,EAAUC,EAAY,CACvC,GAAI,OAAOA,GAAe,YAAcA,IAAe,KACrD,MAAM,IAAI,UAAU,oDAAoD,EAG1ED,EAAS,UAAY,OAAO,OAAOC,GAAcA,EAAW,UAAW,CACrE,YAAa,CACX,MAAOD,EACP,SAAU,GACV,aAAc,EACpB,CACA,CAAG,EACGC,GAAYC,GAAgBF,EAAUC,CAAU,CACtD,CAEA,SAASE,EAAgBC,EAAG,CAC1B,OAAAD,EAAkB,OAAO,eAAiB,OAAO,eAAiB,SAAyBC,EAAG,CAC5F,OAAOA,EAAE,WAAa,OAAO,eAAeA,CAAC,CAC9C,EACMD,EAAgBC,CAAC,CAC1B,CAEA,SAASF,GAAgBE,EAAGC,EAAG,CAC7B,OAAAH,GAAkB,OAAO,gBAAkB,SAAyBE,EAAGC,EAAG,CACxE,OAAAD,EAAE,UAAYC,EACPD,CACR,EAEMF,GAAgBE,EAAGC,CAAC,CAC7B,CAEA,SAASC,IAA4B,CAEnC,GADI,OAAO,QAAY,KAAe,CAAC,QAAQ,WAC3C,QAAQ,UAAU,KAAM,MAAO,GACnC,GAAI,OAAO,OAAU,WAAY,MAAO,GAExC,GAAI,CACF,eAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,QAAS,CAAA,EAAI,UAAY,CAAA,CAAE,CAAC,EACtE,EACR,MAAW,CACV,MAAO,EACX,CACA,CAEA,SAASC,GAAuBC,EAAM,CACpC,GAAIA,IAAS,OACX,MAAM,IAAI,eAAe,2DAA2D,EAGtF,OAAOA,CACT,CAEA,SAASC,GAA2BD,EAAME,EAAM,CAC9C,GAAIA,IAAS,OAAOA,GAAS,UAAY,OAAOA,GAAS,YACvD,OAAOA,EACF,GAAIA,IAAS,OAClB,MAAM,IAAI,UAAU,0DAA0D,EAGhF,OAAOH,GAAuBC,CAAI,CACpC,CAEA,SAASG,GAAaC,EAAS,CAC7B,IAAIC,EAA4BP,GAA2B,EAE3D,OAAO,UAAgC,CACrC,IAAIQ,EAAQX,EAAgBS,CAAO,EAC/BG,EAEJ,GAAIF,EAA2B,CAC7B,IAAIG,EAAYb,EAAgB,IAAI,EAAE,YAEtCY,EAAS,QAAQ,UAAUD,EAAO,UAAWE,CAAS,CAC5D,MACMD,EAASD,EAAM,MAAM,KAAM,SAAS,EAGtC,OAAOL,GAA2B,KAAMM,CAAM,CAC/C,CACH,CAEA,SAASE,GAAezC,EAAQ0C,EAAU,CACxC,KAAO,CAAC,OAAO,UAAU,eAAe,KAAK1C,EAAQ0C,CAAQ,IAC3D1C,EAAS2B,EAAgB3B,CAAM,EAC3BA,IAAW,OAAf,CAGF,OAAOA,CACT,CAEA,SAAS2C,GAAO,CACd,OAAI,OAAO,QAAY,KAAe,QAAQ,IAC5CA,EAAO,QAAQ,IAEfA,EAAO,SAAcrC,EAAQoC,EAAUE,EAAU,CAC/C,IAAIC,EAAOJ,GAAenC,EAAQoC,CAAQ,EAE1C,GAAKG,EACL,KAAIC,EAAO,OAAO,yBAAyBD,EAAMH,CAAQ,EAEzD,OAAII,EAAK,IACAA,EAAK,IAAI,KAAK,UAAU,OAAS,EAAIxC,EAASsC,CAAQ,EAGxDE,EAAK,MACb,EAGIH,EAAK,MAAM,KAAM,SAAS,CACnC,CAEA,IAAII,GAAW,CAUb,KAAM,SAON,QAAS,EAOT,QAAS,EAWT,QAAS,EAOT,IAAK,GAOL,SAAU,GAOV,WAAY,GAOZ,SAAU,GAUV,MAAO,GAOP,eAAgB,GAOhB,cAAe,IAWf,SAAU,GAOV,WAAY,GAOZ,WAAY,GAOZ,kBAAmB,IAOnB,OAAQ,GAOR,eAAgB,IAOhB,oBAAqB,oCAOrB,kBAAmB,GAOnB,SAAU,GAWV,UAAW,MAcX,KAAM,EAON,aAAc,EAWd,YAAa,CAAE,EAQf,QAAS,CACP,UAAW,mBACX,SAAU,kBACV,UAAW,CACT,IAAK,aACL,IAAK,YACN,EACD,KAAM,CACJ,OAAQ,gBACR,SAAU,iBACX,EACD,MAAO,CACL,MAAO,sBACP,OAAQ,sBACT,EACD,MAAO,CACL,SAAU,wBACX,EACD,IAAK,CACH,OAAQ,uBACd,CACA,CACA,EAQA,SAASC,EAAKC,EAAK,CACjB,QAAQ,MAAM,iBAAiB,OAAOA,CAAG,CAAC,CAC5C,CASA,SAASC,EAAM5B,EAAO,CACpB,OAAO,SAASA,CAAK,CACvB,CASA,SAAS6B,GAAQ7B,EAAO,CACtB,OAAO,WAAWA,CAAK,CACzB,CAQA,SAAS8B,GAAS9B,EAAO,CACvB,OAAO,OAAOA,GAAU,QAC1B,CAUA,SAAS+B,EAAS/B,EAAO,CACvB,IAAIgC,EAAO3C,EAAQW,CAAK,EAExB,OAAOgC,IAAS,YAAcA,IAAS,UAAY,CAAC,CAAChC,CACvD,CAQA,SAASiC,EAAWjC,EAAO,CACzB,OAAO,OAAOA,GAAU,UAC1B,CAQA,SAASkC,GAAYlC,EAAO,CAC1B,OAAO,OAAOA,EAAU,GAC1B,CAQA,SAASmC,GAAQnC,EAAO,CACtB,OAAOA,EAAM,cAAgB,KAC/B,CAYA,SAASoC,GAAMC,EAAOC,EAAYC,EAAQ,CACxC,IAAIC,EAAa,CAAE,EAEnB,QAASC,KAAQH,EACXL,EAAWK,EAAWG,CAAI,CAAC,EAC7BD,EAAWC,CAAI,EAAIH,EAAWG,CAAI,EAAEJ,EAAOG,EAAYD,CAAM,EAE7Db,EAAK,8BAA8B,EAIvC,QAASgB,KAASF,EACZP,EAAWO,EAAWE,CAAK,EAAE,KAAK,GACpCF,EAAWE,CAAK,EAAE,MAAO,EAI7B,OAAOF,CACT,CAUA,SAASG,EAAOrD,EAAKsD,EAAMC,EAAY,CACrC,OAAO,eAAevD,EAAKsD,EAAMC,CAAU,CAC7C,CAQA,SAASC,GAASxD,EAAK,CACrB,OAAO,OAAO,KAAKA,CAAG,EAAE,KAAI,EAAG,OAAO,SAAUyD,EAAGC,EAAG,CACpD,OAAAD,EAAEC,CAAC,EAAI1D,EAAI0D,CAAC,EACLD,EAAEC,CAAC,EAAGD,CACd,EAAE,EAAE,CACP,CASA,SAASE,GAAaxB,EAAUyB,EAAU,CACxC,IAAIC,EAAU,OAAO,OAAO,CAAA,EAAI1B,EAAUyB,CAAQ,EAMlD,GAAIA,EAAS,eAAe,SAAS,EAAG,CACtCC,EAAQ,QAAU,OAAO,OAAO,CAAE,EAAE1B,EAAS,QAASyB,EAAS,OAAO,EACtE,IAAIE,EAAa,CAAC,YAAa,OAAQ,QAAS,QAAS,KAAK,EAC9DA,EAAW,QAAQ,SAAUhC,EAAU,CACjC8B,EAAS,QAAQ,eAAe9B,CAAQ,IAC1C+B,EAAQ,QAAQ/B,CAAQ,EAAIrC,GAAeA,GAAe,CAAE,EAAE0C,EAAS,QAAQL,CAAQ,CAAC,EAAG8B,EAAS,QAAQ9B,CAAQ,CAAC,EAE7H,CAAK,CACL,CAEE,OAAI8B,EAAS,eAAe,aAAa,IACvCC,EAAQ,YAAc,OAAO,OAAO,CAAE,EAAE1B,EAAS,YAAayB,EAAS,WAAW,GAG7EC,CACT,CAEA,IAAIE,GAAyB,UAAY,CAMvC,SAASA,GAAY,CACnB,IAAId,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EAEnFhD,EAAgB,KAAM8D,CAAS,EAE/B,KAAK,OAASd,EACd,KAAK,IAAMA,EAAO,cACtB,CASE,OAAA1C,GAAawD,EAAW,CAAC,CACvB,IAAK,KACL,MAAO,SAAYC,EAAOC,EAAS,CACjC,GAAIpB,GAAQmB,CAAK,EAAG,CAClB,QAAS,EAAI,EAAG,EAAIA,EAAM,OAAQ,IAChC,KAAK,GAAGA,EAAM,CAAC,EAAGC,CAAO,EAG3B,MACD,CAGI,KAAK,IAAI,KAAK,KAAK,OAAQD,CAAK,IACnC,KAAK,OAAOA,CAAK,EAAI,CAAE,GAIzB,IAAIE,EAAQ,KAAK,OAAOF,CAAK,EAAE,KAAKC,CAAO,EAAI,EAE/C,MAAO,CACL,OAAQ,UAAkB,CACxB,OAAO,KAAK,OAAOD,CAAK,EAAEE,CAAK,CACzC,CACO,CACP,CAQA,EAAK,CACD,IAAK,OACL,MAAO,SAAcF,EAAOG,EAAS,CACnC,GAAItB,GAAQmB,CAAK,EAAG,CAClB,QAAS,EAAI,EAAG,EAAIA,EAAM,OAAQ,IAChC,KAAK,KAAKA,EAAM,CAAC,EAAGG,CAAO,EAG7B,MACD,CAGI,KAAK,IAAI,KAAK,KAAK,OAAQH,CAAK,GAKrC,KAAK,OAAOA,CAAK,EAAE,QAAQ,SAAUI,EAAM,CACzCA,EAAKD,GAAW,EAAE,CAC1B,CAAO,CACP,CACA,CAAG,CAAC,EAEKJ,CACT,EAAG,EAECM,GAAuB,UAAY,CAOrC,SAASC,EAAMC,EAAU,CACvB,IAAIV,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EAEpF5D,EAAgB,KAAMqE,CAAK,EAE3B,KAAK,GAAK,CAAE,EACZ,KAAK,GAAK,CAAE,EACZ,KAAK,GAAK,IAAIP,GACd,KAAK,SAAW,GAChB,KAAK,SAAWQ,EAChB,KAAK,SAAWZ,GAAaxB,GAAU0B,CAAO,EAC9C,KAAK,MAAQ,KAAK,SAAS,OAC/B,CASE,OAAAtD,GAAa+D,EAAO,CAAC,CACnB,IAAK,QACL,MAAO,UAAmB,CACxB,IAAItB,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EAEvF,YAAK,GAAG,KAAK,cAAc,EAEvBP,EAASO,CAAU,EACrB,KAAK,GAAKF,GAAM,KAAME,EAAY,KAAK,EAAE,EAEzCZ,EAAK,2CAA2C,EAGlD,KAAK,GAAG,KAAK,aAAa,EAEnB,IACb,CAQA,EAAK,CACD,IAAK,SACL,MAAO,UAAkB,CACvB,IAAIoC,EAAe,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EAEzF,OAAI3B,GAAQ2B,CAAY,EACtB,KAAK,GAAKA,EAEVpC,EAAK,2CAA2C,EAG3C,IACb,CAQA,EAAK,CACD,IAAK,SACL,MAAO,UAAkB,CACvB,IAAIwB,EAAW,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EACrF,YAAK,SAAWD,GAAa,KAAK,SAAUC,CAAQ,EAEhDA,EAAS,eAAe,SAAS,IACnC,KAAK,MAAQA,EAAS,SAGxB,KAAK,GAAG,KAAK,QAAQ,EAEd,IACb,CAeA,EAAK,CACD,IAAK,KACL,MAAO,SAAYa,EAAS,CAC1B,YAAK,GAAG,IAAI,KAAKA,CAAO,EAEjB,IACb,CAQA,EAAK,CACD,IAAK,OACL,MAAO,SAAcC,EAAU,CAC7B,YAAK,GAAG,WAAW,QAAS,EAE5B,KAAK,GAAG,KAAK,KAAKA,CAAQ,EAEnB,IACb,CAOA,EAAK,CACD,IAAK,UACL,MAAO,UAAmB,CACxB,YAAK,GAAG,KAAK,SAAS,EAEf,IACb,CAQA,EAAK,CACD,IAAK,OACL,MAAO,UAAgB,CACrB,IAAIC,EAAW,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAEnF,OAAIA,IACF,KAAK,SAAS,SAAWA,GAG3B,KAAK,GAAG,KAAK,MAAM,EAEZ,IACb,CAOA,EAAK,CACD,IAAK,QACL,MAAO,UAAiB,CACtB,YAAK,GAAG,KAAK,OAAO,EAEb,IACb,CAOA,EAAK,CACD,IAAK,UACL,MAAO,UAAmB,CACxB,YAAK,SAAW,GACT,IACb,CAOA,EAAK,CACD,IAAK,SACL,MAAO,UAAkB,CACvB,YAAK,SAAW,GACT,IACb,CASA,EAAK,CACD,IAAK,KACL,MAAO,SAAYX,EAAOC,EAAS,CACjC,YAAK,GAAG,GAAGD,EAAOC,CAAO,EAElB,IACb,CAQA,EAAK,CACD,IAAK,SACL,MAAO,SAAgBd,EAAM,CAC3B,OAAO,KAAK,SAAS,OAASA,CACpC,CAOA,EAAK,CACD,IAAK,WACL,IAAK,UAAe,CAClB,OAAO,KAAK,EAClB,EAQI,IAAK,SAAanC,EAAG,CACfyB,EAASzB,CAAC,EACZ,KAAK,GAAKA,EAEVoB,EAAK,uCAAuC,CAEpD,CAOA,EAAK,CACD,IAAK,QACL,IAAK,UAAe,CAClB,OAAO,KAAK,EAClB,EAOI,IAAK,SAAazC,EAAG,CACnB,KAAK,GAAK2C,EAAM3C,CAAC,CACvB,CAOA,EAAK,CACD,IAAK,OACL,IAAK,UAAe,CAClB,OAAO,KAAK,SAAS,IAC3B,CAOA,EAAK,CACD,IAAK,WACL,IAAK,UAAe,CAClB,OAAO,KAAK,EAClB,EAOI,IAAK,SAAaiF,EAAQ,CACxB,KAAK,GAAK,CAAC,CAACA,CAClB,CACA,CAAG,CAAC,EAEKN,CACT,EAAG,EAEH,SAASO,GAAKP,EAAOQ,EAAYC,EAAQ,CACvC,IAAIF,EAAM,CAMR,MAAO,UAAiB,CACtB,KAAK,GAAK,EACX,EAOD,KAAM,SAAcG,EAAM,CACxB,IAAIC,EAAQ,KAEPX,EAAM,WACT,CAACA,EAAM,SAAS,mBAAqBA,EAAM,QAAS,EACpD,KAAK,KAAOU,EACZD,EAAO,KAAK,aAAc,KAAK,IAAI,EACnC,KAAK,UAAW,EAChBA,EAAO,KAAK,MAAO,KAAK,IAAI,EAC5BD,EAAW,WAAW,MAAM,UAAY,CAClCG,EAAM,WACRF,EAAO,KAAK,YAAaE,EAAM,IAAI,EAGjCA,EAAM,SACRF,EAAO,KAAK,UAAWE,EAAM,IAAI,EAG/BA,EAAM,aACRA,EAAM,GAAK,GACXF,EAAO,KAAK,aAAcE,EAAM,IAAI,GAGtCF,EAAO,KAAK,YAAaE,EAAM,IAAI,EACnCX,EAAM,OAAQ,CACxB,CAAS,EAEJ,EAOD,UAAW,UAAqB,CAC9B,IAAIU,EAAO,KAAK,KACZE,EAAS,KAAK,OACdC,EAAQH,EAAK,MACbI,EAAYJ,EAAK,UAEjBK,EAAW,EAGf,GAAID,IAAc,IAAK,CAGrB,GAAId,EAAM,SAAS,OAAShC,EAAM6C,CAAK,EAAID,EAAQ,CACjDZ,EAAM,MAAQY,EACd,MACV,CAEQZ,EAAM,MAAQa,EACd,MACD,CAID,GAAIC,IAAc,KAAOD,IAAU,IAAK,CACtCb,EAAM,MAAQY,EACd,MACD,CAID,GAAIE,IAAc,KAAOD,IAAU,IAAK,CACtCb,EAAM,MAAQ,EACd,MACD,CAQD,GALIc,IAAc,MAChBC,EAAWf,EAAM,SAAS,SAAW,GAInCc,IAAc,KAAOA,IAAc,KAAOD,IAAU,IAAK,CAC3D,IAAIjB,EAAQoB,EAAsBD,CAAQ,EAEtCnB,EAAQgB,IACV,KAAK,GAAK,IAGZZ,EAAM,MAAQiB,EAAsBrB,EAAOmB,CAAQ,EACnD,MACD,CAGD,GAAID,IAAc,KAAOA,IAAc,KAAOD,IAAU,IAAK,CAC3D,IAAIK,EAASC,EAAuBJ,CAAQ,EAExCG,EAAS,IACX,KAAK,GAAK,IAGZlB,EAAM,MAAQoB,EAAuBF,EAAQH,CAAQ,EACrD,MACR,CAEMjD,EAAK,8BAA8B,OAAOgD,CAAS,EAAE,OAAOD,EAAO,iBAAiB,CAAC,CACtF,EAOD,QAAS,UAAmB,CAC1B,OAAOb,EAAM,OAAS,CACvB,EAOD,MAAO,UAAiB,CACtB,OAAOA,EAAM,OAAS,KAAK,MAC5B,EAQD,SAAU,UAAoB,CAC5B,IAAIc,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,OAEpF,OAAKA,EAIA,KAAK,GAKNA,IAAc,KACT,KAAK,KAAK,YAAc,KAAO,KAAK,KAAK,QAAU,IAIxDA,IAAc,KACT,KAAK,KAAK,YAAc,KAAO,KAAK,KAAK,QAAU,IAGrD,KAAK,KAAK,YAAcA,EAbtB,GAJA,KAAK,EAkBf,EAOD,QAAS,UAAmB,CAC1B,OAAOd,EAAM,OAAO,QAAQ,GAAKA,EAAM,SAAS,UAAY,UAAYA,EAAM,SAAS,KAC7F,CACG,EAQD,SAASgB,EAAsBD,EAAU,CACvC,IAAInB,EAAQI,EAAM,MAElB,OAAIA,EAAM,OAAO,UAAU,EAClBJ,EAAQmB,EAGVnB,GAASmB,EAAWnB,EAAQmB,EACvC,CAWE,SAASE,EAAsBrB,EAAOmB,EAAU,CAC9C,IAAIH,EAASL,EAAI,OAEjB,OAAIX,GAASgB,EACJhB,EAGLI,EAAM,OAAO,UAAU,EAClBJ,GAASgB,EAAS,GAGvBZ,EAAM,SAAS,OAGbO,EAAI,QAAO,GAAM,CAACA,EAAI,MAAK,EACtBK,EAGF,EAGLL,EAAI,UACCK,EAGF,KAAK,MAAMA,EAASG,CAAQ,EAAIA,CAC3C,CASE,SAASI,EAAuBJ,EAAU,CACxC,IAAInB,EAAQI,EAAM,MAElB,GAAIA,EAAM,OAAO,UAAU,EACzB,OAAOJ,EAAQmB,EAKjB,IAAIM,EAAO,KAAK,KAAKzB,EAAQmB,CAAQ,EACrC,OAAQM,EAAO,GAAKN,CACxB,CAWE,SAASK,EAAuBxB,EAAOmB,EAAU,CAC/C,IAAIH,EAASL,EAAI,OAEjB,OAAIX,GAAS,EACJA,EAGLI,EAAM,OAAO,UAAU,EAClBJ,GAASgB,EAAS,GAGvBZ,EAAM,SAAS,OAGbO,EAAI,QAAO,GAAMA,EAAI,QAAO,EACvBK,EAGF,KAAK,MAAMA,EAASG,CAAQ,EAAIA,EAGlC,CACX,CAEE,OAAAhC,EAAOwB,EAAK,OAAQ,CAMlB,IAAK,UAAe,CAClB,OAAO,KAAK,EACb,EAOD,IAAK,SAAanE,EAAO,CACvB,IAAIkF,EAAOlF,EAAM,OAAO,CAAC,EACzB,KAAK,GAAK,CACR,UAAWA,EAAM,OAAO,EAAG,CAAC,EAC5B,MAAOkF,EAAOtD,EAAMsD,CAAI,EAAItD,EAAMsD,CAAI,EAAIA,EAAO,CAClD,CACP,CACA,CAAG,EACDvC,EAAOwB,EAAK,SAAU,CAOpB,IAAK,UAAe,CAClB,IAAIjB,EAAWU,EAAM,SACjBY,EAASJ,EAAW,KAAK,OAAO,OAIpC,OAAI,KAAK,UACAI,EAAS,GAAK5C,EAAMsB,EAAS,OAAO,EAAI,GAAKtB,EAAMsB,EAAS,OAAO,EAGrEsB,EAAS,CACtB,CACA,CAAG,EACD7B,EAAOwB,EAAK,SAAU,CAMpB,IAAK,UAAe,CAClB,OAAO,KAAK,EAClB,CACA,CAAG,EACMA,CACT,CAOA,SAASgB,IAAM,CACb,OAAO,IAAI,KAAM,EAAC,QAAS,CAC7B,CAcA,SAASC,GAASC,EAAMC,EAAM,CAC5B,IAAInC,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EAChFoC,EAAS9B,EAAS+B,EAAMvE,EACxBwE,EAAW,EAEXC,EAAQ,UAAiB,CAC3BD,EAAWtC,EAAQ,UAAY,GAAQ,EAAIgC,GAAK,EAChDI,EAAU,KACVtE,EAASoE,EAAK,MAAM5B,EAAS+B,CAAI,EAC5BD,IAAS9B,EAAU+B,EAAO,KAChC,EAEGG,EAAY,UAAqB,CACnC,IAAIC,EAAKT,GAAK,EACV,CAACM,GAAYtC,EAAQ,UAAY,KAAOsC,EAAWG,GACvD,IAAIC,EAAYP,GAAQM,EAAKH,GAC7B,OAAAhC,EAAU,KACV+B,EAAO,UAEHK,GAAa,GAAKA,EAAYP,GAC5BC,IACF,aAAaA,CAAO,EACpBA,EAAU,MAGZE,EAAWG,EACX3E,EAASoE,EAAK,MAAM5B,EAAS+B,CAAI,EAC5BD,IAAS9B,EAAU+B,EAAO,OACtB,CAACD,GAAWpC,EAAQ,WAAa,KAC1CoC,EAAU,WAAWG,EAAOG,CAAS,GAGhC5E,CACR,EAED,OAAA0E,EAAU,OAAS,UAAY,CAC7B,aAAaJ,CAAO,EACpBE,EAAW,EACXF,EAAU9B,EAAU+B,EAAO,IAC5B,EAEMG,CACT,CAEA,IAAIG,EAAc,CAChB,IAAK,CAAC,aAAc,aAAa,EACjC,IAAK,CAAC,cAAe,YAAY,CACnC,EACA,SAASC,GAAMnC,EAAOQ,EAAYC,EAAQ,CACxC,IAAI0B,EAAO,CAQT,MAAO,SAAeC,EAAQ,CAC5B,QAAS/G,EAAI,EAAGgH,EAAMD,EAAO,OAAQ/G,EAAIgH,EAAKhH,IAAK,CACjD,IAAIiH,EAAQF,EAAO/G,CAAC,EAAE,MAClByF,EAAYN,EAAW,UAAU,MAEjCnF,IAAM,EACRiH,EAAMJ,EAAYpB,CAAS,EAAE,CAAC,CAAC,EAAI,GAAG,OAAO,KAAK,MAAQ,EAAG,IAAI,EAEjEwB,EAAMJ,EAAYpB,CAAS,EAAE,CAAC,CAAC,EAAI,GAGjCzF,IAAM+G,EAAO,OAAS,EACxBE,EAAMJ,EAAYpB,CAAS,EAAE,CAAC,CAAC,EAAI,GAAG,OAAO,KAAK,MAAQ,EAAG,IAAI,EAEjEwB,EAAMJ,EAAYpB,CAAS,EAAE,CAAC,CAAC,EAAI,EAE7C,CACK,EAQD,OAAQ,SAAgBsB,EAAQ,CAC9B,QAAS/G,EAAI,EAAGgH,EAAMD,EAAO,OAAQ/G,EAAIgH,EAAKhH,IAAK,CACjD,IAAIiH,EAAQF,EAAO/G,CAAC,EAAE,MACtBiH,EAAM,WAAa,GACnBA,EAAM,YAAc,EAC5B,CACA,CACG,EACD,OAAAvD,EAAOoD,EAAM,QAAS,CAMpB,IAAK,UAAe,CAClB,OAAOnE,EAAMgC,EAAM,SAAS,GAAG,CACrC,CACA,CAAG,EACDjB,EAAOoD,EAAM,OAAQ,CAOnB,IAAK,UAAe,CAClB,OAAOA,EAAK,MAAQ3B,EAAW,MAAM,MAC3C,CACA,CAAG,EACDzB,EAAOoD,EAAM,WAAY,CAOvB,IAAK,UAAe,CAClB,IAAII,EAAUvC,EAAM,SAAS,QAC7B,OAAOmC,EAAK,OAASI,EAAU,GAAKA,CAC1C,CACA,CAAG,EAOD9B,EAAO,GAAG,CAAC,cAAe,QAAQ,EAAGe,GAAS,UAAY,CACxDW,EAAK,MAAM3B,EAAW,KAAK,QAAQ,QAAQ,CAC5C,EAAE,EAAE,CAAC,EAMNC,EAAO,GAAG,UAAW,UAAY,CAC/B0B,EAAK,OAAO3B,EAAW,KAAK,QAAQ,QAAQ,CAChD,CAAG,EACM2B,CACT,CAQA,SAASK,GAASC,EAAM,CACtB,GAAIA,GAAQA,EAAK,WAAY,CAI3B,QAHIC,EAAID,EAAK,WAAW,WACpBE,EAAU,CAAE,EAETD,EAAGA,EAAIA,EAAE,YACVA,EAAE,WAAa,GAAKA,IAAMD,GAC5BE,EAAQ,KAAKD,CAAC,EAIlB,OAAOC,CACX,CAEE,MAAO,CAAE,CACX,CAQA,SAASC,GAAQC,EAAU,CACzB,OAAO,MAAM,UAAU,MAAM,KAAKA,CAAQ,CAC5C,CAEA,IAAIC,GAAiB,0BACrB,SAASC,GAAM/C,EAAOQ,EAAYC,EAAQ,CACxC,IAAIsC,EAAO,CAMT,MAAO,UAAiB,CACtB,KAAK,KAAO/C,EAAM,SAClB,KAAK,MAAQ,KAAK,KAAK,cAAc8C,EAAc,EACnD,KAAK,cAAe,CACrB,EAKD,cAAe,UAAyB,CACtC,KAAK,OAASF,GAAQ,KAAK,QAAQ,QAAQ,EAAE,OAAO,SAAUI,EAAO,CACnE,MAAO,CAACA,EAAM,UAAU,SAAShD,EAAM,SAAS,QAAQ,MAAM,KAAK,CAC3E,CAAO,CACP,CACG,EACD,OAAAjB,EAAOgE,EAAM,OAAQ,CAMnB,IAAK,UAAe,CAClB,OAAOA,EAAK,EACb,EAOD,IAAK,SAAa,EAAG,CACf7E,GAAS,CAAC,IACZ,EAAI,SAAS,cAAc,CAAC,GAG1B,IAAM,KACR6E,EAAK,GAAK,EAEVjF,EAAK,2CAA2C,CAExD,CACA,CAAG,EACDiB,EAAOgE,EAAM,QAAS,CAMpB,IAAK,UAAe,CAClB,OAAOA,EAAK,EACb,EAOD,IAAK,SAAaE,EAAG,CACnBF,EAAK,GAAKE,CAChB,CACA,CAAG,EACDlE,EAAOgE,EAAM,UAAW,CAMtB,IAAK,UAAe,CAClB,OAAOA,EAAK,MAAM,SAAS,CAAC,CAClC,CACA,CAAG,EAKDtC,EAAO,GAAG,SAAU,UAAY,CAC9BsC,EAAK,cAAe,CACxB,CAAG,EACMA,CACT,CAEA,SAASG,GAAMlD,EAAOQ,EAAYC,EAAQ,CACxC,IAAIyC,EAAO,CAMT,MAAO,UAAiB,CACtB,KAAK,MAAQlD,EAAM,SAAS,IAClC,CACG,EACD,OAAAjB,EAAOmE,EAAM,QAAS,CAMpB,IAAK,UAAe,CAClB,OAAOA,EAAK,EACb,EAQD,IAAK,SAAa9G,EAAO,CACnB+B,EAAS/B,CAAK,GAChBA,EAAM,OAAS4B,EAAM5B,EAAM,MAAM,EACjCA,EAAM,MAAQ4B,EAAM5B,EAAM,KAAK,GAE/BA,EAAQ4B,EAAM5B,CAAK,EAGrB8G,EAAK,GAAK9G,CAChB,CACA,CAAG,EACD2C,EAAOmE,EAAM,WAAY,CAMvB,IAAK,UAAe,CAClB,IAAI9G,EAAQ8G,EAAK,MACbX,EAAUvC,EAAM,SAAS,QAE7B,OAAI7B,EAAS/B,CAAK,EACTA,EAAM,OAASmG,EAAUnG,EAAM,MAAQmG,EAGzCnG,EAAQ,EAAImG,CACzB,CACA,CAAG,EAMD9B,EAAO,GAAG,CAAC,SAAU,QAAQ,EAAG,UAAY,CAC1CyC,EAAK,MAAO,CAChB,CAAG,EACMA,CACT,CAEA,SAASC,GAAMnD,EAAOQ,EAAYC,EAAQ,CACxC,IAAI0C,EAAO,CAMT,MAAO,UAAiB,CACtB,KAAK,GAAK,CACX,EAQD,KAAM,UAAgB,CACpB,IAAIxC,EAAQ,KAERyC,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EACjF,KAAK,OAASA,EACd3C,EAAO,KAAK,OAAQ,CAClB,SAAU,KAAK,KACvB,CAAO,EACDD,EAAW,WAAW,MAAM,UAAY,CACtCC,EAAO,KAAK,aAAc,CACxB,SAAUE,EAAM,KAC1B,CAAS,CACT,CAAO,CACP,CACG,EACD,OAAA5B,EAAOoE,EAAM,SAAU,CAMrB,IAAK,UAAe,CAClB,OAAOA,EAAK,EACb,EAOD,IAAK,SAAa/G,EAAO,CACvB+G,EAAK,GAAM7E,GAAYlC,CAAK,EAAmB,EAAf4B,EAAM5B,CAAK,CACjD,CACA,CAAG,EACD2C,EAAOoE,EAAM,YAAa,CAMxB,IAAK,UAAe,CAClB,OAAO3C,EAAW,MAAM,WAAaR,EAAM,KACjD,CACA,CAAG,EACDjB,EAAOoE,EAAM,QAAS,CAMpB,IAAK,UAAe,CAClB,IAAIC,EAAS,KAAK,OACdC,EAAY,KAAK,UAErB,OAAI7C,EAAW,UAAU,GAAG,KAAK,EACxB6C,EAAYD,EAGdC,EAAYD,CACzB,CACA,CAAG,EAOD3C,EAAO,GAAG,CAAC,eAAgB,KAAK,EAAG,UAAY,CAC7C0C,EAAK,KAAM,CACf,CAAG,EACMA,CACT,CAEA,SAASG,GAAOtD,EAAOQ,EAAYC,EAAQ,CACzC,IAAI6C,EAAQ,CAMV,YAAa,UAAuB,CAIlC,QAHIC,EAAQ,GAAG,OAAO,KAAK,WAAY,IAAI,EACvCnB,EAAS5B,EAAW,KAAK,OAEpBnF,EAAI,EAAGA,EAAI+G,EAAO,OAAQ/G,IACjC+G,EAAO/G,CAAC,EAAE,MAAM,MAAQkI,CAE3B,EAOD,aAAc,UAAwB,CACpC/C,EAAW,KAAK,QAAQ,MAAM,MAAQ,GAAG,OAAO,KAAK,YAAa,IAAI,CACvE,EAOD,OAAQ,UAAkB,CAGxB,QAFI4B,EAAS5B,EAAW,KAAK,OAEpBnF,EAAI,EAAGA,EAAI+G,EAAO,OAAQ/G,IACjC+G,EAAO/G,CAAC,EAAE,MAAM,MAAQ,GAG1BmF,EAAW,KAAK,QAAQ,MAAM,MAAQ,EAC5C,CACG,EACD,OAAAzB,EAAOuE,EAAO,SAAU,CAMtB,IAAK,UAAe,CAClB,OAAO9C,EAAW,KAAK,OAAO,MACpC,CACA,CAAG,EACDzB,EAAOuE,EAAO,QAAS,CAMrB,IAAK,UAAe,CAClB,OAAO9C,EAAW,KAAK,MAAM,WACnC,CACA,CAAG,EACDzB,EAAOuE,EAAO,cAAe,CAM3B,IAAK,UAAe,CAClB,OAAOA,EAAM,WAAaA,EAAM,OAAS9C,EAAW,KAAK,KAAOA,EAAW,OAAO,IACxF,CACA,CAAG,EACDzB,EAAOuE,EAAO,aAAc,CAM1B,IAAK,UAAe,CAClB,OAAOA,EAAM,MAAQtD,EAAM,SAAS,QAAUQ,EAAW,KAAK,SAAWA,EAAW,KAAK,QAC/F,CACA,CAAG,EAQDC,EAAO,GAAG,CAAC,eAAgB,SAAU,QAAQ,EAAG,UAAY,CAC1D6C,EAAM,YAAa,EACnBA,EAAM,aAAc,CACxB,CAAG,EAMD7C,EAAO,GAAG,UAAW,UAAY,CAC/B6C,EAAM,OAAQ,CAClB,CAAG,EACMA,CACT,CAEA,SAASE,GAAOxD,EAAOQ,EAAYC,EAAQ,CACzC,IAAI+C,EAAQ,CAOV,MAAO,UAAiB,CACtB/C,EAAO,KAAK,cAAc,EAC1B,KAAK,UAAW,EAChB,KAAK,YAAa,EAClBA,EAAO,KAAK,aAAa,CAC1B,EAOD,UAAW,UAAqB,CAC9BD,EAAW,KAAK,KAAK,UAAU,IAAIR,EAAM,SAAS,QAAQ,KAAKA,EAAM,SAAS,IAAI,CAAC,CACpF,EAOD,YAAa,UAAuB,CAClC,IAAIyD,EAAUzD,EAAM,SAAS,QACzBgD,EAAQxC,EAAW,KAAK,OAAOR,EAAM,KAAK,EAE1CgD,IACFA,EAAM,UAAU,IAAIS,EAAQ,MAAM,MAAM,EACxCjB,GAASQ,CAAK,EAAE,QAAQ,SAAUU,EAAS,CACzCA,EAAQ,UAAU,OAAOD,EAAQ,MAAM,MAAM,CACvD,CAAS,EAEJ,EAOD,cAAe,UAAyB,CACtC,IAAIE,EAAwB3D,EAAM,SAAS,QACvC5B,EAAOuF,EAAsB,KAC7BX,EAAQW,EAAsB,MAClCnD,EAAW,KAAK,KAAK,UAAU,OAAOpC,EAAK4B,EAAM,SAAS,IAAI,CAAC,EAC/DQ,EAAW,KAAK,OAAO,QAAQ,SAAUkD,EAAS,CAChDA,EAAQ,UAAU,OAAOV,EAAM,MAAM,CAC7C,CAAO,CACP,CACG,EAOD,OAAAvC,EAAO,GAAG,CAAC,UAAW,QAAQ,EAAG,UAAY,CAC3C+C,EAAM,cAAe,CACzB,CAAG,EAOD/C,EAAO,GAAG,CAAC,SAAU,QAAQ,EAAG,UAAY,CAC1C+C,EAAM,MAAO,CACjB,CAAG,EAMD/C,EAAO,GAAG,aAAc,UAAY,CAClC+C,EAAM,YAAa,CACvB,CAAG,EACMA,CACT,CAEA,SAASI,GAAQ5D,EAAOQ,EAAYC,EAAQ,CAC1C,IAAImD,EAAS,CAIX,MAAO,UAAiB,CACtB,KAAK,MAAQ,CAAE,EAEX5D,EAAM,OAAO,UAAU,IACzB,KAAK,MAAQ,KAAK,QAAS,EAE9B,EAOD,QAAS,UAAmB,CAC1B,IAAI6D,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EAC9EzB,EAAS5B,EAAW,KAAK,OACzBsD,EAAkB9D,EAAM,SACxBuC,EAAUuB,EAAgB,QAC1BL,EAAUK,EAAgB,QAC1BC,EAAeD,EAAgB,aAEnC,GAAI1B,EAAO,OAAS,EAMlB,QALI4B,EAAkB,CAAC,CAAC,CAAChE,EAAM,SAAS,KACpCiE,EAAa1B,EAAUyB,EAAkB,KAAK,MAAMzB,EAAU,CAAC,EAC/D2B,EAAS9B,EAAO,MAAM,EAAG6B,CAAU,EAAE,QAAS,EAC9CE,EAAU/B,EAAO,MAAM6B,EAAa,EAAE,EAEjC9E,EAAI,EAAGA,EAAI,KAAK,IAAI4E,EAAc,KAAK,MAAMxB,EAAUH,EAAO,MAAM,CAAC,EAAGjD,IAAK,CACpF,QAAS9D,EAAI,EAAGA,EAAI6I,EAAO,OAAQ7I,IAAK,CACtC,IAAI+I,EAAQF,EAAO7I,CAAC,EAAE,UAAU,EAAI,EACpC+I,EAAM,UAAU,IAAIX,EAAQ,MAAM,KAAK,EACvCI,EAAM,KAAKO,CAAK,CAC5B,CAEU,QAASC,EAAK,EAAGA,EAAKF,EAAQ,OAAQE,IAAM,CAC1C,IAAIC,EAASH,EAAQE,CAAE,EAAE,UAAU,EAAI,EAEvCC,EAAO,UAAU,IAAIb,EAAQ,MAAM,KAAK,EAExCI,EAAM,QAAQS,CAAM,CAChC,CACA,CAGM,OAAOT,CACR,EAOD,OAAQ,UAAkB,CAUxB,QATIA,EAAQ,KAAK,MACbU,EAAmB/D,EAAW,KAC9BgE,EAAUD,EAAiB,QAC3BnC,EAASmC,EAAiB,OAC1BE,EAAO,KAAK,MAAMZ,EAAM,OAAS,CAAC,EAClCM,EAAUN,EAAM,MAAM,EAAGY,CAAI,EAAE,QAAS,EACxCP,EAASL,EAAM,MAAMY,EAAO,EAAE,EAAE,QAAS,EACzClB,EAAQ,GAAG,OAAO/C,EAAW,MAAM,WAAY,IAAI,EAE9CnF,EAAI,EAAGA,EAAI6I,EAAO,OAAQ7I,IACjCmJ,EAAQ,YAAYN,EAAO7I,CAAC,CAAC,EAG/B,QAASqJ,EAAM,EAAGA,EAAMP,EAAQ,OAAQO,IACtCF,EAAQ,aAAaL,EAAQO,CAAG,EAAGtC,EAAO,CAAC,CAAC,EAG9C,QAASuC,EAAM,EAAGA,EAAMd,EAAM,OAAQc,IACpCd,EAAMc,CAAG,EAAE,MAAM,MAAQpB,CAE5B,EAOD,OAAQ,UAAkB,CAGxB,QAFIM,EAAQ,KAAK,MAERxI,EAAI,EAAGA,EAAIwI,EAAM,OAAQxI,IAChCmF,EAAW,KAAK,QAAQ,YAAYqD,EAAMxI,CAAC,CAAC,CAEpD,CACG,EACD,OAAA0D,EAAO6E,EAAQ,OAAQ,CAMrB,IAAK,UAAe,CAClB,OAAQpD,EAAW,MAAM,WAAaA,EAAW,KAAK,OAASoD,EAAO,MAAM,MAClF,CACA,CAAG,EAMDnD,EAAO,GAAG,SAAU,UAAY,CAC9BmD,EAAO,OAAQ,EACfA,EAAO,MAAO,EACdA,EAAO,OAAQ,CACnB,CAAG,EAMDnD,EAAO,GAAG,eAAgB,UAAY,CAChCT,EAAM,OAAO,UAAU,GACzB4D,EAAO,OAAQ,CAErB,CAAG,EAMDnD,EAAO,GAAG,UAAW,UAAY,CAC/BmD,EAAO,OAAQ,CACnB,CAAG,EACMA,CACT,CAEA,IAAIgB,EAA4B,UAAY,CAI1C,SAASA,GAAe,CACtB,IAAIC,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EAEtFlJ,EAAgB,KAAMiJ,CAAY,EAElC,KAAK,UAAYC,CACrB,CAYE,OAAA5I,GAAa2I,EAAc,CAAC,CAC1B,IAAK,KACL,MAAO,SAAYjG,EAAQmG,EAAIC,EAAS,CACtC,IAAIC,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAE9E9G,GAASS,CAAM,IACjBA,EAAS,CAACA,CAAM,GAGlB,QAAStD,EAAI,EAAGA,EAAIsD,EAAO,OAAQtD,IACjC,KAAK,UAAUsD,EAAOtD,CAAC,CAAC,EAAI0J,EAC5BD,EAAG,iBAAiBnG,EAAOtD,CAAC,EAAG,KAAK,UAAUsD,EAAOtD,CAAC,CAAC,EAAG2J,CAAO,CAEzE,CAUA,EAAK,CACD,IAAK,MACL,MAAO,SAAarG,EAAQmG,EAAI,CAC9B,IAAIE,EAAU,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAE9E9G,GAASS,CAAM,IACjBA,EAAS,CAACA,CAAM,GAGlB,QAAStD,EAAI,EAAGA,EAAIsD,EAAO,OAAQtD,IACjCyJ,EAAG,oBAAoBnG,EAAOtD,CAAC,EAAG,KAAK,UAAUsD,EAAOtD,CAAC,CAAC,EAAG2J,CAAO,CAE5E,CAOA,EAAK,CACD,IAAK,UACL,MAAO,UAAmB,CACxB,OAAO,KAAK,SAClB,CACA,CAAG,CAAC,EAEKJ,CACT,EAAG,EAEH,SAASK,GAAQjF,EAAOQ,EAAYC,EAAQ,CAM1C,IAAIyE,EAAS,IAAIN,EACbK,EAAS,CAIX,MAAO,UAAiB,CACtB,KAAK,KAAM,CACZ,EAQD,KAAM,UAAgB,CACpBC,EAAO,GAAG,SAAU,OAAQ1D,GAAS,UAAY,CAC/Cf,EAAO,KAAK,QAAQ,CAC5B,EAAST,EAAM,SAAS,QAAQ,CAAC,CAC5B,EAOD,OAAQ,UAAkB,CACxBkF,EAAO,IAAI,SAAU,MAAM,CACjC,CACG,EAMD,OAAAzE,EAAO,GAAG,UAAW,UAAY,CAC/BwE,EAAO,OAAQ,EACfC,EAAO,QAAS,CACpB,CAAG,EACMD,CACT,CAEA,IAAIE,GAAmB,CAAC,MAAO,KAAK,EAChCC,GAAmB,CACrB,IAAK,IACL,IAAK,IACL,IAAK,GACP,EACA,SAASC,GAAWrF,EAAOQ,EAAYC,EAAQ,CAC7C,IAAI4E,EAAY,CAMd,MAAO,UAAiB,CACtB,KAAK,MAAQrF,EAAM,SAAS,SAC7B,EAQD,QAAS,SAAiBG,EAAS,CACjC,IAAImF,EAAQnF,EAAQ,MAAM,EAAG,CAAC,EAE9B,OAAI,KAAK,GAAG,KAAK,EACRA,EAAQ,MAAMmF,CAAK,EAAE,KAAKF,GAAiBE,CAAK,CAAC,EAGnDnF,CACR,EAQD,GAAI,SAAYW,EAAW,CACzB,OAAO,KAAK,QAAUA,CACvB,EAOD,SAAU,UAAoB,CAC5BN,EAAW,KAAK,KAAK,UAAU,IAAIR,EAAM,SAAS,QAAQ,UAAU,KAAK,KAAK,CAAC,CAChF,EAOD,YAAa,UAAuB,CAClCQ,EAAW,KAAK,KAAK,UAAU,OAAOR,EAAM,SAAS,QAAQ,UAAU,KAAK,KAAK,CAAC,CACxF,CACG,EACD,OAAAjB,EAAOsG,EAAW,QAAS,CAMzB,IAAK,UAAe,CAClB,OAAOA,EAAU,EAClB,EAQD,IAAK,SAAajJ,EAAO,CACnB+I,GAAiB,QAAQ/I,CAAK,EAAI,GACpCiJ,EAAU,GAAKjJ,EAEf0B,EAAK,wCAAwC,CAErD,CACA,CAAG,EAOD2C,EAAO,GAAG,CAAC,UAAW,QAAQ,EAAG,UAAY,CAC3C4E,EAAU,YAAa,CAC3B,CAAG,EAMD5E,EAAO,GAAG,SAAU,UAAY,CAC9B4E,EAAU,MAAO,CACrB,CAAG,EAOD5E,EAAO,GAAG,CAAC,eAAgB,QAAQ,EAAG,UAAY,CAChD4E,EAAU,SAAU,CACxB,CAAG,EACMA,CACT,CASA,SAASE,GAAKvF,EAAOQ,EAAY,CAC/B,MAAO,CAOL,OAAQ,SAAgB6C,EAAW,CACjC,OAAI7C,EAAW,UAAU,GAAG,KAAK,EACxB,CAAC6C,EAGHA,CACb,CACG,CACH,CASA,SAASmC,GAAKxF,EAAOQ,EAAY,CAC/B,MAAO,CAOL,OAAQ,SAAgB6C,EAAW,CACjC,IAAIoC,EAAa,KAAK,MAAMpC,EAAY7C,EAAW,MAAM,UAAU,EACnE,OAAO6C,EAAY7C,EAAW,KAAK,MAAQiF,CACjD,CACG,CACH,CASA,SAASC,GAAM1F,EAAOQ,EAAY,CAChC,MAAO,CAOL,OAAQ,SAAgB6C,EAAW,CACjC,OAAOA,EAAY7C,EAAW,OAAO,KAAO,CAClD,CACG,CACH,CAUA,SAASmF,GAAS3F,EAAOQ,EAAY,CACnC,MAAO,CAOL,OAAQ,SAAgB6C,EAAW,CACjC,GAAIrD,EAAM,SAAS,SAAW,EAAG,CAC/B,IAAI4F,EAAOpF,EAAW,KAAK,MAE3B,OAAIrC,EAASyH,CAAI,EACRvC,EAAYuC,EAAK,OAGnBvC,EAAYuC,CAC3B,CAEM,OAAOvC,CACb,CACG,CACH,CASA,SAASwC,GAAU7F,EAAOQ,EAAY,CACpC,MAAO,CAOL,OAAQ,SAAgB6C,EAAW,CACjC,IAAIyC,EAAMtF,EAAW,KAAK,MACtB+C,EAAQ/C,EAAW,MAAM,MACzBuF,EAAU/F,EAAM,SAAS,QACzBgG,EAAaxF,EAAW,MAAM,WAElC,OAAIuF,IAAY,SACP1C,GAAaE,EAAQ,EAAIyC,EAAa,GAGxC3C,EAAY2C,EAAaD,EAAUD,EAAMC,CACtD,CACG,CACH,CAUA,SAASE,GAASjG,EAAOQ,EAAYC,EAAQ,CAQ3C,IAAIyF,EAAe,CAACV,GAAKE,GAAMC,GAASE,EAAQ,EAAE,OAAO7F,EAAM,GAAI,CAACuF,EAAG,CAAC,EACxE,MAAO,CAOL,OAAQ,SAAgBlC,EAAW,CACjC,QAAShI,EAAI,EAAGA,EAAI6K,EAAa,OAAQ7K,IAAK,CAC5C,IAAI8K,EAAcD,EAAa7K,CAAC,EAE5BgD,EAAW8H,CAAW,GAAK9H,EAAW8H,EAAW,EAAG,MAAM,EAC5D9C,EAAY8C,EAAYnG,EAAOQ,EAAYC,CAAM,EAAE,OAAO4C,CAAS,EAEnEvF,EAAK,gFAAgF,CAE/F,CAEM,OAAOuF,CACb,CACG,CACH,CAEA,SAAS+C,GAAWpG,EAAOQ,EAAYC,EAAQ,CAC7C,IAAI2F,EAAY,CAOd,IAAK,SAAahK,EAAO,CACvB,IAAIiK,EAAYJ,GAAQjG,EAAOQ,CAAU,EAAE,OAAOpE,CAAK,EACnDkK,EAAc,eAAe,OAAO,GAAKD,EAAW,eAAe,EACvE7F,EAAW,KAAK,QAAQ,MAAM,aAAe8F,EAE7C9F,EAAW,KAAK,QAAQ,MAAM,gBAAkB8F,EAEhD9F,EAAW,KAAK,QAAQ,MAAM,UAAY8F,CAC3C,EAOD,OAAQ,UAAkB,CACxB9F,EAAW,KAAK,QAAQ,MAAM,UAAY,EAC3C,EAKD,cAAe,UAAyB,CACtC,IAAII,EAASJ,EAAW,MAAM,OAC1BZ,EAAQI,EAAM,MACduC,EAAUvC,EAAM,SAAS,QAE7B,OAAIQ,EAAW,IAAI,SAAS,GAAG,GAAKA,EAAW,IAAI,SAAS,IAAI,EACvDI,GAAUhB,EAAQ2C,IAInB3C,EAAQ2C,GAAW3B,CAC5B,EAKD,kBAAmB,UAA6B,CAC9C,IAAI2F,EAAiB/F,EAAW,MAAM,WAAaR,EAAM,SAAS,QAElE,OAAIQ,EAAW,IAAI,SAAS,GAAG,GAAKA,EAAW,IAAI,SAAS,IAAI,EAEvD+F,EAAiB,GAGnBA,CACb,CACG,EAOD,OAAA9F,EAAO,GAAG,OAAQ,SAAUZ,EAAS,CACnC,GAAI,CAACG,EAAM,OAAO,UAAU,GAAK,CAACQ,EAAW,IAAI,WAC/C,OAAO4F,EAAU,IAAIvG,EAAQ,QAAQ,EAGvCW,EAAW,WAAW,MAAM,UAAY,CACtCC,EAAO,KAAK,gBAAgB,EAC5B2F,EAAU,IAAI5F,EAAW,MAAM,WAAaR,EAAM,KAAK,CAC7D,CAAK,EACD,IAAIwG,EAAahG,EAAW,MAAM,WAAaA,EAAW,UAAU,cAAe,EACnF,OAAO4F,EAAU,IAAII,EAAahG,EAAW,UAAU,mBAAmB,CAC9E,CAAG,EAMDC,EAAO,GAAG,UAAW,UAAY,CAC/B2F,EAAU,OAAQ,CACtB,CAAG,EACMA,CACT,CAEA,SAASK,GAAYzG,EAAOQ,EAAYC,EAAQ,CAO9C,IAAIiG,EAAW,GACXD,EAAa,CAOf,QAAS,SAAiBjJ,EAAU,CAClC,IAAI8B,EAAWU,EAAM,SAErB,OAAI0G,EACK,GAAG,OAAOlJ,EAAU,OAAO,EAAE,OAAO8B,EAAS,mBAAmB,EAGlE,GAAG,OAAO9B,EAAU,GAAG,EAAE,OAAO,KAAK,SAAU,KAAK,EAAE,OAAO8B,EAAS,mBAAmB,CACjG,EAQD,IAAK,UAAe,CAClB,IAAI9B,EAAW,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,YACnFgD,EAAW,KAAK,QAAQ,MAAM,WAAa,KAAK,QAAQhD,CAAQ,CACjE,EAOD,OAAQ,UAAkB,CACxBgD,EAAW,KAAK,QAAQ,MAAM,WAAa,EAC5C,EAQD,MAAO,SAAemG,EAAU,CAC9B,WAAW,UAAY,CACrBA,EAAU,CAClB,EAAS,KAAK,QAAQ,CACjB,EAOD,OAAQ,UAAkB,CACxBD,EAAW,GACX,KAAK,IAAK,CACX,EAOD,QAAS,UAAmB,CAC1BA,EAAW,GACX,KAAK,IAAK,CAChB,CACG,EACD,OAAA3H,EAAO0H,EAAY,WAAY,CAO7B,IAAK,UAAe,CAClB,IAAInH,EAAWU,EAAM,SAErB,OAAIA,EAAM,OAAO,QAAQ,GAAKQ,EAAW,IAAI,OACpClB,EAAS,eAGXA,EAAS,iBACtB,CACA,CAAG,EAMDmB,EAAO,GAAG,OAAQ,UAAY,CAC5BgG,EAAW,IAAK,CACpB,CAAG,EAQDhG,EAAO,GAAG,CAAC,eAAgB,SAAU,gBAAgB,EAAG,UAAY,CAClEgG,EAAW,QAAS,CACxB,CAAG,EAMDhG,EAAO,GAAG,MAAO,UAAY,CAC3BgG,EAAW,OAAQ,CACvB,CAAG,EAMDhG,EAAO,GAAG,UAAW,UAAY,CAC/BgG,EAAW,OAAQ,CACvB,CAAG,EACMA,CACT,CAQA,IAAIG,GAAkB,GAEtB,GAAI,CACF,IAAIC,GAAO,OAAO,eAAe,CAAA,EAAI,UAAW,CAC9C,IAAK,UAAe,CAClBD,GAAkB,EACxB,CACA,CAAG,EACD,OAAO,iBAAiB,cAAe,KAAMC,EAAI,EACjD,OAAO,oBAAoB,cAAe,KAAMA,EAAI,CACtD,MAAY,CAAA,CAEZ,IAAIC,GAAoBF,GAEpBG,EAAe,CAAC,aAAc,WAAW,EACzCC,GAAc,CAAC,YAAa,WAAW,EACvCC,GAAa,CAAC,WAAY,cAAe,UAAW,YAAY,EAChEC,GAAe,CAAC,YAAa,YAAa,UAAW,YAAY,EACrE,SAASC,GAAOnH,EAAOQ,EAAYC,EAAQ,CAMzC,IAAIyE,EAAS,IAAIN,EACbwC,EAAW,EACXC,EAAc,EACdC,EAAc,EACdZ,EAAW,GACX1B,EAAU8B,GAAoB,CAChC,QAAS,EACb,EAAM,GACAK,EAAQ,CAMV,MAAO,UAAiB,CACtB,KAAK,eAAgB,CACtB,EAQD,MAAO,SAAezH,EAAO,CAC3B,GAAI,CAACgH,GAAY,CAAC1G,EAAM,SAAU,CAChC,KAAK,QAAS,EACd,IAAIuH,EAAQ,KAAK,QAAQ7H,CAAK,EAC9B0H,EAAW,KACXC,EAAcrJ,EAAMuJ,EAAM,KAAK,EAC/BD,EAActJ,EAAMuJ,EAAM,KAAK,EAC/B,KAAK,cAAe,EACpB,KAAK,aAAc,EACnB9G,EAAO,KAAK,aAAa,CACjC,CACK,EAOD,KAAM,SAAcf,EAAO,CACzB,GAAI,CAACM,EAAM,SAAU,CACnB,IAAI8D,EAAkB9D,EAAM,SACxBwH,EAAa1D,EAAgB,WAC7B2D,EAAa3D,EAAgB,WAC7BL,EAAUK,EAAgB,QAC1ByD,EAAQ,KAAK,QAAQ7H,CAAK,EAC1BgI,EAAU1J,EAAMuJ,EAAM,KAAK,EAAIF,EAC/BM,EAAU3J,EAAMuJ,EAAM,KAAK,EAAID,EAC/BM,EAAQ,KAAK,IAAIF,GAAW,CAAC,EAC7BG,EAAQ,KAAK,IAAIF,GAAW,CAAC,EAC7BG,EAAkB,KAAK,KAAKF,EAAQC,CAAK,EACzCE,EAAgB,KAAK,KAAKF,CAAK,EAGnC,GAFAT,EAAW,KAAK,KAAKW,EAAgBD,CAAe,EAEhDV,EAAW,IAAM,KAAK,GAAKI,EAC7B9H,EAAM,gBAAiB,EACvBc,EAAW,KAAK,KAAKkH,EAAUzJ,GAAQwJ,CAAU,CAAC,EAClDjH,EAAW,KAAK,KAAK,UAAU,IAAIiD,EAAQ,QAAQ,EACnDhD,EAAO,KAAK,YAAY,MAExB,OAAO,EAEjB,CACK,EAQD,IAAK,SAAaf,EAAO,CACvB,GAAI,CAACM,EAAM,SAAU,CACnB,IAAIgI,EAAmBhI,EAAM,SACzBiI,EAAWD,EAAiB,SAC5BR,EAAaQ,EAAiB,WAC9BvE,EAAUuE,EAAiB,QAC3BT,EAAQ,KAAK,QAAQ7H,CAAK,EAC1BwI,EAAY,KAAK,UAAUxI,CAAK,EAChCyI,EAAgBZ,EAAM,MAAQF,EAC9Be,EAAWhB,EAAW,IAAM,KAAK,GACrC,KAAK,OAAQ,EAETe,EAAgBD,GAAaE,EAAWZ,EAC1ChH,EAAW,IAAI,KAAKA,EAAW,UAAU,QAAQ,GAAG,OAAOyH,EAAU,GAAG,CAAC,CAAC,EACjEE,EAAgB,CAACD,GAAaE,EAAWZ,EAClDhH,EAAW,IAAI,KAAKA,EAAW,UAAU,QAAQ,GAAG,OAAOyH,EAAU,GAAG,CAAC,CAAC,EAG1EzH,EAAW,KAAK,KAAM,EAGxBA,EAAW,KAAK,KAAK,UAAU,OAAOiD,EAAQ,QAAQ,EACtD,KAAK,gBAAiB,EACtB,KAAK,eAAgB,EACrBhD,EAAO,KAAK,WAAW,CAC/B,CACK,EAOD,eAAgB,UAA0B,CACxC,IAAIE,EAAQ,KAER0H,EAAmBrI,EAAM,SACzBsI,EAAiBD,EAAiB,eAClCE,EAAgBF,EAAiB,cAEjCC,GACFpD,EAAO,GAAG6B,EAAa,CAAC,EAAGvG,EAAW,KAAK,QAAS,SAAUd,EAAO,CACnEiB,EAAM,MAAMjB,CAAK,CAClB,EAAEsF,CAAO,EAGRuD,GACFrD,EAAO,GAAG6B,EAAa,CAAC,EAAGvG,EAAW,KAAK,QAAS,SAAUd,EAAO,CACnEiB,EAAM,MAAMjB,CAAK,CAClB,EAAEsF,CAAO,CAEb,EAOD,iBAAkB,UAA4B,CAC5CE,EAAO,IAAI6B,EAAa,CAAC,EAAGvG,EAAW,KAAK,QAASwE,CAAO,EAC5DE,EAAO,IAAI6B,EAAa,CAAC,EAAGvG,EAAW,KAAK,QAASwE,CAAO,CAC7D,EAOD,cAAe,UAAyB,CACtC,IAAIwD,EAAS,KAEbtD,EAAO,GAAG8B,GAAaxG,EAAW,KAAK,QAASgB,GAAS,SAAU9B,EAAO,CACxE8I,EAAO,KAAK9I,CAAK,CAClB,EAAEM,EAAM,SAAS,QAAQ,EAAGgF,CAAO,CACrC,EAOD,gBAAiB,UAA2B,CAC1CE,EAAO,IAAI8B,GAAaxG,EAAW,KAAK,QAASwE,CAAO,CACzD,EAOD,aAAc,UAAwB,CACpC,IAAIyD,EAAS,KAEbvD,EAAO,GAAG+B,GAAYzG,EAAW,KAAK,QAAS,SAAUd,EAAO,CAC9D+I,EAAO,IAAI/I,CAAK,CACxB,CAAO,CACF,EAOD,eAAgB,UAA0B,CACxCwF,EAAO,IAAI+B,GAAYzG,EAAW,KAAK,OAAO,CAC/C,EAOD,QAAS,SAAiBd,EAAO,CAC/B,OAAIwH,GAAa,QAAQxH,EAAM,IAAI,EAAI,GAC9BA,EAGFA,EAAM,QAAQ,CAAC,GAAKA,EAAM,eAAe,CAAC,CAClD,EAOD,UAAW,SAAmBA,EAAO,CACnC,IAAIJ,EAAWU,EAAM,SAErB,OAAIkH,GAAa,QAAQxH,EAAM,IAAI,EAAI,GAC9BJ,EAAS,cAGXA,EAAS,cACjB,EAOD,OAAQ,UAAkB,CACxB,OAAAoH,EAAW,GACXlG,EAAW,WAAW,OAAQ,EACvB,IACR,EAOD,QAAS,UAAmB,CAC1B,OAAAkG,EAAW,GACXlG,EAAW,WAAW,QAAS,EACxB,IACb,CACG,EAMD,OAAAC,EAAO,GAAG,cAAe,UAAY,CACnCD,EAAW,KAAK,KAAK,UAAU,IAAIR,EAAM,SAAS,QAAQ,SAAS,CACvE,CAAG,EAMDS,EAAO,GAAG,UAAW,UAAY,CAC/B0G,EAAM,iBAAkB,EACxBA,EAAM,gBAAiB,EACvBA,EAAM,eAAgB,EACtBjC,EAAO,QAAS,CACpB,CAAG,EACMiC,CACT,CAEA,SAASuB,GAAQ1I,EAAOQ,EAAYC,EAAQ,CAM1C,IAAIyE,EAAS,IAAIN,EACb8D,EAAS,CAMX,MAAO,UAAiB,CACtB,KAAK,KAAM,CACZ,EAOD,KAAM,UAAgB,CACpBxD,EAAO,GAAG,YAAa1E,EAAW,KAAK,QAAS,KAAK,SAAS,CAC/D,EAOD,OAAQ,UAAkB,CACxB0E,EAAO,IAAI,YAAa1E,EAAW,KAAK,OAAO,CAChD,EAOD,UAAW,SAAmBd,EAAO,CACnCA,EAAM,eAAgB,CAC5B,CACG,EAMD,OAAAe,EAAO,GAAG,UAAW,UAAY,CAC/BiI,EAAO,OAAQ,EACfxD,EAAO,QAAS,CACpB,CAAG,EACMwD,CACT,CAEA,SAASC,GAAS3I,EAAOQ,EAAYC,EAAQ,CAM3C,IAAIyE,EAAS,IAAIN,EASbgE,EAAW,GASXC,EAAY,GACZF,EAAU,CAMZ,MAAO,UAAiB,CAOtB,KAAK,GAAKnI,EAAW,KAAK,QAAQ,iBAAiB,GAAG,EACtD,KAAK,KAAM,CACZ,EAOD,KAAM,UAAgB,CACpB0E,EAAO,GAAG,QAAS1E,EAAW,KAAK,QAAS,KAAK,KAAK,CACvD,EAOD,OAAQ,UAAkB,CACxB0E,EAAO,IAAI,QAAS1E,EAAW,KAAK,OAAO,CAC5C,EAQD,MAAO,SAAed,EAAO,CACvBmJ,IACFnJ,EAAM,gBAAiB,EACvBA,EAAM,eAAgB,EAEzB,EAOD,OAAQ,UAAkB,CAGxB,GAFAmJ,EAAY,GAER,CAACD,EAAU,CACb,QAASvN,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQA,IACrC,KAAK,MAAMA,CAAC,EAAE,UAAY,GAG5BuN,EAAW,EACnB,CAEM,OAAO,IACR,EAOD,OAAQ,UAAkB,CAGxB,GAFAC,EAAY,GAERD,EAAU,CACZ,QAASvN,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQA,IACrC,KAAK,MAAMA,CAAC,EAAE,UAAY,GAG5BuN,EAAW,EACnB,CAEM,OAAO,IACb,CACG,EACD,OAAA7J,EAAO4J,EAAS,QAAS,CAMvB,IAAK,UAAe,CAClB,OAAOA,EAAQ,EACrB,CACA,CAAG,EAMDlI,EAAO,GAAG,aAAc,UAAY,CAClCkI,EAAQ,OAAQ,CACpB,CAAG,EAMDlI,EAAO,GAAG,YAAa,UAAY,CACjCD,EAAW,WAAW,MAAM,UAAY,CACtCmI,EAAQ,OAAQ,CACtB,CAAK,CACL,CAAG,EAMDlI,EAAO,GAAG,UAAW,UAAY,CAC/BkI,EAAQ,OAAQ,EAChBA,EAAQ,OAAQ,EAChBzD,EAAO,QAAS,CACpB,CAAG,EACMyD,CACT,CAEA,IAAIG,GAAe,kCACfC,GAAoB,8BACpBC,GAA6B,GAAG,OAAOD,GAAmB,wBAA0B,EACpFE,GAAyB,GAAG,OAAOF,GAAmB,wBAA0B,EACpF,SAASG,GAAUlJ,EAAOQ,EAAYC,EAAQ,CAM5C,IAAIyE,EAAS,IAAIN,EACbI,EAAU8B,GAAoB,CAChC,QAAS,EACb,EAAM,GACAoC,EAAW,CAOb,MAAO,UAAiB,CAOtB,KAAK,GAAK1I,EAAW,KAAK,KAAK,iBAAiBsI,EAAY,EAQ5D,KAAK,GAAKtI,EAAW,KAAK,KAAK,iBAAiBuI,EAAiB,EAQjE,KAAK,eAAiB,CACpB,SAAUvI,EAAW,KAAK,KAAK,iBAAiBwI,EAA0B,EAC1E,KAAMxI,EAAW,KAAK,KAAK,iBAAiByI,EAAsB,CACnE,EACD,KAAK,YAAa,CACnB,EAOD,UAAW,UAAqB,CAC9B,QAAS5N,EAAI,EAAGA,EAAI,KAAK,GAAG,OAAQA,IAClC,KAAK,SAAS,KAAK,GAAGA,CAAC,EAAE,QAAQ,CAEpC,EAOD,aAAc,UAAwB,CACpC,QAASA,EAAI,EAAGA,EAAI,KAAK,GAAG,OAAQA,IAClC,KAAK,YAAY,KAAK,GAAGA,CAAC,EAAE,QAAQ,CAEvC,EAQD,SAAU,SAAkB8N,EAAU,CACpC,IAAI7J,EAAWU,EAAM,SACjBF,EAAOqJ,EAASnJ,EAAM,KAAK,EAE1BF,IAILA,EAAK,UAAU,IAAIR,EAAS,QAAQ,IAAI,MAAM,EAC9CkD,GAAS1C,CAAI,EAAE,QAAQ,SAAU4D,EAAS,CACxCA,EAAQ,UAAU,OAAOpE,EAAS,QAAQ,IAAI,MAAM,CAC5D,CAAO,EACF,EAQD,YAAa,SAAqB6J,EAAU,CAC1C,IAAIrJ,EAAOqJ,EAASnJ,EAAM,KAAK,EAC/BF,GAAS,MAAmCA,EAAK,UAAU,OAAOE,EAAM,SAAS,QAAQ,IAAI,MAAM,CACpG,EAKD,cAAe,UAAyB,CACtC,GAAI,CAAAA,EAAM,SAAS,OAInB,KAAIoJ,EAAOF,EAAS,eAAe,KAC/BrH,EAAWqH,EAAS,eAAe,SACvC,KAAK,gBAAgBE,EAAMvH,CAAQ,EAE/B7B,EAAM,QAAU,GAClB,KAAK,aAAa6B,CAAQ,EAGxB7B,EAAM,QAAUQ,EAAW,IAAI,QACjC,KAAK,aAAa4I,CAAI,EAEzB,EAOD,gBAAiB,UAA2B,CAG1C,QAFI9J,EAAWU,EAAM,SAEZqJ,EAAO,UAAU,OAAQC,EAAQ,IAAI,MAAMD,CAAI,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IAChFD,EAAMC,CAAI,EAAI,UAAUA,CAAI,EAG9BD,EAAM,QAAQ,SAAUE,EAAM,CAC5B5G,GAAQ4G,CAAI,EAAE,QAAQ,SAAUC,EAAS,CACvCA,EAAQ,UAAU,OAAOnK,EAAS,QAAQ,MAAM,QAAQ,CAClE,CAAS,CACT,CAAO,CACF,EAOD,aAAc,UAAwB,CAGpC,QAFIA,EAAWU,EAAM,SAEZ0J,EAAQ,UAAU,OAAQJ,EAAQ,IAAI,MAAMI,CAAK,EAAGC,EAAQ,EAAGA,EAAQD,EAAOC,IACrFL,EAAMK,CAAK,EAAI,UAAUA,CAAK,EAGhCL,EAAM,QAAQ,SAAUE,EAAM,CAC5B5G,GAAQ4G,CAAI,EAAE,QAAQ,SAAUC,EAAS,CACvCA,EAAQ,UAAU,IAAInK,EAAS,QAAQ,MAAM,QAAQ,CAC/D,CAAS,CACT,CAAO,CACF,EAOD,YAAa,UAAuB,CAClC,QAASjE,EAAI,EAAGA,EAAI,KAAK,GAAG,OAAQA,IAClC,KAAK,KAAK,KAAK,GAAGA,CAAC,EAAE,QAAQ,CAEhC,EAOD,eAAgB,UAA0B,CACxC,QAASA,EAAI,EAAGA,EAAI,KAAK,GAAG,OAAQA,IAClC,KAAK,OAAO,KAAK,GAAGA,CAAC,EAAE,QAAQ,CAElC,EAQD,KAAM,SAAcuO,EAAU,CAC5B,QAASvO,EAAI,EAAGA,EAAIuO,EAAS,OAAQvO,IACnC6J,EAAO,GAAG,QAAS0E,EAASvO,CAAC,EAAG,KAAK,KAAK,EAC1C6J,EAAO,GAAG,aAAc0E,EAASvO,CAAC,EAAG,KAAK,MAAO2J,CAAO,CAE3D,EAQD,OAAQ,SAAgB4E,EAAU,CAChC,QAASvO,EAAI,EAAGA,EAAIuO,EAAS,OAAQvO,IACnC6J,EAAO,IAAI,CAAC,QAAS,YAAY,EAAG0E,EAASvO,CAAC,CAAC,CAElD,EAUD,MAAO,SAAeqE,EAAO,CACvB,CAACoH,IAAqBpH,EAAM,OAAS,cACvCA,EAAM,eAAgB,EAGxB,IAAIoB,EAAYpB,EAAM,cAAc,aAAa,gBAAgB,EACjEc,EAAW,IAAI,KAAKA,EAAW,UAAU,QAAQM,CAAS,CAAC,CACjE,CACG,EACD,OAAA/B,EAAOmK,EAAU,QAAS,CAMxB,IAAK,UAAe,CAClB,OAAOA,EAAS,EACtB,CACA,CAAG,EAODzI,EAAO,GAAG,CAAC,cAAe,YAAY,EAAG,UAAY,CACnDyI,EAAS,UAAW,CACxB,CAAG,EAKDzI,EAAO,GAAG,CAAC,cAAe,KAAK,EAAG,UAAY,CAC5CyI,EAAS,cAAe,CAC5B,CAAG,EAMDzI,EAAO,GAAG,UAAW,UAAY,CAC/ByI,EAAS,eAAgB,EACzBA,EAAS,aAAc,EACvBhE,EAAO,QAAS,CACpB,CAAG,EACMgE,CACT,CAEA,SAASW,GAAU7J,EAAOQ,EAAYC,EAAQ,CAM5C,IAAIyE,EAAS,IAAIN,EACbiF,EAAW,CAMb,MAAO,UAAiB,CAClB7J,EAAM,SAAS,UACjB,KAAK,KAAM,CAEd,EAOD,KAAM,UAAgB,CACpBkF,EAAO,GAAG,QAAS,SAAU,KAAK,KAAK,CACxC,EAOD,OAAQ,UAAkB,CACxBA,EAAO,IAAI,QAAS,QAAQ,CAC7B,EAQD,MAAO,SAAexF,EAAO,CAC3B,IAAIuI,EAAWjI,EAAM,SAAS,SAC1B8J,EAAe,CACjB,WAAY,IACZ,UAAW,GACZ,EAEG,CAAC,aAAc,WAAW,EAAE,SAASpK,EAAM,IAAI,GACjDc,EAAW,IAAI,KAAKA,EAAW,UAAU,QAAQ,GAAG,OAAOyH,CAAQ,EAAE,OAAO6B,EAAapK,EAAM,IAAI,CAAC,CAAC,CAAC,CAE9G,CACG,EAOD,OAAAe,EAAO,GAAG,CAAC,UAAW,QAAQ,EAAG,UAAY,CAC3CoJ,EAAS,OAAQ,CACrB,CAAG,EAMDpJ,EAAO,GAAG,SAAU,UAAY,CAC9BoJ,EAAS,MAAO,CACpB,CAAG,EAMDpJ,EAAO,GAAG,UAAW,UAAY,CAC/ByE,EAAO,QAAS,CACpB,CAAG,EACM2E,CACT,CAEA,SAASE,GAAU/J,EAAOQ,EAAYC,EAAQ,CAM5C,IAAIyE,EAAS,IAAIN,EACbmF,EAAW,CAMb,MAAO,UAAiB,CACtB,KAAK,OAAQ,EACb,KAAK,MAAO,EAER/J,EAAM,SAAS,YACjB,KAAK,KAAM,CAEd,EAOD,OAAQ,UAAkB,CACxB,KAAK,GAAK,EACX,EAOD,QAAS,UAAmB,CAC1B,KAAK,GAAK,EACX,EAQD,MAAO,UAAiB,CACtB,IAAIW,EAAQ,KAEP,KAAK,KAIV,KAAK,OAAQ,EAETX,EAAM,SAAS,UACb1B,GAAY,KAAK,EAAE,IACrB,KAAK,GAAK,YAAY,UAAY,CAChCqC,EAAM,KAAM,EAEZH,EAAW,IAAI,KAAK,GAAG,EAEvBG,EAAM,MAAO,EAEbF,EAAO,KAAK,UAAU,CAClC,EAAa,KAAK,IAAI,GAGjB,EAOD,KAAM,UAAgB,CACpB,KAAK,GAAK,cAAc,KAAK,EAAE,CAChC,EAOD,KAAM,UAAgB,CACpB,IAAI+H,EAAS,KAEbtD,EAAO,GAAG,YAAa1E,EAAW,KAAK,KAAM,UAAY,CACnDgI,EAAO,IACTA,EAAO,KAAM,CAEvB,CAAO,EACDtD,EAAO,GAAG,WAAY1E,EAAW,KAAK,KAAM,UAAY,CAClDgI,EAAO,IACTA,EAAO,MAAO,CAExB,CAAO,CACF,EAOD,OAAQ,UAAkB,CACxBtD,EAAO,IAAI,CAAC,YAAa,UAAU,EAAG1E,EAAW,KAAK,IAAI,CAChE,CACG,EACD,OAAAzB,EAAOgL,EAAU,OAAQ,CAOvB,IAAK,UAAe,CAClB,IAAIC,EAAWxJ,EAAW,KAAK,OAAOR,EAAM,KAAK,EAAE,aAAa,qBAAqB,EAErF,OACShC,EADLgM,GAIShK,EAAM,SAAS,QAHL,CAI7B,CACA,CAAG,EAODS,EAAO,GAAG,CAAC,UAAW,QAAQ,EAAG,UAAY,CAC3CsJ,EAAS,OAAQ,CACrB,CAAG,EAUDtJ,EAAO,GAAG,CAAC,aAAc,cAAe,QAAQ,EAAG,UAAY,CAC7DsJ,EAAS,KAAM,CACnB,CAAG,EACDtJ,EAAO,GAAG,CAAC,QAAS,SAAS,EAAG,UAAY,CAC1CsJ,EAAS,QAAS,EAClBA,EAAS,KAAM,CACnB,CAAG,EAQDtJ,EAAO,GAAG,CAAC,YAAa,WAAW,EAAG,UAAY,CAChDsJ,EAAS,MAAO,CACpB,CAAG,EAQDtJ,EAAO,GAAG,CAAC,MAAM,EAAG,UAAY,CAC9BsJ,EAAS,OAAQ,EACjBA,EAAS,MAAO,CACpB,CAAG,EAMDtJ,EAAO,GAAG,SAAU,UAAY,CAC9BsJ,EAAS,MAAO,CACpB,CAAG,EAMDtJ,EAAO,GAAG,UAAW,UAAY,CAC/ByE,EAAO,QAAS,CACpB,CAAG,EACM6E,CACT,CASA,SAASE,GAAgBC,EAAQ,CAC/B,OAAI/L,EAAS+L,CAAM,EACVhL,GAASgL,CAAM,GAEtBpM,EAAK,sCAAsC,EAGtC,CAAE,EACX,CAEA,SAASqM,GAAanK,EAAOQ,EAAYC,EAAQ,CAM/C,IAAIyE,EAAS,IAAIN,EAObtF,EAAWU,EAAM,SASjBkK,EAASD,GAAgB3K,EAAS,WAAW,EAO7CzB,EAAW,OAAO,OAAO,CAAA,EAAIyB,CAAQ,EACrC6K,EAAc,CAOhB,MAAO,SAAeD,EAAQ,CAC5B,GAAI,OAAO,OAAO,WAAe,KAC/B,QAASE,KAASF,EAChB,GAAIA,EAAO,eAAeE,CAAK,GACzB,OAAO,WAAW,eAAe,OAAOA,EAAO,KAAK,CAAC,EAAE,QACzD,OAAOF,EAAOE,CAAK,EAM3B,OAAOvM,CACb,CACG,EAMD,cAAO,OAAOyB,EAAU6K,EAAY,MAAMD,CAAM,CAAC,EAMjDhF,EAAO,GAAG,SAAU,OAAQ1D,GAAS,UAAY,CAC/CxB,EAAM,SAAWX,GAAaC,EAAU6K,EAAY,MAAMD,CAAM,CAAC,CACrE,EAAKlK,EAAM,SAAS,QAAQ,CAAC,EAM3BS,EAAO,GAAG,SAAU,UAAY,CAC9ByJ,EAASD,GAAgBC,CAAM,EAC/BrM,EAAW,OAAO,OAAO,CAAA,EAAIyB,CAAQ,CACzC,CAAG,EAMDmB,EAAO,GAAG,UAAW,UAAY,CAC/ByE,EAAO,IAAI,SAAU,MAAM,CAC/B,CAAG,EACMiF,CACT,CAEA,IAAIE,GAAa,CAEf,KAAMtH,GACN,UAAWqD,GACX,WAAYK,GACZ,UAAWpB,GACX,KAAMnC,GACN,MAAOI,GACP,KAAMnB,GACN,KAAMgB,GACN,OAAQS,GACR,OAAQqB,GACR,MAAOzB,GACP,IAAKjD,GAEL,MAAO4G,GACP,OAAQuB,GACR,QAASC,GACT,SAAUO,GACV,SAAUW,GACV,SAAUE,GACV,YAAaI,EACf,EAEInK,GAAqB,SAAUsK,EAAO,CACxCjO,GAAU2D,EAAOsK,CAAK,EAEtB,IAAIC,EAAStN,GAAa+C,CAAK,EAE/B,SAASA,GAAQ,CACf,OAAArE,EAAgB,KAAMqE,CAAK,EAEpBuK,EAAO,MAAM,KAAM,SAAS,CACvC,CAEE,OAAAtO,GAAa+D,EAAO,CAAC,CACnB,IAAK,QACL,MAAO,UAAiB,CACtB,IAAItB,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAE,EACvF,OAAOjB,EAAKhB,EAAgBuD,EAAM,SAAS,EAAG,QAAS,IAAI,EAAE,KAAK,KAAM,OAAO,OAAO,CAAA,EAAIqK,GAAY3L,CAAU,CAAC,CACvH,CACA,CAAG,CAAC,EAEKsB,CACT,EAAED,EAAO,EChzHF,MAAMyK,GAAiC,IAAI,YAElC,2keACX,MAAM,EAAE,EACR,IAAKC,GAAMA,EAAE,WAAW,CAAC,CAAC,CAAC,ECJnBC,GAAgC,IAAI,YAEjC,wCACX,MAAM,EAAE,EACR,IAAKD,GAAMA,EAAE,WAAW,CAAC,CAAC,CAAC,ECJhC,IAAIE,GACJ,MAAMC,GAAY,IAAI,IAAI,CACtB,CAAC,EAAG,KAAK,EAET,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,CACb,CAAC,EAIYC,IAEZF,GAAK,OAAO,iBAAmB,MAAQA,KAAO,OAASA,GAAK,SAAUG,EAAW,CAC9E,IAAIC,EAAS,GACb,OAAID,EAAY,QACZA,GAAa,MACbC,GAAU,OAAO,aAAeD,IAAc,GAAM,KAAQ,KAAK,EACjEA,EAAY,MAASA,EAAY,MAErCC,GAAU,OAAO,aAAaD,CAAS,EAChCC,CACX,EAMO,SAASC,GAAiBF,EAAW,CACxC,IAAIH,EACJ,OAAKG,GAAa,OAASA,GAAa,OACpCA,EAAY,QACL,OAEHH,EAAKC,GAAU,IAAIE,CAAS,KAAO,MAAQH,IAAO,OAASA,EAAKG,CAC5E,CCzDA,IAAIG,GACH,SAAUA,EAAW,CAClBA,EAAUA,EAAU,IAAS,EAAE,EAAI,MACnCA,EAAUA,EAAU,KAAU,EAAE,EAAI,OACpCA,EAAUA,EAAU,OAAY,EAAE,EAAI,SACtCA,EAAUA,EAAU,KAAU,EAAE,EAAI,OACpCA,EAAUA,EAAU,KAAU,EAAE,EAAI,OACpCA,EAAUA,EAAU,QAAa,EAAE,EAAI,UACvCA,EAAUA,EAAU,QAAa,GAAG,EAAI,UACxCA,EAAUA,EAAU,QAAa,GAAG,EAAI,UACxCA,EAAUA,EAAU,QAAa,GAAG,EAAI,UACxCA,EAAUA,EAAU,QAAa,EAAE,EAAI,UACvCA,EAAUA,EAAU,QAAa,EAAE,EAAI,UACvCA,EAAUA,EAAU,QAAa,EAAE,EAAI,SAC3C,GAAGA,IAAcA,EAAY,CAAA,EAAG,EAEhC,MAAMC,GAAe,GACd,IAAIC,GACV,SAAUA,EAAc,CACrBA,EAAaA,EAAa,aAAkB,KAAK,EAAI,eACrDA,EAAaA,EAAa,cAAmB,KAAK,EAAI,gBACtDA,EAAaA,EAAa,WAAgB,GAAG,EAAI,YACrD,GAAGA,IAAiBA,EAAe,CAAA,EAAG,EACtC,SAASC,GAASC,EAAM,CACpB,OAAOA,GAAQJ,EAAU,MAAQI,GAAQJ,EAAU,IACvD,CACA,SAASK,GAAuBD,EAAM,CAClC,OAASA,GAAQJ,EAAU,SAAWI,GAAQJ,EAAU,SACnDI,GAAQJ,EAAU,SAAWI,GAAQJ,EAAU,OACxD,CACA,SAASM,GAAoBF,EAAM,CAC/B,OAASA,GAAQJ,EAAU,SAAWI,GAAQJ,EAAU,SACnDI,GAAQJ,EAAU,SAAWI,GAAQJ,EAAU,SAChDG,GAASC,CAAI,CACrB,CAOA,SAASG,GAA8BH,EAAM,CACzC,OAAOA,IAASJ,EAAU,QAAUM,GAAoBF,CAAI,CAChE,CACA,IAAII,GACH,SAAUA,EAAoB,CAC3BA,EAAmBA,EAAmB,YAAiB,CAAC,EAAI,cAC5DA,EAAmBA,EAAmB,aAAkB,CAAC,EAAI,eAC7DA,EAAmBA,EAAmB,eAAoB,CAAC,EAAI,iBAC/DA,EAAmBA,EAAmB,WAAgB,CAAC,EAAI,aAC3DA,EAAmBA,EAAmB,YAAiB,CAAC,EAAI,aAChE,GAAGA,IAAuBA,EAAqB,CAAA,EAAG,EAC3C,IAAIC,GACV,SAAUA,EAAc,CAErBA,EAAaA,EAAa,OAAY,CAAC,EAAI,SAE3CA,EAAaA,EAAa,OAAY,CAAC,EAAI,SAE3CA,EAAaA,EAAa,UAAe,CAAC,EAAI,WAClD,GAAGA,IAAiBA,EAAe,CAAA,EAAG,EAI/B,MAAMC,EAAc,CACvB,YAEAC,EAUAC,EAEAC,EAAQ,CACJ,KAAK,WAAaF,EAClB,KAAK,cAAgBC,EACrB,KAAK,OAASC,EAEd,KAAK,MAAQL,EAAmB,YAEhC,KAAK,SAAW,EAOhB,KAAK,OAAS,EAEd,KAAK,UAAY,EAEjB,KAAK,OAAS,EAEd,KAAK,WAAaC,EAAa,MACvC,CAEI,YAAYK,EAAY,CACpB,KAAK,WAAaA,EAClB,KAAK,MAAQN,EAAmB,YAChC,KAAK,OAAS,EACd,KAAK,UAAY,EACjB,KAAK,OAAS,EACd,KAAK,SAAW,CACxB,CAYI,MAAMO,EAAO5I,EAAQ,CACjB,OAAQ,KAAK,MAAK,CACd,KAAKqI,EAAmB,YACpB,OAAIO,EAAM,WAAW5I,CAAM,IAAM6H,EAAU,KACvC,KAAK,MAAQQ,EAAmB,aAChC,KAAK,UAAY,EACV,KAAK,kBAAkBO,EAAO5I,EAAS,CAAC,IAEnD,KAAK,MAAQqI,EAAmB,YACzB,KAAK,iBAAiBO,EAAO5I,CAAM,GAE9C,KAAKqI,EAAmB,aACpB,OAAO,KAAK,kBAAkBO,EAAO5I,CAAM,EAE/C,KAAKqI,EAAmB,eACpB,OAAO,KAAK,oBAAoBO,EAAO5I,CAAM,EAEjD,KAAKqI,EAAmB,WACpB,OAAO,KAAK,gBAAgBO,EAAO5I,CAAM,EAE7C,KAAKqI,EAAmB,YACpB,OAAO,KAAK,iBAAiBO,EAAO5I,CAAM,CAE1D,CACA,CAUI,kBAAkB4I,EAAO5I,EAAQ,CAC7B,OAAIA,GAAU4I,EAAM,OACT,IAENA,EAAM,WAAW5I,CAAM,EAAI8H,MAAkBD,EAAU,SACxD,KAAK,MAAQQ,EAAmB,WAChC,KAAK,UAAY,EACV,KAAK,gBAAgBO,EAAO5I,EAAS,CAAC,IAEjD,KAAK,MAAQqI,EAAmB,eACzB,KAAK,oBAAoBO,EAAO5I,CAAM,EACrD,CACI,mBAAmB4I,EAAOC,EAAOC,EAAKvO,EAAM,CACxC,GAAIsO,IAAUC,EAAK,CACf,MAAMC,EAAaD,EAAMD,EACzB,KAAK,OACD,KAAK,OAAS,KAAK,IAAItO,EAAMwO,CAAU,EACnC,OAAO,SAASH,EAAM,OAAOC,EAAOE,CAAU,EAAGxO,CAAI,EAC7D,KAAK,UAAYwO,CAC7B,CACA,CAUI,gBAAgBH,EAAO5I,EAAQ,CAC3B,MAAMgJ,EAAahJ,EACnB,KAAOA,EAAS4I,EAAM,QAAQ,CAC1B,MAAMK,EAAOL,EAAM,WAAW5I,CAAM,EACpC,GAAIgI,GAASiB,CAAI,GAAKf,GAAuBe,CAAI,EAC7CjJ,GAAU,MAGV,aAAK,mBAAmB4I,EAAOI,EAAYhJ,EAAQ,EAAE,EAC9C,KAAK,kBAAkBiJ,EAAM,CAAC,CAErD,CACQ,YAAK,mBAAmBL,EAAOI,EAAYhJ,EAAQ,EAAE,EAC9C,EACf,CAUI,oBAAoB4I,EAAO5I,EAAQ,CAC/B,MAAMgJ,EAAahJ,EACnB,KAAOA,EAAS4I,EAAM,QAAQ,CAC1B,MAAMK,EAAOL,EAAM,WAAW5I,CAAM,EACpC,GAAIgI,GAASiB,CAAI,EACbjJ,GAAU,MAGV,aAAK,mBAAmB4I,EAAOI,EAAYhJ,EAAQ,EAAE,EAC9C,KAAK,kBAAkBiJ,EAAM,CAAC,CAErD,CACQ,YAAK,mBAAmBL,EAAOI,EAAYhJ,EAAQ,EAAE,EAC9C,EACf,CAcI,kBAAkBkJ,EAAQC,EAAgB,CACtC,IAAI5B,EAEJ,GAAI,KAAK,UAAY4B,EACjB,OAAC5B,EAAK,KAAK,UAAY,MAAQA,IAAO,QAAkBA,EAAG,2CAA2C,KAAK,QAAQ,EAC5G,EAGX,GAAI2B,IAAWrB,EAAU,KACrB,KAAK,UAAY,UAEZ,KAAK,aAAeS,EAAa,OACtC,MAAO,GAEX,YAAK,cAAcV,GAAiB,KAAK,MAAM,EAAG,KAAK,QAAQ,EAC3D,KAAK,SACDsB,IAAWrB,EAAU,MACrB,KAAK,OAAO,wCAAyC,EAEzD,KAAK,OAAO,kCAAkC,KAAK,MAAM,GAEtD,KAAK,QACpB,CAUI,iBAAiBe,EAAO5I,EAAQ,CAC5B,KAAM,CAAE,WAAAwI,CAAU,EAAK,KACvB,IAAIY,EAAUZ,EAAW,KAAK,SAAS,EAEnCa,GAAeD,EAAUrB,EAAa,eAAiB,GAC3D,KAAO/H,EAAS4I,EAAM,OAAQ5I,IAAU,KAAK,SAAU,CACnD,MAAMiJ,EAAOL,EAAM,WAAW5I,CAAM,EAEpC,GADA,KAAK,UAAYsJ,GAAgBd,EAAYY,EAAS,KAAK,UAAY,KAAK,IAAI,EAAGC,CAAW,EAAGJ,CAAI,EACjG,KAAK,UAAY,EACjB,OAAO,KAAK,SAAW,GAElB,KAAK,aAAeX,EAAa,YAE7Be,IAAgB,GAEbjB,GAA8Ba,CAAI,GACxC,EACA,KAAK,6BAA8B,EAK7C,GAHAG,EAAUZ,EAAW,KAAK,SAAS,EACnCa,GAAeD,EAAUrB,EAAa,eAAiB,GAEnDsB,IAAgB,EAAG,CAEnB,GAAIJ,IAASpB,EAAU,KACnB,OAAO,KAAK,oBAAoB,KAAK,UAAWwB,EAAa,KAAK,SAAW,KAAK,MAAM,EAGxF,KAAK,aAAef,EAAa,SACjC,KAAK,OAAS,KAAK,UACnB,KAAK,UAAY,KAAK,OACtB,KAAK,OAAS,EAElC,CACA,CACQ,MAAO,EACf,CAMI,8BAA+B,CAC3B,IAAIf,EACJ,KAAM,CAAE,OAAAtN,EAAQ,WAAAuO,CAAU,EAAK,KACzBa,GAAeb,EAAWvO,CAAM,EAAI8N,EAAa,eAAiB,GACxE,YAAK,oBAAoB9N,EAAQoP,EAAa,KAAK,QAAQ,GAC1D9B,EAAK,KAAK,UAAY,MAAQA,IAAO,QAAkBA,EAAG,wCAAyC,EAC7F,KAAK,QACpB,CAUI,oBAAoBtN,EAAQoP,EAAaE,EAAU,CAC/C,KAAM,CAAE,WAAAf,CAAU,EAAK,KACvB,YAAK,cAAca,IAAgB,EAC7Bb,EAAWvO,CAAM,EAAI,CAAC8N,EAAa,aACnCS,EAAWvO,EAAS,CAAC,EAAGsP,CAAQ,EAClCF,IAAgB,GAEhB,KAAK,cAAcb,EAAWvO,EAAS,CAAC,EAAGsP,CAAQ,EAEhDA,CACf,CAQI,KAAM,CACF,IAAIhC,EACJ,OAAQ,KAAK,MAAK,CACd,KAAKc,EAAmB,YAEpB,OAAO,KAAK,SAAW,IAClB,KAAK,aAAeC,EAAa,WAC9B,KAAK,SAAW,KAAK,WACvB,KAAK,6BAA4B,EACjC,EAGV,KAAKD,EAAmB,eACpB,OAAO,KAAK,kBAAkB,EAAG,CAAC,EAEtC,KAAKA,EAAmB,WACpB,OAAO,KAAK,kBAAkB,EAAG,CAAC,EAEtC,KAAKA,EAAmB,aACpB,OAACd,EAAK,KAAK,UAAY,MAAQA,IAAO,QAAkBA,EAAG,2CAA2C,KAAK,QAAQ,EAC5G,EAEX,KAAKc,EAAmB,YAEpB,MAAO,EAEvB,CACA,CACA,CA2CO,SAASiB,GAAgBd,EAAYY,EAASI,EAAWP,EAAM,CAClE,MAAMQ,GAAeL,EAAUrB,EAAa,gBAAkB,EACxD2B,EAAaN,EAAUrB,EAAa,WAE1C,GAAI0B,IAAgB,EAChB,OAAOC,IAAe,GAAKT,IAASS,EAAaF,EAAY,GAGjE,GAAIE,EAAY,CACZ,MAAM1Q,EAAQiQ,EAAOS,EACrB,OAAO1Q,EAAQ,GAAKA,GAASyQ,EACvB,GACAjB,EAAWgB,EAAYxQ,CAAK,EAAI,CAC9C,CAGI,IAAI2Q,EAAKH,EACLI,EAAKD,EAAKF,EAAc,EAC5B,KAAOE,GAAMC,GAAI,CACb,MAAMC,EAAOF,EAAKC,IAAQ,EACpBE,EAAWtB,EAAWqB,CAAG,EAC/B,GAAIC,EAAWb,EACXU,EAAKE,EAAM,UAENC,EAAWb,EAChBW,EAAKC,EAAM,MAGX,QAAOrB,EAAWqB,EAAMJ,CAAW,CAE/C,CACI,MAAO,EACX,CCncA,IAAI5B,GACH,SAAUA,EAAW,CAClBA,EAAUA,EAAU,IAAS,CAAC,EAAI,MAClCA,EAAUA,EAAU,QAAa,EAAE,EAAI,UACvCA,EAAUA,EAAU,SAAc,EAAE,EAAI,WACxCA,EAAUA,EAAU,eAAoB,EAAE,EAAI,iBAC9CA,EAAUA,EAAU,MAAW,EAAE,EAAI,QACrCA,EAAUA,EAAU,gBAAqB,EAAE,EAAI,kBAC/CA,EAAUA,EAAU,OAAY,EAAE,EAAI,SACtCA,EAAUA,EAAU,IAAS,EAAE,EAAI,MACnCA,EAAUA,EAAU,YAAiB,EAAE,EAAI,cAC3CA,EAAUA,EAAU,YAAiB,EAAE,EAAI,cAC3CA,EAAUA,EAAU,KAAU,EAAE,EAAI,OACpCA,EAAUA,EAAU,MAAW,EAAE,EAAI,QACrCA,EAAUA,EAAU,KAAU,EAAE,EAAI,OACpCA,EAAUA,EAAU,KAAU,EAAE,EAAI,OACpCA,EAAUA,EAAU,KAAU,EAAE,EAAI,OACpCA,EAAUA,EAAU,GAAQ,EAAE,EAAI,KAClCA,EAAUA,EAAU,GAAQ,EAAE,EAAI,KAClCA,EAAUA,EAAU,GAAQ,EAAE,EAAI,KAClCA,EAAUA,EAAU,aAAkB,EAAE,EAAI,eAC5CA,EAAUA,EAAU,OAAY,EAAE,EAAI,SACtCA,EAAUA,EAAU,OAAY,EAAE,EAAI,SACtCA,EAAUA,EAAU,OAAY,EAAE,EAAI,SACtCA,EAAUA,EAAU,OAAY,GAAG,EAAI,SACvCA,EAAUA,EAAU,OAAY,EAAE,EAAI,SACtCA,EAAUA,EAAU,OAAY,GAAG,EAAI,SACvCA,EAAUA,EAAU,OAAY,GAAG,EAAI,SACvCA,EAAUA,EAAU,qBAA0B,EAAE,EAAI,sBACxD,GAAGA,IAAcA,EAAY,CAAA,EAAG,EAEhC,IAAIkC,GACH,SAAUA,EAAO,CACdA,EAAMA,EAAM,KAAU,CAAC,EAAI,OAC3BA,EAAMA,EAAM,cAAmB,CAAC,EAAI,gBACpCA,EAAMA,EAAM,UAAe,CAAC,EAAI,YAChCA,EAAMA,EAAM,iBAAsB,CAAC,EAAI,mBACvCA,EAAMA,EAAM,qBAA0B,CAAC,EAAI,uBAC3CA,EAAMA,EAAM,iBAAsB,CAAC,EAAI,mBACvCA,EAAMA,EAAM,oBAAyB,CAAC,EAAI,sBAE1CA,EAAMA,EAAM,oBAAyB,CAAC,EAAI,sBAC1CA,EAAMA,EAAM,gBAAqB,CAAC,EAAI,kBACtCA,EAAMA,EAAM,mBAAwB,EAAE,EAAI,qBAC1CA,EAAMA,EAAM,qBAA0B,EAAE,EAAI,uBAC5CA,EAAMA,EAAM,mBAAwB,EAAE,EAAI,qBAC1CA,EAAMA,EAAM,mBAAwB,EAAE,EAAI,qBAC1CA,EAAMA,EAAM,mBAAwB,EAAE,EAAI,qBAE1CA,EAAMA,EAAM,kBAAuB,EAAE,EAAI,oBACzCA,EAAMA,EAAM,cAAmB,EAAE,EAAI,gBAErCA,EAAMA,EAAM,wBAA6B,EAAE,EAAI,0BAE/CA,EAAMA,EAAM,cAAmB,EAAE,EAAI,gBACrCA,EAAMA,EAAM,cAAmB,EAAE,EAAI,gBACrCA,EAAMA,EAAM,iBAAsB,EAAE,EAAI,mBACxCA,EAAMA,EAAM,cAAmB,EAAE,EAAI,gBAErCA,EAAMA,EAAM,eAAoB,EAAE,EAAI,iBACtCA,EAAMA,EAAM,eAAoB,EAAE,EAAI,iBACtCA,EAAMA,EAAM,qBAA0B,EAAE,EAAI,uBAC5CA,EAAMA,EAAM,aAAkB,EAAE,EAAI,eACpCA,EAAMA,EAAM,SAAc,EAAE,EAAI,UACpC,GAAGA,IAAUA,EAAQ,CAAA,EAAG,EACxB,SAASC,EAAa3C,EAAG,CACrB,OAAQA,IAAMQ,EAAU,OACpBR,IAAMQ,EAAU,SAChBR,IAAMQ,EAAU,KAChBR,IAAMQ,EAAU,UAChBR,IAAMQ,EAAU,cACxB,CACA,SAASoC,EAAkB5C,EAAG,CAC1B,OAAOA,IAAMQ,EAAU,OAASR,IAAMQ,EAAU,IAAMmC,EAAa3C,CAAC,CACxE,CACA,SAAS6C,GAAa7C,EAAG,CACrB,OAASA,GAAKQ,EAAU,QAAUR,GAAKQ,EAAU,QAC5CR,GAAKQ,EAAU,QAAUR,GAAKQ,EAAU,MACjD,CACO,IAAIsC,GACV,SAAUA,EAAW,CAClBA,EAAUA,EAAU,QAAa,CAAC,EAAI,UACtCA,EAAUA,EAAU,SAAc,CAAC,EAAI,WACvCA,EAAUA,EAAU,OAAY,CAAC,EAAI,SACrCA,EAAUA,EAAU,OAAY,CAAC,EAAI,QACzC,GAAGA,IAAcA,EAAY,CAAA,EAAG,EAOhC,MAAMC,EAAY,CACd,MAAO,IAAI,WAAW,CAAC,GAAM,GAAM,GAAM,GAAM,GAAM,EAAI,CAAC,EAC1D,SAAU,IAAI,WAAW,CAAC,GAAM,GAAM,EAAI,CAAC,EAC3C,WAAY,IAAI,WAAW,CAAC,GAAM,GAAM,EAAI,CAAC,EAC7C,UAAW,IAAI,WAAW,CAAC,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAI,CAAC,EAC1E,SAAU,IAAI,WAAW,CAAC,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAI,CAAC,EACnE,SAAU,IAAI,WAAW,CAAC,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAI,CAAC,EACnE,YAAa,IAAI,WAAW,CACxB,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,EAC9D,CAAK,EACD,OAAQ,IAAI,WAAW,CAAC,GAAM,GAAM,IAAM,IAAM,GAAI,CAAC,CACzD,EACe,MAAMC,EAAU,CAC3B,YAAY,CAAE,QAAAC,EAAU,GAAO,eAAAC,EAAiB,EAAO,EAAEC,EAAK,CAC1D,KAAK,IAAMA,EAEX,KAAK,MAAQT,EAAM,KAEnB,KAAK,OAAS,GAEd,KAAK,aAAe,EAEpB,KAAK,MAAQ,EAEb,KAAK,YAAc,EAEnB,KAAK,UAAYA,EAAM,KAEvB,KAAK,UAAY,GAEjB,KAAK,QAAU,GAEf,KAAK,OAAS,EACd,KAAK,gBAAkB,OACvB,KAAK,cAAgB,EACrB,KAAK,QAAUO,EACf,KAAK,eAAiBC,EACtB,KAAK,cAAgB,IAAIhC,GAAc+B,EAAUhD,GAAgBF,GAAgB,CAACqD,EAAIlB,IAAa,KAAK,cAAckB,EAAIlB,CAAQ,CAAC,CAC3I,CACI,OAAQ,CACJ,KAAK,MAAQQ,EAAM,KACnB,KAAK,OAAS,GACd,KAAK,aAAe,EACpB,KAAK,MAAQ,EACb,KAAK,UAAYA,EAAM,KACvB,KAAK,gBAAkB,OACvB,KAAK,QAAU,GACf,KAAK,OAAS,CACtB,CACI,MAAMW,EAAO,CACT,KAAK,QAAU,KAAK,OAAO,OAC3B,KAAK,OAASA,EACd,KAAK,MAAO,CACpB,CACI,KAAM,CACE,KAAK,SACL,KAAK,OAAQ,CACzB,CACI,OAAQ,CACJ,KAAK,QAAU,EACvB,CACI,QAAS,CACL,KAAK,QAAU,GACX,KAAK,MAAQ,KAAK,OAAO,OAAS,KAAK,QACvC,KAAK,MAAO,CAExB,CACI,UAAUrD,EAAG,CACLA,IAAMQ,EAAU,IACf,CAAC,KAAK,gBAAkB,KAAK,cAAcA,EAAU,EAAE,GACpD,KAAK,MAAQ,KAAK,cAClB,KAAK,IAAI,OAAO,KAAK,aAAc,KAAK,KAAK,EAEjD,KAAK,MAAQkC,EAAM,cACnB,KAAK,aAAe,KAAK,OAEpB,KAAK,gBAAkB1C,IAAMQ,EAAU,KAC5C,KAAK,YAAa,CAE9B,CACI,0BAA0BR,EAAG,CACzB,MAAMsD,EAAQ,KAAK,gBAAkB,KAAK,gBAAgB,OAM1D,GAAI,EALYA,EAERV,EAAkB5C,CAAC,GAElBA,EAAI,MAAU,KAAK,gBAAgB,KAAK,aAAa,GAE1D,KAAK,UAAY,WAEZ,CAACsD,EAAO,CACb,KAAK,gBACL,MACZ,CACQ,KAAK,cAAgB,EACrB,KAAK,MAAQZ,EAAM,UACnB,KAAK,eAAe1C,CAAC,CAC7B,CAEI,kBAAkBA,EAAG,CACjB,GAAI,KAAK,gBAAkB,KAAK,gBAAgB,OAAQ,CACpD,GAAIA,IAAMQ,EAAU,IAAMmC,EAAa3C,CAAC,EAAG,CACvC,MAAMuD,EAAY,KAAK,MAAQ,KAAK,gBAAgB,OACpD,GAAI,KAAK,aAAeA,EAAW,CAE/B,MAAMC,EAAc,KAAK,MACzB,KAAK,MAAQD,EACb,KAAK,IAAI,OAAO,KAAK,aAAcA,CAAS,EAC5C,KAAK,MAAQC,CACjC,CACgB,KAAK,UAAY,GACjB,KAAK,aAAeD,EAAY,EAChC,KAAK,sBAAsBvD,CAAC,EAC5B,MAChB,CACY,KAAK,cAAgB,CACjC,EACaA,EAAI,MAAU,KAAK,gBAAgB,KAAK,aAAa,EACtD,KAAK,eAAiB,EAEjB,KAAK,gBAAkB,EACxB,KAAK,kBAAoB+C,EAAU,SAE/B,KAAK,gBAAkB/C,IAAMQ,EAAU,KACvC,KAAK,YAAa,EAGjB,KAAK,cAAcA,EAAU,EAAE,IAEpC,KAAK,cAAgB,GAKzB,KAAK,cAAgB,EAAOR,IAAMQ,EAAU,GAExD,CACI,mBAAmBR,EAAG,CACdA,IAAM+C,EAAU,MAAM,KAAK,aAAa,EACpC,EAAE,KAAK,gBAAkBA,EAAU,MAAM,SACzC,KAAK,MAAQL,EAAM,cACnB,KAAK,gBAAkBK,EAAU,SACjC,KAAK,cAAgB,EACrB,KAAK,aAAe,KAAK,MAAQ,IAIrC,KAAK,cAAgB,EACrB,KAAK,MAAQL,EAAM,cACnB,KAAK,mBAAmB1C,CAAC,EAErC,CAOI,cAAcA,EAAG,CACb,KAAO,EAAE,KAAK,MAAQ,KAAK,OAAO,OAAS,KAAK,QAC5C,GAAI,KAAK,OAAO,WAAW,KAAK,MAAQ,KAAK,MAAM,IAAMA,EACrD,MAAO,GASf,YAAK,MAAQ,KAAK,OAAO,OAAS,KAAK,OAAS,EACzC,EACf,CASI,mBAAmBA,EAAG,CACdA,IAAM,KAAK,gBAAgB,KAAK,aAAa,EACzC,EAAE,KAAK,gBAAkB,KAAK,gBAAgB,SAC1C,KAAK,kBAAoB+C,EAAU,SACnC,KAAK,IAAI,QAAQ,KAAK,aAAc,KAAK,MAAO,CAAC,EAGjD,KAAK,IAAI,UAAU,KAAK,aAAc,KAAK,MAAO,CAAC,EAEvD,KAAK,cAAgB,EACrB,KAAK,aAAe,KAAK,MAAQ,EACjC,KAAK,MAAQL,EAAM,MAGlB,KAAK,gBAAkB,EAExB,KAAK,cAAc,KAAK,gBAAgB,CAAC,CAAC,IAC1C,KAAK,cAAgB,GAGpB1C,IAAM,KAAK,gBAAgB,KAAK,cAAgB,CAAC,IAEtD,KAAK,cAAgB,EAEjC,CAOI,eAAeA,EAAG,CACd,OAAO,KAAK,QAAU,CAAC4C,EAAkB5C,CAAC,EAAI6C,GAAa7C,CAAC,CACpE,CACI,aAAayD,EAAU9K,EAAQ,CAC3B,KAAK,UAAY,GACjB,KAAK,gBAAkB8K,EACvB,KAAK,cAAgB9K,EACrB,KAAK,MAAQ+J,EAAM,oBAC3B,CACI,mBAAmB1C,EAAG,CAClB,GAAIA,IAAMQ,EAAU,gBAChB,KAAK,MAAQkC,EAAM,kBACnB,KAAK,aAAe,KAAK,MAAQ,UAE5B1C,IAAMQ,EAAU,aACrB,KAAK,MAAQkC,EAAM,wBACnB,KAAK,aAAe,KAAK,MAAQ,UAE5B,KAAK,eAAe1C,CAAC,EAAG,CAC7B,MAAM0D,EAAQ1D,EAAI,GAClB,KAAK,aAAe,KAAK,MACrB,KAAK,QACL,KAAK,MAAQ0C,EAAM,UAEdgB,IAAUX,EAAU,UAAU,CAAC,EACpC,KAAK,MAAQL,EAAM,eAEdgB,IAAUX,EAAU,SAAS,CAAC,GACnCW,IAAUX,EAAU,OAAO,CAAC,EAC5B,KAAK,MAAQL,EAAM,eAGnB,KAAK,MAAQA,EAAM,SAEnC,MACiB1C,IAAMQ,EAAU,MACrB,KAAK,MAAQkC,EAAM,sBAGnB,KAAK,MAAQA,EAAM,KACnB,KAAK,UAAU1C,CAAC,EAE5B,CACI,eAAeA,EAAG,CACV4C,EAAkB5C,CAAC,IACnB,KAAK,IAAI,cAAc,KAAK,aAAc,KAAK,KAAK,EACpD,KAAK,aAAe,GACpB,KAAK,MAAQ0C,EAAM,oBACnB,KAAK,yBAAyB1C,CAAC,EAE3C,CACI,0BAA0BA,EAAG,CACrB2C,EAAa3C,CAAC,IAGTA,IAAMQ,EAAU,GACrB,KAAK,MAAQkC,EAAM,MAGnB,KAAK,MAAQ,KAAK,eAAe1C,CAAC,EAC5B0C,EAAM,iBACNA,EAAM,iBACZ,KAAK,aAAe,KAAK,OAErC,CACI,sBAAsB1C,EAAG,EACjBA,IAAMQ,EAAU,IAAMmC,EAAa3C,CAAC,KACpC,KAAK,IAAI,WAAW,KAAK,aAAc,KAAK,KAAK,EACjD,KAAK,aAAe,GACpB,KAAK,MAAQ0C,EAAM,oBACnB,KAAK,yBAAyB1C,CAAC,EAE3C,CACI,yBAAyBA,EAAG,EAEpBA,IAAMQ,EAAU,IAAM,KAAK,cAAcA,EAAU,EAAE,KACrD,KAAK,MAAQkC,EAAM,KACnB,KAAK,aAAe,KAAK,MAAQ,EAE7C,CACI,yBAAyB1C,EAAG,CACpBA,IAAMQ,EAAU,IAChB,KAAK,IAAI,aAAa,KAAK,KAAK,EAC5B,KAAK,WACL,KAAK,MAAQkC,EAAM,aACnB,KAAK,cAAgB,GAGrB,KAAK,MAAQA,EAAM,KAEvB,KAAK,aAAe,KAAK,MAAQ,GAE5B1C,IAAMQ,EAAU,MACrB,KAAK,MAAQkC,EAAM,iBAEbC,EAAa3C,CAAC,IACpB,KAAK,MAAQ0C,EAAM,gBACnB,KAAK,aAAe,KAAK,MAErC,CACI,sBAAsB1C,EAAG,CACjBA,IAAMQ,EAAU,IAChB,KAAK,IAAI,iBAAiB,KAAK,KAAK,EACpC,KAAK,MAAQkC,EAAM,KACnB,KAAK,aAAe,KAAK,MAAQ,EACjC,KAAK,UAAY,IAEXC,EAAa3C,CAAC,IACpB,KAAK,MAAQ0C,EAAM,oBACnB,KAAK,yBAAyB1C,CAAC,EAE3C,CACI,qBAAqBA,EAAG,EAChBA,IAAMQ,EAAU,IAAMoC,EAAkB5C,CAAC,KACzC,KAAK,IAAI,aAAa,KAAK,aAAc,KAAK,KAAK,EACnD,KAAK,aAAe,KAAK,MACzB,KAAK,MAAQ0C,EAAM,mBACnB,KAAK,wBAAwB1C,CAAC,EAE1C,CACI,wBAAwBA,EAAG,CACnBA,IAAMQ,EAAU,GAChB,KAAK,MAAQkC,EAAM,qBAEd1C,IAAMQ,EAAU,OAASR,IAAMQ,EAAU,IAC9C,KAAK,IAAI,YAAYsC,EAAU,QAAS,KAAK,YAAY,EACzD,KAAK,aAAe,GACpB,KAAK,MAAQJ,EAAM,oBACnB,KAAK,yBAAyB1C,CAAC,GAEzB2C,EAAa3C,CAAC,IACpB,KAAK,IAAI,YAAY8C,EAAU,QAAS,KAAK,YAAY,EACzD,KAAK,MAAQJ,EAAM,gBACnB,KAAK,aAAe,KAAK,MAErC,CACI,0BAA0B1C,EAAG,CACrBA,IAAMQ,EAAU,aAChB,KAAK,MAAQkC,EAAM,mBACnB,KAAK,aAAe,KAAK,MAAQ,GAE5B1C,IAAMQ,EAAU,aACrB,KAAK,MAAQkC,EAAM,mBACnB,KAAK,aAAe,KAAK,MAAQ,GAE3BC,EAAa3C,CAAC,IACpB,KAAK,aAAe,KAAK,MACzB,KAAK,MAAQ0C,EAAM,mBACnB,KAAK,8BAA8B1C,CAAC,EAEhD,CACI,uBAAuBA,EAAG2D,EAAO,CACzB3D,IAAM2D,GACL,CAAC,KAAK,gBAAkB,KAAK,cAAcA,CAAK,GACjD,KAAK,IAAI,aAAa,KAAK,aAAc,KAAK,KAAK,EACnD,KAAK,aAAe,GACpB,KAAK,IAAI,YAAYA,IAAUnD,EAAU,YACnCsC,EAAU,OACVA,EAAU,OAAQ,KAAK,MAAQ,CAAC,EACtC,KAAK,MAAQJ,EAAM,qBAEd,KAAK,gBAAkB1C,IAAMQ,EAAU,KAC5C,KAAK,YAAa,CAE9B,CACI,kCAAkCR,EAAG,CACjC,KAAK,uBAAuBA,EAAGQ,EAAU,WAAW,CAC5D,CACI,kCAAkCR,EAAG,CACjC,KAAK,uBAAuBA,EAAGQ,EAAU,WAAW,CAC5D,CACI,8BAA8BR,EAAG,CACzB2C,EAAa3C,CAAC,GAAKA,IAAMQ,EAAU,IACnC,KAAK,IAAI,aAAa,KAAK,aAAc,KAAK,KAAK,EACnD,KAAK,aAAe,GACpB,KAAK,IAAI,YAAYsC,EAAU,SAAU,KAAK,KAAK,EACnD,KAAK,MAAQJ,EAAM,oBACnB,KAAK,yBAAyB1C,CAAC,GAE1B,KAAK,gBAAkBA,IAAMQ,EAAU,KAC5C,KAAK,YAAa,CAE9B,CACI,uBAAuBR,EAAG,CAClBA,IAAMQ,EAAU,sBAChB,KAAK,MAAQkC,EAAM,cACnB,KAAK,cAAgB,GAGrB,KAAK,MACD1C,IAAMQ,EAAU,KACVkC,EAAM,cACNA,EAAM,aAE5B,CACI,mBAAmB1C,EAAG,EACdA,IAAMQ,EAAU,IAAM,KAAK,cAAcA,EAAU,EAAE,KACrD,KAAK,IAAI,cAAc,KAAK,aAAc,KAAK,KAAK,EACpD,KAAK,MAAQkC,EAAM,KACnB,KAAK,aAAe,KAAK,MAAQ,EAE7C,CACI,6BAA6B1C,EAAG,EACxBA,IAAMQ,EAAU,IAAM,KAAK,cAAcA,EAAU,EAAE,KACrD,KAAK,IAAI,wBAAwB,KAAK,aAAc,KAAK,KAAK,EAC9D,KAAK,MAAQkC,EAAM,KACnB,KAAK,aAAe,KAAK,MAAQ,EAE7C,CACI,mBAAmB1C,EAAG,CACdA,IAAMQ,EAAU,MAChB,KAAK,MAAQkC,EAAM,cACnB,KAAK,gBAAkBK,EAAU,WAEjC,KAAK,cAAgB,EACrB,KAAK,aAAe,KAAK,MAAQ,GAGjC,KAAK,MAAQL,EAAM,aAE/B,CACI,sBAAsB1C,EAAG,EACjBA,IAAMQ,EAAU,IAAM,KAAK,cAAcA,EAAU,EAAE,KACrD,KAAK,IAAI,UAAU,KAAK,aAAc,KAAK,MAAO,CAAC,EACnD,KAAK,MAAQkC,EAAM,KACnB,KAAK,aAAe,KAAK,MAAQ,EAE7C,CACI,oBAAoB1C,EAAG,CACnB,MAAM0D,EAAQ1D,EAAI,GACd0D,IAAUX,EAAU,UAAU,CAAC,EAC/B,KAAK,aAAaA,EAAU,UAAW,CAAC,EAEnCW,IAAUX,EAAU,SAAS,CAAC,EACnC,KAAK,aAAaA,EAAU,SAAU,CAAC,GAGvC,KAAK,MAAQL,EAAM,UACnB,KAAK,eAAe1C,CAAC,EAEjC,CACI,oBAAoBA,EAAG,CAEnB,OADcA,EAAI,GACL,CACT,KAAK+C,EAAU,SAAS,CAAC,EAAG,CACxB,KAAK,aAAaA,EAAU,SAAU,CAAC,EACvC,KAChB,CACY,KAAKA,EAAU,YAAY,CAAC,EAAG,CAC3B,KAAK,aAAaA,EAAU,YAAa,CAAC,EAC1C,KAChB,CACY,KAAKA,EAAU,OAAO,CAAC,EAAG,CACtB,KAAK,aAAaA,EAAU,OAAQ,CAAC,EACrC,KAChB,CACY,QACI,KAAK,MAAQL,EAAM,UACnB,KAAK,eAAe1C,CAAC,CAErC,CACA,CACI,aAAc,CACV,KAAK,UAAY,KAAK,MACtB,KAAK,MAAQ0C,EAAM,SACnB,KAAK,YAAc,KAAK,MACxB,KAAK,cAAc,YAAY,KAAK,QAC9BzB,EAAa,OACb,KAAK,YAAcyB,EAAM,MACvB,KAAK,YAAcA,EAAM,aACvBzB,EAAa,OACbA,EAAa,SAAS,CACxC,CACI,eAAgB,CACZ,MAAM9K,EAAS,KAAK,cAAc,MAAM,KAAK,OAAQ,KAAK,MAAQ,KAAK,MAAM,EAEzEA,GAAU,GACV,KAAK,MAAQ,KAAK,UACdA,IAAW,IACX,KAAK,MAAQ,KAAK,cAKtB,KAAK,MAAQ,KAAK,OAAS,KAAK,OAAO,OAAS,CAE5D,CAII,SAAU,CAEF,KAAK,SAAW,KAAK,eAAiB,KAAK,QACvC,KAAK,QAAUuM,EAAM,MACpB,KAAK,QAAUA,EAAM,cAAgB,KAAK,gBAAkB,GAC7D,KAAK,IAAI,OAAO,KAAK,aAAc,KAAK,KAAK,EAC7C,KAAK,aAAe,KAAK,QAEpB,KAAK,QAAUA,EAAM,oBAC1B,KAAK,QAAUA,EAAM,oBACrB,KAAK,QAAUA,EAAM,sBACrB,KAAK,IAAI,aAAa,KAAK,aAAc,KAAK,KAAK,EACnD,KAAK,aAAe,KAAK,OAGzC,CACI,gBAAiB,CACb,OAAO,KAAK,MAAQ,KAAK,OAAO,OAAS,KAAK,QAAU,KAAK,OACrE,CAMI,OAAQ,CACJ,KAAO,KAAK,kBAAkB,CAC1B,MAAM1C,EAAI,KAAK,OAAO,WAAW,KAAK,MAAQ,KAAK,MAAM,EACzD,OAAQ,KAAK,MAAK,CACd,KAAK0C,EAAM,KAAM,CACb,KAAK,UAAU1C,CAAC,EAChB,KACpB,CACgB,KAAK0C,EAAM,qBAAsB,CAC7B,KAAK,0BAA0B1C,CAAC,EAChC,KACpB,CACgB,KAAK0C,EAAM,aAAc,CACrB,KAAK,kBAAkB1C,CAAC,EACxB,KACpB,CACgB,KAAK0C,EAAM,cAAe,CACtB,KAAK,mBAAmB1C,CAAC,EACzB,KACpB,CACgB,KAAK0C,EAAM,mBAAoB,CAC3B,KAAK,kCAAkC1C,CAAC,EACxC,KACpB,CACgB,KAAK0C,EAAM,gBAAiB,CACxB,KAAK,qBAAqB1C,CAAC,EAC3B,KACpB,CACgB,KAAK0C,EAAM,cAAe,CACtB,KAAK,mBAAmB1C,CAAC,EACzB,KACpB,CACgB,KAAK0C,EAAM,iBAAkB,CACzB,KAAK,sBAAsB1C,CAAC,EAC5B,KACpB,CACgB,KAAK0C,EAAM,oBAAqB,CAC5B,KAAK,yBAAyB1C,CAAC,EAC/B,KACpB,CACgB,KAAK0C,EAAM,UAAW,CAClB,KAAK,eAAe1C,CAAC,EACrB,KACpB,CACgB,KAAK0C,EAAM,iBAAkB,CACzB,KAAK,sBAAsB1C,CAAC,EAC5B,KACpB,CACgB,KAAK0C,EAAM,cAAe,CACtB,KAAK,mBAAmB1C,CAAC,EACzB,KACpB,CACgB,KAAK0C,EAAM,mBAAoB,CAC3B,KAAK,wBAAwB1C,CAAC,EAC9B,KACpB,CACgB,KAAK0C,EAAM,mBAAoB,CAC3B,KAAK,kCAAkC1C,CAAC,EACxC,KACpB,CACgB,KAAK0C,EAAM,qBAAsB,CAC7B,KAAK,0BAA0B1C,CAAC,EAChC,KACpB,CACgB,KAAK0C,EAAM,qBAAsB,CAC7B,KAAK,0BAA0B1C,CAAC,EAChC,KACpB,CACgB,KAAK0C,EAAM,oBAAqB,CAC5B,KAAK,yBAAyB1C,CAAC,EAC/B,KACpB,CACgB,KAAK0C,EAAM,eAAgB,CACvB,KAAK,oBAAoB1C,CAAC,EAC1B,KACpB,CACgB,KAAK0C,EAAM,eAAgB,CACvB,KAAK,oBAAoB1C,CAAC,EAC1B,KACpB,CACgB,KAAK0C,EAAM,mBAAoB,CAC3B,KAAK,8BAA8B1C,CAAC,EACpC,KACpB,CACgB,KAAK0C,EAAM,iBAAkB,CACzB,KAAK,sBAAsB1C,CAAC,EAC5B,KACpB,CACgB,KAAK0C,EAAM,cAAe,CACtB,KAAK,mBAAmB1C,CAAC,EACzB,KACpB,CACgB,KAAK0C,EAAM,kBAAmB,CAC1B,KAAK,uBAAuB1C,CAAC,EAC7B,KACpB,CACgB,KAAK0C,EAAM,cAAe,CACtB,KAAK,mBAAmB1C,CAAC,EACzB,KACpB,CACgB,KAAK0C,EAAM,wBAAyB,CAChC,KAAK,6BAA6B1C,CAAC,EACnC,KACpB,CACgB,KAAK0C,EAAM,SAAU,CACjB,KAAK,cAAe,EACpB,KACpB,CACA,CACY,KAAK,OACjB,CACQ,KAAK,QAAS,CACtB,CACI,QAAS,CACD,KAAK,QAAUA,EAAM,WACrB,KAAK,cAAc,IAAK,EACxB,KAAK,MAAQ,KAAK,WAEtB,KAAK,mBAAoB,EACzB,KAAK,IAAI,MAAO,CACxB,CAEI,oBAAqB,CACjB,MAAMkB,EAAW,KAAK,OAAO,OAAS,KAAK,OAEvC,KAAK,cAAgBA,IAGrB,KAAK,QAAUlB,EAAM,cACjB,KAAK,kBAAoBK,EAAU,SACnC,KAAK,IAAI,QAAQ,KAAK,aAAca,EAAU,CAAC,EAG/C,KAAK,IAAI,UAAU,KAAK,aAAcA,EAAU,CAAC,EAGhD,KAAK,QAAUlB,EAAM,WAC1B,KAAK,QAAUA,EAAM,qBACrB,KAAK,QAAUA,EAAM,sBACrB,KAAK,QAAUA,EAAM,oBACrB,KAAK,QAAUA,EAAM,iBACrB,KAAK,QAAUA,EAAM,oBACrB,KAAK,QAAUA,EAAM,oBACrB,KAAK,QAAUA,EAAM,oBACrB,KAAK,QAAUA,EAAM,kBAOrB,KAAK,IAAI,OAAO,KAAK,aAAckB,CAAQ,EAEvD,CACI,cAAcR,EAAIlB,EAAU,CACpB,KAAK,YAAcQ,EAAM,MACzB,KAAK,YAAcA,EAAM,cACrB,KAAK,aAAe,KAAK,aACzB,KAAK,IAAI,aAAa,KAAK,aAAc,KAAK,WAAW,EAE7D,KAAK,aAAe,KAAK,YAAcR,EACvC,KAAK,MAAQ,KAAK,aAAe,EACjC,KAAK,IAAI,eAAekB,CAAE,IAGtB,KAAK,aAAe,KAAK,aACzB,KAAK,IAAI,OAAO,KAAK,aAAc,KAAK,WAAW,EAEvD,KAAK,aAAe,KAAK,YAAclB,EACvC,KAAK,MAAQ,KAAK,aAAe,EACjC,KAAK,IAAI,aAAakB,EAAI,KAAK,YAAY,EAEvD,CACA,CCtxBA,MAAMS,EAAW,IAAI,IAAI,CACrB,QACA,SACA,WACA,SACA,SACA,WACA,UACJ,CAAC,EACKC,EAAO,IAAI,IAAI,CAAC,GAAG,CAAC,EACpBC,GAAmB,IAAI,IAAI,CAAC,QAAS,OAAO,CAAC,EAC7CC,GAAU,IAAI,IAAI,CAAC,KAAM,IAAI,CAAC,EAC9BC,GAAU,IAAI,IAAI,CAAC,KAAM,IAAI,CAAC,EAC9BC,GAAmB,IAAI,IAAI,CAC7B,CAAC,KAAM,IAAI,IAAI,CAAC,KAAM,KAAM,IAAI,CAAC,CAAC,EAClC,CAAC,KAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EACtB,CAAC,KAAM,IAAI,IAAI,CAAC,QAAS,KAAM,IAAI,CAAC,CAAC,EACrC,CAAC,OAAQ,IAAI,IAAI,CAAC,OAAQ,OAAQ,QAAQ,CAAC,CAAC,EAC5C,CAAC,KAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EACtB,CAAC,IAAKJ,CAAI,EACV,CAAC,KAAMA,CAAI,EACX,CAAC,KAAMA,CAAI,EACX,CAAC,KAAMA,CAAI,EACX,CAAC,KAAMA,CAAI,EACX,CAAC,KAAMA,CAAI,EACX,CAAC,KAAMA,CAAI,EACX,CAAC,SAAUD,CAAQ,EACnB,CAAC,QAASA,CAAQ,EAClB,CAAC,SAAUA,CAAQ,EACnB,CAAC,SAAUA,CAAQ,EACnB,CAAC,WAAYA,CAAQ,EACrB,CAAC,WAAYA,CAAQ,EACrB,CAAC,SAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,EAC9B,CAAC,WAAY,IAAI,IAAI,CAAC,WAAY,QAAQ,CAAC,CAAC,EAC5C,CAAC,KAAMG,EAAO,EACd,CAAC,KAAMA,EAAO,EACd,CAAC,UAAWF,CAAI,EAChB,CAAC,UAAWA,CAAI,EAChB,CAAC,QAASA,CAAI,EACd,CAAC,aAAcA,CAAI,EACnB,CAAC,UAAWA,CAAI,EAChB,CAAC,MAAOA,CAAI,EACZ,CAAC,KAAMA,CAAI,EACX,CAAC,WAAYA,CAAI,EACjB,CAAC,aAAcA,CAAI,EACnB,CAAC,SAAUA,CAAI,EACf,CAAC,SAAUA,CAAI,EACf,CAAC,OAAQA,CAAI,EACb,CAAC,SAAUA,CAAI,EACf,CAAC,KAAMA,CAAI,EACX,CAAC,OAAQA,CAAI,EACb,CAAC,MAAOA,CAAI,EACZ,CAAC,KAAMA,CAAI,EACX,CAAC,MAAOA,CAAI,EACZ,CAAC,UAAWA,CAAI,EAChB,CAAC,QAASA,CAAI,EACd,CAAC,KAAMA,CAAI,EACX,CAAC,KAAMG,EAAO,EACd,CAAC,KAAMA,EAAO,EACd,CAAC,QAASF,EAAgB,EAC1B,CAAC,QAASA,EAAgB,CAC9B,CAAC,EACKI,GAAe,IAAI,IAAI,CACzB,OACA,OACA,WACA,KACA,MACA,UACA,QACA,QACA,KACA,MACA,QACA,UACA,SACA,OACA,OACA,QACA,SACA,QACA,KACJ,CAAC,EACKC,GAAyB,IAAI,IAAI,CAAC,OAAQ,KAAK,CAAC,EAChDC,GAA0B,IAAI,IAAI,CACpC,KACA,KACA,KACA,KACA,QACA,iBACA,gBACA,OACA,OACJ,CAAC,EACKC,GAAY,QACX,MAAMC,EAAO,CAChB,YAAYpB,EAAKrO,EAAU,GAAI,CAC3B,IAAIoL,EAAIsE,EAAIC,EAAIC,EAAIC,EAAIC,EACxB,KAAK,QAAU9P,EAEf,KAAK,WAAa,EAElB,KAAK,SAAW,EAKhB,KAAK,aAAe,EACpB,KAAK,QAAU,GACf,KAAK,WAAa,GAClB,KAAK,YAAc,GACnB,KAAK,QAAU,KACf,KAAK,MAAQ,CAAE,EACf,KAAK,QAAU,CAAE,EACjB,KAAK,aAAe,EAEpB,KAAK,WAAa,EAElB,KAAK,MAAQ,GACb,KAAK,IAAMqO,GAAuC,CAAE,EACpD,KAAK,SAAW,CAAC,KAAK,QAAQ,QAC9B,KAAK,mBAAqBjD,EAAKpL,EAAQ,iBAAmB,MAAQoL,IAAO,OAASA,EAAK,KAAK,SAC5F,KAAK,yBACAsE,EAAK1P,EAAQ,2BAA6B,MAAQ0P,IAAO,OAASA,EAAK,KAAK,SACjF,KAAK,sBACAC,EAAK3P,EAAQ,wBAA0B,MAAQ2P,IAAO,OAASA,EAAK,CAAC,KAAK,SAC/E,KAAK,UAAY,KAAMC,EAAK5P,EAAQ,aAAe,MAAQ4P,IAAO,OAASA,EAAK1B,IAAW,KAAK,QAAS,IAAI,EAC7G,KAAK,eAAiB,CAAC,CAAC,KAAK,QAAQ,GACpC4B,GAAMD,EAAK,KAAK,KAAK,gBAAkB,MAAQC,IAAO,QAAkBA,EAAG,KAAKD,EAAI,IAAI,CACjG,CAGI,OAAOnD,EAAOoC,EAAU,CACpB,IAAI1D,EAAIsE,EACR,MAAMK,EAAO,KAAK,SAASrD,EAAOoC,CAAQ,EAC1C,KAAK,SAAWA,EAAW,GAC1BY,GAAMtE,EAAK,KAAK,KAAK,UAAY,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,EAAI2E,CAAI,EACnF,KAAK,WAAajB,CAC1B,CAEI,aAAaR,EAAIQ,EAAU,CACvB,IAAI1D,EAAIsE,EACR,KAAK,SAAWZ,EAAW,GAC1BY,GAAMtE,EAAK,KAAK,KAAK,UAAY,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,EAAIE,GAAcgD,CAAE,CAAC,EAChG,KAAK,WAAaQ,CAC1B,CAKI,cAAcxP,EAAM,CAChB,OAAO,KAAK,UAAY+P,GAAa,IAAI/P,CAAI,CACrD,CAEI,cAAcoN,EAAOoC,EAAU,CAC3B,KAAK,SAAWA,EAChB,IAAIxP,EAAO,KAAK,SAASoN,EAAOoC,CAAQ,EACpC,KAAK,oBACLxP,EAAOA,EAAK,YAAa,GAE7B,KAAK,YAAYA,CAAI,CAC7B,CACI,YAAYA,EAAM,CACd,IAAI8L,EAAIsE,EAAIC,EAAIC,EAChB,KAAK,aAAe,KAAK,WACzB,KAAK,QAAUtQ,EACf,MAAM0Q,EAAe,KAAK,UAAYZ,GAAiB,IAAI9P,CAAI,EAC/D,GAAI0Q,EACA,KAAO,KAAK,MAAM,OAAS,GAAKA,EAAa,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAC7D,MAAM9F,EAAU,KAAK,MAAM,MAAO,GACjCwF,GAAMtE,EAAK,KAAK,KAAK,cAAgB,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,EAAIlB,EAAS,EAAI,CAChH,CAEa,KAAK,cAAc5K,CAAI,IACxB,KAAK,MAAM,QAAQA,CAAI,EACnB,KAAK,WACDgQ,GAAuB,IAAIhQ,CAAI,EAC/B,KAAK,eAAe,QAAQ,EAAI,EAE3BiQ,GAAwB,IAAIjQ,CAAI,GACrC,KAAK,eAAe,QAAQ,EAAK,KAI5CsQ,GAAMD,EAAK,KAAK,KAAK,iBAAmB,MAAQC,IAAO,QAAkBA,EAAG,KAAKD,EAAIrQ,CAAI,EACtF,KAAK,IAAI,YACT,KAAK,QAAU,CAAE,EAC7B,CACI,WAAW2Q,EAAW,CAClB,IAAI7E,EAAIsE,EACR,KAAK,WAAa,KAAK,aACnB,KAAK,WACJA,GAAMtE,EAAK,KAAK,KAAK,aAAe,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,EAAI,KAAK,QAAS,KAAK,QAAS6E,CAAS,EACvH,KAAK,QAAU,MAEf,KAAK,IAAI,YAAc,KAAK,cAAc,KAAK,OAAO,GACtD,KAAK,IAAI,WAAW,KAAK,QAAS,EAAI,EAE1C,KAAK,QAAU,EACvB,CAEI,aAAanB,EAAU,CACnB,KAAK,SAAWA,EAChB,KAAK,WAAW,EAAK,EAErB,KAAK,WAAaA,EAAW,CACrC,CAEI,WAAWpC,EAAOoC,EAAU,CACxB,IAAI1D,EAAIsE,EAAIC,EAAIC,EAAIC,EAAIC,EAAII,EAAIC,EAChC,KAAK,SAAWrB,EAChB,IAAIxP,EAAO,KAAK,SAASoN,EAAOoC,CAAQ,EASxC,GARI,KAAK,oBACLxP,EAAOA,EAAK,YAAa,GAEzB,KAAK,WACJgQ,GAAuB,IAAIhQ,CAAI,GAC5BiQ,GAAwB,IAAIjQ,CAAI,IACpC,KAAK,eAAe,MAAO,EAE1B,KAAK,cAAcA,CAAI,EAenB,KAAK,UAAYA,IAAS,QAE9BsQ,GAAMD,EAAK,KAAK,KAAK,iBAAmB,MAAQC,IAAO,QAAkBA,EAAG,KAAKD,EAAI,IAAI,GACzFG,GAAMD,EAAK,KAAK,KAAK,aAAe,MAAQC,IAAO,QAAkBA,EAAG,KAAKD,EAAI,KAAM,CAAE,EAAE,EAAI,GAC/FM,GAAMD,EAAK,KAAK,KAAK,cAAgB,MAAQC,IAAO,QAAkBA,EAAG,KAAKD,EAAI,KAAM,EAAK,OAnBnE,CAC3B,MAAME,EAAM,KAAK,MAAM,QAAQ9Q,CAAI,EACnC,GAAI8Q,IAAQ,GACR,QAAS/P,EAAQ,EAAGA,GAAS+P,EAAK/P,IAAS,CACvC,MAAM6J,EAAU,KAAK,MAAM,MAAO,GAEjCwF,GAAMtE,EAAK,KAAK,KAAK,cAAgB,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,EAAIlB,EAAS7J,IAAU+P,CAAG,CAC7H,MAEqB,KAAK,UAAY9Q,IAAS,MAE/B,KAAK,YAAY,GAAG,EACpB,KAAK,gBAAgB,EAAI,EAEzC,CAQQ,KAAK,WAAawP,EAAW,CACrC,CAEI,iBAAiBA,EAAU,CACvB,KAAK,SAAWA,EACZ,KAAK,sBAAwB,KAAK,eAAe,CAAC,GAClD,KAAK,gBAAgB,EAAK,EAE1B,KAAK,WAAaA,EAAW,GAI7B,KAAK,aAAaA,CAAQ,CAEtC,CACI,gBAAgBuB,EAAe,CAC3B,IAAIjF,EAAIsE,EACR,MAAMpQ,EAAO,KAAK,QAClB,KAAK,WAAW+Q,CAAa,EAEzB,KAAK,MAAM,CAAC,IAAM/Q,KAEjBoQ,GAAMtE,EAAK,KAAK,KAAK,cAAgB,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,EAAI9L,EAAM,CAAC+Q,CAAa,EACvG,KAAK,MAAM,MAAO,EAE9B,CAEI,aAAa3D,EAAOoC,EAAU,CAC1B,KAAK,WAAapC,EAClB,MAAMpN,EAAO,KAAK,SAASoN,EAAOoC,CAAQ,EAC1C,KAAK,WAAa,KAAK,wBACjBxP,EAAK,YAAW,EAChBA,CACd,CAEI,aAAaoN,EAAOoC,EAAU,CAC1B,KAAK,aAAe,KAAK,SAASpC,EAAOoC,CAAQ,CACzD,CAEI,eAAeR,EAAI,CACf,KAAK,aAAehD,GAAcgD,CAAE,CAC5C,CAEI,YAAYO,EAAOC,EAAU,CACzB,IAAI1D,EAAIsE,EACR,KAAK,SAAWZ,GACfY,GAAMtE,EAAK,KAAK,KAAK,eAAiB,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,EAAI,KAAK,WAAY,KAAK,YAAayD,IAAUb,EAAU,OACrI,IACAa,IAAUb,EAAU,OAChB,IACAa,IAAUb,EAAU,QAChB,OACA,IAAI,EACd,KAAK,SACL,CAAC,OAAO,UAAU,eAAe,KAAK,KAAK,QAAS,KAAK,UAAU,IACnE,KAAK,QAAQ,KAAK,UAAU,EAAI,KAAK,aAEzC,KAAK,YAAc,EAC3B,CACI,mBAAmBnR,EAAO,CACtB,MAAMwD,EAAQxD,EAAM,OAAO2S,EAAS,EACpC,IAAIlQ,EAAOe,EAAQ,EAAIxD,EAAQA,EAAM,OAAO,EAAGwD,CAAK,EACpD,OAAI,KAAK,oBACLf,EAAOA,EAAK,YAAa,GAEtBA,CACf,CAEI,cAAcoN,EAAOoC,EAAU,CAC3B,KAAK,SAAWA,EAChB,MAAMjS,EAAQ,KAAK,SAAS6P,EAAOoC,CAAQ,EAC3C,GAAI,KAAK,IAAI,wBAAyB,CAClC,MAAMxP,EAAO,KAAK,mBAAmBzC,CAAK,EAC1C,KAAK,IAAI,wBAAwB,IAAIyC,CAAI,GAAI,IAAIzC,CAAK,EAAE,CACpE,CAEQ,KAAK,WAAaiS,EAAW,CACrC,CAEI,wBAAwBpC,EAAOoC,EAAU,CACrC,KAAK,SAAWA,EAChB,MAAMjS,EAAQ,KAAK,SAAS6P,EAAOoC,CAAQ,EAC3C,GAAI,KAAK,IAAI,wBAAyB,CAClC,MAAMxP,EAAO,KAAK,mBAAmBzC,CAAK,EAC1C,KAAK,IAAI,wBAAwB,IAAIyC,CAAI,GAAI,IAAIzC,CAAK,EAAE,CACpE,CAEQ,KAAK,WAAaiS,EAAW,CACrC,CAEI,UAAUpC,EAAOoC,EAAUjL,EAAQ,CAC/B,IAAIuH,EAAIsE,EAAIC,EAAIC,EAChB,KAAK,SAAWd,GACfY,GAAMtE,EAAK,KAAK,KAAK,aAAe,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,EAAI,KAAK,SAASsB,EAAOoC,EAAWjL,CAAM,CAAC,GACxH+L,GAAMD,EAAK,KAAK,KAAK,gBAAkB,MAAQC,IAAO,QAAkBA,EAAG,KAAKD,CAAE,EAEnF,KAAK,WAAab,EAAW,CACrC,CAEI,QAAQpC,EAAOoC,EAAUjL,EAAQ,CAC7B,IAAIuH,EAAIsE,EAAIC,EAAIC,EAAIC,EAAIC,EAAII,EAAIC,EAAIG,EAAIC,EACxC,KAAK,SAAWzB,EAChB,MAAMjS,EAAQ,KAAK,SAAS6P,EAAOoC,EAAWjL,CAAM,EAChD,CAAC,KAAK,UAAY,KAAK,QAAQ,iBAC9B6L,GAAMtE,EAAK,KAAK,KAAK,gBAAkB,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,CAAE,GAClFwE,GAAMD,EAAK,KAAK,KAAK,UAAY,MAAQC,IAAO,QAAkBA,EAAG,KAAKD,EAAI9S,CAAK,GACnFiT,GAAMD,EAAK,KAAK,KAAK,cAAgB,MAAQC,IAAO,QAAkBA,EAAG,KAAKD,CAAE,KAGhFM,GAAMD,EAAK,KAAK,KAAK,aAAe,MAAQC,IAAO,QAAkBA,EAAG,KAAKD,EAAI,UAAUrT,CAAK,IAAI,GACpG0T,GAAMD,EAAK,KAAK,KAAK,gBAAkB,MAAQC,IAAO,QAAkBA,EAAG,KAAKD,CAAE,GAGvF,KAAK,WAAaxB,EAAW,CACrC,CAEI,OAAQ,CACJ,IAAI1D,EAAIsE,EACR,GAAI,KAAK,IAAI,WAAY,CAErB,KAAK,SAAW,KAAK,WACrB,QAASrP,EAAQ,EAAGA,EAAQ,KAAK,MAAM,OAAQA,IAC3C,KAAK,IAAI,WAAW,KAAK,MAAMA,CAAK,EAAG,EAAI,CAE3D,EACSqP,GAAMtE,EAAK,KAAK,KAAK,SAAW,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,CAAE,CACpF,CAII,OAAQ,CACJ,IAAIA,EAAIsE,EAAIC,EAAIC,GACfF,GAAMtE,EAAK,KAAK,KAAK,WAAa,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,CAAE,EAC9E,KAAK,UAAU,MAAO,EACtB,KAAK,QAAU,GACf,KAAK,WAAa,GAClB,KAAK,QAAU,KACf,KAAK,MAAM,OAAS,EACpB,KAAK,WAAa,EAClB,KAAK,SAAW,GACfwE,GAAMD,EAAK,KAAK,KAAK,gBAAkB,MAAQC,IAAO,QAAkBA,EAAG,KAAKD,EAAI,IAAI,EACzF,KAAK,QAAQ,OAAS,EACtB,KAAK,eAAe,OAAS,EAC7B,KAAK,eAAe,QAAQ,CAAC,KAAK,QAAQ,EAC1C,KAAK,aAAe,EACpB,KAAK,WAAa,EAClB,KAAK,MAAQ,EACrB,CAOI,cAAcI,EAAM,CAChB,KAAK,MAAO,EACZ,KAAK,IAAIA,CAAI,CACrB,CACI,SAASrD,EAAOC,EAAK,CACjB,KAAOD,EAAQ,KAAK,cAAgB,KAAK,QAAQ,CAAC,EAAE,QAChD,KAAK,YAAa,EAEtB,IAAI8D,EAAQ,KAAK,QAAQ,CAAC,EAAE,MAAM9D,EAAQ,KAAK,aAAcC,EAAM,KAAK,YAAY,EACpF,KAAOA,EAAM,KAAK,aAAe,KAAK,QAAQ,CAAC,EAAE,QAC7C,KAAK,YAAa,EAClB6D,GAAS,KAAK,QAAQ,CAAC,EAAE,MAAM,EAAG7D,EAAM,KAAK,YAAY,EAE7D,OAAO6D,CACf,CACI,aAAc,CACV,KAAK,cAAgB,KAAK,QAAQ,CAAC,EAAE,OACrC,KAAK,aACL,KAAK,QAAQ,MAAO,CAC5B,CAMI,MAAMjC,EAAO,CACT,IAAInD,EAAIsE,EACR,GAAI,KAAK,MAAO,EACXA,GAAMtE,EAAK,KAAK,KAAK,WAAa,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,EAAI,IAAI,MAAM,sBAAsB,CAAC,EACjH,MACZ,CACQ,KAAK,QAAQ,KAAKmD,CAAK,EACnB,KAAK,UAAU,UACf,KAAK,UAAU,MAAMA,CAAK,EAC1B,KAAK,aAEjB,CAMI,IAAIA,EAAO,CACP,IAAInD,EAAIsE,EACR,GAAI,KAAK,MAAO,EACXA,GAAMtE,EAAK,KAAK,KAAK,WAAa,MAAQsE,IAAO,QAAkBA,EAAG,KAAKtE,EAAI,IAAI,MAAM,oBAAoB,CAAC,EAC/G,MACZ,CACYmD,GACA,KAAK,MAAMA,CAAK,EACpB,KAAK,MAAQ,GACb,KAAK,UAAU,IAAK,CAC5B,CAII,OAAQ,CACJ,KAAK,UAAU,MAAO,CAC9B,CAII,QAAS,CAEL,IADA,KAAK,UAAU,OAAQ,EAChB,KAAK,UAAU,SAClB,KAAK,WAAa,KAAK,QAAQ,QAC/B,KAAK,UAAU,MAAM,KAAK,QAAQ,KAAK,YAAY,CAAC,EAEpD,KAAK,OACL,KAAK,UAAU,IAAK,CAChC,CAOI,WAAWA,EAAO,CACd,KAAK,MAAMA,CAAK,CACxB,CAOI,KAAKA,EAAO,CACR,KAAK,IAAIA,CAAK,CACtB,CACA,CCveO,IAAIkC,GACV,SAAUA,EAAa,CAEpBA,EAAY,KAAU,OAEtBA,EAAY,KAAU,OAEtBA,EAAY,UAAe,YAE3BA,EAAY,QAAa,UAEzBA,EAAY,OAAY,SAExBA,EAAY,MAAW,QAEvBA,EAAY,IAAS,MAErBA,EAAY,MAAW,QAEvBA,EAAY,QAAa,SAC7B,GAAGA,IAAgBA,EAAc,CAAA,EAAG,EAM7B,SAASC,GAAMC,EAAM,CACxB,OAAQA,EAAK,OAASF,EAAY,KAC9BE,EAAK,OAASF,EAAY,QAC1BE,EAAK,OAASF,EAAY,KAClC,CAGoBA,EAAY,KAEZA,EAAY,KAEPA,EAAY,UAEdA,EAAY,QAEbA,EAAY,OAEbA,EAAY,MAEdA,EAAY,IAEVA,EAAY,MAEVA,EAAY,QC4K5B,SAASC,GAAMxN,EAAM,CACxB,OAAO0N,GAAS1N,CAAI,CACxB,CAwCO,SAAS2N,GAAY3N,EAAM,CAC9B,OAAO,OAAO,UAAU,eAAe,KAAKA,EAAM,UAAU,CAChE,CCzQO,IAAIuN,GACV,SAAUA,EAAa,CAEpBA,EAAY,KAAU,OAEtBA,EAAY,KAAU,OAEtBA,EAAY,UAAe,YAE3BA,EAAY,QAAa,UAEzBA,EAAY,OAAY,SAExBA,EAAY,MAAW,QAEvBA,EAAY,IAAS,MAErBA,EAAY,MAAW,QAEvBA,EAAY,QAAa,SAC7B,GAAGA,IAAgBA,EAAc,CAAA,EAAG,EAa7B,MAAMK,GAAOL,EAAY,KAEnBM,GAAON,EAAY,KAEnBO,GAAYP,EAAY,UAExBQ,GAAUR,EAAY,QAEtBS,GAAST,EAAY,OAErBU,GAAQV,EAAY,MAEpBW,GAAMX,EAAY,IAElBY,GAAQZ,EAAY,MAEpBa,GAAUb,EAAY,QClDtBc,GAAc,uBACrBC,GAAa,IAAI,IAAI,CACvB,CAAC,GAAI,QAAQ,EACb,CAAC,GAAI,OAAO,EACZ,CAAC,GAAI,QAAQ,EACb,CAAC,GAAI,MAAM,EACX,CAAC,GAAI,MAAM,CACf,CAAC,EAEYC,GAEb,OAAO,UAAU,aAAe,KAC1B,CAACC,EAAKrR,IAAUqR,EAAI,YAAYrR,CAAK,EAEnC,CAAC6K,EAAG7K,KAAW6K,EAAE,WAAW7K,CAAK,EAAI,SAAY,OAC1C6K,EAAE,WAAW7K,CAAK,EAAI,OAAU,KAC/B6K,EAAE,WAAW7K,EAAQ,CAAC,EACtB,MACA,MACF6K,EAAE,WAAW7K,CAAK,EAQzB,SAASsR,GAAUD,EAAK,CAC3B,IAAIE,EAAM,GACNC,EAAU,EACVC,EACJ,MAAQA,EAAQP,GAAY,KAAKG,CAAG,KAAO,MAAM,CAC7C,MAAM,EAAII,EAAM,MACVhF,EAAO4E,EAAI,WAAW,CAAC,EACvB7H,EAAO2H,GAAW,IAAI1E,CAAI,EAC5BjD,IAAS,QACT+H,GAAOF,EAAI,UAAUG,EAAS,CAAC,EAAIhI,EACnCgI,EAAU,EAAI,IAGdD,GAAO,GAAGF,EAAI,UAAUG,EAAS,CAAC,CAAC,MAAMJ,GAAaC,EAAK,CAAC,EAAE,SAAS,EAAE,CAAC,IAE1EG,EAAUN,GAAY,WAAa,GAAQzE,EAAO,SAAY,OAE1E,CACI,OAAO8E,EAAMF,EAAI,OAAOG,CAAO,CACnC,CAqBA,SAASE,GAAWC,EAAOC,EAAK,CAC5B,OAAO,SAAgBlC,EAAM,CACzB,IAAI+B,EACAD,EAAU,EACV/T,EAAS,GACb,KAAQgU,EAAQE,EAAM,KAAKjC,CAAI,GACvB8B,IAAYC,EAAM,QAClBhU,GAAUiS,EAAK,UAAU8B,EAASC,EAAM,KAAK,GAGjDhU,GAAUmU,EAAI,IAAIH,EAAM,CAAC,EAAE,WAAW,CAAC,CAAC,EAExCD,EAAUC,EAAM,MAAQ,EAE5B,OAAOhU,EAASiS,EAAK,UAAU8B,CAAO,CACzC,CACL,CAeO,MAAMK,GAAkBH,GAAW,cAAe,IAAI,IAAI,CAC7D,CAAC,GAAI,QAAQ,EACb,CAAC,GAAI,OAAO,EACZ,CAAC,IAAK,QAAQ,CAClB,CAAC,CAAC,EAOWI,GAAaJ,GAAW,eAAgB,IAAI,IAAI,CACzD,CAAC,GAAI,OAAO,EACZ,CAAC,GAAI,MAAM,EACX,CAAC,GAAI,MAAM,EACX,CAAC,IAAK,QAAQ,CAClB,CAAC,CAAC,EClHWK,GAAe,IAAI,IAAI,CAChC,WACA,cACA,eACA,eACA,gBACA,mBACA,WACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,eACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,eACA,gBACA,WACA,iBACA,iBACA,UACJ,EAAE,IAAKC,GAAQ,CAACA,EAAI,YAAa,EAAEA,CAAG,CAAC,CAAC,EAC3BC,GAAiB,IAAI,IAAI,CAClC,gBACA,gBACA,gBACA,gBACA,cACA,WACA,gBACA,kBACA,WACA,cACA,WACA,oBACA,gBACA,eACA,mBACA,YACA,aACA,WACA,eACA,oBACA,eACA,cACA,cACA,mBACA,YACA,aACA,aACA,sBACA,mBACA,eACA,YACA,YACA,YACA,gBACA,sBACA,iBACA,OACA,OACA,cACA,YACA,qBACA,mBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,eACA,iBACA,cACA,UACA,UACA,aACA,UACA,aACA,mBACA,mBACA,YACJ,EAAE,IAAKD,GAAQ,CAACA,EAAI,YAAa,EAAEA,CAAG,CAAC,CAAC,ECvFlCE,GAAoB,IAAI,IAAI,CAC9B,QACA,SACA,MACA,SACA,UACA,WACA,YACA,UACJ,CAAC,EACD,SAASC,GAAc3V,EAAO,CAC1B,OAAOA,EAAM,QAAQ,KAAM,QAAQ,C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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]}
1
+ {"version":3,"file":"nostr-post.es.js","sources":["../../node_modules/@glidejs/glide/dist/glide.esm.js","../../node_modules/entities/dist/esm/generated/decode-data-html.js","../../node_modules/entities/dist/esm/generated/decode-data-xml.js","../../node_modules/entities/dist/esm/decode-codepoint.js","../../node_modules/entities/dist/esm/decode.js","../../node_modules/htmlparser2/dist/esm/Tokenizer.js","../../node_modules/htmlparser2/dist/esm/Parser.js","../../node_modules/domutils/node_modules/domelementtype/lib/esm/index.js","../../node_modules/domutils/node_modules/domhandler/lib/esm/node.js","../../node_modules/dom-serializer/node_modules/domelementtype/lib/esm/index.js","../../node_modules/dom-serializer/node_modules/entities/lib/esm/escape.js","../../node_modules/dom-serializer/lib/esm/foreignNames.js","../../node_modules/dom-serializer/lib/esm/index.js","../../node_modules/domutils/lib/esm/stringify.js","../../node_modules/domutils/lib/esm/querying.js","../../node_modules/domelementtype/index.js","../../node_modules/domhandler/lib/node.js","../../node_modules/domhandler/lib/element.js","../../node_modules/domhandler/index.js","../../src/nostr-post/render.ts","../../src/nostr-post/parse-text.ts","../../src/common/date-utils.ts","../../src/nostr-post/render-content.ts","../../src/base/resolvers/event-resolver.ts","../../src/base/event-component/nostr-event-component.ts","../../src/nostr-post/style.ts","../../src/nostr-post/nostr-post.ts"],"sourcesContent":["/*!\n * Glide.js v3.7.1\n * (c) 2013-2024 Jędrzej Chałubek (https://github.com/jedrzejchalubek/)\n * Released under the MIT License.\n */\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nfunction _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n}\n\nvar defaults = {\n /**\n * Type of the movement.\n *\n * Available types:\n * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n *\n * @type {String}\n */\n type: 'slider',\n\n /**\n * Start at specific slide number defined with zero-based index.\n *\n * @type {Number}\n */\n startAt: 0,\n\n /**\n * A number of slides visible on the single viewport.\n *\n * @type {Number}\n */\n perView: 1,\n\n /**\n * Focus currently active slide at a specified position in the track.\n *\n * Available inputs:\n * `center` - Current slide will be always focused at the center of a track.\n * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n *\n * @type {String|Number}\n */\n focusAt: 0,\n\n /**\n * A size of the gap added between slides.\n *\n * @type {Number}\n */\n gap: 10,\n\n /**\n * Change slides after a specified interval. Use `false` for turning off autoplay.\n *\n * @type {Number|Boolean}\n */\n autoplay: false,\n\n /**\n * Stop autoplay on mouseover event.\n *\n * @type {Boolean}\n */\n hoverpause: true,\n\n /**\n * Allow for changing slides with left and right keyboard arrows.\n *\n * @type {Boolean}\n */\n keyboard: true,\n\n /**\n * Stop running `perView` number of slides from the end. Use this\n * option if you don't want to have an empty space after\n * a slider. Works only with `slider` type and a\n * non-centered `focusAt` setting.\n *\n * @type {Boolean}\n */\n bound: false,\n\n /**\n * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n *\n * @type {Number|Boolean}\n */\n swipeThreshold: 80,\n\n /**\n * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n *\n * @type {Number|Boolean}\n */\n dragThreshold: 120,\n\n /**\n * A number of slides moved on single swipe.\n *\n * Available types:\n * `` - Moves slider by one slide per swipe\n * `|` - Moves slider between views per swipe (number of slides defined in `perView` options)\n *\n * @type {String}\n */\n perSwipe: '',\n\n /**\n * Moving distance ratio of the slides on a swiping and dragging.\n *\n * @type {Number}\n */\n touchRatio: 0.5,\n\n /**\n * Angle required to activate slides moving on swiping or dragging.\n *\n * @type {Number}\n */\n touchAngle: 45,\n\n /**\n * Duration of the animation in milliseconds.\n *\n * @type {Number}\n */\n animationDuration: 400,\n\n /**\n * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n *\n * @type {Boolean}\n */\n rewind: true,\n\n /**\n * Duration of the rewinding animation of the `slider` type in milliseconds.\n *\n * @type {Number}\n */\n rewindDuration: 800,\n\n /**\n * Easing function for the animation.\n *\n * @type {String}\n */\n animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n /**\n * Wait for the animation to finish until the next user input can be processed\n *\n * @type {boolean}\n */\n waitForTransition: true,\n\n /**\n * Throttle costly events at most once per every wait milliseconds.\n *\n * @type {Number}\n */\n throttle: 10,\n\n /**\n * Moving direction mode.\n *\n * Available inputs:\n * - 'ltr' - left to right movement,\n * - 'rtl' - right to left movement.\n *\n * @type {String}\n */\n direction: 'ltr',\n\n /**\n * The distance value of the next and previous viewports which\n * have to peek in the current view. Accepts number and\n * pixels as a string. Left and right peeking can be\n * set up separately with a directions object.\n *\n * For example:\n * `100` - Peek 100px on the both sides.\n * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n *\n * @type {Number|String|Object}\n */\n peek: 0,\n\n /**\n * Defines how many clones of current viewport will be generated.\n *\n * @type {Number}\n */\n cloningRatio: 1,\n\n /**\n * Collection of options applied at specified media breakpoints.\n * For example: display two slides per view under 800px.\n * `{\n * '800px': {\n * perView: 2\n * }\n * }`\n */\n breakpoints: {},\n\n /**\n * Collection of internally used HTML classes.\n *\n * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n * @type {Object}\n */\n classes: {\n swipeable: 'glide--swipeable',\n dragging: 'glide--dragging',\n direction: {\n ltr: 'glide--ltr',\n rtl: 'glide--rtl'\n },\n type: {\n slider: 'glide--slider',\n carousel: 'glide--carousel'\n },\n slide: {\n clone: 'glide__slide--clone',\n active: 'glide__slide--active'\n },\n arrow: {\n disabled: 'glide__arrow--disabled'\n },\n nav: {\n active: 'glide__bullet--active'\n }\n }\n};\n\n/**\n * Outputs warning message to the bowser console.\n *\n * @param {String} msg\n * @return {Void}\n */\nfunction warn(msg) {\n console.error(\"[Glide warn]: \".concat(msg));\n}\n\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toInt(value) {\n return parseInt(value);\n}\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\nfunction toFloat(value) {\n return parseFloat(value);\n}\n/**\n * Indicates whether the specified value is a string.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isString(value) {\n return typeof value === 'string';\n}\n/**\n * Indicates whether the specified value is an object.\n *\n * @param {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction isObject(value) {\n var type = _typeof(value);\n\n return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n/**\n * Indicates whether the specified value is a function.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n/**\n * Indicates whether the specified value is an array.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isArray(value) {\n return value.constructor === Array;\n}\n\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\n\nfunction mount(glide, extensions, events) {\n var components = {};\n\n for (var name in extensions) {\n if (isFunction(extensions[name])) {\n components[name] = extensions[name](glide, components, events);\n } else {\n warn('Extension must be a function');\n }\n }\n\n for (var _name in components) {\n if (isFunction(components[_name].mount)) {\n components[_name].mount();\n }\n }\n\n return components;\n}\n\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param {Object} obj Object where property has to be defined.\n * @param {String} prop Name of the defined property.\n * @param {Object} definition Get and set definitions for the property.\n * @return {Void}\n */\nfunction define(obj, prop, definition) {\n Object.defineProperty(obj, prop, definition);\n}\n/**\n * Sorts aphabetically object keys.\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction sortKeys(obj) {\n return Object.keys(obj).sort().reduce(function (r, k) {\n r[k] = obj[k];\n return r[k], r;\n }, {});\n}\n/**\n * Merges passed settings object with default options.\n *\n * @param {Object} defaults\n * @param {Object} settings\n * @return {Object}\n */\n\nfunction mergeOptions(defaults, settings) {\n var options = Object.assign({}, defaults, settings); // `Object.assign` do not deeply merge objects, so we\n // have to do it manually for every nested object\n // in options. Although it does not look smart,\n // it's smaller and faster than some fancy\n // merging deep-merge algorithm script.\n\n if (settings.hasOwnProperty('classes')) {\n options.classes = Object.assign({}, defaults.classes, settings.classes);\n var properties = ['direction', 'type', 'slide', 'arrow', 'nav'];\n properties.forEach(function (property) {\n if (settings.classes.hasOwnProperty(property)) {\n options.classes[property] = _objectSpread2(_objectSpread2({}, defaults.classes[property]), settings.classes[property]);\n }\n });\n }\n\n if (settings.hasOwnProperty('breakpoints')) {\n options.breakpoints = Object.assign({}, defaults.breakpoints, settings.breakpoints);\n }\n\n return options;\n}\n\nvar EventsBus = /*#__PURE__*/function () {\n /**\n * Construct a EventBus instance.\n *\n * @param {Object} events\n */\n function EventsBus() {\n var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBus);\n\n this.events = events;\n this.hop = events.hasOwnProperty;\n }\n /**\n * Adds listener to the specifed event.\n *\n * @param {String|Array} event\n * @param {Function} handler\n */\n\n\n _createClass(EventsBus, [{\n key: \"on\",\n value: function on(event, handler) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.on(event[i], handler);\n }\n\n return;\n } // Create the event's object if not yet created\n\n\n if (!this.hop.call(this.events, event)) {\n this.events[event] = [];\n } // Add the handler to queue\n\n\n var index = this.events[event].push(handler) - 1; // Provide handle back for removal of event\n\n return {\n remove: function remove() {\n delete this.events[event][index];\n }\n };\n }\n /**\n * Runs registered handlers for specified event.\n *\n * @param {String|Array} event\n * @param {Object=} context\n */\n\n }, {\n key: \"emit\",\n value: function emit(event, context) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.emit(event[i], context);\n }\n\n return;\n } // If the event doesn't exist, or there's no handlers in queue, just leave\n\n\n if (!this.hop.call(this.events, event)) {\n return;\n } // Cycle through events queue, fire!\n\n\n this.events[event].forEach(function (item) {\n item(context || {});\n });\n }\n }]);\n\n return EventsBus;\n}();\n\nvar Glide$1 = /*#__PURE__*/function () {\n /**\r\n * Construct glide.\r\n *\r\n * @param {String} selector\r\n * @param {Object} options\r\n */\n function Glide(selector) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Glide);\n\n this._c = {};\n this._t = [];\n this._e = new EventsBus();\n this.disabled = false;\n this.selector = selector;\n this.settings = mergeOptions(defaults, options);\n this.index = this.settings.startAt;\n }\n /**\r\n * Initializes glide.\r\n *\r\n * @param {Object} extensions Collection of extensions to initialize.\r\n * @return {Glide}\r\n */\n\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount$1() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._e.emit('mount.before');\n\n if (isObject(extensions)) {\n this._c = mount(this, extensions, this._e);\n } else {\n warn('You need to provide a object on `mount()`');\n }\n\n this._e.emit('mount.after');\n\n return this;\n }\n /**\r\n * Collects an instance `translate` transformers.\r\n *\r\n * @param {Array} transformers Collection of transformers.\r\n * @return {Void}\r\n */\n\n }, {\n key: \"mutate\",\n value: function mutate() {\n var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (isArray(transformers)) {\n this._t = transformers;\n } else {\n warn('You need to provide a array on `mutate()`');\n }\n\n return this;\n }\n /**\r\n * Updates glide with specified settings.\r\n *\r\n * @param {Object} settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"update\",\n value: function update() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.settings = mergeOptions(this.settings, settings);\n\n if (settings.hasOwnProperty('startAt')) {\n this.index = settings.startAt;\n }\n\n this._e.emit('update');\n\n return this;\n }\n /**\r\n * Change slide with specified pattern. A pattern must be in the special format:\r\n * `>` - Move one forward\r\n * `<` - Move one backward\r\n * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\r\n * `>>` - Rewinds to end (last slide)\r\n * `<<` - Rewinds to start (first slide)\r\n * `|>` - Move one viewport forward\r\n * `|<` - Move one viewport backward\r\n *\r\n * @param {String} pattern\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"go\",\n value: function go(pattern) {\n this._c.Run.make(pattern);\n\n return this;\n }\n /**\r\n * Move track by specified distance.\r\n *\r\n * @param {String} distance\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"move\",\n value: function move(distance) {\n this._c.Transition.disable();\n\n this._c.Move.make(distance);\n\n return this;\n }\n /**\r\n * Destroy instance and revert all changes done by this._c.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this._e.emit('destroy');\n\n return this;\n }\n /**\r\n * Start instance autoplaying.\r\n *\r\n * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"play\",\n value: function play() {\n var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (interval) {\n this.settings.autoplay = interval;\n }\n\n this._e.emit('play');\n\n return this;\n }\n /**\r\n * Stop instance autoplaying.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"pause\",\n value: function pause() {\n this._e.emit('pause');\n\n return this;\n }\n /**\r\n * Sets glide into a idle status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"disable\",\n value: function disable() {\n this.disabled = true;\n return this;\n }\n /**\r\n * Sets glide into a active status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"enable\",\n value: function enable() {\n this.disabled = false;\n return this;\n }\n /**\r\n * Adds cuutom event listener with handler.\r\n *\r\n * @param {String|Array} event\r\n * @param {Function} handler\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"on\",\n value: function on(event, handler) {\n this._e.on(event, handler);\n\n return this;\n }\n /**\r\n * Checks if glide is a precised type.\r\n *\r\n * @param {String} name\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"isType\",\n value: function isType(name) {\n return this.settings.type === name;\n }\n /**\r\n * Gets value of the core options.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: \"settings\",\n get: function get() {\n return this._o;\n }\n /**\r\n * Sets value of the core options.\r\n *\r\n * @param {Object} o\r\n * @return {Void}\r\n */\n ,\n set: function set(o) {\n if (isObject(o)) {\n this._o = o;\n } else {\n warn('Options must be an `object` instance.');\n }\n }\n /**\r\n * Gets current index of the slider.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: \"index\",\n get: function get() {\n return this._i;\n }\n /**\r\n * Sets current index a slider.\r\n *\r\n * @return {Object}\r\n */\n ,\n set: function set(i) {\n this._i = toInt(i);\n }\n /**\r\n * Gets type name of the slider.\r\n *\r\n * @return {String}\r\n */\n\n }, {\n key: \"type\",\n get: function get() {\n return this.settings.type;\n }\n /**\r\n * Gets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"disabled\",\n get: function get() {\n return this._d;\n }\n /**\r\n * Sets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n ,\n set: function set(status) {\n this._d = !!status;\n }\n }]);\n\n return Glide;\n}();\n\nfunction Run (Glide, Components, Events) {\n var Run = {\n /**\n * Initializes autorunning of the glide.\n *\n * @return {Void}\n */\n mount: function mount() {\n this._o = false;\n },\n\n /**\n * Makes glides running based on the passed moving schema.\n *\n * @param {String} move\n */\n make: function make(move) {\n var _this = this;\n\n if (!Glide.disabled) {\n !Glide.settings.waitForTransition || Glide.disable();\n this.move = move;\n Events.emit('run.before', this.move);\n this.calculate();\n Events.emit('run', this.move);\n Components.Transition.after(function () {\n if (_this.isStart()) {\n Events.emit('run.start', _this.move);\n }\n\n if (_this.isEnd()) {\n Events.emit('run.end', _this.move);\n }\n\n if (_this.isOffset()) {\n _this._o = false;\n Events.emit('run.offset', _this.move);\n }\n\n Events.emit('run.after', _this.move);\n Glide.enable();\n });\n }\n },\n\n /**\n * Calculates current index based on defined move.\n *\n * @return {Number|Undefined}\n */\n calculate: function calculate() {\n var move = this.move,\n length = this.length;\n var steps = move.steps,\n direction = move.direction; // By default assume that size of view is equal to one slide\n\n var viewSize = 1; // While direction is `=` we want jump to\n // a specified index described in steps.\n\n if (direction === '=') {\n // Check if bound is true, \n // as we want to avoid whitespaces.\n if (Glide.settings.bound && toInt(steps) > length) {\n Glide.index = length;\n return;\n }\n\n Glide.index = steps;\n return;\n } // When pattern is equal to `>>` we want\n // fast forward to the last slide.\n\n\n if (direction === '>' && steps === '>') {\n Glide.index = length;\n return;\n } // When pattern is equal to `<<` we want\n // fast forward to the first slide.\n\n\n if (direction === '<' && steps === '<') {\n Glide.index = 0;\n return;\n } // pagination movement\n\n\n if (direction === '|') {\n viewSize = Glide.settings.perView || 1;\n } // we are moving forward\n\n\n if (direction === '>' || direction === '|' && steps === '>') {\n var index = calculateForwardIndex(viewSize);\n\n if (index > length) {\n this._o = true;\n }\n\n Glide.index = normalizeForwardIndex(index, viewSize);\n return;\n } // we are moving backward\n\n\n if (direction === '<' || direction === '|' && steps === '<') {\n var _index = calculateBackwardIndex(viewSize);\n\n if (_index < 0) {\n this._o = true;\n }\n\n Glide.index = normalizeBackwardIndex(_index, viewSize);\n return;\n }\n\n warn(\"Invalid direction pattern [\".concat(direction).concat(steps, \"] has been used\"));\n },\n\n /**\n * Checks if we are on the first slide.\n *\n * @return {Boolean}\n */\n isStart: function isStart() {\n return Glide.index <= 0;\n },\n\n /**\n * Checks if we are on the last slide.\n *\n * @return {Boolean}\n */\n isEnd: function isEnd() {\n return Glide.index >= this.length;\n },\n\n /**\n * Checks if we are making a offset run.\n *\n * @param {String} direction\n * @return {Boolean}\n */\n isOffset: function isOffset() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n if (!direction) {\n return this._o;\n }\n\n if (!this._o) {\n return false;\n } // did we view to the right?\n\n\n if (direction === '|>') {\n return this.move.direction === '|' && this.move.steps === '>';\n } // did we view to the left?\n\n\n if (direction === '|<') {\n return this.move.direction === '|' && this.move.steps === '<';\n }\n\n return this.move.direction === direction;\n },\n\n /**\n * Checks if bound mode is active\n *\n * @return {Boolean}\n */\n isBound: function isBound() {\n return Glide.isType('slider') && Glide.settings.focusAt !== 'center' && Glide.settings.bound;\n }\n };\n /**\n * Returns index value to move forward/to the right\n *\n * @param viewSize\n * @returns {Number}\n */\n\n function calculateForwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index + viewSize;\n }\n\n return index + (viewSize - index % viewSize);\n }\n /**\n * Normalizes the given forward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {Number}\n */\n\n\n function normalizeForwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index <= length) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index - (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on the last possible index value given by bound\n if (Run.isBound() && !Run.isEnd()) {\n return length;\n }\n\n return 0;\n }\n\n if (Run.isBound()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n /**\n * Calculates index value to move backward/to the left\n *\n * @param viewSize\n * @returns {Number}\n */\n\n\n function calculateBackwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index - viewSize;\n } // ensure our back navigation results in the same index as a forward navigation\n // to experience a homogeneous paging\n\n\n var view = Math.ceil(index / viewSize);\n return (view - 1) * viewSize;\n }\n /**\n * Normalizes the given backward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {*}\n */\n\n\n function normalizeBackwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index >= 0) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index + (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on first possible index value before we to rewind to the length given by bound\n if (Run.isBound() && Run.isStart()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n\n return 0;\n }\n\n define(Run, 'move', {\n /**\n * Gets value of the move schema.\n *\n * @returns {Object}\n */\n get: function get() {\n return this._m;\n },\n\n /**\n * Sets value of the move schema.\n *\n * @returns {Object}\n */\n set: function set(value) {\n var step = value.substr(1);\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 0\n };\n }\n });\n define(Run, 'length', {\n /**\n * Gets value of the running distance based\n * on zero-indexing number of slides.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n var length = Components.Html.slides.length; // If the `bound` option is active, a maximum running distance should be\n // reduced by `perView` and `focusAt` settings. Running distance\n // should end before creating an empty space after instance.\n\n if (this.isBound()) {\n return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n }\n\n return length - 1;\n }\n });\n define(Run, 'offset', {\n /**\n * Gets status of the offsetting flag.\n *\n * @return {Boolean}\n */\n get: function get() {\n return this._o;\n }\n });\n return Run;\n}\n\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\nfunction now() {\n return new Date().getTime();\n}\n\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction throttle(func, wait) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var timeout, context, args, result;\n var previous = 0;\n\n var later = function later() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function throttled() {\n var at = now();\n if (!previous && options.leading === false) previous = at;\n var remaining = wait - (at - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = at;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n\nvar MARGIN_TYPE = {\n ltr: ['marginLeft', 'marginRight'],\n rtl: ['marginRight', 'marginLeft']\n};\nfunction Gaps (Glide, Components, Events) {\n var Gaps = {\n /**\n * Applies gaps between slides. First and last\n * slides do not receive it's edge margins.\n *\n * @param {HTMLCollection} slides\n * @return {Void}\n */\n apply: function apply(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n var direction = Components.Direction.value;\n\n if (i !== 0) {\n style[MARGIN_TYPE[direction][0]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][0]] = '';\n }\n\n if (i !== slides.length - 1) {\n style[MARGIN_TYPE[direction][1]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][1]] = '';\n }\n }\n },\n\n /**\n * Removes gaps from the slides.\n *\n * @param {HTMLCollection} slides\n * @returns {Void}\n */\n remove: function remove(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n style.marginLeft = '';\n style.marginRight = '';\n }\n }\n };\n define(Gaps, 'value', {\n /**\n * Gets value of the gap.\n *\n * @returns {Number}\n */\n get: function get() {\n return toInt(Glide.settings.gap);\n }\n });\n define(Gaps, 'grow', {\n /**\n * Gets additional dimensions value caused by gaps.\n * Used to increase width of the slides wrapper.\n *\n * @returns {Number}\n */\n get: function get() {\n return Gaps.value * Components.Sizes.length;\n }\n });\n define(Gaps, 'reductor', {\n /**\n * Gets reduction value caused by gaps.\n * Used to subtract width of the slides.\n *\n * @returns {Number}\n */\n get: function get() {\n var perView = Glide.settings.perView;\n return Gaps.value * (perView - 1) / perView;\n }\n });\n /**\n * Apply calculated gaps:\n * - after building, so slides (including clones) will receive proper margins\n * - on updating via API, to recalculate gaps with new options\n */\n\n Events.on(['build.after', 'update'], throttle(function () {\n Gaps.apply(Components.Html.wrapper.children);\n }, 30));\n /**\n * Remove gaps:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Gaps.remove(Components.Html.wrapper.children);\n });\n return Gaps;\n}\n\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param {Element} node\n * @return {Array}\n */\nfunction siblings(node) {\n if (node && node.parentNode) {\n var n = node.parentNode.firstChild;\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== node) {\n matched.push(n);\n }\n }\n\n return matched;\n }\n\n return [];\n}\n/**\n * Coerces a NodeList to an Array.\n *\n * @param {NodeList} nodeList\n * @return {Array}\n */\n\nfunction toArray(nodeList) {\n return Array.prototype.slice.call(nodeList);\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\nfunction Html (Glide, Components, Events) {\n var Html = {\n /**\n * Setup slider HTML nodes.\n *\n * @param {Glide} glide\n */\n mount: function mount() {\n this.root = Glide.selector;\n this.track = this.root.querySelector(TRACK_SELECTOR);\n this.collectSlides();\n },\n\n /**\n * Collect slides\n */\n collectSlides: function collectSlides() {\n this.slides = toArray(this.wrapper.children).filter(function (slide) {\n return !slide.classList.contains(Glide.settings.classes.slide.clone);\n });\n }\n };\n define(Html, 'root', {\n /**\n * Gets node of the glide main element.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._r;\n },\n\n /**\n * Sets node of the glide main element.\n *\n * @return {Object}\n */\n set: function set(r) {\n if (isString(r)) {\n r = document.querySelector(r);\n }\n\n if (r !== null) {\n Html._r = r;\n } else {\n warn('Root element must be a existing Html node');\n }\n }\n });\n define(Html, 'track', {\n /**\n * Gets node of the glide track with slides.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._t;\n },\n\n /**\n * Sets node of the glide track with slides.\n *\n * @return {Object}\n */\n set: function set(t) {\n Html._t = t;\n }\n });\n define(Html, 'wrapper', {\n /**\n * Gets node of the slides wrapper.\n *\n * @return {Object}\n */\n get: function get() {\n return Html.track.children[0];\n }\n });\n /**\n * Add/remove/reorder dynamic slides\n */\n\n Events.on('update', function () {\n Html.collectSlides();\n });\n return Html;\n}\n\nfunction Peek (Glide, Components, Events) {\n var Peek = {\n /**\n * Setups how much to peek based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.peek;\n }\n };\n define(Peek, 'value', {\n /**\n * Gets value of the peek.\n *\n * @returns {Number|Object}\n */\n get: function get() {\n return Peek._v;\n },\n\n /**\n * Sets value of the peek.\n *\n * @param {Number|Object} value\n * @return {Void}\n */\n set: function set(value) {\n if (isObject(value)) {\n value.before = toInt(value.before);\n value.after = toInt(value.after);\n } else {\n value = toInt(value);\n }\n\n Peek._v = value;\n }\n });\n define(Peek, 'reductor', {\n /**\n * Gets reduction value caused by peek.\n *\n * @returns {Number}\n */\n get: function get() {\n var value = Peek.value;\n var perView = Glide.settings.perView;\n\n if (isObject(value)) {\n return value.before / perView + value.after / perView;\n }\n\n return value * 2 / perView;\n }\n });\n /**\n * Recalculate peeking sizes on:\n * - when resizing window to update to proper percents\n */\n\n Events.on(['resize', 'update'], function () {\n Peek.mount();\n });\n return Peek;\n}\n\nfunction Move (Glide, Components, Events) {\n var Move = {\n /**\n * Constructs move component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n this._o = 0;\n },\n\n /**\n * Calculates a movement value based on passed offset and currently active index.\n *\n * @param {Number} offset\n * @return {Void}\n */\n make: function make() {\n var _this = this;\n\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this.offset = offset;\n Events.emit('move', {\n movement: this.value\n });\n Components.Transition.after(function () {\n Events.emit('move.after', {\n movement: _this.value\n });\n });\n }\n };\n define(Move, 'offset', {\n /**\n * Gets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n get: function get() {\n return Move._o;\n },\n\n /**\n * Sets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n set: function set(value) {\n Move._o = !isUndefined(value) ? toInt(value) : 0;\n }\n });\n define(Move, 'translate', {\n /**\n * Gets a raw movement value.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Sizes.slideWidth * Glide.index;\n }\n });\n define(Move, 'value', {\n /**\n * Gets an actual movement value corrected by offset.\n *\n * @return {Number}\n */\n get: function get() {\n var offset = this.offset;\n var translate = this.translate;\n\n if (Components.Direction.is('rtl')) {\n return translate + offset;\n }\n\n return translate - offset;\n }\n });\n /**\n * Make movement to proper slide on:\n * - before build, so glide will start at `startAt` index\n * - on each standard run to move to newly calculated index\n */\n\n Events.on(['build.before', 'run'], function () {\n Move.make();\n });\n return Move;\n}\n\nfunction Sizes (Glide, Components, Events) {\n var Sizes = {\n /**\n * Setups dimensions of slides.\n *\n * @return {Void}\n */\n setupSlides: function setupSlides() {\n var width = \"\".concat(this.slideWidth, \"px\");\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = width;\n }\n },\n\n /**\n * Setups dimensions of slides wrapper.\n *\n * @return {Void}\n */\n setupWrapper: function setupWrapper() {\n Components.Html.wrapper.style.width = \"\".concat(this.wrapperSize, \"px\");\n },\n\n /**\n * Removes applied styles from HTML elements.\n *\n * @returns {Void}\n */\n remove: function remove() {\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = '';\n }\n\n Components.Html.wrapper.style.width = '';\n }\n };\n define(Sizes, 'length', {\n /**\n * Gets count number of the slides.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.slides.length;\n }\n });\n define(Sizes, 'width', {\n /**\n * Gets width value of the slider (visible area).\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.track.offsetWidth;\n }\n });\n define(Sizes, 'wrapperSize', {\n /**\n * Gets size of the slides wrapper.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n }\n });\n define(Sizes, 'slideWidth', {\n /**\n * Gets width value of a single slide.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n }\n });\n /**\n * Apply calculated glide's dimensions:\n * - before building, so other dimensions (e.g. translate) will be calculated propertly\n * - when resizing window to recalculate sildes dimensions\n * - on updating via API, to calculate dimensions based on new options\n */\n\n Events.on(['build.before', 'resize', 'update'], function () {\n Sizes.setupSlides();\n Sizes.setupWrapper();\n });\n /**\n * Remove calculated glide's dimensions:\n * - on destoting to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Sizes.remove();\n });\n return Sizes;\n}\n\nfunction Build (Glide, Components, Events) {\n var Build = {\n /**\n * Init glide building. Adds classes, sets\n * dimensions and setups initial state.\n *\n * @return {Void}\n */\n mount: function mount() {\n Events.emit('build.before');\n this.typeClass();\n this.activeClass();\n Events.emit('build.after');\n },\n\n /**\n * Adds `type` class to the glide element.\n *\n * @return {Void}\n */\n typeClass: function typeClass() {\n Components.Html.root.classList.add(Glide.settings.classes.type[Glide.settings.type]);\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n activeClass: function activeClass() {\n var classes = Glide.settings.classes;\n var slide = Components.Html.slides[Glide.index];\n\n if (slide) {\n slide.classList.add(classes.slide.active);\n siblings(slide).forEach(function (sibling) {\n sibling.classList.remove(classes.slide.active);\n });\n }\n },\n\n /**\n * Removes HTML classes applied at building.\n *\n * @return {Void}\n */\n removeClasses: function removeClasses() {\n var _Glide$settings$class = Glide.settings.classes,\n type = _Glide$settings$class.type,\n slide = _Glide$settings$class.slide;\n Components.Html.root.classList.remove(type[Glide.settings.type]);\n Components.Html.slides.forEach(function (sibling) {\n sibling.classList.remove(slide.active);\n });\n }\n };\n /**\n * Clear building classes:\n * - on destroying to bring HTML to its initial state\n * - on updating to remove classes before remounting component\n */\n\n Events.on(['destroy', 'update'], function () {\n Build.removeClasses();\n });\n /**\n * Remount component:\n * - on resizing of the window to calculate new dimensions\n * - on updating settings via API\n */\n\n Events.on(['resize', 'update'], function () {\n Build.mount();\n });\n /**\n * Swap active class of current slide:\n * - after each move to the new index\n */\n\n Events.on('move.after', function () {\n Build.activeClass();\n });\n return Build;\n}\n\nfunction Clones (Glide, Components, Events) {\n var Clones = {\n /**\n * Create pattern map and collect slides to be cloned.\n */\n mount: function mount() {\n this.items = [];\n\n if (Glide.isType('carousel')) {\n this.items = this.collect();\n }\n },\n\n /**\n * Collect clones with pattern.\n *\n * @return {[]}\n */\n collect: function collect() {\n var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var slides = Components.Html.slides;\n var _Glide$settings = Glide.settings,\n perView = _Glide$settings.perView,\n classes = _Glide$settings.classes,\n cloningRatio = _Glide$settings.cloningRatio;\n\n if (slides.length > 0) {\n var peekIncrementer = +!!Glide.settings.peek;\n var cloneCount = perView + peekIncrementer + Math.round(perView / 2);\n var append = slides.slice(0, cloneCount).reverse();\n var prepend = slides.slice(cloneCount * -1);\n\n for (var r = 0; r < Math.max(cloningRatio, Math.floor(perView / slides.length)); r++) {\n for (var i = 0; i < append.length; i++) {\n var clone = append[i].cloneNode(true);\n clone.classList.add(classes.slide.clone);\n items.push(clone);\n }\n\n for (var _i = 0; _i < prepend.length; _i++) {\n var _clone = prepend[_i].cloneNode(true);\n\n _clone.classList.add(classes.slide.clone);\n\n items.unshift(_clone);\n }\n }\n }\n\n return items;\n },\n\n /**\n * Append cloned slides with generated pattern.\n *\n * @return {Void}\n */\n append: function append() {\n var items = this.items;\n var _Components$Html = Components.Html,\n wrapper = _Components$Html.wrapper,\n slides = _Components$Html.slides;\n var half = Math.floor(items.length / 2);\n var prepend = items.slice(0, half).reverse();\n var append = items.slice(half * -1).reverse();\n var width = \"\".concat(Components.Sizes.slideWidth, \"px\");\n\n for (var i = 0; i < append.length; i++) {\n wrapper.appendChild(append[i]);\n }\n\n for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n wrapper.insertBefore(prepend[_i2], slides[0]);\n }\n\n for (var _i3 = 0; _i3 < items.length; _i3++) {\n items[_i3].style.width = width;\n }\n },\n\n /**\n * Remove all cloned slides.\n *\n * @return {Void}\n */\n remove: function remove() {\n var items = this.items;\n\n for (var i = 0; i < items.length; i++) {\n Components.Html.wrapper.removeChild(items[i]);\n }\n }\n };\n define(Clones, 'grow', {\n /**\n * Gets additional dimensions value caused by clones.\n *\n * @return {Number}\n */\n get: function get() {\n return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n }\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('update', function () {\n Clones.remove();\n Clones.mount();\n Clones.append();\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('build.before', function () {\n if (Glide.isType('carousel')) {\n Clones.append();\n }\n });\n /**\n * Remove clones HTMLElements:\n * - on destroying, to bring HTML to its initial state\n */\n\n Events.on('destroy', function () {\n Clones.remove();\n });\n return Clones;\n}\n\nvar EventsBinder = /*#__PURE__*/function () {\n /**\n * Construct a EventsBinder instance.\n */\n function EventsBinder() {\n var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBinder);\n\n this.listeners = listeners;\n }\n /**\n * Adds events listeners to arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Function} closure\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n\n _createClass(EventsBinder, [{\n key: \"on\",\n value: function on(events, el, closure) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n this.listeners[events[i]] = closure;\n el.addEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Removes event listeners from arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n }, {\n key: \"off\",\n value: function off(events, el) {\n var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n el.removeEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Destroy collected listeners.\n *\n * @returns {Void}\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n delete this.listeners;\n }\n }]);\n\n return EventsBinder;\n}();\n\nfunction Resize (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Resize = {\n /**\n * Initializes window bindings.\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `rezsize` listener to the window.\n * It's a costly event, so we are debouncing it.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('resize', window, throttle(function () {\n Events.emit('resize');\n }, Glide.settings.throttle));\n },\n\n /**\n * Unbinds listeners from the window.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('resize', window);\n }\n };\n /**\n * Remove bindings from window:\n * - on destroying, to remove added EventListener\n */\n\n Events.on('destroy', function () {\n Resize.unbind();\n Binder.destroy();\n });\n return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n '>': '<',\n '<': '>',\n '=': '='\n};\nfunction Direction (Glide, Components, Events) {\n var Direction = {\n /**\n * Setups gap value based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.direction;\n },\n\n /**\n * Resolves pattern based on direction value\n *\n * @param {String} pattern\n * @returns {String}\n */\n resolve: function resolve(pattern) {\n var token = pattern.slice(0, 1);\n\n if (this.is('rtl')) {\n return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n }\n\n return pattern;\n },\n\n /**\n * Checks value of direction mode.\n *\n * @param {String} direction\n * @returns {Boolean}\n */\n is: function is(direction) {\n return this.value === direction;\n },\n\n /**\n * Applies direction class to the root HTML element.\n *\n * @return {Void}\n */\n addClass: function addClass() {\n Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n },\n\n /**\n * Removes direction class from the root HTML element.\n *\n * @return {Void}\n */\n removeClass: function removeClass() {\n Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n }\n };\n define(Direction, 'value', {\n /**\n * Gets value of the direction.\n *\n * @returns {Number}\n */\n get: function get() {\n return Direction._v;\n },\n\n /**\n * Sets value of the direction.\n *\n * @param {String} value\n * @return {Void}\n */\n set: function set(value) {\n if (VALID_DIRECTIONS.indexOf(value) > -1) {\n Direction._v = value;\n } else {\n warn('Direction value must be `ltr` or `rtl`');\n }\n }\n });\n /**\n * Clear direction class:\n * - on destroy to bring HTML to its initial state\n * - on update to remove class before reappling bellow\n */\n\n Events.on(['destroy', 'update'], function () {\n Direction.removeClass();\n });\n /**\n * Remount component:\n * - on update to reflect changes in direction value\n */\n\n Events.on('update', function () {\n Direction.mount();\n });\n /**\n * Apply direction class:\n * - before building to apply class for the first time\n * - on updating to reapply direction class that may changed\n */\n\n Events.on(['build.before', 'update'], function () {\n Direction.addClass();\n });\n return Direction;\n}\n\n/**\n * Reflects value of glide movement.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Rtl (Glide, Components) {\n return {\n /**\n * Negates the passed translate if glide is in RTL option.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Components.Direction.is('rtl')) {\n return -translate;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Gap (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with number in the `gap` settings.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var multiplier = Math.floor(translate / Components.Sizes.slideWidth);\n return translate + Components.Gaps.value * multiplier;\n }\n };\n}\n\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Grow (Glide, Components) {\n return {\n /**\n * Adds to the passed translate width of the half of clones.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Clones.grow / 2;\n }\n };\n}\n\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\nfunction Peeking (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with a `peek` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Glide.settings.focusAt >= 0) {\n var peek = Components.Peek.value;\n\n if (isObject(peek)) {\n return translate - peek.before;\n }\n\n return translate - peek;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Focusing (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with index in the `focusAt` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var gap = Components.Gaps.value;\n var width = Components.Sizes.width;\n var focusAt = Glide.settings.focusAt;\n var slideWidth = Components.Sizes.slideWidth;\n\n if (focusAt === 'center') {\n return translate - (width / 2 - slideWidth / 2);\n }\n\n return translate - slideWidth * focusAt - gap * focusAt;\n }\n };\n}\n\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\nfunction mutator (Glide, Components, Events) {\n /**\n * Merge instance transformers with collection of default transformers.\n * It's important that the Rtl component be last on the list,\n * so it reflects all previous transformations.\n *\n * @type {Array}\n */\n var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n return {\n /**\n * Piplines translate value with registered transformers.\n *\n * @param {Number} translate\n * @return {Number}\n */\n mutate: function mutate(translate) {\n for (var i = 0; i < TRANSFORMERS.length; i++) {\n var transformer = TRANSFORMERS[i];\n\n if (isFunction(transformer) && isFunction(transformer().modify)) {\n translate = transformer(Glide, Components, Events).modify(translate);\n } else {\n warn('Transformer should be a function that returns an object with `modify()` method');\n }\n }\n\n return translate;\n }\n };\n}\n\nfunction Translate (Glide, Components, Events) {\n var Translate = {\n /**\n * Sets value of translate on HTML element.\n *\n * @param {Number} value\n * @return {Void}\n */\n set: function set(value) {\n var transform = mutator(Glide, Components).mutate(value);\n var translate3d = \"translate3d(\".concat(-1 * transform, \"px, 0px, 0px)\");\n Components.Html.wrapper.style.mozTransform = translate3d; // needed for supported Firefox 10-15\n\n Components.Html.wrapper.style.webkitTransform = translate3d; // needed for supported Chrome 10-35, Safari 5.1-8, and Opera 15-22\n\n Components.Html.wrapper.style.transform = translate3d;\n },\n\n /**\n * Removes value of translate from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transform = '';\n },\n\n /**\n * @return {number}\n */\n getStartIndex: function getStartIndex() {\n var length = Components.Sizes.length;\n var index = Glide.index;\n var perView = Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n return length + (index - perView);\n } // \"modulo length\" converts an index that equals length to zero\n\n\n return (index + perView) % length;\n },\n\n /**\n * @return {number}\n */\n getTravelDistance: function getTravelDistance() {\n var travelDistance = Components.Sizes.slideWidth * Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n // reverse travel distance so that we don't have to change subtract operations\n return travelDistance * -1;\n }\n\n return travelDistance;\n }\n };\n /**\n * Set new translate value:\n * - on move to reflect index change\n * - on updating via API to reflect possible changes in options\n */\n\n Events.on('move', function (context) {\n if (!Glide.isType('carousel') || !Components.Run.isOffset()) {\n return Translate.set(context.movement);\n }\n\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n Translate.set(Components.Sizes.slideWidth * Glide.index);\n });\n var startWidth = Components.Sizes.slideWidth * Components.Translate.getStartIndex();\n return Translate.set(startWidth - Components.Translate.getTravelDistance());\n });\n /**\n * Remove translate:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Translate.remove();\n });\n return Translate;\n}\n\nfunction Transition (Glide, Components, Events) {\n /**\n * Holds inactivity status of transition.\n * When true transition is not applied.\n *\n * @type {Boolean}\n */\n var disabled = false;\n var Transition = {\n /**\n * Composes string of the CSS transition.\n *\n * @param {String} property\n * @return {String}\n */\n compose: function compose(property) {\n var settings = Glide.settings;\n\n if (disabled) {\n return \"\".concat(property, \" 0ms \").concat(settings.animationTimingFunc);\n }\n\n return \"\".concat(property, \" \").concat(this.duration, \"ms \").concat(settings.animationTimingFunc);\n },\n\n /**\n * Sets value of transition on HTML element.\n *\n * @param {String=} property\n * @return {Void}\n */\n set: function set() {\n var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n Components.Html.wrapper.style.transition = this.compose(property);\n },\n\n /**\n * Removes value of transition from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transition = '';\n },\n\n /**\n * Runs callback after animation.\n *\n * @param {Function} callback\n * @return {Void}\n */\n after: function after(callback) {\n setTimeout(function () {\n callback();\n }, this.duration);\n },\n\n /**\n * Enable transition.\n *\n * @return {Void}\n */\n enable: function enable() {\n disabled = false;\n this.set();\n },\n\n /**\n * Disable transition.\n *\n * @return {Void}\n */\n disable: function disable() {\n disabled = true;\n this.set();\n }\n };\n define(Transition, 'duration', {\n /**\n * Gets duration of the transition based\n * on currently running animation type.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n\n if (Glide.isType('slider') && Components.Run.offset) {\n return settings.rewindDuration;\n }\n\n return settings.animationDuration;\n }\n });\n /**\n * Set transition `style` value:\n * - on each moving, because it may be cleared by offset move\n */\n\n Events.on('move', function () {\n Transition.set();\n });\n /**\n * Disable transition:\n * - before initial build to avoid transitioning from `0` to `startAt` index\n * - while resizing window and recalculating dimensions\n * - on jumping from offset transition at start and end edges in `carousel` type\n */\n\n Events.on(['build.before', 'resize', 'translate.jump'], function () {\n Transition.disable();\n });\n /**\n * Enable transition:\n * - on each running, because it may be disabled by offset move\n */\n\n Events.on('run', function () {\n Transition.enable();\n });\n /**\n * Remove transition:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Transition.remove();\n });\n return Transition;\n}\n\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\nvar supportsPassive = false;\n\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\n\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\nfunction Swipe (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var swipeSin = 0;\n var swipeStartX = 0;\n var swipeStartY = 0;\n var disabled = false;\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Swipe = {\n /**\n * Initializes swipe bindings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bindSwipeStart();\n },\n\n /**\n * Handler for `swipestart` event. Calculates entry points of the user's tap.\n *\n * @param {Object} event\n * @return {Void}\n */\n start: function start(event) {\n if (!disabled && !Glide.disabled) {\n this.disable();\n var swipe = this.touches(event);\n swipeSin = null;\n swipeStartX = toInt(swipe.pageX);\n swipeStartY = toInt(swipe.pageY);\n this.bindSwipeMove();\n this.bindSwipeEnd();\n Events.emit('swipe.start');\n }\n },\n\n /**\n * Handler for `swipemove` event. Calculates user's tap angle and distance.\n *\n * @param {Object} event\n */\n move: function move(event) {\n if (!Glide.disabled) {\n var _Glide$settings = Glide.settings,\n touchAngle = _Glide$settings.touchAngle,\n touchRatio = _Glide$settings.touchRatio,\n classes = _Glide$settings.classes;\n var swipe = this.touches(event);\n var subExSx = toInt(swipe.pageX) - swipeStartX;\n var subEySy = toInt(swipe.pageY) - swipeStartY;\n var powEX = Math.abs(subExSx << 2);\n var powEY = Math.abs(subEySy << 2);\n var swipeHypotenuse = Math.sqrt(powEX + powEY);\n var swipeCathetus = Math.sqrt(powEY);\n swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n if (swipeSin * 180 / Math.PI < touchAngle) {\n event.stopPropagation();\n Components.Move.make(subExSx * toFloat(touchRatio));\n Components.Html.root.classList.add(classes.dragging);\n Events.emit('swipe.move');\n } else {\n return false;\n }\n }\n },\n\n /**\n * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n *\n * @param {Object} event\n * @return {Void}\n */\n end: function end(event) {\n if (!Glide.disabled) {\n var _Glide$settings2 = Glide.settings,\n perSwipe = _Glide$settings2.perSwipe,\n touchAngle = _Glide$settings2.touchAngle,\n classes = _Glide$settings2.classes;\n var swipe = this.touches(event);\n var threshold = this.threshold(event);\n var swipeDistance = swipe.pageX - swipeStartX;\n var swipeDeg = swipeSin * 180 / Math.PI;\n this.enable();\n\n if (swipeDistance > threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\n } else if (swipeDistance < -threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n } else {\n // While swipe don't reach distance apply previous transform.\n Components.Move.make();\n }\n\n Components.Html.root.classList.remove(classes.dragging);\n this.unbindSwipeMove();\n this.unbindSwipeEnd();\n Events.emit('swipe.end');\n }\n },\n\n /**\n * Binds swipe's starting event.\n *\n * @return {Void}\n */\n bindSwipeStart: function bindSwipeStart() {\n var _this = this;\n\n var _Glide$settings3 = Glide.settings,\n swipeThreshold = _Glide$settings3.swipeThreshold,\n dragThreshold = _Glide$settings3.dragThreshold;\n\n if (swipeThreshold) {\n Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n\n if (dragThreshold) {\n Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n },\n\n /**\n * Unbinds swipe's starting event.\n *\n * @return {Void}\n */\n unbindSwipeStart: function unbindSwipeStart() {\n Binder.off(START_EVENTS[0], Components.Html.wrapper, capture);\n Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's moving event.\n *\n * @return {Void}\n */\n bindSwipeMove: function bindSwipeMove() {\n var _this2 = this;\n\n Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n _this2.move(event);\n }, Glide.settings.throttle), capture);\n },\n\n /**\n * Unbinds swipe's moving event.\n *\n * @return {Void}\n */\n unbindSwipeMove: function unbindSwipeMove() {\n Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's ending event.\n *\n * @return {Void}\n */\n bindSwipeEnd: function bindSwipeEnd() {\n var _this3 = this;\n\n Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n _this3.end(event);\n });\n },\n\n /**\n * Unbinds swipe's ending event.\n *\n * @return {Void}\n */\n unbindSwipeEnd: function unbindSwipeEnd() {\n Binder.off(END_EVENTS, Components.Html.wrapper);\n },\n\n /**\n * Normalizes event touches points accorting to different types.\n *\n * @param {Object} event\n */\n touches: function touches(event) {\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return event;\n }\n\n return event.touches[0] || event.changedTouches[0];\n },\n\n /**\n * Gets value of minimum swipe distance settings based on event type.\n *\n * @return {Number}\n */\n threshold: function threshold(event) {\n var settings = Glide.settings;\n\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return settings.dragThreshold;\n }\n\n return settings.swipeThreshold;\n },\n\n /**\n * Enables swipe event.\n *\n * @return {self}\n */\n enable: function enable() {\n disabled = false;\n Components.Transition.enable();\n return this;\n },\n\n /**\n * Disables swipe event.\n *\n * @return {self}\n */\n disable: function disable() {\n disabled = true;\n Components.Transition.disable();\n return this;\n }\n };\n /**\n * Add component class:\n * - after initial building\n */\n\n Events.on('build.after', function () {\n Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n });\n /**\n * Remove swiping bindings:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Swipe.unbindSwipeStart();\n Swipe.unbindSwipeMove();\n Swipe.unbindSwipeEnd();\n Binder.destroy();\n });\n return Swipe;\n}\n\nfunction Images (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Images = {\n /**\n * Binds listener to glide wrapper.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `dragstart` event on wrapper to prevent dragging images.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n },\n\n /**\n * Unbinds `dragstart` event on wrapper.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('dragstart', Components.Html.wrapper);\n },\n\n /**\n * Event handler. Prevents dragging.\n *\n * @return {Void}\n */\n dragstart: function dragstart(event) {\n event.preventDefault();\n }\n };\n /**\n * Remove bindings from images:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Images.unbind();\n Binder.destroy();\n });\n return Images;\n}\n\nfunction Anchors (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds detaching status of anchors.\n * Prevents detaching of already detached anchors.\n *\n * @private\n * @type {Boolean}\n */\n\n var detached = false;\n /**\n * Holds preventing status of anchors.\n * If `true` redirection after click will be disabled.\n *\n * @private\n * @type {Boolean}\n */\n\n var prevented = false;\n var Anchors = {\n /**\n * Setups a initial state of anchors component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n /**\n * Holds collection of anchors elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._a = Components.Html.wrapper.querySelectorAll('a');\n this.bind();\n },\n\n /**\n * Binds events to anchors inside a track.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('click', Components.Html.wrapper, this.click);\n },\n\n /**\n * Unbinds events attached to anchors inside a track.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('click', Components.Html.wrapper);\n },\n\n /**\n * Handler for click event. Prevents clicks when glide is in `prevent` status.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n if (prevented) {\n event.stopPropagation();\n event.preventDefault();\n }\n },\n\n /**\n * Detaches anchors click event inside glide.\n *\n * @return {self}\n */\n detach: function detach() {\n prevented = true;\n\n if (!detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = false;\n }\n\n detached = true;\n }\n\n return this;\n },\n\n /**\n * Attaches anchors click events inside glide.\n *\n * @return {self}\n */\n attach: function attach() {\n prevented = false;\n\n if (detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = true;\n }\n\n detached = false;\n }\n\n return this;\n }\n };\n define(Anchors, 'items', {\n /**\n * Gets collection of the arrows HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Anchors._a;\n }\n });\n /**\n * Detach anchors inside slides:\n * - on swiping, so they won't redirect to its `href` attributes\n */\n\n Events.on('swipe.move', function () {\n Anchors.detach();\n });\n /**\n * Attach anchors inside slides:\n * - after swiping and transitions ends, so they can redirect after click again\n */\n\n Events.on('swipe.end', function () {\n Components.Transition.after(function () {\n Anchors.attach();\n });\n });\n /**\n * Unbind anchors inside slides:\n * - on destroying, to bring anchors to its initial state\n */\n\n Events.on('destroy', function () {\n Anchors.attach();\n Anchors.unbind();\n Binder.destroy();\n });\n return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\nvar PREVIOUS_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\"<\\\"]\");\nvar NEXT_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\">\\\"]\");\nfunction Controls (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Controls = {\n /**\n * Inits arrows. Binds events listeners\n * to the arrows HTML elements.\n *\n * @return {Void}\n */\n mount: function mount() {\n /**\n * Collection of navigation HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n /**\n * Collection of controls HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n\n this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n /**\n * Collection of arrow control HTML elements.\n *\n * @private\n * @type {Object}\n */\n\n this._arrowControls = {\n previous: Components.Html.root.querySelectorAll(PREVIOUS_CONTROLS_SELECTOR),\n next: Components.Html.root.querySelectorAll(NEXT_CONTROLS_SELECTOR)\n };\n this.addBindings();\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n setActive: function setActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.addClass(this._n[i].children);\n }\n },\n\n /**\n * Removes active class to current slide.\n *\n * @return {Void}\n */\n removeActive: function removeActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.removeClass(this._n[i].children);\n }\n },\n\n /**\n * Toggles active class on items inside navigation.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n addClass: function addClass(controls) {\n var settings = Glide.settings;\n var item = controls[Glide.index];\n\n if (!item) {\n return;\n }\n\n item.classList.add(settings.classes.nav.active);\n siblings(item).forEach(function (sibling) {\n sibling.classList.remove(settings.classes.nav.active);\n });\n },\n\n /**\n * Removes active class from active control.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n removeClass: function removeClass(controls) {\n var item = controls[Glide.index];\n item === null || item === void 0 ? void 0 : item.classList.remove(Glide.settings.classes.nav.active);\n },\n\n /**\n * Calculates, removes or adds `Glide.settings.classes.disabledArrow` class on the control arrows\n */\n setArrowState: function setArrowState() {\n if (Glide.settings.rewind) {\n return;\n }\n\n var next = Controls._arrowControls.next;\n var previous = Controls._arrowControls.previous;\n this.resetArrowState(next, previous);\n\n if (Glide.index === 0) {\n this.disableArrow(previous);\n }\n\n if (Glide.index === Components.Run.length) {\n this.disableArrow(next);\n }\n },\n\n /**\n * Removes `Glide.settings.classes.disabledArrow` from given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n resetArrowState: function resetArrowState() {\n var settings = Glide.settings;\n\n for (var _len = arguments.length, lists = new Array(_len), _key = 0; _key < _len; _key++) {\n lists[_key] = arguments[_key];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.remove(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds `Glide.settings.classes.disabledArrow` to given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n disableArrow: function disableArrow() {\n var settings = Glide.settings;\n\n for (var _len2 = arguments.length, lists = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n lists[_key2] = arguments[_key2];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.add(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds handles to the each group of controls.\n *\n * @return {Void}\n */\n addBindings: function addBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.bind(this._c[i].children);\n }\n },\n\n /**\n * Removes handles from the each group of controls.\n *\n * @return {Void}\n */\n removeBindings: function removeBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.unbind(this._c[i].children);\n }\n },\n\n /**\n * Binds events to arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n bind: function bind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.on('click', elements[i], this.click);\n Binder.on('touchstart', elements[i], this.click, capture);\n }\n },\n\n /**\n * Unbinds events binded to the arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n unbind: function unbind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.off(['click', 'touchstart'], elements[i]);\n }\n },\n\n /**\n * Handles `click` event on the arrows HTML elements.\n * Moves slider in direction given via the\n * `data-glide-dir` attribute.\n *\n * @param {Object} event\n * @return {void}\n */\n click: function click(event) {\n if (!supportsPassive$1 && event.type === 'touchstart') {\n event.preventDefault();\n }\n\n var direction = event.currentTarget.getAttribute('data-glide-dir');\n Components.Run.make(Components.Direction.resolve(direction));\n }\n };\n define(Controls, 'items', {\n /**\n * Gets collection of the controls HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Controls._c;\n }\n });\n /**\n * Swap active class of current navigation item:\n * - after mounting to set it to initial index\n * - after each move to the new index\n */\n\n Events.on(['mount.after', 'move.after'], function () {\n Controls.setActive();\n });\n /**\n * Add or remove disabled class of arrow elements\n */\n\n Events.on(['mount.after', 'run'], function () {\n Controls.setArrowState();\n });\n /**\n * Remove bindings and HTML Classes:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Controls.removeBindings();\n Controls.removeActive();\n Binder.destroy();\n });\n return Controls;\n}\n\nfunction Keyboard (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Keyboard = {\n /**\n * Binds keyboard events on component mount.\n *\n * @return {Void}\n */\n mount: function mount() {\n if (Glide.settings.keyboard) {\n this.bind();\n }\n },\n\n /**\n * Adds keyboard press events.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('keyup', document, this.press);\n },\n\n /**\n * Removes keyboard press events.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('keyup', document);\n },\n\n /**\n * Handles keyboard's arrows press and moving glide foward and backward.\n *\n * @param {Object} event\n * @return {Void}\n */\n press: function press(event) {\n var perSwipe = Glide.settings.perSwipe;\n var arrowSymbols = {\n ArrowRight: '>',\n ArrowLeft: '<'\n };\n\n if (['ArrowRight', 'ArrowLeft'].includes(event.code)) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe).concat(arrowSymbols[event.code])));\n }\n }\n };\n /**\n * Remove bindings from keyboard:\n * - on destroying to remove added events\n * - on updating to remove events before remounting\n */\n\n Events.on(['destroy', 'update'], function () {\n Keyboard.unbind();\n });\n /**\n * Remount component\n * - on updating to reflect potential changes in settings\n */\n\n Events.on('update', function () {\n Keyboard.mount();\n });\n /**\n * Destroy binder:\n * - on destroying to remove listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Keyboard;\n}\n\nfunction Autoplay (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Autoplay = {\n /**\n * Initializes autoplaying and events.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.enable();\n this.start();\n\n if (Glide.settings.hoverpause) {\n this.bind();\n }\n },\n\n /**\n * Enables autoplaying\n *\n * @returns {Void}\n */\n enable: function enable() {\n this._e = true;\n },\n\n /**\n * Disables autoplaying.\n *\n * @returns {Void}\n */\n disable: function disable() {\n this._e = false;\n },\n\n /**\n * Starts autoplaying in configured interval.\n *\n * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n * @return {Void}\n */\n start: function start() {\n var _this = this;\n\n if (!this._e) {\n return;\n }\n\n this.enable();\n\n if (Glide.settings.autoplay) {\n if (isUndefined(this._i)) {\n this._i = setInterval(function () {\n _this.stop();\n\n Components.Run.make('>');\n\n _this.start();\n\n Events.emit('autoplay');\n }, this.time);\n }\n }\n },\n\n /**\n * Stops autorunning of the glide.\n *\n * @return {Void}\n */\n stop: function stop() {\n this._i = clearInterval(this._i);\n },\n\n /**\n * Stops autoplaying while mouse is over glide's area.\n *\n * @return {Void}\n */\n bind: function bind() {\n var _this2 = this;\n\n Binder.on('mouseover', Components.Html.root, function () {\n if (_this2._e) {\n _this2.stop();\n }\n });\n Binder.on('mouseout', Components.Html.root, function () {\n if (_this2._e) {\n _this2.start();\n }\n });\n },\n\n /**\n * Unbind mouseover events.\n *\n * @returns {Void}\n */\n unbind: function unbind() {\n Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n }\n };\n define(Autoplay, 'time', {\n /**\n * Gets time period value for the autoplay interval. Prioritizes\n * times in `data-glide-autoplay` attrubutes over options.\n *\n * @return {Number}\n */\n get: function get() {\n var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n if (autoplay) {\n return toInt(autoplay);\n }\n\n return toInt(Glide.settings.autoplay);\n }\n });\n /**\n * Stop autoplaying and unbind events:\n * - on destroying, to clear defined interval\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['destroy', 'update'], function () {\n Autoplay.unbind();\n });\n /**\n * Stop autoplaying:\n * - before each run, to restart autoplaying\n * - on pausing via API\n * - on destroying, to clear defined interval\n * - while starting a swipe\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['run.before', 'swipe.start', 'update'], function () {\n Autoplay.stop();\n });\n Events.on(['pause', 'destroy'], function () {\n Autoplay.disable();\n Autoplay.stop();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['run.after', 'swipe.end'], function () {\n Autoplay.start();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['play'], function () {\n Autoplay.enable();\n Autoplay.start();\n });\n /**\n * Remount autoplaying:\n * - on updating via API to reset interval that may changed\n */\n\n Events.on('update', function () {\n Autoplay.mount();\n });\n /**\n * Destroy a binder:\n * - on destroying glide instance to clearup listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Autoplay;\n}\n\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\n\nfunction sortBreakpoints(points) {\n if (isObject(points)) {\n return sortKeys(points);\n } else {\n warn(\"Breakpoints option must be an object\");\n }\n\n return {};\n}\n\nfunction Breakpoints (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds reference to settings.\n *\n * @type {Object}\n */\n\n var settings = Glide.settings;\n /**\n * Holds reference to breakpoints object in settings. Sorts breakpoints\n * from smaller to larger. It is required in order to proper\n * matching currently active breakpoint settings.\n *\n * @type {Object}\n */\n\n var points = sortBreakpoints(settings.breakpoints);\n /**\n * Cache initial settings before overwritting.\n *\n * @type {Object}\n */\n\n var defaults = Object.assign({}, settings);\n var Breakpoints = {\n /**\n * Matches settings for currectly matching media breakpoint.\n *\n * @param {Object} points\n * @returns {Object}\n */\n match: function match(points) {\n if (typeof window.matchMedia !== 'undefined') {\n for (var point in points) {\n if (points.hasOwnProperty(point)) {\n if (window.matchMedia(\"(max-width: \".concat(point, \"px)\")).matches) {\n return points[point];\n }\n }\n }\n }\n\n return defaults;\n }\n };\n /**\n * Overwrite instance settings with currently matching breakpoint settings.\n * This happens right after component initialization.\n */\n\n Object.assign(settings, Breakpoints.match(points));\n /**\n * Update glide with settings of matched brekpoint:\n * - window resize to update slider\n */\n\n Binder.on('resize', window, throttle(function () {\n Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n }, Glide.settings.throttle));\n /**\n * Resort and update default settings:\n * - on reinit via API, so breakpoint matching will be performed with options\n */\n\n Events.on('update', function () {\n points = sortBreakpoints(points);\n defaults = Object.assign({}, settings);\n });\n /**\n * Unbind resize listener:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Binder.off('resize', window);\n });\n return Breakpoints;\n}\n\nvar COMPONENTS = {\n // Required\n Html: Html,\n Translate: Translate,\n Transition: Transition,\n Direction: Direction,\n Peek: Peek,\n Sizes: Sizes,\n Gaps: Gaps,\n Move: Move,\n Clones: Clones,\n Resize: Resize,\n Build: Build,\n Run: Run,\n // Optional\n Swipe: Swipe,\n Images: Images,\n Anchors: Anchors,\n Controls: Controls,\n Keyboard: Keyboard,\n Autoplay: Autoplay,\n Breakpoints: Breakpoints\n};\n\nvar Glide = /*#__PURE__*/function (_Core) {\n _inherits(Glide, _Core);\n\n var _super = _createSuper(Glide);\n\n function Glide() {\n _classCallCheck(this, Glide);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return _get(_getPrototypeOf(Glide.prototype), \"mount\", this).call(this, Object.assign({}, COMPONENTS, extensions));\n }\n }]);\n\n return Glide;\n}(Glide$1);\n\nexport { Glide as default };\n","// Generated using scripts/write-decode-map.ts\nexport const htmlDecodeTree = /* #__PURE__ */ new Uint16Array(\n// prettier-ignore\n/* #__PURE__ */ \"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map","// Generated using scripts/write-decode-map.ts\nexport const xmlDecodeTree = /* #__PURE__ */ new Uint16Array(\n// prettier-ignore\n/* #__PURE__ */ \"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-xml.js.map","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n [0, 65533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n let output = \"\";\n if (codePoint > 65535) {\n codePoint -= 65536;\n output += String.fromCharCode(((codePoint >>> 10) & 1023) | 55296);\n codePoint = 56320 | (codePoint & 1023);\n }\n output += String.fromCharCode(codePoint);\n return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n var _a;\n if ((codePoint >= 55296 && codePoint <= 57343) ||\n codePoint > 1114111) {\n return 65533;\n }\n return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport function decodeCodePoint(codePoint) {\n return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode-codepoint.js.map","import { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { replaceCodePoint, fromCodePoint } from \"./decode-codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 32;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n /** The current state of the decoder. */\n this.state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n this.consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n this.result = 0;\n /** The current index in the decode tree. */\n this.treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n this.excess = 1;\n /** The mode in which the decoder is operating. */\n this.decodeMode = DecodingMode.Strict;\n }\n /** Resets the instance to make it reusable. */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericStart(input, offset) {\n if (offset >= input.length) {\n return -1;\n }\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n addToNumericResult(input, start, end, base) {\n if (start !== end) {\n const digitCount = end - start;\n this.result =\n this.result * Math.pow(base, digitCount) +\n Number.parseInt(input.substr(start, digitCount), base);\n this.consumed += digitCount;\n }\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(input, offset) {\n const startIndex = offset;\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(input, startIndex, offset, 16);\n return this.emitNumericEntity(char, 3);\n }\n }\n this.addToNumericResult(input, startIndex, offset, 16);\n return -1;\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(input, offset) {\n const startIndex = offset;\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(input, startIndex, offset, 10);\n return this.emitNumericEntity(char, 2);\n }\n }\n this.addToNumericResult(input, startIndex, offset, 10);\n return -1;\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n var _a;\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(input, offset) {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The mask is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n for (; offset < input.length; offset++, this.excess++) {\n const char = input.charCodeAt(offset);\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n }\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n var _a;\n const { result, decodeTree } = this;\n const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n end() {\n var _a;\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n let returnValue = \"\";\n const decoder = new EntityDecoder(decodeTree, (data) => (returnValue += fromCodePoint(data)));\n return function decodeWithTrie(input, decodeMode) {\n let lastIndex = 0;\n let offset = 0;\n while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n returnValue += input.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n const length = decoder.write(input, \n // Skip the \"&\"\n offset + 1);\n if (length < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + length;\n // If `length` is 0, skip the current `&` and continue.\n offset = length === 0 ? lastIndex + 1 : lastIndex;\n }\n const result = returnValue + input.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n returnValue = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIndex, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIndex + value] - 1;\n }\n // Case 3: Multiple branches encoded in dictionary\n // Binary search for the character.\n let lo = nodeIndex;\n let hi = lo + branchCount - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const midValue = decodeTree[mid];\n if (midValue < char) {\n lo = mid + 1;\n }\n else if (midValue > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[mid + branchCount];\n }\n }\n return -1;\n}\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(htmlString, mode = DecodingMode.Legacy) {\n return htmlDecoder(htmlString, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute) {\n return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString) {\n return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString) {\n return xmlDecoder(xmlString, DecodingMode.Strict);\n}\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nexport { decodeCodePoint, replaceCodePoint, fromCodePoint, } from \"./decode-codepoint.js\";\n//# sourceMappingURL=decode.js.map","import { EntityDecoder, DecodingMode, htmlDecodeTree, xmlDecodeTree, } from \"entities/decode\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"Tab\"] = 9] = \"Tab\";\n CharCodes[CharCodes[\"NewLine\"] = 10] = \"NewLine\";\n CharCodes[CharCodes[\"FormFeed\"] = 12] = \"FormFeed\";\n CharCodes[CharCodes[\"CarriageReturn\"] = 13] = \"CarriageReturn\";\n CharCodes[CharCodes[\"Space\"] = 32] = \"Space\";\n CharCodes[CharCodes[\"ExclamationMark\"] = 33] = \"ExclamationMark\";\n CharCodes[CharCodes[\"Number\"] = 35] = \"Number\";\n CharCodes[CharCodes[\"Amp\"] = 38] = \"Amp\";\n CharCodes[CharCodes[\"SingleQuote\"] = 39] = \"SingleQuote\";\n CharCodes[CharCodes[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n CharCodes[CharCodes[\"Dash\"] = 45] = \"Dash\";\n CharCodes[CharCodes[\"Slash\"] = 47] = \"Slash\";\n CharCodes[CharCodes[\"Zero\"] = 48] = \"Zero\";\n CharCodes[CharCodes[\"Nine\"] = 57] = \"Nine\";\n CharCodes[CharCodes[\"Semi\"] = 59] = \"Semi\";\n CharCodes[CharCodes[\"Lt\"] = 60] = \"Lt\";\n CharCodes[CharCodes[\"Eq\"] = 61] = \"Eq\";\n CharCodes[CharCodes[\"Gt\"] = 62] = \"Gt\";\n CharCodes[CharCodes[\"Questionmark\"] = 63] = \"Questionmark\";\n CharCodes[CharCodes[\"UpperA\"] = 65] = \"UpperA\";\n CharCodes[CharCodes[\"LowerA\"] = 97] = \"LowerA\";\n CharCodes[CharCodes[\"UpperF\"] = 70] = \"UpperF\";\n CharCodes[CharCodes[\"LowerF\"] = 102] = \"LowerF\";\n CharCodes[CharCodes[\"UpperZ\"] = 90] = \"UpperZ\";\n CharCodes[CharCodes[\"LowerZ\"] = 122] = \"LowerZ\";\n CharCodes[CharCodes[\"LowerX\"] = 120] = \"LowerX\";\n CharCodes[CharCodes[\"OpeningSquareBracket\"] = 91] = \"OpeningSquareBracket\";\n})(CharCodes || (CharCodes = {}));\n/** All the states the tokenizer can be in. */\nvar State;\n(function (State) {\n State[State[\"Text\"] = 1] = \"Text\";\n State[State[\"BeforeTagName\"] = 2] = \"BeforeTagName\";\n State[State[\"InTagName\"] = 3] = \"InTagName\";\n State[State[\"InSelfClosingTag\"] = 4] = \"InSelfClosingTag\";\n State[State[\"BeforeClosingTagName\"] = 5] = \"BeforeClosingTagName\";\n State[State[\"InClosingTagName\"] = 6] = \"InClosingTagName\";\n State[State[\"AfterClosingTagName\"] = 7] = \"AfterClosingTagName\";\n // Attributes\n State[State[\"BeforeAttributeName\"] = 8] = \"BeforeAttributeName\";\n State[State[\"InAttributeName\"] = 9] = \"InAttributeName\";\n State[State[\"AfterAttributeName\"] = 10] = \"AfterAttributeName\";\n State[State[\"BeforeAttributeValue\"] = 11] = \"BeforeAttributeValue\";\n State[State[\"InAttributeValueDq\"] = 12] = \"InAttributeValueDq\";\n State[State[\"InAttributeValueSq\"] = 13] = \"InAttributeValueSq\";\n State[State[\"InAttributeValueNq\"] = 14] = \"InAttributeValueNq\";\n // Declarations\n State[State[\"BeforeDeclaration\"] = 15] = \"BeforeDeclaration\";\n State[State[\"InDeclaration\"] = 16] = \"InDeclaration\";\n // Processing instructions\n State[State[\"InProcessingInstruction\"] = 17] = \"InProcessingInstruction\";\n // Comments & CDATA\n State[State[\"BeforeComment\"] = 18] = \"BeforeComment\";\n State[State[\"CDATASequence\"] = 19] = \"CDATASequence\";\n State[State[\"InSpecialComment\"] = 20] = \"InSpecialComment\";\n State[State[\"InCommentLike\"] = 21] = \"InCommentLike\";\n // Special tags\n State[State[\"BeforeSpecialS\"] = 22] = \"BeforeSpecialS\";\n State[State[\"BeforeSpecialT\"] = 23] = \"BeforeSpecialT\";\n State[State[\"SpecialStartSequence\"] = 24] = \"SpecialStartSequence\";\n State[State[\"InSpecialTag\"] = 25] = \"InSpecialTag\";\n State[State[\"InEntity\"] = 26] = \"InEntity\";\n})(State || (State = {}));\nfunction isWhitespace(c) {\n return (c === CharCodes.Space ||\n c === CharCodes.NewLine ||\n c === CharCodes.Tab ||\n c === CharCodes.FormFeed ||\n c === CharCodes.CarriageReturn);\n}\nfunction isEndOfTagSection(c) {\n return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);\n}\nfunction isASCIIAlpha(c) {\n return ((c >= CharCodes.LowerA && c <= CharCodes.LowerZ) ||\n (c >= CharCodes.UpperA && c <= CharCodes.UpperZ));\n}\nexport var QuoteType;\n(function (QuoteType) {\n QuoteType[QuoteType[\"NoValue\"] = 0] = \"NoValue\";\n QuoteType[QuoteType[\"Unquoted\"] = 1] = \"Unquoted\";\n QuoteType[QuoteType[\"Single\"] = 2] = \"Single\";\n QuoteType[QuoteType[\"Double\"] = 3] = \"Double\";\n})(QuoteType || (QuoteType = {}));\n/**\n * Sequences used to match longer strings.\n *\n * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End\n * sequences with an increased offset.\n */\nconst Sequences = {\n Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]), // CDATA[\n CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]), // ]]>\n CommentEnd: new Uint8Array([0x2d, 0x2d, 0x3e]), // `-->`\n ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]), // `</script`\n StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]), // `</style`\n TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]), // `</title`\n TextareaEnd: new Uint8Array([\n 0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61,\n ]), // `</textarea`\n XmpEnd: new Uint8Array([0x3c, 0x2f, 0x78, 0x6d, 0x70]), // `</xmp`\n};\nexport default class Tokenizer {\n constructor({ xmlMode = false, decodeEntities = true, }, cbs) {\n this.cbs = cbs;\n /** The current state the tokenizer is in. */\n this.state = State.Text;\n /** The read buffer. */\n this.buffer = \"\";\n /** The beginning of the section that is currently being read. */\n this.sectionStart = 0;\n /** The index within the buffer that we are currently looking at. */\n this.index = 0;\n /** The start of the last entity. */\n this.entityStart = 0;\n /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n this.baseState = State.Text;\n /** For special parsing behavior inside of script and style tags. */\n this.isSpecial = false;\n /** Indicates whether the tokenizer has been paused. */\n this.running = true;\n /** The offset of the current buffer. */\n this.offset = 0;\n this.currentSequence = undefined;\n this.sequenceIndex = 0;\n this.xmlMode = xmlMode;\n this.decodeEntities = decodeEntities;\n this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));\n }\n reset() {\n this.state = State.Text;\n this.buffer = \"\";\n this.sectionStart = 0;\n this.index = 0;\n this.baseState = State.Text;\n this.currentSequence = undefined;\n this.running = true;\n this.offset = 0;\n }\n write(chunk) {\n this.offset += this.buffer.length;\n this.buffer = chunk;\n this.parse();\n }\n end() {\n if (this.running)\n this.finish();\n }\n pause() {\n this.running = false;\n }\n resume() {\n this.running = true;\n if (this.index < this.buffer.length + this.offset) {\n this.parse();\n }\n }\n stateText(c) {\n if (c === CharCodes.Lt ||\n (!this.decodeEntities && this.fastForwardTo(CharCodes.Lt))) {\n if (this.index > this.sectionStart) {\n this.cbs.ontext(this.sectionStart, this.index);\n }\n this.state = State.BeforeTagName;\n this.sectionStart = this.index;\n }\n else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n stateSpecialStartSequence(c) {\n const isEnd = this.sequenceIndex === this.currentSequence.length;\n const isMatch = isEnd\n ? // If we are at the end of the sequence, make sure the tag name has ended\n isEndOfTagSection(c)\n : // Otherwise, do a case-insensitive comparison\n (c | 0x20) === this.currentSequence[this.sequenceIndex];\n if (!isMatch) {\n this.isSpecial = false;\n }\n else if (!isEnd) {\n this.sequenceIndex++;\n return;\n }\n this.sequenceIndex = 0;\n this.state = State.InTagName;\n this.stateInTagName(c);\n }\n /** Look for an end tag. For <title> tags, also decode entities. */\n stateInSpecialTag(c) {\n if (this.sequenceIndex === this.currentSequence.length) {\n if (c === CharCodes.Gt || isWhitespace(c)) {\n const endOfText = this.index - this.currentSequence.length;\n if (this.sectionStart < endOfText) {\n // Spoof the index so that reported locations match up.\n const actualIndex = this.index;\n this.index = endOfText;\n this.cbs.ontext(this.sectionStart, endOfText);\n this.index = actualIndex;\n }\n this.isSpecial = false;\n this.sectionStart = endOfText + 2; // Skip over the `</`\n this.stateInClosingTagName(c);\n return; // We are done; skip the rest of the function.\n }\n this.sequenceIndex = 0;\n }\n if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {\n this.sequenceIndex += 1;\n }\n else if (this.sequenceIndex === 0) {\n if (this.currentSequence === Sequences.TitleEnd) {\n // We have to parse entities in <title> tags.\n if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n else if (this.fastForwardTo(CharCodes.Lt)) {\n // Outside of <title> tags, we can fast-forward.\n this.sequenceIndex = 1;\n }\n }\n else {\n // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.\n this.sequenceIndex = Number(c === CharCodes.Lt);\n }\n }\n stateCDATASequence(c) {\n if (c === Sequences.Cdata[this.sequenceIndex]) {\n if (++this.sequenceIndex === Sequences.Cdata.length) {\n this.state = State.InCommentLike;\n this.currentSequence = Sequences.CdataEnd;\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n }\n }\n else {\n this.sequenceIndex = 0;\n this.state = State.InDeclaration;\n this.stateInDeclaration(c); // Reconsume the character\n }\n }\n /**\n * When we wait for one specific character, we can speed things up\n * by skipping through the buffer until we find it.\n *\n * @returns Whether the character was found.\n */\n fastForwardTo(c) {\n while (++this.index < this.buffer.length + this.offset) {\n if (this.buffer.charCodeAt(this.index - this.offset) === c) {\n return true;\n }\n }\n /*\n * We increment the index at the end of the `parse` loop,\n * so set it to `buffer.length - 1` here.\n *\n * TODO: Refactor `parse` to increment index before calling states.\n */\n this.index = this.buffer.length + this.offset - 1;\n return false;\n }\n /**\n * Comments and CDATA end with `-->` and `]]>`.\n *\n * Their common qualities are:\n * - Their end sequences have a distinct character they start with.\n * - That character is then repeated, so we have to check multiple repeats.\n * - All characters but the start character of the sequence can be skipped.\n */\n stateInCommentLike(c) {\n if (c === this.currentSequence[this.sequenceIndex]) {\n if (++this.sequenceIndex === this.currentSequence.length) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, this.index, 2);\n }\n else {\n this.cbs.oncomment(this.sectionStart, this.index, 2);\n }\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n this.state = State.Text;\n }\n }\n else if (this.sequenceIndex === 0) {\n // Fast-forward to the first character of the sequence\n if (this.fastForwardTo(this.currentSequence[0])) {\n this.sequenceIndex = 1;\n }\n }\n else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n // Allow long sequences, eg. --->, ]]]>\n this.sequenceIndex = 0;\n }\n }\n /**\n * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.\n *\n * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).\n * We allow anything that wouldn't end the tag.\n */\n isTagStartChar(c) {\n return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);\n }\n startSpecial(sequence, offset) {\n this.isSpecial = true;\n this.currentSequence = sequence;\n this.sequenceIndex = offset;\n this.state = State.SpecialStartSequence;\n }\n stateBeforeTagName(c) {\n if (c === CharCodes.ExclamationMark) {\n this.state = State.BeforeDeclaration;\n this.sectionStart = this.index + 1;\n }\n else if (c === CharCodes.Questionmark) {\n this.state = State.InProcessingInstruction;\n this.sectionStart = this.index + 1;\n }\n else if (this.isTagStartChar(c)) {\n const lower = c | 0x20;\n this.sectionStart = this.index;\n if (this.xmlMode) {\n this.state = State.InTagName;\n }\n else if (lower === Sequences.ScriptEnd[2]) {\n this.state = State.BeforeSpecialS;\n }\n else if (lower === Sequences.TitleEnd[2] ||\n lower === Sequences.XmpEnd[2]) {\n this.state = State.BeforeSpecialT;\n }\n else {\n this.state = State.InTagName;\n }\n }\n else if (c === CharCodes.Slash) {\n this.state = State.BeforeClosingTagName;\n }\n else {\n this.state = State.Text;\n this.stateText(c);\n }\n }\n stateInTagName(c) {\n if (isEndOfTagSection(c)) {\n this.cbs.onopentagname(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n }\n stateBeforeClosingTagName(c) {\n if (isWhitespace(c)) {\n // Ignore\n }\n else if (c === CharCodes.Gt) {\n this.state = State.Text;\n }\n else {\n this.state = this.isTagStartChar(c)\n ? State.InClosingTagName\n : State.InSpecialComment;\n this.sectionStart = this.index;\n }\n }\n stateInClosingTagName(c) {\n if (c === CharCodes.Gt || isWhitespace(c)) {\n this.cbs.onclosetag(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.AfterClosingTagName;\n this.stateAfterClosingTagName(c);\n }\n }\n stateAfterClosingTagName(c) {\n // Skip everything until \">\"\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeAttributeName(c) {\n if (c === CharCodes.Gt) {\n this.cbs.onopentagend(this.index);\n if (this.isSpecial) {\n this.state = State.InSpecialTag;\n this.sequenceIndex = 0;\n }\n else {\n this.state = State.Text;\n }\n this.sectionStart = this.index + 1;\n }\n else if (c === CharCodes.Slash) {\n this.state = State.InSelfClosingTag;\n }\n else if (!isWhitespace(c)) {\n this.state = State.InAttributeName;\n this.sectionStart = this.index;\n }\n }\n stateInSelfClosingTag(c) {\n if (c === CharCodes.Gt) {\n this.cbs.onselfclosingtag(this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n this.isSpecial = false; // Reset special state, in case of self-closing special tags\n }\n else if (!isWhitespace(c)) {\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n }\n stateInAttributeName(c) {\n if (c === CharCodes.Eq || isEndOfTagSection(c)) {\n this.cbs.onattribname(this.sectionStart, this.index);\n this.sectionStart = this.index;\n this.state = State.AfterAttributeName;\n this.stateAfterAttributeName(c);\n }\n }\n stateAfterAttributeName(c) {\n if (c === CharCodes.Eq) {\n this.state = State.BeforeAttributeValue;\n }\n else if (c === CharCodes.Slash || c === CharCodes.Gt) {\n this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n this.sectionStart = -1;\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n else if (!isWhitespace(c)) {\n this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n this.state = State.InAttributeName;\n this.sectionStart = this.index;\n }\n }\n stateBeforeAttributeValue(c) {\n if (c === CharCodes.DoubleQuote) {\n this.state = State.InAttributeValueDq;\n this.sectionStart = this.index + 1;\n }\n else if (c === CharCodes.SingleQuote) {\n this.state = State.InAttributeValueSq;\n this.sectionStart = this.index + 1;\n }\n else if (!isWhitespace(c)) {\n this.sectionStart = this.index;\n this.state = State.InAttributeValueNq;\n this.stateInAttributeValueNoQuotes(c); // Reconsume token\n }\n }\n handleInAttributeValue(c, quote) {\n if (c === quote ||\n (!this.decodeEntities && this.fastForwardTo(quote))) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(quote === CharCodes.DoubleQuote\n ? QuoteType.Double\n : QuoteType.Single, this.index + 1);\n this.state = State.BeforeAttributeName;\n }\n else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n stateInAttributeValueDoubleQuotes(c) {\n this.handleInAttributeValue(c, CharCodes.DoubleQuote);\n }\n stateInAttributeValueSingleQuotes(c) {\n this.handleInAttributeValue(c, CharCodes.SingleQuote);\n }\n stateInAttributeValueNoQuotes(c) {\n if (isWhitespace(c) || c === CharCodes.Gt) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(QuoteType.Unquoted, this.index);\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n stateBeforeDeclaration(c) {\n if (c === CharCodes.OpeningSquareBracket) {\n this.state = State.CDATASequence;\n this.sequenceIndex = 0;\n }\n else {\n this.state =\n c === CharCodes.Dash\n ? State.BeforeComment\n : State.InDeclaration;\n }\n }\n stateInDeclaration(c) {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.ondeclaration(this.sectionStart, this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n stateInProcessingInstruction(c) {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeComment(c) {\n if (c === CharCodes.Dash) {\n this.state = State.InCommentLike;\n this.currentSequence = Sequences.CommentEnd;\n // Allow short comments (eg. <!-->)\n this.sequenceIndex = 2;\n this.sectionStart = this.index + 1;\n }\n else {\n this.state = State.InDeclaration;\n }\n }\n stateInSpecialComment(c) {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.oncomment(this.sectionStart, this.index, 0);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeSpecialS(c) {\n const lower = c | 0x20;\n if (lower === Sequences.ScriptEnd[3]) {\n this.startSpecial(Sequences.ScriptEnd, 4);\n }\n else if (lower === Sequences.StyleEnd[3]) {\n this.startSpecial(Sequences.StyleEnd, 4);\n }\n else {\n this.state = State.InTagName;\n this.stateInTagName(c); // Consume the token again\n }\n }\n stateBeforeSpecialT(c) {\n const lower = c | 0x20;\n switch (lower) {\n case Sequences.TitleEnd[3]: {\n this.startSpecial(Sequences.TitleEnd, 4);\n break;\n }\n case Sequences.TextareaEnd[3]: {\n this.startSpecial(Sequences.TextareaEnd, 4);\n break;\n }\n case Sequences.XmpEnd[3]: {\n this.startSpecial(Sequences.XmpEnd, 4);\n break;\n }\n default: {\n this.state = State.InTagName;\n this.stateInTagName(c); // Consume the token again\n }\n }\n }\n startEntity() {\n this.baseState = this.state;\n this.state = State.InEntity;\n this.entityStart = this.index;\n this.entityDecoder.startEntity(this.xmlMode\n ? DecodingMode.Strict\n : this.baseState === State.Text ||\n this.baseState === State.InSpecialTag\n ? DecodingMode.Legacy\n : DecodingMode.Attribute);\n }\n stateInEntity() {\n const length = this.entityDecoder.write(this.buffer, this.index - this.offset);\n // If `length` is positive, we are done with the entity.\n if (length >= 0) {\n this.state = this.baseState;\n if (length === 0) {\n this.index = this.entityStart;\n }\n }\n else {\n // Mark buffer as consumed.\n this.index = this.offset + this.buffer.length - 1;\n }\n }\n /**\n * Remove data that has already been consumed from the buffer.\n */\n cleanup() {\n // If we are inside of text or attributes, emit what we already have.\n if (this.running && this.sectionStart !== this.index) {\n if (this.state === State.Text ||\n (this.state === State.InSpecialTag && this.sequenceIndex === 0)) {\n this.cbs.ontext(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n else if (this.state === State.InAttributeValueDq ||\n this.state === State.InAttributeValueSq ||\n this.state === State.InAttributeValueNq) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n }\n }\n shouldContinue() {\n return this.index < this.buffer.length + this.offset && this.running;\n }\n /**\n * Iterates through the buffer, calling the function corresponding to the current state.\n *\n * States that are more likely to be hit are higher up, as a performance improvement.\n */\n parse() {\n while (this.shouldContinue()) {\n const c = this.buffer.charCodeAt(this.index - this.offset);\n switch (this.state) {\n case State.Text: {\n this.stateText(c);\n break;\n }\n case State.SpecialStartSequence: {\n this.stateSpecialStartSequence(c);\n break;\n }\n case State.InSpecialTag: {\n this.stateInSpecialTag(c);\n break;\n }\n case State.CDATASequence: {\n this.stateCDATASequence(c);\n break;\n }\n case State.InAttributeValueDq: {\n this.stateInAttributeValueDoubleQuotes(c);\n break;\n }\n case State.InAttributeName: {\n this.stateInAttributeName(c);\n break;\n }\n case State.InCommentLike: {\n this.stateInCommentLike(c);\n break;\n }\n case State.InSpecialComment: {\n this.stateInSpecialComment(c);\n break;\n }\n case State.BeforeAttributeName: {\n this.stateBeforeAttributeName(c);\n break;\n }\n case State.InTagName: {\n this.stateInTagName(c);\n break;\n }\n case State.InClosingTagName: {\n this.stateInClosingTagName(c);\n break;\n }\n case State.BeforeTagName: {\n this.stateBeforeTagName(c);\n break;\n }\n case State.AfterAttributeName: {\n this.stateAfterAttributeName(c);\n break;\n }\n case State.InAttributeValueSq: {\n this.stateInAttributeValueSingleQuotes(c);\n break;\n }\n case State.BeforeAttributeValue: {\n this.stateBeforeAttributeValue(c);\n break;\n }\n case State.BeforeClosingTagName: {\n this.stateBeforeClosingTagName(c);\n break;\n }\n case State.AfterClosingTagName: {\n this.stateAfterClosingTagName(c);\n break;\n }\n case State.BeforeSpecialS: {\n this.stateBeforeSpecialS(c);\n break;\n }\n case State.BeforeSpecialT: {\n this.stateBeforeSpecialT(c);\n break;\n }\n case State.InAttributeValueNq: {\n this.stateInAttributeValueNoQuotes(c);\n break;\n }\n case State.InSelfClosingTag: {\n this.stateInSelfClosingTag(c);\n break;\n }\n case State.InDeclaration: {\n this.stateInDeclaration(c);\n break;\n }\n case State.BeforeDeclaration: {\n this.stateBeforeDeclaration(c);\n break;\n }\n case State.BeforeComment: {\n this.stateBeforeComment(c);\n break;\n }\n case State.InProcessingInstruction: {\n this.stateInProcessingInstruction(c);\n break;\n }\n case State.InEntity: {\n this.stateInEntity();\n break;\n }\n }\n this.index++;\n }\n this.cleanup();\n }\n finish() {\n if (this.state === State.InEntity) {\n this.entityDecoder.end();\n this.state = this.baseState;\n }\n this.handleTrailingData();\n this.cbs.onend();\n }\n /** Handle any trailing data. */\n handleTrailingData() {\n const endIndex = this.buffer.length + this.offset;\n // If there is no remaining data, we are done.\n if (this.sectionStart >= endIndex) {\n return;\n }\n if (this.state === State.InCommentLike) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, endIndex, 0);\n }\n else {\n this.cbs.oncomment(this.sectionStart, endIndex, 0);\n }\n }\n else if (this.state === State.InTagName ||\n this.state === State.BeforeAttributeName ||\n this.state === State.BeforeAttributeValue ||\n this.state === State.AfterAttributeName ||\n this.state === State.InAttributeName ||\n this.state === State.InAttributeValueSq ||\n this.state === State.InAttributeValueDq ||\n this.state === State.InAttributeValueNq ||\n this.state === State.InClosingTagName) {\n /*\n * If we are currently in an opening or closing tag, us not calling the\n * respective callback signals that the tag should be ignored.\n */\n }\n else {\n this.cbs.ontext(this.sectionStart, endIndex);\n }\n }\n emitCodePoint(cp, consumed) {\n if (this.baseState !== State.Text &&\n this.baseState !== State.InSpecialTag) {\n if (this.sectionStart < this.entityStart) {\n this.cbs.onattribdata(this.sectionStart, this.entityStart);\n }\n this.sectionStart = this.entityStart + consumed;\n this.index = this.sectionStart - 1;\n this.cbs.onattribentity(cp);\n }\n else {\n if (this.sectionStart < this.entityStart) {\n this.cbs.ontext(this.sectionStart, this.entityStart);\n }\n this.sectionStart = this.entityStart + consumed;\n this.index = this.sectionStart - 1;\n this.cbs.ontextentity(cp, this.sectionStart);\n }\n }\n}\n//# sourceMappingURL=Tokenizer.js.map","import Tokenizer, { QuoteType } from \"./Tokenizer.js\";\nimport { fromCodePoint } from \"entities/decode\";\nconst formTags = new Set([\n \"input\",\n \"option\",\n \"optgroup\",\n \"select\",\n \"button\",\n \"datalist\",\n \"textarea\",\n]);\nconst pTag = new Set([\"p\"]);\nconst tableSectionTags = new Set([\"thead\", \"tbody\"]);\nconst ddtTags = new Set([\"dd\", \"dt\"]);\nconst rtpTags = new Set([\"rt\", \"rp\"]);\nconst openImpliesClose = new Map([\n [\"tr\", new Set([\"tr\", \"th\", \"td\"])],\n [\"th\", new Set([\"th\"])],\n [\"td\", new Set([\"thead\", \"th\", \"td\"])],\n [\"body\", new Set([\"head\", \"link\", \"script\"])],\n [\"li\", new Set([\"li\"])],\n [\"p\", pTag],\n [\"h1\", pTag],\n [\"h2\", pTag],\n [\"h3\", pTag],\n [\"h4\", pTag],\n [\"h5\", pTag],\n [\"h6\", pTag],\n [\"select\", formTags],\n [\"input\", formTags],\n [\"output\", formTags],\n [\"button\", formTags],\n [\"datalist\", formTags],\n [\"textarea\", formTags],\n [\"option\", new Set([\"option\"])],\n [\"optgroup\", new Set([\"optgroup\", \"option\"])],\n [\"dd\", ddtTags],\n [\"dt\", ddtTags],\n [\"address\", pTag],\n [\"article\", pTag],\n [\"aside\", pTag],\n [\"blockquote\", pTag],\n [\"details\", pTag],\n [\"div\", pTag],\n [\"dl\", pTag],\n [\"fieldset\", pTag],\n [\"figcaption\", pTag],\n [\"figure\", pTag],\n [\"footer\", pTag],\n [\"form\", pTag],\n [\"header\", pTag],\n [\"hr\", pTag],\n [\"main\", pTag],\n [\"nav\", pTag],\n [\"ol\", pTag],\n [\"pre\", pTag],\n [\"section\", pTag],\n [\"table\", pTag],\n [\"ul\", pTag],\n [\"rt\", rtpTags],\n [\"rp\", rtpTags],\n [\"tbody\", tableSectionTags],\n [\"tfoot\", tableSectionTags],\n]);\nconst voidElements = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\nconst foreignContextElements = new Set([\"math\", \"svg\"]);\nconst htmlIntegrationElements = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignobject\",\n \"desc\",\n \"title\",\n]);\nconst reNameEnd = /\\s|\\//;\nexport class Parser {\n constructor(cbs, options = {}) {\n var _a, _b, _c, _d, _e, _f;\n this.options = options;\n /** The start index of the last event. */\n this.startIndex = 0;\n /** The end index of the last event. */\n this.endIndex = 0;\n /**\n * Store the start index of the current open tag,\n * so we can update the start index for attributes.\n */\n this.openTagStart = 0;\n this.tagname = \"\";\n this.attribname = \"\";\n this.attribvalue = \"\";\n this.attribs = null;\n this.stack = [];\n this.buffers = [];\n this.bufferOffset = 0;\n /** The index of the last written buffer. Used when resuming after a `pause()`. */\n this.writeIndex = 0;\n /** Indicates whether the parser has finished running / `.end` has been called. */\n this.ended = false;\n this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};\n this.htmlMode = !this.options.xmlMode;\n this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== void 0 ? _a : this.htmlMode;\n this.lowerCaseAttributeNames =\n (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;\n this.recognizeSelfClosing =\n (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;\n this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);\n this.foreignContext = [!this.htmlMode];\n (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);\n }\n // Tokenizer event handlers\n /** @internal */\n ontext(start, endIndex) {\n var _a, _b;\n const data = this.getSlice(start, endIndex);\n this.endIndex = endIndex - 1;\n (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, data);\n this.startIndex = endIndex;\n }\n /** @internal */\n ontextentity(cp, endIndex) {\n var _a, _b;\n this.endIndex = endIndex - 1;\n (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, fromCodePoint(cp));\n this.startIndex = endIndex;\n }\n /**\n * Checks if the current tag is a void element. Override this if you want\n * to specify your own additional void elements.\n */\n isVoidElement(name) {\n return this.htmlMode && voidElements.has(name);\n }\n /** @internal */\n onopentagname(start, endIndex) {\n this.endIndex = endIndex;\n let name = this.getSlice(start, endIndex);\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n this.emitOpenTag(name);\n }\n emitOpenTag(name) {\n var _a, _b, _c, _d;\n this.openTagStart = this.startIndex;\n this.tagname = name;\n const impliesClose = this.htmlMode && openImpliesClose.get(name);\n if (impliesClose) {\n while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {\n const element = this.stack.shift();\n (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, true);\n }\n }\n if (!this.isVoidElement(name)) {\n this.stack.unshift(name);\n if (this.htmlMode) {\n if (foreignContextElements.has(name)) {\n this.foreignContext.unshift(true);\n }\n else if (htmlIntegrationElements.has(name)) {\n this.foreignContext.unshift(false);\n }\n }\n }\n (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);\n if (this.cbs.onopentag)\n this.attribs = {};\n }\n endOpenTag(isImplied) {\n var _a, _b;\n this.startIndex = this.openTagStart;\n if (this.attribs) {\n (_b = (_a = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a, this.tagname, this.attribs, isImplied);\n this.attribs = null;\n }\n if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {\n this.cbs.onclosetag(this.tagname, true);\n }\n this.tagname = \"\";\n }\n /** @internal */\n onopentagend(endIndex) {\n this.endIndex = endIndex;\n this.endOpenTag(false);\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n onclosetag(start, endIndex) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n this.endIndex = endIndex;\n let name = this.getSlice(start, endIndex);\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n if (this.htmlMode &&\n (foreignContextElements.has(name) ||\n htmlIntegrationElements.has(name))) {\n this.foreignContext.shift();\n }\n if (!this.isVoidElement(name)) {\n const pos = this.stack.indexOf(name);\n if (pos !== -1) {\n for (let index = 0; index <= pos; index++) {\n const element = this.stack.shift();\n // We know the stack has sufficient elements.\n (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, index !== pos);\n }\n }\n else if (this.htmlMode && name === \"p\") {\n // Implicit open before close\n this.emitOpenTag(\"p\");\n this.closeCurrentTag(true);\n }\n }\n else if (this.htmlMode && name === \"br\") {\n // We can't use `emitOpenTag` for implicit open, as `br` would be implicitly closed.\n (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, \"br\");\n (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, \"br\", {}, true);\n (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, \"br\", false);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n onselfclosingtag(endIndex) {\n this.endIndex = endIndex;\n if (this.recognizeSelfClosing || this.foreignContext[0]) {\n this.closeCurrentTag(false);\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n else {\n // Ignore the fact that the tag is self-closing.\n this.onopentagend(endIndex);\n }\n }\n closeCurrentTag(isOpenImplied) {\n var _a, _b;\n const name = this.tagname;\n this.endOpenTag(isOpenImplied);\n // Self-closing tags will be on the top of the stack\n if (this.stack[0] === name) {\n // If the opening tag isn't implied, the closing tag has to be implied.\n (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, name, !isOpenImplied);\n this.stack.shift();\n }\n }\n /** @internal */\n onattribname(start, endIndex) {\n this.startIndex = start;\n const name = this.getSlice(start, endIndex);\n this.attribname = this.lowerCaseAttributeNames\n ? name.toLowerCase()\n : name;\n }\n /** @internal */\n onattribdata(start, endIndex) {\n this.attribvalue += this.getSlice(start, endIndex);\n }\n /** @internal */\n onattribentity(cp) {\n this.attribvalue += fromCodePoint(cp);\n }\n /** @internal */\n onattribend(quote, endIndex) {\n var _a, _b;\n this.endIndex = endIndex;\n (_b = (_a = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a, this.attribname, this.attribvalue, quote === QuoteType.Double\n ? '\"'\n : quote === QuoteType.Single\n ? \"'\"\n : quote === QuoteType.NoValue\n ? undefined\n : null);\n if (this.attribs &&\n !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {\n this.attribs[this.attribname] = this.attribvalue;\n }\n this.attribvalue = \"\";\n }\n getInstructionName(value) {\n const index = value.search(reNameEnd);\n let name = index < 0 ? value : value.substr(0, index);\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n return name;\n }\n /** @internal */\n ondeclaration(start, endIndex) {\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex);\n if (this.cbs.onprocessinginstruction) {\n const name = this.getInstructionName(value);\n this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n onprocessinginstruction(start, endIndex) {\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex);\n if (this.cbs.onprocessinginstruction) {\n const name = this.getInstructionName(value);\n this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n oncomment(start, endIndex, offset) {\n var _a, _b, _c, _d;\n this.endIndex = endIndex;\n (_b = (_a = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a, this.getSlice(start, endIndex - offset));\n (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n oncdata(start, endIndex, offset) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex - offset);\n if (!this.htmlMode || this.options.recognizeCDATA) {\n (_b = (_a = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a);\n (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);\n (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);\n }\n else {\n (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);\n (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n onend() {\n var _a, _b;\n if (this.cbs.onclosetag) {\n // Set the end index for all remaining tags\n this.endIndex = this.startIndex;\n for (let index = 0; index < this.stack.length; index++) {\n this.cbs.onclosetag(this.stack[index], true);\n }\n }\n (_b = (_a = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n /**\n * Resets the parser to a blank state, ready to parse a new HTML document\n */\n reset() {\n var _a, _b, _c, _d;\n (_b = (_a = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a);\n this.tokenizer.reset();\n this.tagname = \"\";\n this.attribname = \"\";\n this.attribs = null;\n this.stack.length = 0;\n this.startIndex = 0;\n this.endIndex = 0;\n (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);\n this.buffers.length = 0;\n this.foreignContext.length = 0;\n this.foreignContext.unshift(!this.htmlMode);\n this.bufferOffset = 0;\n this.writeIndex = 0;\n this.ended = false;\n }\n /**\n * Resets the parser, then parses a complete document and\n * pushes it to the handler.\n *\n * @param data Document to parse.\n */\n parseComplete(data) {\n this.reset();\n this.end(data);\n }\n getSlice(start, end) {\n while (start - this.bufferOffset >= this.buffers[0].length) {\n this.shiftBuffer();\n }\n let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);\n while (end - this.bufferOffset > this.buffers[0].length) {\n this.shiftBuffer();\n slice += this.buffers[0].slice(0, end - this.bufferOffset);\n }\n return slice;\n }\n shiftBuffer() {\n this.bufferOffset += this.buffers[0].length;\n this.writeIndex--;\n this.buffers.shift();\n }\n /**\n * Parses a chunk of data and calls the corresponding callbacks.\n *\n * @param chunk Chunk to parse.\n */\n write(chunk) {\n var _a, _b;\n if (this.ended) {\n (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".write() after done!\"));\n return;\n }\n this.buffers.push(chunk);\n if (this.tokenizer.running) {\n this.tokenizer.write(chunk);\n this.writeIndex++;\n }\n }\n /**\n * Parses the end of the buffer and clears the stack, calls onend.\n *\n * @param chunk Optional final chunk to parse.\n */\n end(chunk) {\n var _a, _b;\n if (this.ended) {\n (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".end() after done!\"));\n return;\n }\n if (chunk)\n this.write(chunk);\n this.ended = true;\n this.tokenizer.end();\n }\n /**\n * Pauses parsing. The parser won't emit events until `resume` is called.\n */\n pause() {\n this.tokenizer.pause();\n }\n /**\n * Resumes parsing after `pause` was called.\n */\n resume() {\n this.tokenizer.resume();\n while (this.tokenizer.running &&\n this.writeIndex < this.buffers.length) {\n this.tokenizer.write(this.buffers[this.writeIndex++]);\n }\n if (this.ended)\n this.tokenizer.end();\n }\n /**\n * Alias of `write`, for backwards compatibility.\n *\n * @param chunk Chunk to parse.\n * @deprecated\n */\n parseChunk(chunk) {\n this.write(chunk);\n }\n /**\n * Alias of `end`, for backwards compatibility.\n *\n * @param chunk Optional final chunk to parse.\n * @deprecated\n */\n done(chunk) {\n this.end(chunk);\n }\n}\n//# sourceMappingURL=Parser.js.map","/** Types of elements found in htmlparser2's DOM */\nexport var ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nexport function isTag(elem) {\n return (elem.type === ElementType.Tag ||\n elem.type === ElementType.Script ||\n elem.type === ElementType.Style);\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexport const Root = ElementType.Root;\n/** Type for Text */\nexport const Text = ElementType.Text;\n/** Type for <? ... ?> */\nexport const Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexport const Comment = ElementType.Comment;\n/** Type for <script> tags */\nexport const Script = ElementType.Script;\n/** Type for <style> tags */\nexport const Style = ElementType.Style;\n/** Type for Any tag */\nexport const Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexport const CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexport const Doctype = ElementType.Doctype;\n","import { ElementType, isTag as isTagRaw } from \"domelementtype\";\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nexport class Node {\n constructor() {\n /** Parent of the node */\n this.parent = null;\n /** Previous sibling */\n this.prev = null;\n /** Next sibling */\n this.next = null;\n /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n this.startIndex = null;\n /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n this.endIndex = null;\n }\n // Read-write aliases for properties\n /**\n * Same as {@link parent}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get parentNode() {\n return this.parent;\n }\n set parentNode(parent) {\n this.parent = parent;\n }\n /**\n * Same as {@link prev}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get previousSibling() {\n return this.prev;\n }\n set previousSibling(prev) {\n this.prev = prev;\n }\n /**\n * Same as {@link next}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nextSibling() {\n return this.next;\n }\n set nextSibling(next) {\n this.next = next;\n }\n /**\n * Clone this node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\n cloneNode(recursive = false) {\n return cloneNode(this, recursive);\n }\n}\n/**\n * A node that contains some data.\n */\nexport class DataNode extends Node {\n /**\n * @param data The content of the data node\n */\n constructor(data) {\n super();\n this.data = data;\n }\n /**\n * Same as {@link data}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nodeValue() {\n return this.data;\n }\n set nodeValue(data) {\n this.data = data;\n }\n}\n/**\n * Text within the document.\n */\nexport class Text extends DataNode {\n constructor() {\n super(...arguments);\n this.type = ElementType.Text;\n }\n get nodeType() {\n return 3;\n }\n}\n/**\n * Comments within the document.\n */\nexport class Comment extends DataNode {\n constructor() {\n super(...arguments);\n this.type = ElementType.Comment;\n }\n get nodeType() {\n return 8;\n }\n}\n/**\n * Processing instructions, including doc types.\n */\nexport class ProcessingInstruction extends DataNode {\n constructor(name, data) {\n super(data);\n this.name = name;\n this.type = ElementType.Directive;\n }\n get nodeType() {\n return 1;\n }\n}\n/**\n * A `Node` that can have children.\n */\nexport class NodeWithChildren extends Node {\n /**\n * @param children Children of the node. Only certain node types can have children.\n */\n constructor(children) {\n super();\n this.children = children;\n }\n // Aliases\n /** First child of the node. */\n get firstChild() {\n var _a;\n return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n }\n /** Last child of the node. */\n get lastChild() {\n return this.children.length > 0\n ? this.children[this.children.length - 1]\n : null;\n }\n /**\n * Same as {@link children}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get childNodes() {\n return this.children;\n }\n set childNodes(children) {\n this.children = children;\n }\n}\nexport class CDATA extends NodeWithChildren {\n constructor() {\n super(...arguments);\n this.type = ElementType.CDATA;\n }\n get nodeType() {\n return 4;\n }\n}\n/**\n * The root node of the document.\n */\nexport class Document extends NodeWithChildren {\n constructor() {\n super(...arguments);\n this.type = ElementType.Root;\n }\n get nodeType() {\n return 9;\n }\n}\n/**\n * An element within the DOM.\n */\nexport class Element extends NodeWithChildren {\n /**\n * @param name Name of the tag, eg. `div`, `span`.\n * @param attribs Object mapping attribute names to attribute values.\n * @param children Children of the node.\n */\n constructor(name, attribs, children = [], type = name === \"script\"\n ? ElementType.Script\n : name === \"style\"\n ? ElementType.Style\n : ElementType.Tag) {\n super(children);\n this.name = name;\n this.attribs = attribs;\n this.type = type;\n }\n get nodeType() {\n return 1;\n }\n // DOM Level 1 aliases\n /**\n * Same as {@link name}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get tagName() {\n return this.name;\n }\n set tagName(name) {\n this.name = name;\n }\n get attributes() {\n return Object.keys(this.attribs).map((name) => {\n var _a, _b;\n return ({\n name,\n value: this.attribs[name],\n namespace: (_a = this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n prefix: (_b = this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n });\n });\n }\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nexport function isTag(node) {\n return isTagRaw(node);\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nexport function isCDATA(node) {\n return node.type === ElementType.CDATA;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nexport function isText(node) {\n return node.type === ElementType.Text;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nexport function isComment(node) {\n return node.type === ElementType.Comment;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDirective(node) {\n return node.type === ElementType.Directive;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDocument(node) {\n return node.type === ElementType.Root;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nexport function hasChildren(node) {\n return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nexport function cloneNode(node, recursive = false) {\n let result;\n if (isText(node)) {\n result = new Text(node.data);\n }\n else if (isComment(node)) {\n result = new Comment(node.data);\n }\n else if (isTag(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Element(node.name, { ...node.attribs }, children);\n children.forEach((child) => (child.parent = clone));\n if (node.namespace != null) {\n clone.namespace = node.namespace;\n }\n if (node[\"x-attribsNamespace\"]) {\n clone[\"x-attribsNamespace\"] = { ...node[\"x-attribsNamespace\"] };\n }\n if (node[\"x-attribsPrefix\"]) {\n clone[\"x-attribsPrefix\"] = { ...node[\"x-attribsPrefix\"] };\n }\n result = clone;\n }\n else if (isCDATA(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new CDATA(children);\n children.forEach((child) => (child.parent = clone));\n result = clone;\n }\n else if (isDocument(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Document(children);\n children.forEach((child) => (child.parent = clone));\n if (node[\"x-mode\"]) {\n clone[\"x-mode\"] = node[\"x-mode\"];\n }\n result = clone;\n }\n else if (isDirective(node)) {\n const instruction = new ProcessingInstruction(node.name, node.data);\n if (node[\"x-name\"] != null) {\n instruction[\"x-name\"] = node[\"x-name\"];\n instruction[\"x-publicId\"] = node[\"x-publicId\"];\n instruction[\"x-systemId\"] = node[\"x-systemId\"];\n }\n result = instruction;\n }\n else {\n throw new Error(`Not implemented yet: ${node.type}`);\n }\n result.startIndex = node.startIndex;\n result.endIndex = node.endIndex;\n if (node.sourceCodeLocation != null) {\n result.sourceCodeLocation = node.sourceCodeLocation;\n }\n return result;\n}\nfunction cloneChildren(childs) {\n const children = childs.map((child) => cloneNode(child, true));\n for (let i = 1; i < children.length; i++) {\n children[i].prev = children[i - 1];\n children[i - 1].next = children[i];\n }\n return children;\n}\n","/** Types of elements found in htmlparser2's DOM */\nexport var ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nexport function isTag(elem) {\n return (elem.type === ElementType.Tag ||\n elem.type === ElementType.Script ||\n elem.type === ElementType.Style);\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexport const Root = ElementType.Root;\n/** Type for Text */\nexport const Text = ElementType.Text;\n/** Type for <? ... ?> */\nexport const Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexport const Comment = ElementType.Comment;\n/** Type for <script> tags */\nexport const Script = ElementType.Script;\n/** Type for <style> tags */\nexport const Style = ElementType.Style;\n/** Type for Any tag */\nexport const Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexport const CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexport const Doctype = ElementType.Doctype;\n","export const xmlReplacer = /[\"&'<>$\\x80-\\uFFFF]/g;\nconst xmlCodeMap = new Map([\n [34, \"&quot;\"],\n [38, \"&amp;\"],\n [39, \"&apos;\"],\n [60, \"&lt;\"],\n [62, \"&gt;\"],\n]);\n// For compatibility with node < 4, we wrap `codePointAt`\nexport const getCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.prototype.codePointAt != null\n ? (str, index) => str.codePointAt(index)\n : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n (c, index) => (c.charCodeAt(index) & 0xfc00) === 0xd800\n ? (c.charCodeAt(index) - 0xd800) * 0x400 +\n c.charCodeAt(index + 1) -\n 0xdc00 +\n 0x10000\n : c.charCodeAt(index);\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nexport function encodeXML(str) {\n let ret = \"\";\n let lastIdx = 0;\n let match;\n while ((match = xmlReplacer.exec(str)) !== null) {\n const i = match.index;\n const char = str.charCodeAt(i);\n const next = xmlCodeMap.get(char);\n if (next !== undefined) {\n ret += str.substring(lastIdx, i) + next;\n lastIdx = i + 1;\n }\n else {\n ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;\n // Increase by 1 if we have a surrogate pair\n lastIdx = xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);\n }\n }\n return ret + str.substr(lastIdx);\n}\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `&#xfc;`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n *\n * @param data String to escape.\n */\nexport const escape = encodeXML;\n/**\n * Creates a function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n *\n * @param regex Regular expression to match characters to escape.\n * @param map Map of characters to escape to their entities.\n *\n * @returns Function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n */\nfunction getEscaper(regex, map) {\n return function escape(data) {\n let match;\n let lastIdx = 0;\n let result = \"\";\n while ((match = regex.exec(data))) {\n if (lastIdx !== match.index) {\n result += data.substring(lastIdx, match.index);\n }\n // We know that this character will be in the map.\n result += map.get(match[0].charCodeAt(0));\n // Every match will be of length 1\n lastIdx = match.index + 1;\n }\n return result + data.substring(lastIdx);\n };\n}\n/**\n * Encodes all characters not valid in XML documents using XML entities.\n *\n * Note that the output will be character-set dependent.\n *\n * @param data String to escape.\n */\nexport const escapeUTF8 = getEscaper(/[&<>'\"]/g, xmlCodeMap);\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeAttribute = getEscaper(/[\"&\\u00A0]/g, new Map([\n [34, \"&quot;\"],\n [38, \"&amp;\"],\n [160, \"&nbsp;\"],\n]));\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeText = getEscaper(/[&<>\\u00A0]/g, new Map([\n [38, \"&amp;\"],\n [60, \"&lt;\"],\n [62, \"&gt;\"],\n [160, \"&nbsp;\"],\n]));\n//# sourceMappingURL=escape.js.map","export const elementNames = new Map([\n \"altGlyph\",\n \"altGlyphDef\",\n \"altGlyphItem\",\n \"animateColor\",\n \"animateMotion\",\n \"animateTransform\",\n \"clipPath\",\n \"feBlend\",\n \"feColorMatrix\",\n \"feComponentTransfer\",\n \"feComposite\",\n \"feConvolveMatrix\",\n \"feDiffuseLighting\",\n \"feDisplacementMap\",\n \"feDistantLight\",\n \"feDropShadow\",\n \"feFlood\",\n \"feFuncA\",\n \"feFuncB\",\n \"feFuncG\",\n \"feFuncR\",\n \"feGaussianBlur\",\n \"feImage\",\n \"feMerge\",\n \"feMergeNode\",\n \"feMorphology\",\n \"feOffset\",\n \"fePointLight\",\n \"feSpecularLighting\",\n \"feSpotLight\",\n \"feTile\",\n \"feTurbulence\",\n \"foreignObject\",\n \"glyphRef\",\n \"linearGradient\",\n \"radialGradient\",\n \"textPath\",\n].map((val) => [val.toLowerCase(), val]));\nexport const attributeNames = new Map([\n \"definitionURL\",\n \"attributeName\",\n \"attributeType\",\n \"baseFrequency\",\n \"baseProfile\",\n \"calcMode\",\n \"clipPathUnits\",\n \"diffuseConstant\",\n \"edgeMode\",\n \"filterUnits\",\n \"glyphRef\",\n \"gradientTransform\",\n \"gradientUnits\",\n \"kernelMatrix\",\n \"kernelUnitLength\",\n \"keyPoints\",\n \"keySplines\",\n \"keyTimes\",\n \"lengthAdjust\",\n \"limitingConeAngle\",\n \"markerHeight\",\n \"markerUnits\",\n \"markerWidth\",\n \"maskContentUnits\",\n \"maskUnits\",\n \"numOctaves\",\n \"pathLength\",\n \"patternContentUnits\",\n \"patternTransform\",\n \"patternUnits\",\n \"pointsAtX\",\n \"pointsAtY\",\n \"pointsAtZ\",\n \"preserveAlpha\",\n \"preserveAspectRatio\",\n \"primitiveUnits\",\n \"refX\",\n \"refY\",\n \"repeatCount\",\n \"repeatDur\",\n \"requiredExtensions\",\n \"requiredFeatures\",\n \"specularConstant\",\n \"specularExponent\",\n \"spreadMethod\",\n \"startOffset\",\n \"stdDeviation\",\n \"stitchTiles\",\n \"surfaceScale\",\n \"systemLanguage\",\n \"tableValues\",\n \"targetX\",\n \"targetY\",\n \"textLength\",\n \"viewBox\",\n \"viewTarget\",\n \"xChannelSelector\",\n \"yChannelSelector\",\n \"zoomAndPan\",\n].map((val) => [val.toLowerCase(), val]));\n","/*\n * Module dependencies\n */\nimport * as ElementType from \"domelementtype\";\nimport { encodeXML, escapeAttribute, escapeText } from \"entities\";\n/**\n * Mixed-case SVG and MathML tags & attributes\n * recognized by the HTML parser.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n */\nimport { elementNames, attributeNames } from \"./foreignNames.js\";\nconst unencodedElements = new Set([\n \"style\",\n \"script\",\n \"xmp\",\n \"iframe\",\n \"noembed\",\n \"noframes\",\n \"plaintext\",\n \"noscript\",\n]);\nfunction replaceQuotes(value) {\n return value.replace(/\"/g, \"&quot;\");\n}\n/**\n * Format attributes\n */\nfunction formatAttributes(attributes, opts) {\n var _a;\n if (!attributes)\n return;\n const encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false\n ? replaceQuotes\n : opts.xmlMode || opts.encodeEntities !== \"utf8\"\n ? encodeXML\n : escapeAttribute;\n return Object.keys(attributes)\n .map((key) => {\n var _a, _b;\n const value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : \"\";\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case attribute names */\n key = (_b = attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;\n }\n if (!opts.emptyAttrs && !opts.xmlMode && value === \"\") {\n return key;\n }\n return `${key}=\"${encode(value)}\"`;\n })\n .join(\" \");\n}\n/**\n * Self-enclosing tags\n */\nconst singleTag = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n/**\n * Renders a DOM node or an array of DOM nodes to a string.\n *\n * Can be thought of as the equivalent of the `outerHTML` of the passed node(s).\n *\n * @param node Node to be rendered.\n * @param options Changes serialization behavior\n */\nexport function render(node, options = {}) {\n const nodes = \"length\" in node ? node : [node];\n let output = \"\";\n for (let i = 0; i < nodes.length; i++) {\n output += renderNode(nodes[i], options);\n }\n return output;\n}\nexport default render;\nfunction renderNode(node, options) {\n switch (node.type) {\n case ElementType.Root:\n return render(node.children, options);\n // @ts-expect-error We don't use `Doctype` yet\n case ElementType.Doctype:\n case ElementType.Directive:\n return renderDirective(node);\n case ElementType.Comment:\n return renderComment(node);\n case ElementType.CDATA:\n return renderCdata(node);\n case ElementType.Script:\n case ElementType.Style:\n case ElementType.Tag:\n return renderTag(node, options);\n case ElementType.Text:\n return renderText(node, options);\n }\n}\nconst foreignModeIntegrationPoints = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignObject\",\n \"desc\",\n \"title\",\n]);\nconst foreignElements = new Set([\"svg\", \"math\"]);\nfunction renderTag(elem, opts) {\n var _a;\n // Handle SVG / MathML in HTML\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case element names */\n elem.name = (_a = elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;\n /* Exit foreign mode at integration points */\n if (elem.parent &&\n foreignModeIntegrationPoints.has(elem.parent.name)) {\n opts = { ...opts, xmlMode: false };\n }\n }\n if (!opts.xmlMode && foreignElements.has(elem.name)) {\n opts = { ...opts, xmlMode: \"foreign\" };\n }\n let tag = `<${elem.name}`;\n const attribs = formatAttributes(elem.attribs, opts);\n if (attribs) {\n tag += ` ${attribs}`;\n }\n if (elem.children.length === 0 &&\n (opts.xmlMode\n ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags\n opts.selfClosingTags !== false\n : // User explicitly asked for self-closing tags, even in HTML mode\n opts.selfClosingTags && singleTag.has(elem.name))) {\n if (!opts.xmlMode)\n tag += \" \";\n tag += \"/>\";\n }\n else {\n tag += \">\";\n if (elem.children.length > 0) {\n tag += render(elem.children, opts);\n }\n if (opts.xmlMode || !singleTag.has(elem.name)) {\n tag += `</${elem.name}>`;\n }\n }\n return tag;\n}\nfunction renderDirective(elem) {\n return `<${elem.data}>`;\n}\nfunction renderText(elem, opts) {\n var _a;\n let data = elem.data || \"\";\n // If entities weren't decoded, no need to encode them back\n if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false &&\n !(!opts.xmlMode &&\n elem.parent &&\n unencodedElements.has(elem.parent.name))) {\n data =\n opts.xmlMode || opts.encodeEntities !== \"utf8\"\n ? encodeXML(data)\n : escapeText(data);\n }\n return data;\n}\nfunction renderCdata(elem) {\n return `<![CDATA[${elem.children[0].data}]]>`;\n}\nfunction renderComment(elem) {\n return `<!--${elem.data}-->`;\n}\n","import { isTag, isCDATA, isText, hasChildren, isComment, } from \"domhandler\";\nimport renderHTML from \"dom-serializer\";\nimport { ElementType } from \"domelementtype\";\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the outer HTML of.\n * @param options Options for serialization.\n * @returns `node`'s outer HTML.\n */\nexport function getOuterHTML(node, options) {\n return renderHTML(node, options);\n}\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the inner HTML of.\n * @param options Options for serialization.\n * @returns `node`'s inner HTML.\n */\nexport function getInnerHTML(node, options) {\n return hasChildren(node)\n ? node.children.map((node) => getOuterHTML(node, options)).join(\"\")\n : \"\";\n}\n/**\n * Get a node's inner text. Same as `textContent`, but inserts newlines for `<br>` tags. Ignores comments.\n *\n * @category Stringify\n * @deprecated Use `textContent` instead.\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n */\nexport function getText(node) {\n if (Array.isArray(node))\n return node.map(getText).join(\"\");\n if (isTag(node))\n return node.name === \"br\" ? \"\\n\" : getText(node.children);\n if (isCDATA(node))\n return getText(node.children);\n if (isText(node))\n return node.data;\n return \"\";\n}\n/**\n * Get a node's text content. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the text content of.\n * @returns `node`'s text content.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent}\n */\nexport function textContent(node) {\n if (Array.isArray(node))\n return node.map(textContent).join(\"\");\n if (hasChildren(node) && !isComment(node)) {\n return textContent(node.children);\n }\n if (isText(node))\n return node.data;\n return \"\";\n}\n/**\n * Get a node's inner text, ignoring `<script>` and `<style>` tags. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/innerText}\n */\nexport function innerText(node) {\n if (Array.isArray(node))\n return node.map(innerText).join(\"\");\n if (hasChildren(node) && (node.type === ElementType.Tag || isCDATA(node))) {\n return innerText(node.children);\n }\n if (isText(node))\n return node.data;\n return \"\";\n}\n//# sourceMappingURL=stringify.js.map","import { isTag, hasChildren } from \"domhandler\";\n/**\n * Search a node and its children for nodes passing a test function. If `node` is not an array, it will be wrapped in one.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param node Node to search. Will be included in the result set if it matches.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nexport function filter(test, node, recurse = true, limit = Infinity) {\n return find(test, Array.isArray(node) ? node : [node], recurse, limit);\n}\n/**\n * Search an array of nodes and their children for nodes passing a test function.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nexport function find(test, nodes, recurse, limit) {\n const result = [];\n /** Stack of the arrays we are looking at. */\n const nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];\n /** Stack of the indices within the arrays. */\n const indexStack = [0];\n for (;;) {\n // First, check if the current array has any more elements to look at.\n if (indexStack[0] >= nodeStack[0].length) {\n // If we have no more arrays to look at, we are done.\n if (indexStack.length === 1) {\n return result;\n }\n // Otherwise, remove the current array from the stack.\n nodeStack.shift();\n indexStack.shift();\n // Loop back to the start to continue with the next array.\n continue;\n }\n const elem = nodeStack[0][indexStack[0]++];\n if (test(elem)) {\n result.push(elem);\n if (--limit <= 0)\n return result;\n }\n if (recurse && hasChildren(elem) && elem.children.length > 0) {\n /*\n * Add the children to the stack. We are depth-first, so this is\n * the next array we look at.\n */\n indexStack.unshift(0);\n nodeStack.unshift(elem.children);\n }\n }\n}\n/**\n * Finds the first element inside of an array that matches a test function. This is an alias for `Array.prototype.find`.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns The first node in the array that passes `test`.\n * @deprecated Use `Array.prototype.find` directly.\n */\nexport function findOneChild(test, nodes) {\n return nodes.find(test);\n}\n/**\n * Finds one element in a tree that passes a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Node or array of nodes to search.\n * @param recurse Also consider child nodes.\n * @returns The first node that passes `test`.\n */\nexport function findOne(test, nodes, recurse = true) {\n const searchedNodes = Array.isArray(nodes) ? nodes : [nodes];\n for (let i = 0; i < searchedNodes.length; i++) {\n const node = searchedNodes[i];\n if (isTag(node) && test(node)) {\n return node;\n }\n if (recurse && hasChildren(node) && node.children.length > 0) {\n const found = findOne(test, node.children, true);\n if (found)\n return found;\n }\n }\n return null;\n}\n/**\n * Checks if a tree of nodes contains at least one node passing a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns Whether a tree of nodes contains at least one node passing the test.\n */\nexport function existsOne(test, nodes) {\n return (Array.isArray(nodes) ? nodes : [nodes]).some((node) => (isTag(node) && test(node)) ||\n (hasChildren(node) && existsOne(test, node.children)));\n}\n/**\n * Search an array of nodes and their children for elements passing a test function.\n *\n * Same as `find`, but limited to elements and with less options, leading to reduced complexity.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns All nodes passing `test`.\n */\nexport function findAll(test, nodes) {\n const result = [];\n const nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];\n const indexStack = [0];\n for (;;) {\n if (indexStack[0] >= nodeStack[0].length) {\n if (nodeStack.length === 1) {\n return result;\n }\n // Otherwise, remove the current array from the stack.\n nodeStack.shift();\n indexStack.shift();\n // Loop back to the start to continue with the next array.\n continue;\n }\n const elem = nodeStack[0][indexStack[0]++];\n if (isTag(elem) && test(elem))\n result.push(elem);\n if (hasChildren(elem) && elem.children.length > 0) {\n indexStack.unshift(0);\n nodeStack.unshift(elem.children);\n }\n }\n}\n//# sourceMappingURL=querying.js.map","//Types of elements found in the DOM\nmodule.exports = {\n\tText: \"text\", //Text\n\tDirective: \"directive\", //<? ... ?>\n\tComment: \"comment\", //<!-- ... -->\n\tScript: \"script\", //<script> tags\n\tStyle: \"style\", //<style> tags\n\tTag: \"tag\", //Any tag\n\tCDATA: \"cdata\", //<![CDATA[ ... ]]>\n\tDoctype: \"doctype\",\n\n\tisTag: function(elem){\n\t\treturn elem.type === \"tag\" || elem.type === \"script\" || elem.type === \"style\";\n\t}\n};\n","// This object will be used as the prototype for Nodes when creating a\n// DOM-Level-1-compliant structure.\nvar NodePrototype = module.exports = {\n\tget firstChild() {\n\t\tvar children = this.children;\n\t\treturn children && children[0] || null;\n\t},\n\tget lastChild() {\n\t\tvar children = this.children;\n\t\treturn children && children[children.length - 1] || null;\n\t},\n\tget nodeType() {\n\t\treturn nodeTypes[this.type] || nodeTypes.element;\n\t}\n};\n\nvar domLvl1 = {\n\ttagName: \"name\",\n\tchildNodes: \"children\",\n\tparentNode: \"parent\",\n\tpreviousSibling: \"prev\",\n\tnextSibling: \"next\",\n\tnodeValue: \"data\"\n};\n\nvar nodeTypes = {\n\telement: 1,\n\ttext: 3,\n\tcdata: 4,\n\tcomment: 8\n};\n\nObject.keys(domLvl1).forEach(function(key) {\n\tvar shorthand = domLvl1[key];\n\tObject.defineProperty(NodePrototype, key, {\n\t\tget: function() {\n\t\t\treturn this[shorthand] || null;\n\t\t},\n\t\tset: function(val) {\n\t\t\tthis[shorthand] = val;\n\t\t\treturn val;\n\t\t}\n\t});\n});\n","// DOM-Level-1-compliant structure\nvar NodePrototype = require('./node');\nvar ElementPrototype = module.exports = Object.create(NodePrototype);\n\nvar domLvl1 = {\n\ttagName: \"name\"\n};\n\nObject.keys(domLvl1).forEach(function(key) {\n\tvar shorthand = domLvl1[key];\n\tObject.defineProperty(ElementPrototype, key, {\n\t\tget: function() {\n\t\t\treturn this[shorthand] || null;\n\t\t},\n\t\tset: function(val) {\n\t\t\tthis[shorthand] = val;\n\t\t\treturn val;\n\t\t}\n\t});\n});\n","var ElementType = require(\"domelementtype\");\n\nvar re_whitespace = /\\s+/g;\nvar NodePrototype = require(\"./lib/node\");\nvar ElementPrototype = require(\"./lib/element\");\n\nfunction DomHandler(callback, options, elementCB){\n\tif(typeof callback === \"object\"){\n\t\telementCB = options;\n\t\toptions = callback;\n\t\tcallback = null;\n\t} else if(typeof options === \"function\"){\n\t\telementCB = options;\n\t\toptions = defaultOpts;\n\t}\n\tthis._callback = callback;\n\tthis._options = options || defaultOpts;\n\tthis._elementCB = elementCB;\n\tthis.dom = [];\n\tthis._done = false;\n\tthis._tagStack = [];\n\tthis._parser = this._parser || null;\n}\n\n//default options\nvar defaultOpts = {\n\tnormalizeWhitespace: false, //Replace all whitespace with single spaces\n\twithStartIndices: false, //Add startIndex properties to nodes\n\twithEndIndices: false, //Add endIndex properties to nodes\n};\n\nDomHandler.prototype.onparserinit = function(parser){\n\tthis._parser = parser;\n};\n\n//Resets the handler back to starting state\nDomHandler.prototype.onreset = function(){\n\tDomHandler.call(this, this._callback, this._options, this._elementCB);\n};\n\n//Signals the handler that parsing is done\nDomHandler.prototype.onend = function(){\n\tif(this._done) return;\n\tthis._done = true;\n\tthis._parser = null;\n\tthis._handleCallback(null);\n};\n\nDomHandler.prototype._handleCallback =\nDomHandler.prototype.onerror = function(error){\n\tif(typeof this._callback === \"function\"){\n\t\tthis._callback(error, this.dom);\n\t} else {\n\t\tif(error) throw error;\n\t}\n};\n\nDomHandler.prototype.onclosetag = function(){\n\t//if(this._tagStack.pop().name !== name) this._handleCallback(Error(\"Tagname didn't match!\"));\n\t\n\tvar elem = this._tagStack.pop();\n\n\tif(this._options.withEndIndices && elem){\n\t\telem.endIndex = this._parser.endIndex;\n\t}\n\n\tif(this._elementCB) this._elementCB(elem);\n};\n\nDomHandler.prototype._createDomElement = function(properties){\n\tif (!this._options.withDomLvl1) return properties;\n\n\tvar element;\n\tif (properties.type === \"tag\") {\n\t\telement = Object.create(ElementPrototype);\n\t} else {\n\t\telement = Object.create(NodePrototype);\n\t}\n\n\tfor (var key in properties) {\n\t\tif (properties.hasOwnProperty(key)) {\n\t\t\telement[key] = properties[key];\n\t\t}\n\t}\n\n\treturn element;\n};\n\nDomHandler.prototype._addDomElement = function(element){\n\tvar parent = this._tagStack[this._tagStack.length - 1];\n\tvar siblings = parent ? parent.children : this.dom;\n\tvar previousSibling = siblings[siblings.length - 1];\n\n\telement.next = null;\n\n\tif(this._options.withStartIndices){\n\t\telement.startIndex = this._parser.startIndex;\n\t}\n\tif(this._options.withEndIndices){\n\t\telement.endIndex = this._parser.endIndex;\n\t}\n\n\tif(previousSibling){\n\t\telement.prev = previousSibling;\n\t\tpreviousSibling.next = element;\n\t} else {\n\t\telement.prev = null;\n\t}\n\n\tsiblings.push(element);\n\telement.parent = parent || null;\n};\n\nDomHandler.prototype.onopentag = function(name, attribs){\n\tvar properties = {\n\t\ttype: name === \"script\" ? ElementType.Script : name === \"style\" ? ElementType.Style : ElementType.Tag,\n\t\tname: name,\n\t\tattribs: attribs,\n\t\tchildren: []\n\t};\n\n\tvar element = this._createDomElement(properties);\n\n\tthis._addDomElement(element);\n\n\tthis._tagStack.push(element);\n};\n\nDomHandler.prototype.ontext = function(data){\n\t//the ignoreWhitespace is officially dropped, but for now,\n\t//it's an alias for normalizeWhitespace\n\tvar normalize = this._options.normalizeWhitespace || this._options.ignoreWhitespace;\n\n\tvar lastTag;\n\n\tif(!this._tagStack.length && this.dom.length && (lastTag = this.dom[this.dom.length-1]).type === ElementType.Text){\n\t\tif(normalize){\n\t\t\tlastTag.data = (lastTag.data + data).replace(re_whitespace, \" \");\n\t\t} else {\n\t\t\tlastTag.data += data;\n\t\t}\n\t} else {\n\t\tif(\n\t\t\tthis._tagStack.length &&\n\t\t\t(lastTag = this._tagStack[this._tagStack.length - 1]) &&\n\t\t\t(lastTag = lastTag.children[lastTag.children.length - 1]) &&\n\t\t\tlastTag.type === ElementType.Text\n\t\t){\n\t\t\tif(normalize){\n\t\t\t\tlastTag.data = (lastTag.data + data).replace(re_whitespace, \" \");\n\t\t\t} else {\n\t\t\t\tlastTag.data += data;\n\t\t\t}\n\t\t} else {\n\t\t\tif(normalize){\n\t\t\t\tdata = data.replace(re_whitespace, \" \");\n\t\t\t}\n\n\t\t\tvar element = this._createDomElement({\n\t\t\t\tdata: data,\n\t\t\t\ttype: ElementType.Text\n\t\t\t});\n\n\t\t\tthis._addDomElement(element);\n\t\t}\n\t}\n};\n\nDomHandler.prototype.oncomment = function(data){\n\tvar lastTag = this._tagStack[this._tagStack.length - 1];\n\n\tif(lastTag && lastTag.type === ElementType.Comment){\n\t\tlastTag.data += data;\n\t\treturn;\n\t}\n\n\tvar properties = {\n\t\tdata: data,\n\t\ttype: ElementType.Comment\n\t};\n\n\tvar element = this._createDomElement(properties);\n\n\tthis._addDomElement(element);\n\tthis._tagStack.push(element);\n};\n\nDomHandler.prototype.oncdatastart = function(){\n\tvar properties = {\n\t\tchildren: [{\n\t\t\tdata: \"\",\n\t\t\ttype: ElementType.Text\n\t\t}],\n\t\ttype: ElementType.CDATA\n\t};\n\n\tvar element = this._createDomElement(properties);\n\n\tthis._addDomElement(element);\n\tthis._tagStack.push(element);\n};\n\nDomHandler.prototype.oncommentend = DomHandler.prototype.oncdataend = function(){\n\tthis._tagStack.pop();\n};\n\nDomHandler.prototype.onprocessinginstruction = function(name, data){\n\tvar element = this._createDomElement({\n\t\tname: name,\n\t\tdata: data,\n\t\ttype: ElementType.Directive\n\t});\n\n\tthis._addDomElement(element);\n};\n\nmodule.exports = DomHandler;\n","// SPDX-License-Identifier: MIT\n\nimport { Parser } from 'htmlparser2';\nimport { DomHandler } from 'domhandler';\nimport * as DomUtils from 'domutils';\nimport { replyIcon, heartIcon } from '../common/icons';\nimport { IRenderOptions } from '../base/render-options';\nimport { NDKUserProfile } from '@nostr-dev-kit/ndk';\nimport { escapeHtml } from '../common/utils';\n\nexport interface RenderPostOptions extends IRenderOptions {\n author: NDKUserProfile | null| undefined;\n date: string;\n shouldShowStats: boolean;\n stats: {\n replies: number;\n likes: number;\n } | null;\n statsLoading: boolean;\n htmlToRender: string;\n}\n\nexport function renderPost(options: RenderPostOptions): string {\n const {\n isLoading,\n isError,\n errorMessage,\n author,\n date,\n shouldShowStats,\n stats,\n statsLoading,\n htmlToRender,\n } = options;\n\n if (isError) {\n return renderError(errorMessage || '');\n }\n\n return `\n <div class=\"nostr-post-container\">\n ${renderPostHeader(isLoading, author, date)}\n ${renderPostBody(isLoading, htmlToRender)}\n ${shouldShowStats ? renderPostFooter(isLoading, stats, statsLoading) : ''}\n </div>\n `;\n}\n\nfunction renderPostHeader(\n isLoading: boolean,\n author:\n | {\n image?: string;\n displayName?: string;\n nip05?: string;\n }\n | null\n | undefined,\n date: string\n): string {\n if (isLoading) {\n return `\n <div class=\"post-header\">\n <div class=\"post-header-left\">\n <div class=\"author-picture\">\n <div style=\"width: 35px; height: 35px; border-radius: 50%;\" class=\"skeleton\"></div>\n </div>\n </div>\n <div class=\"post-header-middle\">\n <div style=\"width: 70%; height: 10px; border-radius: 10px;\" class=\"skeleton\"></div>\n <div style=\"width: 80%; height: 8px; border-radius: 10px; margin-top: 5px;\" class=\"skeleton\"></div>\n </div>\n <div class=\"post-header-right\">\n <div style=\"width: 100px; height: 10px; border-radius: 10px;\" class=\"skeleton\"></div>\n </div>\n </div>\n `;\n }\n\n return `\n <div class=\"post-header\">\n <div class=\"post-header-left\">\n <div class=\"author-picture\">\n ${author?.image ? `<img src=\"${author.image}\" alt=\"Author\" />` : ''}\n </div>\n </div>\n <div class=\"post-header-middle\">\n ${author?.displayName ? `<span class=\"author-name\">${author.displayName}</span>` : ''}\n ${author?.nip05 ? `<span class=\"author-username\">${author.nip05}</span>` : ''}\n </div>\n <div class=\"post-header-right\">\n <span class=\"post-date\">${date}</span>\n </div>\n </div>\n `;\n}\n\nfunction renderPostBody(\n isLoading: boolean,\n htmlToRender: string\n): string {\n if (isLoading) {\n return `\n <div class=\"post-body\">\n <div style=\"width: 100%; height: 10px; border-radius: 10px; margin-bottom: 15px;\" class=\"skeleton\"></div>\n <div style=\"width: 100%; height: 10px; border-radius: 10px; margin-bottom: 15px;\" class=\"skeleton\"></div>\n <div style=\"width: 30%; height: 10px; border-radius: 10px;\" class=\"skeleton\"></div>\n </div>\n `;\n }\n\n return `\n <div class=\"post-body\">\n ${htmlToRender}\n </div>\n `;\n}\n\nfunction renderPostFooter(\n isLoading: boolean,\n stats: { replies: number; likes: number } | null,\n statsLoading: boolean\n): string {\n if (isLoading || statsLoading) {\n return `\n <div class=\"post-footer\">\n <div class='stats-container'>\n <div class=\"stat\">\n <div style=\"width: 16px; height: 16px; border-radius: 4px;\" class=\"skeleton\"></div>\n <div style=\"width: 20px; height: 16px; border-radius: 4px;\" class=\"skeleton\"></div>\n </div>\n <div class=\"stat\">\n <div style=\"width: 16px; height: 16px; border-radius: 4px;\" class=\"skeleton\"></div>\n <div style=\"width: 20px; height: 16px; border-radius: 4px;\" class=\"skeleton\"></div>\n </div>\n </div>\n </div>\n `;\n }\n\n return `\n <div class=\"post-footer\">\n <div class='stats-container'>\n <div class=\"stat\">\n ${replyIcon}\n <span>${stats?.replies ?? 0}</span>\n </div>\n <div class=\"stat\">\n ${heartIcon}\n <span>${stats?.likes ?? 0}</span>\n </div>\n </div>\n </div>\n `;\n}\n\nexport function renderEmbeddedPost(\n noteId: string,\n authorProfile:\n | {\n displayName?: string;\n image?: string;\n nip05?: string;\n }\n | undefined,\n date: string,\n content: string\n): string {\n const authorDisplayName = authorProfile?.displayName || '';\n\n // Process media items from content\n const mediaItems: { type: 'image' | 'video'; url: string }[] = [];\n let processedContent = content;\n\n try {\n // Create a handler to collect DOM elements\n const dom: any[] = [];\n const handler = new DomHandler(\n (error, parsedDom) => {\n if (error) {\n throw error;\n }\n dom.push(...parsedDom);\n },\n {\n normalizeWhitespace: false,\n withEndIndices: false,\n withStartIndices: false,\n }\n );\n\n const parser = new Parser(handler);\n\n // Parse the HTML content\n parser.write(content);\n parser.end();\n\n // Find all image and video elements\n const mediaElements = DomUtils.findAll((elem: any) => {\n return (\n elem.type === 'tag' &&\n (elem.name === 'img' || elem.name === 'video') &&\n elem.attribs?.src\n );\n }, dom) as any[];\n\n // Extract media items and remove them from the DOM\n mediaElements.forEach(elem => {\n if (elem.attribs?.src) {\n const type = elem.name === 'img' ? 'image' : 'video';\n mediaItems.push({ type, url: elem.attribs.src });\n\n // Remove the element from its parent\n const parent = elem.parent;\n if (parent?.children) {\n parent.children = parent.children.filter(\n (child: any) => child !== elem\n );\n }\n }\n });\n\n // Reconstruct the HTML without media elements\n processedContent = dom\n .map((node: any) => DomUtils.getOuterHTML(node))\n .join('');\n } catch (error) {\n console.error('Error processing HTML content:', error);\n // Fall back to original content if parsing fails\n processedContent = content;\n }\n\n // Generate media HTML if there are media items\n let mediaHtml = '';\n if (mediaItems.length > 0) {\n mediaHtml = '<div class=\"embedded-media-list\">';\n for (const item of mediaItems) {\n if (item.type === 'image') {\n mediaHtml += `<div class=\"embedded-media-item\"><img src=\"${item.url}\" alt=\"Embedded image\" loading=\"lazy\" /></div>`;\n } else if (item.type === 'video') {\n mediaHtml += `<div class=\"embedded-media-item\"><video src=\"${item.url}\" controls preload=\"none\"></video></div>`;\n }\n }\n mediaHtml += '</div>';\n }\n\n return `\n <div class=\"embedded-post\" data-note-id=\"${noteId}\">\n <div class=\"embedded-post-header\">\n <div class=\"embedded-author-avatar\" style=\"cursor: pointer;\">\n ${authorProfile?.image ? `<img src=\"${authorProfile.image}\" alt=\"Profile\">` : ''}\n </div>\n <div class=\"embedded-author-info\" style=\"cursor: pointer;\">\n <span class=\"embedded-author-name\">${authorDisplayName}</span>\n ${authorProfile?.nip05 ? `<span class=\"embedded-author-username\">${authorProfile.nip05}</span>` : ''}\n </div>\n <div class=\"embedded-post-date\">${date}</div>\n </div>\n <div class=\"embedded-post-content\">\n ${processedContent}\n ${mediaHtml ? `<div class=\"embedded-post-media\">${mediaHtml}</div>` : ''}\n </div>\n </div>\n `;\n}\n\nfunction renderError(errorMessage: string): string {\n return `\n <div class=\"nostr-post-container\">\n <div class=\"post-header\">\n <div class=\"error-icon\">⚠</div>\n </div>\n <div class=\"post-body\">\n ${escapeHtml(errorMessage)}\n </div>\n </div>\n `;\n}","// SPDX-License-Identifier: MIT\n\nimport { NDKEvent, ProfilePointer } from \"@nostr-dev-kit/ndk\";\nimport { NostrService } from \"../common/nostr-service\";\nimport { nip21 } from 'nostr-tools';\n\nexport type ContentItem = {\n type: 'text' | 'image' | 'gif' | 'video' | 'link' | 'embedded-note';\n value?: string;\n noteId?: string;\n};\n \nexport async function parseText(text: string, post: NDKEvent | null, embeddedPosts: Map<string, NDKEvent>, nostrService: NostrService): Promise<ContentItem[]> {\n let textContent = text;\n let embeddedNotes: { id: string; position: number }[] = [];\n\n // First capture embedded note references before other processing\n // Example note1abcdef... or nostr:note1abcdef... or nevent1abcdef...\n const noteRegex = /(nostr:)?(note[a-zA-Z0-9]{59,60}|nevent[a-zA-Z0-9]{58,})/g;\n const noteMatches = [...textContent.matchAll(noteRegex)];\n\n for (const match of noteMatches) {\n const fullMatch = match[0];\n const noteId = match[2];\n const position = match.index || 0;\n\n // Store the note ID and its position for later processing\n embeddedNotes.push({\n id: noteId,\n position: position,\n });\n\n // Fetch the embedded post\n try {\n if (!embeddedPosts.has(noteId)) {\n const embeddedPost = await nostrService.getPost(noteId);\n if (embeddedPost) {\n embeddedPosts.set(noteId, embeddedPost);\n }\n }\n } catch (error) {\n console.error(`Failed to fetch embedded post ${noteId}:`, error);\n }\n\n // Remove the note reference from the text to prevent @ symbols being added\n textContent = textContent.replace(fullMatch, ' ');\n }\n\n // Handle Nostr URI schema for mentions - batch process to avoid multiple async operations\n const nostrURISchemaMatches = [...textContent.matchAll(new RegExp(nip21.NOSTR_URI_REGEX, 'g'))];\n const uriReplacements: { original: string; replacement: string }[] = [];\n\n // Process all URIs concurrently\n const uriPromises = nostrURISchemaMatches.map(async (match) => {\n try {\n const parsedNostrURI = nip21.parse(match[0]);\n const decordedData = parsedNostrURI.decoded.data;\n\n let pubkey = '';\n if (typeof decordedData === 'string') {\n pubkey = decordedData;\n } else {\n pubkey = (decordedData as ProfilePointer).pubkey;\n }\n\n if (pubkey) {\n const user = nostrService.getNDK().getUser({ pubkey });\n const profile = await user.fetchProfile();\n const name = profile?.displayName || '';\n\n uriReplacements.push({\n original: match[0],\n replacement: `<a href=\"https://njump.me/${parsedNostrURI.value}\" target=\"_blank\">@${name}</a>`\n });\n }\n } catch (error) {\n console.error('Failed to process Nostr URI:', error);\n }\n });\n\n await Promise.all(uriPromises);\n\n // Apply all replacements at once\n for (const replacement of uriReplacements) {\n textContent = textContent.replace(replacement.original, replacement.replacement);\n }\n\n // Handle Twitter-like mentions (@username) - batch process\n const mentionRegex = /(\\s|^)@(\\w+)/g;\n const mentionMatches = [...textContent.matchAll(mentionRegex)];\n const mentionReplacements: { original: string; replacement: string }[] = [];\n\n for (const match of mentionMatches) {\n const fullMatch = match[0];\n const username = match[2];\n\n mentionReplacements.push({\n original: fullMatch,\n replacement: `${match[1]}<span class=\"nostr-mention\" data-username=\"${username}\">@${username}</span>`\n });\n }\n\n // Apply all mention replacements at once\n for (const replacement of mentionReplacements) {\n textContent = textContent.replace(replacement.original, replacement.replacement);\n }\n\n const result: ContentItem[] = [];\n\n // First, check for Nostr attachments in the post\n if (post) {\n const videoTags = post.getMatchingTags('a');\n for (const tag of videoTags) {\n const mimeType = tag[1] as string;\n const url = tag[2] as string;\n if (mimeType?.startsWith('video/') && url) {\n result.push({ type: 'video', value: url });\n }\n }\n }\n\n // Then handle URLs in the text - optimized with single pass\n const urlRegex = /(https:\\/\\/(?!njump\\.me)[\\w.-]+(?:\\.[\\w.-]+)+(?:\\/[^\\s]*)?)/g;\n const urlMatches = [...textContent.matchAll(urlRegex)];\n\n if (urlMatches.length > 0) {\n let lastIndex = 0;\n \n for (const match of urlMatches) {\n const startIndex = match.index!;\n const endIndex = startIndex + match[0].length;\n\n // Add text before URL\n if (startIndex > lastIndex) {\n result.push({\n type: 'text',\n value: textContent.substring(lastIndex, startIndex),\n });\n }\n\n // Determine URL type efficiently\n const url = match[0];\n const pathname = new URL(url).pathname.toLowerCase();\n let type: 'image' | 'gif' | 'video' | 'link';\n\n if (pathname.match(/\\.(jpg|jpeg|png)$/)) {\n type = 'image';\n } else if (pathname.endsWith('.gif')) {\n type = 'gif';\n } else if (pathname.match(/\\.(mp4|webm|mov)$/)) {\n type = 'video';\n } else {\n type = 'link';\n }\n\n result.push({ type, value: url });\n lastIndex = endIndex;\n }\n\n // Add remaining text\n if (lastIndex < textContent.length) {\n result.push({ type: 'text', value: textContent.substring(lastIndex) });\n }\n } else {\n result.push({ type: 'text', value: textContent });\n }\n\n // Add embedded notes to the result\n // TODO: Embedded notes lose their original position in text and are appended at the end,\n // losing their inline context. Consider inserting embedded notes at their original \n // positions using the captured position data to maintain content flow and semantic meaning.\n // See: https://github.com/saiy2k/nostr-components/pull/23#discussion_r2238652376\n if (embeddedNotes.length > 0) {\n // Sort by position in descending order to avoid affecting earlier positions\n embeddedNotes.sort((a, b) => b.position - a.position);\n\n for (const note of embeddedNotes) {\n result.push({\n type: 'embedded-note',\n noteId: note.id,\n });\n }\n }\n\n return result;\n }\n","// SPDX-License-Identifier: MIT\n\n/**\n * Shared date formatting utilities for Nostr components\n */\n\n/**\n * Formats a Unix timestamp to a readable date string\n * @param createdAt Unix timestamp in seconds\n * @returns Formatted date string (e.g., \"Jan 15, 2024\")\n */\nexport function formatEventDate(createdAt: number | undefined): string {\n if (createdAt === undefined) return '';\n \n return new Date(createdAt * 1000).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n}\n","// SPDX-License-Identifier: MIT\n\n import { ContentItem } from './parse-text';\n import { isValidUrl } from '../common/utils';\n import { NDKEvent, NDKUserProfile } from '@nostr-dev-kit/ndk';\n import { parseText } from './parse-text';\n import { renderEmbeddedPost } from './render';\n import { formatEventDate } from '../common/date-utils';\n\n export function renderContent(content: ContentItem[]): string {\n const html: string[] = [];\n let mediaCount = 0;\n let textBuffer = '';\n\n for (const item of content) {\n if (item.type === 'text') {\n textBuffer += (item.value ?? '');\n } else if (item.type === 'embedded-note') {\n // Handle embedded note placeholder\n if (textBuffer) {\n html.push(\n `<span class=\"text-content\">${textBuffer.replace(/\\n/g, '<br />')}</span>`\n );\n textBuffer = '';\n }\n\n html.push(\n `<div class=\"embedded-post-placeholder\" data-note-id=\"${item.noteId}\"></div>`\n );\n } else {\n if (textBuffer) {\n html.push(\n `<span class=\"text-content\">${textBuffer.replace(/\\n/g, '<br />')}</span>`\n );\n textBuffer = '';\n }\n\n const url = item.value ?? \"\";\n if (!isValidUrl(url)) continue;\n switch (item.type) {\n case 'image':\n html.push(\n `<img class=\"post-media-item\" src=\"${url}\" alt=\"User uploaded image\" loading=\"lazy\">`\n );\n mediaCount++;\n break;\n case 'gif':\n html.push(\n `<img class=\"post-media-item\" src=\"${url}\" alt=\"User uploaded GIF\" loading=\"lazy\">`\n );\n mediaCount++;\n break;\n case 'video':\n html.push(\n `<video class=\"post-media-item\" src=\"${url}\" controls></video>`\n );\n mediaCount++;\n break;\n case 'link':\n html.push(`<a href=\"${url}\">${url}</a>`);\n break;\n }\n }\n }\n\n if (textBuffer) {\n html.push(\n `<span class=\"text-content\">${textBuffer.replace(/\\n/g, '<br />')}</span>`\n );\n }\n\n if (mediaCount > 1) {\n const carouselHtml: string[] = [];\n const bullets: string[] = [];\n let slideIndex = 0;\n let firstMediaIndex = -1;\n\n // First pass: collect media items and track first media position\n for (let i = 0; i < html.length; i++) {\n const item = html[i];\n if (item.startsWith('<img') || item.startsWith('<video')) {\n if (firstMediaIndex === -1) {\n firstMediaIndex = i;\n }\n carouselHtml.push(`<li class=\"glide__slide\">${item}</li>`);\n bullets.push(`<button class=\"glide__bullet\" data-glide-dir=\"=${slideIndex}\"></button>`);\n slideIndex++;\n }\n }\n\n // Remove media items from html array (filter in-place)\n const filteredHtml = html.filter(item => \n !item.startsWith('<img') && !item.startsWith('<video')\n );\n\n // Build carousel string\n const carouselString = `\n <div class=\"glide\" style=\"margin-top: 20px\">\n <div class=\"glide__track\" data-glide-el=\"track\">\n <ul class=\"glide__slides\">\n ${carouselHtml.join('')}\n </ul>\n </div>\n\n <div class=\"glide__bullets\" data-glide-el=\"controls[nav]\">\n ${bullets.join('')}\n </div>\n </div>\n `;\n\n // Replace html with filtered content and splice carousel at first media position\n html.length = 0;\n html.push(...filteredHtml);\n html.splice(firstMediaIndex, 0, carouselString);\n }\n\n return html.join('');\n };\n\n export async function replaceEmbeddedPostPlaceholders(\n shadowRoot: ShadowRoot | null,\n embeddedPosts: Map<string, NDKEvent>,\n event: NDKEvent | null,\n nostrService: any\n ) {\n const placeholders = shadowRoot?.querySelectorAll('.embedded-post-placeholder');\n\n if (!placeholders) return;\n\n for (const placeholder of placeholders) {\n const noteId = placeholder.getAttribute('data-note-id');\n if (noteId) {\n const embedHtml = await renderEmbeddedPostContent(noteId, embeddedPosts, event, nostrService);\n\n const temp = document.createElement('div');\n temp.innerHTML = embedHtml;\n\n // Replace the placeholder with the embedded post\n placeholder.parentNode?.replaceChild(\n temp.firstElementChild!,\n placeholder\n );\n }\n }\n }\n\n export async function renderEmbeddedPostContent(\n noteId: string,\n embeddedPosts: Map<string, NDKEvent>,\n event: NDKEvent | null,\n nostrService: any\n ): Promise<string> {\n const post = embeddedPosts.get(noteId);\n if (!post) return '<div class=\"embedded-post-error\">Post not found</div>';\n\n let authorProfile: NDKUserProfile | null = null;\n try {\n authorProfile = await post.author.fetchProfile();\n } catch (error) {\n console.error(\n `Failed to fetch profile for embedded post ${noteId}:`,\n error\n );\n }\n\n const date = formatEventDate(post.created_at);\n\n // Process the post content\n const content = await parseText(post.content, post, embeddedPosts, nostrService);\n const renderedContent = renderContent(content);\n\n const sanitizedProfile = authorProfile\n ? {\n displayName: authorProfile.displayName || '',\n image: isValidUrl(authorProfile.picture || '') ? authorProfile.picture : '',\n nip05: authorProfile.nip05 || '',\n }\n : undefined;\n\n // Use the renderEmbeddedPost function from the render module\n return renderEmbeddedPost(\n noteId,\n sanitizedProfile,\n date,\n renderedContent\n );\n }","// SPDX-License-Identifier: MIT\n\nimport { NDKEvent } from '@nostr-dev-kit/ndk';\nimport { nip19 } from 'nostr-tools';\nimport { NostrService } from '../../common/nostr-service';\nimport { isValidHex, validateNoteId, validateEventId } from '../../common/utils';\n\nexport class EventResolver {\n constructor(private nostrService: NostrService) { }\n\n validateInputs({ hex, noteid, eventid }: { hex?: string | null; noteid?: string | null; eventid?: string | null }): string | null {\n if (!hex && !noteid && !eventid) {\n return \"Provide hex, noteid, or eventid attribute\";\n }\n \n if (hex && !isValidHex(hex)) return `Invalid hex: ${hex}`;\n if (noteid && !validateNoteId(noteid)) return `Invalid noteid: ${noteid}`;\n if (eventid && !validateEventId(eventid)) return `Invalid eventid: ${eventid}`;\n \n return null;\n }\n\n /**\n * Normalize bech32 identifiers to hex format\n */\n private normalizeToHex(identifier: string): string | null {\n try {\n const decoded = nip19.decode(identifier);\n \n if (decoded.type === 'note') {\n return decoded.data;\n } else if (decoded.type === 'nevent') {\n return decoded.data.id;\n }\n \n return null;\n } catch {\n // Not bech32; accept only if it is valid hex\n return isValidHex(identifier) ? identifier : null;\n }\n }\n\n async resolveEvent({ hex, noteid, eventid }: { hex?: string | null; noteid?: string | null; eventid?: string | null }): Promise<NDKEvent> {\n // Normalize all identifiers to hex format\n let normalizedHex: string | null = null;\n \n if (noteid) {\n normalizedHex = this.normalizeToHex(noteid);\n } else if (hex) {\n normalizedHex = hex;\n } else if (eventid) {\n normalizedHex = this.normalizeToHex(eventid);\n }\n \n if (!normalizedHex) {\n throw new Error(\"Unable to normalize identifier to hex format\");\n }\n if (!isValidHex(normalizedHex)) {\n throw new Error(`Invalid hex: ${normalizedHex}`);\n }\n \n const event = await this.nostrService.resolveNDKEvent({ hex: normalizedHex });\n if (!event) throw new Error(\"Unable to resolve event from provided identifier\");\n\n return event;\n }\n}\n","// SPDX-License-Identifier: MIT\n\nimport { NDKEvent, NDKUser, NDKUserProfile } from '@nostr-dev-kit/ndk';\nimport { NostrBaseComponent, NCStatus } from '../base-component/nostr-base-component';\nimport { EventResolver } from '../resolvers/event-resolver';\nimport { UserResolver } from '../resolvers/user-resolver';\nimport { formatEventDate } from '../../common/date-utils';\n\nconst EVT_EVENT = 'nc:event';\n\n/**\n * NostrEventComponent\n * ==================\n * Extension of `NostrBaseComponent` that resolves and manages a Nostr Event.\n *\n * Overview\n * - Accepts identity attributes (`hex`, `noteid`, or `eventid`) and validates them.\n * - Resolves an `NDKEvent` via the shared `nostrService` and fetches the event.\n * - Exposes resolved `event` to subclasses for rendering or logic.\n * - Emits lifecycle events for status and event readiness.\n *\n * Observed attributes\n * - `hex` — raw hex-encoded event ID\n * - `noteid` — bech32-encoded event ID starting with 'note1...'\n * - `eventid` — bech32-encoded event pointer starting with 'nevent1...' (encodes extra metadata)\n *\n * Events\n * - `nc:status` — from base, reflects connection and event loading status\n * - `nc:event` — fired when an event is successfully resolved\n */\n\nexport class NostrEventComponent extends NostrBaseComponent {\n\n protected event: NDKEvent | null = null;\n protected author: NDKUser | null = null;\n protected authorProfile: NDKUserProfile | null = null;\n protected formattedDate: string = '';\n\n protected eventStatus = this.channel('event');\n protected authorStatus = this.channel('author');\n\n // guard to ignore stale event fetches\n private loadSeq = 0;\n\n private eventResolver!: EventResolver;\n private userResolver!: UserResolver;\n\n constructor(shadow: boolean = true) {\n super(shadow);\n this.initChannelStatus('event', NCStatus.Loading, { reflectOverall: false });\n this.initChannelStatus('author', NCStatus.Loading, { reflectOverall: false });\n this.eventResolver = new EventResolver(this.nostrService);\n this.userResolver = new UserResolver(this.nostrService);\n }\n\n /** Lifecycle methods */\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n 'hex',\n 'noteid',\n 'eventid',\n ];\n }\n\n connectedCallback() {\n super.connectedCallback?.();\n\n if (this.validateInputs()) {\n this.resolveEventAndLoad().catch(e => {\n console.error('[NostrEventComponent] init failed:', e);\n });\n }\n }\n\n attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null\n ) {\n if (oldValue === newValue) return;\n super.attributeChangedCallback?.(name, oldValue, newValue);\n\n if (name === 'hex' || name === 'noteid' || name === 'eventid') {\n if (this.validateInputs()) {\n void this.resolveEventAndLoad();\n }\n }\n }\n\n /** Protected methods */\n protected validateInputs(): boolean {\n\n if (!super.validateInputs()) {\n this.eventStatus.set(NCStatus.Idle);\n this.authorStatus.set(NCStatus.Idle);\n return false;\n }\n\n const hex = this.getAttribute(\"hex\");\n const noteid = this.getAttribute(\"noteid\");\n const eventid = this.getAttribute(\"eventid\");\n const tagName = this.tagName.toLowerCase();\n\n const err = this.eventResolver.validateInputs({\n hex: hex,\n noteid: noteid,\n eventid: eventid,\n });\n\n if (err) {\n this.eventStatus.set(NCStatus.Error, err);\n this.authorStatus.set(NCStatus.Error, err);\n console.error(`Nostr-Components: ${tagName}: ${err}`);\n this.errorMessage = err;\n return false;\n }\n\n this.errorMessage = \"\";\n return true;\n\n }\n\n // TODO: Parallalize loading of event and author profile\n // and render once any of them is ready\n protected async resolveEventAndLoad(): Promise<void> {\n const seq = ++this.loadSeq; // token to prevent stale writes\n\n // Ensure relays are connected; handle failure inside to avoid unhandled rejection\n try {\n await this.ensureNostrConnected();\n } catch (e) {\n if (seq !== this.loadSeq) return; // stale\n // Base already set status=Error, but make the failure explicit here too\n console.error('[NostrEventComponent] Relay connect failed before event load:', e);\n return;\n }\n\n this.eventStatus.set(NCStatus.Loading);\n this.authorStatus.set(NCStatus.Loading);\n this.event = null;\n this.author = null;\n this.authorProfile = null;\n\n try {\n const hex = this.getAttribute('hex');\n const noteid = this.getAttribute('noteid');\n const eventid = this.getAttribute('eventid');\n\n const event = await this.eventResolver.resolveEvent({\n hex: hex,\n noteid: noteid,\n eventid: eventid,\n });\n\n // stale call check\n if (seq !== this.loadSeq) return;\n\n this.event = event;\n this.formattedDate = this.formatEventDate(event);\n this.eventStatus.set(NCStatus.Ready);\n\n this.loadAuthorProfile(event.pubkey, seq);\n\n this.dispatchEvent(new CustomEvent(EVT_EVENT, {\n detail: { event: this.event },\n bubbles: true,\n composed: true,\n }));\n\n // Check if both event and author are ready\n this.checkEventAndAuthorReady();\n } catch (err) {\n if (seq !== this.loadSeq) return; // stale\n const msg = err instanceof Error ? err.message : 'Failed to load event';\n console.error('[NostrEventComponent] ' + msg, err);\n this.eventStatus.set(NCStatus.Error, msg);\n }\n }\n\n private async loadAuthorProfile(pubkey: string, seq: number): Promise<void> {\n try {\n const { user, profile } = await this.userResolver.resolveUser({ pubkey });\n \n // stale call check\n if (seq !== this.loadSeq) return;\n\n this.author = user;\n this.authorProfile = profile;\n this.authorStatus.set(NCStatus.Ready);\n\n // Check if both event and author are ready\n this.checkEventAndAuthorReady();\n } catch (err) {\n if (seq !== this.loadSeq) return; // stale\n const msg = err instanceof Error ? err.message : 'Failed to load author profile';\n console.error('[NostrEventComponent] ' + msg, err);\n this.authorStatus.set(NCStatus.Error, msg);\n }\n }\n\n // TODO: Allow event to render if event is ready, regardless of author status\n // Update post render to handle this\n private checkEventAndAuthorReady(): void {\n const eventReady = this.eventStatus.get() === NCStatus.Ready;\n const authorReady = this.authorStatus.get() === NCStatus.Ready;\n \n if (eventReady && authorReady && this.event) {\n this.onEventReady(this.event);\n }\n }\n\n private formatEventDate(event: NDKEvent): string {\n return formatEventDate(event.created_at);\n }\n\n protected renderContent() { }\n\n /** Hook for subclasses to react when event is ready (e.g., render). */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected onEventReady(_event: NDKEvent) { }\n}\n","// SPDX-License-Identifier: MIT\n\nimport { getComponentStyles } from '../common/base-styles';\n\nexport function getPostStyles(): string {\n const customStyles = `\n /* === POST CSS VARIABLES === */\n :host {\n --nostrc-post-bg: var(--nostrc-theme-bg, #ffffff);\n --nostrc-post-text-primary: var(--nostrc-theme-text-primary, #333333);\n --nostrc-post-text-secondary: var(--nostrc-theme-text-secondary, #666666);\n --nostrc-post-border: var(--nostrc-border-width) solid var(--nostrc-color-border);\n --nostrc-post-font-family: var(--nostrc-font-family-primary);\n --nostrc-post-font-size: var(--nostrc-font-size-base);\n \n /* Hover state variables */\n --nostrc-post-hover-bg: var(--nostrc-theme-hover-bg, rgba(0, 0, 0, 0.05));\n --nostrc-post-hover-color: var(--nostrc-theme-text-primary, #333333);\n --nostrc-post-hover-border: var(--nostrc-border-width) solid var(--nostrc-theme-border, var(--nostrc-color-border));\n\n /* Make the host the visual post surface */\n display: block;\n background: var(--nostrc-post-bg);\n color: var(--nostrc-post-text-primary);\n border: var(--nostrc-post-border);\n border-radius: var(--nostrc-border-radius-md);\n font-family: var(--nostrc-post-font-family);\n font-size: var(--nostrc-post-font-size);\n transition: background-color var(--nostrc-transition-duration) var(--nostrc-transition-timing);\n }\n\n /* === POST CONTAINER PATTERN === */\n .nostr-post-container {\n display: flex;\n flex-direction: column;\n gap: var(--nostrc-spacing-lg);\n padding: var(--nostrc-spacing-md);\n min-height: 100px;\n }\n\n /* Hover state */\n :host(.is-clickable:hover) {\n background: var(--nostrc-post-hover-bg);\n color: var(--nostrc-post-hover-color);\n border: var(--nostrc-post-hover-border);\n }\n\n :host(.is-clickable) {\n cursor: pointer;\n }\n\n :host(.is-error) .nostr-post-container {\n justify-content: center;\n align-items: center;\n color: var(--nostrc-color-error-text);\n border: var(--nostrc-border-width) solid var(--nostrc-color-error-text);\n }\n\n /* === POST HEADER PATTERN === */\n .post-header {\n display: flex;\n gap: var(--nostrc-spacing-sm);\n }\n \n .post-body {\n display: block;\n width: 100%;\n }\n\n .post-header-left {\n width: 35px;\n flex-shrink: 0;\n }\n\n .post-header-left img {\n width: 35px;\n height: 35px;\n border-radius: var(--nostrc-border-radius-full);\n object-fit: cover;\n }\n\n .post-header-middle {\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: var(--nostrc-spacing-xs);\n }\n\n .post-header-right {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: end;\n }\n\n /* === AUTHOR INFO STYLES === */\n .author-name {\n color: var(--nostrc-post-text-primary);\n font-weight: var(--nostrc-font-weight-bold);\n word-break: break-word;\n }\n\n .author-username {\n font-weight: var(--nostrc-font-weight-normal);\n color: var(--nostrc-post-text-secondary);\n font-size: var(--nostrc-font-size-sm);\n word-break: break-all;\n }\n\n .post-date {\n font-weight: var(--nostrc-font-weight-normal);\n color: var(--nostrc-post-text-secondary);\n font-size: var(--nostrc-font-size-sm);\n }\n\n .text-content {\n word-break: break-word;\n }\n\n /* === POST FOOTER PATTERN === */\n .post-footer {\n margin-top: var(--nostrc-spacing-lg);\n display: block;\n width: 100%;\n }\n\n .stats-container {\n display: flex;\n gap: var(--nostrc-spacing-lg);\n }\n\n .stat {\n display: flex;\n gap: var(--nostrc-spacing-xs);\n color: var(--nostrc-post-text-secondary);\n }\n\n /* === MEDIA STYLING === */\n .post-media-item {\n max-width: 100%;\n max-height: 500px;\n width: auto;\n height: auto;\n object-fit: contain;\n border-radius: var(--nostrc-border-radius-md);\n display: block;\n margin: var(--nostrc-spacing-sm) 0;\n }\n\n /* === EMBEDDED MEDIA STYLING === */\n .embedded-media-item {\n width: 100%;\n border-radius: var(--nostrc-border-radius-sm);\n overflow: hidden;\n margin: var(--nostrc-spacing-xs) 0;\n }\n\n .embedded-media-item img,\n .embedded-media-item video {\n width: 100%;\n max-height: 500px;\n object-fit: contain;\n display: block;\n }\n\n /* === GLIDE CAROUSEL STYLES === */\n .glide {\n position: relative;\n width: 100%;\n box-sizing: border-box;\n }\n .glide * {\n box-sizing: inherit;\n }\n .glide__track {\n overflow: hidden;\n }\n .glide__slides {\n position: relative;\n width: 100%;\n list-style: none;\n backface-visibility: hidden;\n transform-style: preserve-3d;\n touch-action: pan-Y;\n overflow: hidden;\n margin: 0;\n padding: 0;\n white-space: nowrap;\n display: flex;\n flex-wrap: nowrap;\n will-change: transform;\n }\n .glide__slide {\n width: 100%;\n height: 100%;\n flex-shrink: 0;\n white-space: normal;\n user-select: none;\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: transparent;\n }\n .glide__slide * {\n border-radius: var(--nostrc-border-radius-md);\n }\n .glide__bullets {\n -webkit-touch-callout: none;\n user-select: none;\n display: flex;\n justify-content: center;\n gap: 8px;\n margin-top: 12px;\n }\n .glide__bullet {\n background-color: rgba(0, 0, 0, 0.3);\n border: none;\n border-radius: 50%;\n width: 8px;\n height: 8px;\n cursor: pointer;\n transition: background-color 0.2s ease;\n }\n .glide__bullet:hover,\n .glide__bullet--active {\n background-color: rgba(0, 0, 0, 0.7);\n }\n\n /* === MENTION STYLES === */\n .nostr-mention {\n color: var(--nostrc-post-accent);\n font-weight: var(--nostrc-font-weight-medium);\n cursor: pointer;\n }\n \n /* === EMBEDDED POST STYLES === */\n .embedded-post {\n margin: var(--nostrc-spacing-sm) 0;\n padding: var(--nostrc-spacing-sm);\n border: var(--nostrc-post-border);\n border-radius: var(--nostrc-border-radius-md);\n background: var(--nostrc-color-background-secondary);\n }\n \n .embedded-post-header {\n display: flex;\n align-items: center;\n margin-bottom: var(--nostrc-spacing-xs);\n }\n \n .embedded-author-avatar {\n width: 24px;\n height: 24px;\n border-radius: var(--nostrc-border-radius-full);\n overflow: hidden;\n margin-right: var(--nostrc-spacing-xs);\n }\n \n .embedded-author-avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n \n .embedded-author-info {\n display: flex;\n flex-direction: column;\n flex: 1;\n }\n \n .embedded-author-name {\n font-weight: var(--nostrc-font-weight-bold);\n font-size: var(--nostrc-font-size-sm);\n color: var(--nostrc-post-text-primary);\n }\n \n .embedded-author-username {\n font-size: var(--nostrc-font-size-xs);\n color: var(--nostrc-post-text-secondary);\n }\n \n .embedded-post-date {\n font-size: var(--nostrc-font-size-xs);\n color: var(--nostrc-post-text-secondary);\n }\n \n .embedded-post-content {\n font-size: var(--nostrc-font-size-sm);\n color: var(--nostrc-post-text-primary);\n line-height: 1.4;\n white-space: pre-line;\n }\n \n .embedded-post-media {\n margin-top: var(--nostrc-spacing-sm);\n }\n \n .embedded-media-list {\n display: flex;\n flex-direction: column;\n gap: var(--nostrc-spacing-xs);\n }\n \n .embedded-media-item {\n width: 100%;\n border-radius: var(--nostrc-border-radius-sm);\n overflow: hidden;\n }\n \n .embedded-media-item img,\n .embedded-media-item video {\n width: 100%;\n max-height: 300px;\n object-fit: contain;\n display: block;\n }\n \n .embedded-post-error {\n padding: var(--nostrc-spacing-sm);\n color: var(--nostrc-color-error-text);\n background-color: var(--nostrc-color-error-background);\n border: var(--nostrc-post-border);\n border-radius: var(--nostrc-border-radius-sm);\n font-size: var(--nostrc-font-size-sm);\n }\n\n :host(.is-error) .post-body {\n text-align: center;\n }\n `;\n \n // Use component styles - includes design tokens + utilities + custom styles\n return getComponentStyles(customStyles);\n}","// SPDX-License-Identifier: MIT\n\nimport { NDKEvent } from '@nostr-dev-kit/ndk';\nimport Glide from '@glidejs/glide';\nimport { getPostStats, Stats } from '../common/utils';\nimport { renderPost, RenderPostOptions } from './render';\nimport { parseText } from './parse-text';\nimport { renderContent, replaceEmbeddedPostPlaceholders } from './render-content';\nimport { NostrEventComponent } from '../base/event-component/nostr-event-component';\nimport { NCStatus } from '../base/base-component/nostr-base-component';\nimport { getPostStyles } from './style';\n\nconst EVT_POST = 'nc:post';\nconst EVT_AUTHOR = 'nc:author';\nconst EVT_MENTION = 'nc:mention';\n\nexport default class NostrPost extends NostrEventComponent {\n\n protected stats: Stats | null = null;\n protected statsLoading: boolean = false;\n protected embeddedPosts: Map<string, NDKEvent> = new Map();\n private glideInitialized: boolean = false;\n private cachedParsedContent: string | null = null;\n private cachedHtmlToRender: string | null = null;\n\n async connectedCallback() {\n super.connectedCallback?.();\n this.attachDelegatedListeners();\n this.render();\n }\n\n static get observedAttributes() {\n return [\n ...super.observedAttributes,\n 'show-stats',\n ];\n }\n\n attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null\n ) {\n if (oldValue === newValue) return;\n super.attributeChangedCallback?.(name, oldValue, newValue);\n if (name === 'show-stats') {\n this.render();\n }\n }\n\n /** Base class functions */\n protected onStatusChange(_status: NCStatus) {\n this.render();\n }\n\n protected async onEventReady(_event: any) {\n this.invalidateCache();\n this.getPostStats();\n this.render();\n }\n\n private invalidateCache() {\n this.cachedParsedContent = null;\n this.cachedHtmlToRender = null;\n this.glideInitialized = false;\n }\n\n async getPostStats() {\n try {\n const shouldShowStats = this.getAttribute('show-stats') === 'true';\n\n if (this.event && shouldShowStats) {\n this.statsLoading = true;\n this.render();\n \n const stats = await getPostStats(\n this.nostrService.getNDK(),\n this.event.id\n );\n if (stats) {\n this.stats = stats;\n }\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Failed to load post stats';\n console.error('[NostrPostComponent] ' + msg, err);\n this.eventStatus.set(NCStatus.Error, msg);\n } finally {\n this.statsLoading = false;\n this.render();\n }\n }\n\n private onPostClick() {\n const id = this.getAttribute('id') || this.event?.id;\n if (id) {\n this.handleNjumpClick(EVT_POST, this.event, id);\n }\n }\n\n private onAuthorClick() {\n const key =\n this.author?.npub ||\n this.authorProfile?.nip05;\n\n if (key) {\n this.handleNjumpClick(EVT_AUTHOR, {\n author: this.author,\n authorProfile: this.authorProfile,\n npub: this.author?.npub\n }, key);\n }\n }\n\n private onMentionClick(username: string) {\n this.handleNjumpClick(EVT_MENTION, { username }, `p/${username}`);\n }\n\n private attachDelegatedListeners() {\n // Click anywhere on the post container (except interactive elements)\n this.delegateEvent('click', '.nostr-post-container', (_e: Event) => {\n const target = _e.target as HTMLElement;\n if (!target.closest('a, .nostr-mention, video, img, .nc-copy-btn, .post-header-left, .post-header-middle')) {\n this.onPostClick();\n }\n });\n\n // Click on author avatar\n this.delegateEvent('click', '.post-header-left', (_e: Event) => {\n this.onAuthorClick();\n });\n\n // Click on author info (name/username area)\n this.delegateEvent('click', '.post-header-middle', (_e: Event) => {\n this.onAuthorClick();\n });\n\n // Click on mentions\n this.delegateEvent('click', '.nostr-mention', (e: Event) => {\n const target = e.target as HTMLElement;\n const username = target.getAttribute('data-username') || target.textContent?.slice(1);\n if (username) {\n this.onMentionClick(username);\n }\n });\n }\n\n protected async renderContent() {\n\n const isLoading = this.computeOverall() == NCStatus.Loading;\n const isError = this.computeOverall() === NCStatus.Error;\n const date = this.formattedDate;\n const content = this.event?.content || '';\n \n // Cache parsed content to avoid re-parsing on every render\n if (!this.cachedParsedContent || !this.cachedHtmlToRender) {\n const parsedContent = await parseText(content, this.event, this.embeddedPosts, this.nostrService);\n this.cachedParsedContent = JSON.stringify(parsedContent);\n this.cachedHtmlToRender = renderContent(parsedContent);\n }\n \n const htmlToRender = this.cachedHtmlToRender;\n const errorMessage = this.errorMessage;\n\n const shouldShowStats = this.getAttribute('show-stats') === 'true';\n\n const renderOptions: RenderPostOptions = {\n isLoading: isLoading,\n isError: isError,\n errorMessage: errorMessage,\n author: this.authorProfile,\n date,\n shouldShowStats,\n stats: this.stats,\n statsLoading: this.statsLoading,\n htmlToRender,\n };\n\n this.shadowRoot!.innerHTML = `\n ${getPostStyles()}\n ${renderPost(renderOptions)}\n `;\n\n if(htmlToRender.includes('glide') && !this.glideInitialized) {\n // Wait for DOM to be ready\n setTimeout(() => {\n const glideElement = this.shadowRoot?.querySelector('.glide');\n if (glideElement) {\n new Glide(glideElement as HTMLElement).mount();\n this.glideInitialized = true;\n }\n }, 0);\n }\n\n // Process embedded post placeholders asynchronously after render\n // TODO: This is super bad!\n if (htmlToRender.includes('embedded-post-placeholder')) {\n setTimeout(() => {\n replaceEmbeddedPostPlaceholders(\n this.shadowRoot, \n this.embeddedPosts, \n this.event, \n this.nostrService\n );\n }, 0);\n }\n }\n}\n\ncustomElements.define('nostr-post', NostrPost);\n"],"names":["ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","target","i","source","key","_defineProperty","_typeof","obj","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","_createClass","protoProps","staticProps","value","_inherits","subClass","superClass","_setPrototypeOf","_getPrototypeOf","o","p","_isNativeReflectConstruct","_assertThisInitialized","self","_possibleConstructorReturn","call","_createSuper","Derived","hasNativeReflectConstruct","Super","result","NewTarget","_superPropBase","property","_get","receiver","base","desc","defaults","warn","msg","toInt","toFloat","isString","isObject","type","isFunction","isUndefined","isArray","mount","glide","extensions","events","components","name","_name","define","prop","definition","sortKeys","r","k","mergeOptions","settings","options","properties","EventsBus","event","handler","index","context","item","Glide$1","Glide","selector","transformers","pattern","distance","interval","status","Run","Components","Events","move","_this","length","steps","direction","viewSize","calculateForwardIndex","normalizeForwardIndex","_index","calculateBackwardIndex","normalizeBackwardIndex","view","step","now","throttle","func","wait","timeout","args","previous","later","throttled","at","remaining","MARGIN_TYPE","Gaps","slides","len","style","perView","siblings","node","n","matched","toArray","nodeList","TRACK_SELECTOR","Html","slide","t","Peek","Move","offset","translate","Sizes","width","Build","classes","sibling","_Glide$settings$class","Clones","items","_Glide$settings","cloningRatio","peekIncrementer","cloneCount","append","prepend","clone","_i","_clone","_Components$Html","wrapper","half","_i2","_i3","EventsBinder","listeners","el","closure","capture","Resize","Binder","VALID_DIRECTIONS","FLIPED_MOVEMENTS","Direction","token","Rtl","Gap","multiplier","Grow","Peeking","peek","Focusing","gap","focusAt","slideWidth","mutator","TRANSFORMERS","transformer","Translate","transform","translate3d","travelDistance","startWidth","Transition","disabled","callback","supportsPassive","opts","supportsPassive$1","START_EVENTS","MOVE_EVENTS","END_EVENTS","MOUSE_EVENTS","Swipe","swipeSin","swipeStartX","swipeStartY","swipe","touchAngle","touchRatio","subExSx","subEySy","powEX","powEY","swipeHypotenuse","swipeCathetus","_Glide$settings2","perSwipe","threshold","swipeDistance","swipeDeg","_Glide$settings3","swipeThreshold","dragThreshold","_this2","_this3","Images","Anchors","detached","prevented","NAV_SELECTOR","CONTROLS_SELECTOR","PREVIOUS_CONTROLS_SELECTOR","NEXT_CONTROLS_SELECTOR","Controls","controls","next","_len","lists","_key","list","element","_len2","_key2","elements","Keyboard","arrowSymbols","Autoplay","autoplay","sortBreakpoints","points","Breakpoints","point","COMPONENTS","_Core","_super","htmlDecodeTree","c","xmlDecodeTree","_a","decodeMap","fromCodePoint","codePoint","output","replaceCodePoint","CharCodes","TO_LOWER_BIT","BinTrieFlags","isNumber","code","isHexadecimalCharacter","isAsciiAlphaNumeric","isEntityInAttributeInvalidEnd","EntityDecoderState","DecodingMode","EntityDecoder","decodeTree","emitCodePoint","errors","decodeMode","input","start","end","digitCount","startIndex","char","lastCp","expectedLength","current","valueLength","determineBranch","consumed","nodeIndex","branchCount","jumpOffset","lo","hi","mid","midValue","State","isWhitespace","isEndOfTagSection","isASCIIAlpha","QuoteType","Sequences","Tokenizer","xmlMode","decodeEntities","cbs","cp","chunk","isEnd","endOfText","actualIndex","sequence","lower","quote","endIndex","formTags","pTag","tableSectionTags","ddtTags","rtpTags","openImpliesClose","voidElements","foreignContextElements","htmlIntegrationElements","reNameEnd","Parser","_b","_c","_d","_e","_f","data","impliesClose","isImplied","_g","_h","pos","isOpenImplied","_j","_k","slice","ElementType","isTag","elem","isTagRaw","hasChildren","Root","Text","Directive","Comment","Script","Style","Tag","CDATA","Doctype","xmlReplacer","xmlCodeMap","getCodePoint","str","encodeXML","ret","lastIdx","match","getEscaper","regex","map","escapeAttribute","escapeText","elementNames","val","attributeNames","unencodedElements","replaceQuotes","formatAttributes","attributes","encode","singleTag","render","nodes","renderNode","ElementType.Root","ElementType.Doctype","ElementType.Directive","renderDirective","ElementType.Comment","renderComment","ElementType.CDATA","renderCdata","ElementType.Script","ElementType.Style","ElementType.Tag","renderTag","ElementType.Text","renderText","foreignModeIntegrationPoints","foreignElements","tag","attribs","getOuterHTML","renderHTML","findAll","test","nodeStack","indexStack","domelementtype","NodePrototype","nodeModule","children","nodeTypes","domLvl1","shorthand","require$$0","ElementPrototype","elementModule","re_whitespace","require$$1","require$$2","DomHandler","elementCB","defaultOpts","parser","error","parent","previousSibling","normalize","lastTag","domhandler","renderPost","isLoading","isError","errorMessage","author","date","shouldShowStats","stats","statsLoading","htmlToRender","renderError","renderPostHeader","renderPostBody","renderPostFooter","replyIcon","heartIcon","renderEmbeddedPost","noteId","authorProfile","content","authorDisplayName","mediaItems","processedContent","dom","parsedDom","DomUtils.findAll","child","DomUtils.getOuterHTML","mediaHtml","escapeHtml","parseText","text","post","embeddedPosts","nostrService","textContent","embeddedNotes","noteRegex","noteMatches","fullMatch","position","embeddedPost","nostrURISchemaMatches","nip21","uriReplacements","uriPromises","parsedNostrURI","decordedData","pubkey","profile","replacement","mentionRegex","mentionMatches","mentionReplacements","username","videoTags","mimeType","url","urlRegex","urlMatches","lastIndex","pathname","a","b","note","formatEventDate","createdAt","renderContent","html","mediaCount","textBuffer","isValidUrl","carouselHtml","bullets","slideIndex","firstMediaIndex","filteredHtml","carouselString","replaceEmbeddedPostPlaceholders","shadowRoot","placeholders","placeholder","embedHtml","renderEmbeddedPostContent","temp","renderedContent","sanitizedProfile","EventResolver","hex","noteid","eventid","isValidHex","validateNoteId","validateEventId","identifier","decoded","nip19","normalizedHex","EVT_EVENT","NostrEventComponent","NostrBaseComponent","shadow","__publicField","NCStatus","UserResolver","e","oldValue","newValue","tagName","err","seq","user","eventReady","authorReady","_event","getPostStyles","getComponentStyles","EVT_POST","EVT_AUTHOR","EVT_MENTION","NostrPost","_status","getPostStats","id","parsedContent","renderOptions","glideElement"],"mappings":"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,MAAQ,EAE5B,OAAOhU,EAASiS,EAAK,UAAU8B,CAAO,CAC1C,CACJ,CAeO,MAAMK,GAAkBH,GAAW,cAAe,IAAI,IAAI,CAC7D,CAAC,GAAI,QAAQ,EACb,CAAC,GAAI,OAAO,EACZ,CAAC,IAAK,QAAQ,CAClB,CAAC,CAAC,EAOWI,GAAaJ,GAAW,eAAgB,IAAI,IAAI,CACzD,CAAC,GAAI,OAAO,EACZ,CAAC,GAAI,MAAM,EACX,CAAC,GAAI,MAAM,EACX,CAAC,IAAK,QAAQ,CAClB,CAAC,CAAC,EClHWK,GAAe,IAAI,IAAI,CAChC,WACA,cACA,eACA,eACA,gBACA,mBACA,WACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,eACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,eACA,gBACA,WACA,iBACA,iBACA,UACJ,EAAE,IAAKC,GAAQ,CAACA,EAAI,YAAW,EAAIA,CAAG,CAAC,CAAC,EAC3BC,GAAiB,IAAI,IAAI,CAClC,gBACA,gBACA,gBACA,gBACA,cACA,WACA,gBACA,kBACA,WACA,cACA,WACA,oBACA,gBACA,eACA,mBACA,YACA,aACA,WACA,eACA,oBACA,eACA,cACA,cACA,mBACA,YACA,aACA,aACA,sBACA,mBACA,eACA,YACA,YACA,YACA,gBACA,sBACA,iBACA,OACA,OACA,cACA,YACA,qBACA,mBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,eACA,iBACA,cACA,UACA,UACA,aACA,UACA,aACA,mBACA,mBACA,YACJ,EAAE,IAAKD,GAAQ,CAACA,EAAI,YAAW,EAAIA,CAAG,CAAC,CAAC,ECvFlCE,GAAoB,IAAI,IAAI,CAC9B,QACA,SACA,MACA,SACA,UACA,WACA,YACA,UACJ,CAAC,EACD,SAASC,GAAc3V,EAAO,CAC1B,OAAOA,EAAM,QAAQ,KAAM,QAAQ,CACvC,CAIA,SAAS4V,GAAiBC,EAAYpL,EAAM,CACxC,IAAI8D,EACJ,GAAI,CAACsH,EACD,OACJ,MAAMC,IAAWvH,EA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]}