svgedit/dist/editor/xdomain-index.js.map

1 line
5.3 MiB
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{"version":3,"file":"xdomain-index.js","sources":["../../node_modules/core-js/internals/global.js","../../node_modules/core-js/internals/fails.js","../../node_modules/core-js/internals/descriptors.js","../../node_modules/core-js/internals/object-property-is-enumerable.js","../../node_modules/core-js/internals/create-property-descriptor.js","../../node_modules/core-js/internals/classof-raw.js","../../node_modules/core-js/internals/indexed-object.js","../../node_modules/core-js/internals/require-object-coercible.js","../../node_modules/core-js/internals/to-indexed-object.js","../../node_modules/core-js/internals/is-object.js","../../node_modules/core-js/internals/to-primitive.js","../../node_modules/core-js/internals/has.js","../../node_modules/core-js/internals/document-create-element.js","../../node_modules/core-js/internals/ie8-dom-define.js","../../node_modules/core-js/internals/object-get-own-property-descriptor.js","../../node_modules/core-js/internals/an-object.js","../../node_modules/core-js/internals/object-define-property.js","../../node_modules/core-js/internals/create-non-enumerable-property.js","../../node_modules/core-js/internals/set-global.js","../../node_modules/core-js/internals/shared-store.js","../../node_modules/core-js/internals/inspect-source.js","../../node_modules/core-js/internals/internal-state.js","../../node_modules/core-js/internals/native-weak-map.js","../../node_modules/core-js/internals/shared.js","../../node_modules/core-js/internals/uid.js","../../node_modules/core-js/internals/shared-key.js","../../node_modules/core-js/internals/hidden-keys.js","../../node_modules/core-js/internals/engine-v8-version.js","../../node_modules/core-js/internals/redefine.js","../../node_modules/core-js/internals/path.js","../../node_modules/core-js/internals/get-built-in.js","../../node_modules/core-js/internals/to-integer.js","../../node_modules/core-js/internals/to-length.js","../../node_modules/core-js/internals/to-absolute-index.js","../../node_modules/core-js/internals/array-includes.js","../../node_modules/core-js/internals/object-keys-internal.js","../../node_modules/core-js/internals/enum-bug-keys.js","../../node_modules/core-js/internals/object-get-own-property-names.js","../../node_modules/core-js/internals/object-get-own-property-symbols.js","../../node_modules/core-js/internals/own-keys.js","../../node_modules/core-js/internals/copy-constructor-properties.js","../../node_modules/core-js/internals/is-forced.js","../../node_modules/core-js/internals/export.js","../../node_modules/core-js/internals/is-array.js","../../node_modules/core-js/internals/to-object.js","../../node_modules/core-js/internals/create-property.js","../../node_modules/core-js/internals/native-symbol.js","../../node_modules/core-js/internals/use-symbol-as-uid.js","../../node_modules/core-js/internals/well-known-symbol.js","../../node_modules/core-js/internals/array-species-create.js","../../node_modules/core-js/internals/engine-user-agent.js","../../node_modules/core-js/internals/array-method-has-species-support.js","../../node_modules/core-js/modules/es.array.concat.js","../../node_modules/core-js/modules/es.array.slice.js","../../node_modules/core-js/internals/regexp-flags.js","../../node_modules/core-js/internals/regexp-sticky-helpers.js","../../node_modules/core-js/internals/regexp-exec.js","../../node_modules/core-js/modules/es.regexp.exec.js","../../node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","../../node_modules/core-js/internals/is-regexp.js","../../node_modules/core-js/internals/a-function.js","../../node_modules/core-js/internals/species-constructor.js","../../node_modules/core-js/internals/string-multibyte.js","../../node_modules/core-js/internals/advance-string-index.js","../../node_modules/core-js/internals/regexp-exec-abstract.js","../../node_modules/core-js/modules/es.string.split.js","../../node_modules/core-js/internals/get-substitution.js","../../node_modules/core-js/modules/es.string.replace.js","../../node_modules/core-js/internals/whitespaces.js","../../node_modules/core-js/internals/string-trim.js","../../node_modules/core-js/internals/number-parse-float.js","../../node_modules/core-js/modules/es.parse-float.js","../../node_modules/core-js/internals/function-bind-context.js","../../node_modules/core-js/internals/array-iteration.js","../../node_modules/core-js/modules/es.array.filter.js","../../node_modules/core-js/internals/to-string-tag-support.js","../../node_modules/core-js/internals/classof.js","../../node_modules/core-js/internals/object-to-string.js","../../node_modules/core-js/modules/es.object.to-string.js","../../node_modules/core-js/internals/string-trim-forced.js","../../node_modules/core-js/modules/es.string.trim.js","../../node_modules/core-js/internals/array-method-is-strict.js","../../node_modules/core-js/modules/es.array.index-of.js","../../node_modules/core-js/internals/object-keys.js","../../node_modules/core-js/internals/object-create.js","../../node_modules/core-js/internals/object-define-properties.js","../../node_modules/core-js/internals/html.js","../../node_modules/core-js/internals/add-to-unscopables.js","../../node_modules/core-js/modules/es.array.find.js","../../node_modules/core-js/modules/es.array.join.js","../../node_modules/core-js/modules/es.array.map.js","../../node_modules/core-js/modules/es.array.sort.js","../../node_modules/core-js/modules/es.array.splice.js","../../node_modules/core-js/internals/create-html.js","../../node_modules/core-js/internals/string-html-forced.js","../../node_modules/core-js/modules/es.string.sub.js","../../node_modules/core-js/internals/number-parse-int.js","../../node_modules/core-js/modules/es.parse-int.js","../../node_modules/core-js/modules/es.date.to-json.js","../../node_modules/core-js/modules/web.url.to-json.js","../../node_modules/core-js/modules/es.function.name.js","../../node_modules/core-js/internals/a-possible-prototype.js","../../node_modules/core-js/internals/object-set-prototype-of.js","../../node_modules/core-js/internals/inherit-if-required.js","../../node_modules/core-js/internals/set-species.js","../../node_modules/core-js/modules/es.regexp.constructor.js","../../node_modules/core-js/modules/es.regexp.to-string.js","../../node_modules/core-js/modules/es.string.match.js","../../node_modules/core-js/modules/es.array.reverse.js","../../src/editor/jquery.min.js","../../src/editor/components/seButton.js","../../src/editor/components/seFlyingButton.js","../../node_modules/core-js/internals/object-get-own-property-names-external.js","../../node_modules/core-js/internals/well-known-symbol-wrapped.js","../../node_modules/core-js/internals/define-well-known-symbol.js","../../node_modules/core-js/internals/set-to-string-tag.js","../../node_modules/core-js/modules/es.symbol.js","../../node_modules/core-js/modules/es.symbol.description.js","../../node_modules/core-js/modules/es.symbol.iterator.js","../../node_modules/core-js/internals/correct-prototype-getter.js","../../node_modules/core-js/internals/iterators-core.js","../../node_modules/core-js/internals/object-get-prototype-of.js","../../node_modules/core-js/internals/iterators.js","../../node_modules/core-js/internals/create-iterator-constructor.js","../../node_modules/core-js/internals/define-iterator.js","../../node_modules/core-js/modules/es.string.iterator.js","../../node_modules/core-js/modules/es.array.iterator.js","../../node_modules/core-js/internals/dom-iterables.js","../../node_modules/core-js/modules/web.dom-collections.iterator.js","../../node_modules/core-js/modules/es.symbol.async-iterator.js","../../node_modules/core-js/modules/es.symbol.to-string-tag.js","../../node_modules/core-js/modules/es.math.to-string-tag.js","../../node_modules/core-js/modules/es.json.to-string-tag.js","../../node_modules/core-js/modules/es.object.get-prototype-of.js","../../node_modules/core-js/internals/array-for-each.js","../../node_modules/core-js/modules/es.array.for-each.js","../../node_modules/core-js/modules/es.object.set-prototype-of.js","../../node_modules/core-js/internals/native-promise-constructor.js","../../node_modules/core-js/internals/redefine-all.js","../../node_modules/core-js/internals/an-instance.js","../../node_modules/core-js/internals/is-array-iterator-method.js","../../node_modules/core-js/internals/get-iterator-method.js","../../node_modules/core-js/internals/iterator-close.js","../../node_modules/core-js/internals/iterate.js","../../node_modules/core-js/internals/check-correctness-of-iteration.js","../../node_modules/core-js/internals/task.js","../../node_modules/core-js/internals/engine-is-ios.js","../../node_modules/core-js/internals/engine-is-node.js","../../node_modules/core-js/internals/microtask.js","../../node_modules/core-js/internals/engine-is-webos-webkit.js","../../node_modules/core-js/modules/es.promise.js","../../node_modules/core-js/internals/new-promise-capability.js","../../node_modules/core-js/internals/promise-resolve.js","../../node_modules/core-js/internals/perform.js","../../node_modules/core-js/internals/host-report-errors.js","../../node_modules/core-js/modules/web.dom-collections.for-each.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/core-js/internals/array-fill.js","../../node_modules/core-js/modules/es.array.fill.js","../../node_modules/core-js/internals/object-to-array.js","../../node_modules/core-js/modules/es.object.entries.js","../../src/editor/components/seExplorerButton.js","../../node_modules/core-js/internals/object-assign.js","../../node_modules/core-js/modules/es.object.assign.js","../../node_modules/core-js/internals/native-url.js","../../node_modules/core-js/internals/call-with-safe-iteration-closing.js","../../node_modules/core-js/internals/array-from.js","../../node_modules/core-js/internals/string-punycode-to-ascii.js","../../node_modules/core-js/internals/get-iterator.js","../../node_modules/core-js/modules/web.url-search-params.js","../../node_modules/core-js/modules/web.url.js","../../node_modules/core-js/internals/same-value.js","../../node_modules/core-js/modules/es.string.search.js","../../node_modules/elix/src/core/internal.js","../../node_modules/elix/src/base/internal.js","../../node_modules/core-js/modules/es.array.find-index.js","../../node_modules/core-js/modules/es.object.get-own-property-names.js","../../node_modules/core-js/modules/es.object.get-own-property-descriptor.js","../../node_modules/elix/src/core/AttributeMarshallingMixin.js","../../node_modules/elix/src/core/dom.js","../../node_modules/core-js/modules/es.string.raw.js","../../node_modules/elix/src/core/htmlLiterals.js","../../node_modules/core-js/internals/freezing.js","../../node_modules/core-js/internals/internal-metadata.js","../../node_modules/core-js/internals/collection.js","../../node_modules/core-js/internals/collection-strong.js","../../node_modules/core-js/modules/es.map.js","../../node_modules/elix/src/core/template.js","../../node_modules/core-js/modules/es.object.keys.js","../../node_modules/core-js/modules/es.object.freeze.js","../../node_modules/elix/src/core/ReactiveMixin.js","../../node_modules/elix/src/core/ShadowTemplateMixin.js","../../node_modules/elix/src/core/ReactiveElement.js","../../node_modules/elix/src/base/DelegateFocusMixin.js","../../node_modules/elix/src/base/DelegateInputLabelMixin.js","../../node_modules/elix/src/base/DelegateInputSelectionMixin.js","../../node_modules/elix/src/base/FocusVisibleMixin.js","../../node_modules/elix/src/base/FormElementMixin.js","../../node_modules/elix/src/base/Hidden.js","../../node_modules/core-js/modules/es.number.constructor.js","../../node_modules/elix/src/base/KeyboardMixin.js","../../node_modules/elix/src/base/PopupDragSelectMixin.js","../../node_modules/elix/src/base/DisabledMixin.js","../../node_modules/elix/src/base/LanguageDirectionMixin.js","../../node_modules/elix/src/base/layoutPopup.js","../../node_modules/elix/src/base/OpenCloseMixin.js","../../node_modules/elix/src/base/AriaRoleMixin.js","../../node_modules/elix/src/base/Backdrop.js","../../node_modules/elix/src/base/OverlayFrame.js","../../node_modules/core-js/modules/es.array.from.js","../../node_modules/elix/src/base/OverlayMixin.js","../../node_modules/elix/src/base/SlotContentMixin.js","../../node_modules/elix/src/base/Overlay.js","../../node_modules/elix/src/base/PopupModalityMixin.js","../../node_modules/elix/src/base/Popup.js","../../node_modules/elix/src/base/PopupSource.js","../../node_modules/elix/src/base/UpDownToggle.js","../../node_modules/elix/src/base/PopupToggleMixin.js","../../node_modules/elix/src/base/ComboBox.js","../../node_modules/elix/src/base/content.js","../../node_modules/elix/src/base/CursorAPIMixin.js","../../node_modules/elix/src/base/DelegateCursorMixin.js","../../node_modules/elix/src/base/DelegateItemsMixin.js","../../node_modules/elix/src/base/accessibility.js","../../node_modules/elix/src/base/ComposedFocusMixin.js","../../node_modules/elix/src/base/scrolling.js","../../node_modules/elix/src/base/CursorInViewMixin.js","../../node_modules/elix/src/base/DirectionCursorMixin.js","../../node_modules/elix/src/base/ItemsAPIMixin.js","../../node_modules/elix/src/base/ItemsCursorMixin.js","../../node_modules/elix/src/base/ItemsTextMixin.js","../../node_modules/elix/src/base/KeyboardDirectionMixin.js","../../node_modules/elix/src/base/KeyboardPagedCursorMixin.js","../../node_modules/elix/src/base/constants.js","../../node_modules/elix/src/base/KeyboardPrefixCursorMixin.js","../../node_modules/elix/src/base/SelectedTextAPIMixin.js","../../node_modules/elix/src/base/SelectedValueAPIMixin.js","../../node_modules/elix/src/base/SingleSelectAPIMixin.js","../../node_modules/elix/src/base/ContentItemsMixin.js","../../node_modules/elix/src/base/SlotItemsMixin.js","../../node_modules/elix/src/base/TapCursorMixin.js","../../node_modules/elix/src/base/ListBox.js","../../node_modules/elix/src/base/AriaListMixin.js","../../node_modules/elix/src/base/CursorSelectMixin.js","../../node_modules/elix/src/base/PopupListMixin.js","../../node_modules/elix/src/base/ListComboBox.js","../../node_modules/elix/src/base/TrackTextSelectionMixin.js","../../node_modules/core-js/modules/es.array.includes.js","../../node_modules/elix/src/base/WrappedStandardElement.js","../../node_modules/elix/src/base/Input.js","../../node_modules/elix/src/plain/PlainInputMixin.js","../../node_modules/elix/src/plain/PlainInput.js","../../node_modules/elix/src/plain/PlainOpenCloseToggle.js","../../node_modules/elix/src/plain/PlainBackdrop.js","../../node_modules/elix/src/plain/PlainOverlayFrame.js","../../node_modules/elix/src/plain/PlainPopup.js","../../node_modules/elix/src/plain/PlainComboBoxMixin.js","../../node_modules/elix/src/plain/PlainListBoxMixin.js","../../node_modules/elix/src/plain/PlainListBox.js","../../node_modules/elix/src/plain/PlainListComboBox.js","../../node_modules/elix/define/ListComboBox.js","../../node_modules/elix/src/base/Button.js","../../node_modules/elix/src/base/RepeatMousedownMixin.js","../../node_modules/elix/src/base/RepeatButton.js","../../node_modules/elix/src/plain/PlainButtonMixin.js","../../node_modules/elix/src/plain/PlainRepeatButton.js","../../node_modules/elix/src/plain/PlainSpinBoxMixin.js","../../node_modules/core-js/internals/this-number-value.js","../../node_modules/core-js/internals/string-repeat.js","../../node_modules/core-js/modules/es.number.to-fixed.js","../../node_modules/elix/src/base/SpinBox.js","../../src/editor/dialogs/se-elix/src/base/NumberSpinBox.js","../../src/editor/dialogs/se-elix/src/plain/PlainNumberSpinBox.js","../../src/editor/dialogs/se-elix/define/NumberSpinBox.js","../../src/editor/components/seZoom.js","../../node_modules/elix/define/Input.js","../../src/editor/components/seInput.js","../../src/editor/components/seSpinInput.js","../../src/editor/components/sePalette.js","../../node_modules/elix/src/base/CurrentMixin.js","../../node_modules/elix/src/base/SelectableMixin.js","../../node_modules/elix/src/base/MenuItem.js","../../node_modules/elix/src/plain/PlainMenuItem.js","../../node_modules/elix/define/MenuItem.js","../../node_modules/elix/src/base/Menu.js","../../node_modules/elix/src/base/AriaMenuMixin.js","../../node_modules/elix/src/base/PopupButton.js","../../node_modules/elix/src/base/MenuButton.js","../../node_modules/elix/src/plain/PlainButton.js","../../node_modules/elix/src/plain/PlainBorderButton.js","../../node_modules/elix/src/plain/PlainMenu.js","../../node_modules/elix/src/plain/PlainMenuButton.js","../../src/editor/components/sePlainBorderButton.js","../../src/editor/components/sePlainMenuButton.js","../../src/editor/components/seMenu.js","../../node_modules/elix/define/Menu.js","../../src/editor/components/seMenuItem.js","../../node_modules/elix/src/base/DropdownList.js","../../node_modules/elix/src/base/OptionList.js","../../node_modules/elix/src/plain/PlainOptionList.js","../../node_modules/elix/src/plain/PlainDropdownList.js","../../node_modules/elix/define/DropdownList.js","../../src/editor/components/seList.js","../../node_modules/elix/src/base/Option.js","../../node_modules/elix/src/plain/PlainOption.js","../../node_modules/elix/define/Option.js","../../src/editor/components/seListItem.js","../../node_modules/core-js/internals/not-a-regexp.js","../../node_modules/core-js/internals/correct-is-regexp-logic.js","../../node_modules/core-js/modules/es.string.includes.js","../../node_modules/core-js/modules/es.number.parse-int.js","../../node_modules/core-js/modules/es.number.parse-float.js","../../src/editor/components/jgraduate/ColorValuePicker.js","../../src/editor/components/jgraduate/Util.js","../../src/editor/components/jgraduate/Slider.js","../../src/editor/components/jgraduate/jQuery.jPicker.js","../../src/editor/components/jgraduate/jQuery.jGraduate.js","../../src/editor/components/jgraduate/paint.js","../../node_modules/core-js/internals/is-integer.js","../../node_modules/core-js/modules/es.number.is-safe-integer.js","../../node_modules/core-js/modules/es.string.starts-with.js","../../src/editor/components/PaintBox.js","../../src/editor/components/seColorPicker.js","../../node_modules/elix/src/base/DialogModalityMixin.js","../../node_modules/elix/src/base/FocusCaptureMixin.js","../../node_modules/elix/src/base/ModalBackdrop.js","../../node_modules/elix/src/base/Dialog.js","../../node_modules/elix/src/plain/PlainModalBackdrop.js","../../node_modules/elix/src/plain/PlainModalOverlayMixin.js","../../node_modules/elix/src/plain/PlainDialog.js","../../node_modules/elix/define/Dialog.js","../../node_modules/core-js/modules/es.array.some.js","../../src/common/namespaces.js","../../src/common/units.js","../../src/editor/dialogs/imagePropertiesDialog.js","../../src/editor/dialogs/editorPreferencesDialog.js","../../src/editor/dialogs/svgSourceDialog.js","../../src/editor/dialogs/cmenuDialog.js","../../src/editor/dialogs/cmenuLayersDialog.js","../../node_modules/elix/src/base/AlertDialog.js","../../node_modules/elix/src/plain/PlainAlertDialog.js","../../src/editor/dialogs/SePlainAlertDialog.js","../../src/editor/dialogs/seSelectDialog.js","../../src/editor/dialogs/seConfirmDialog.js","../../src/editor/dialogs/sePromptDialog.js","../../src/editor/dialogs/seAlertDialog.js","../../src/editor/dialogs/exportDialog.js","../../node_modules/core-js/modules/es.object.values.js","../../src/editor/touch.js","../../node_modules/pathseg/pathseg.js","../../src/common/browser.js","../../node_modules/process/browser.js","../../node_modules/core-js/modules/es.global-this.js","../../node_modules/core-js-pure/internals/global.js","../../node_modules/core-js-pure/internals/fails.js","../../node_modules/core-js-pure/internals/descriptors.js","../../node_modules/core-js-pure/internals/object-property-is-enumerable.js","../../node_modules/core-js-pure/internals/create-property-descriptor.js","../../node_modules/core-js-pure/internals/classof-raw.js","../../node_modules/core-js-pure/internals/indexed-object.js","../../node_modules/core-js-pure/internals/require-object-coercible.js","../../node_modules/core-js-pure/internals/to-indexed-object.js","../../node_modules/core-js-pure/internals/is-object.js","../../node_modules/core-js-pure/internals/to-primitive.js","../../node_modules/core-js-pure/internals/has.js","../../node_modules/core-js-pure/internals/document-create-element.js","../../node_modules/core-js-pure/internals/ie8-dom-define.js","../../node_modules/core-js-pure/internals/object-get-own-property-descriptor.js","../../node_modules/core-js-pure/internals/is-forced.js","../../node_modules/core-js-pure/internals/path.js","../../node_modules/core-js-pure/internals/a-function.js","../../node_modules/core-js-pure/internals/function-bind-context.js","../../node_modules/core-js-pure/internals/an-object.js","../../node_modules/core-js-pure/internals/object-define-property.js","../../node_modules/core-js-pure/internals/create-non-enumerable-property.js","../../node_modules/core-js-pure/internals/export.js","../../node_modules/core-js-pure/internals/to-integer.js","../../node_modules/core-js-pure/internals/to-length.js","../../node_modules/core-js-pure/internals/shared-store.js","../../node_modules/core-js-pure/internals/set-global.js","../../node_modules/core-js-pure/internals/shared.js","../../node_modules/core-js-pure/internals/uid.js","../../node_modules/core-js-pure/internals/native-symbol.js","../../node_modules/core-js-pure/internals/use-symbol-as-uid.js","../../node_modules/core-js-pure/internals/well-known-symbol.js","../../node_modules/core-js-pure/internals/is-regexp.js","../../node_modules/core-js-pure/internals/not-a-regexp.js","../../node_modules/core-js-pure/internals/correct-is-regexp-logic.js","../../node_modules/core-js-pure/modules/es.string.starts-with.js","../../node_modules/core-js-pure/internals/entry-virtual.js","../../node_modules/core-js-pure/es/string/virtual/starts-with.js","../../node_modules/core-js-pure/es/instance/starts-with.js","../../node_modules/core-js-pure/internals/whitespaces.js","../../node_modules/core-js-pure/internals/string-trim.js","../../node_modules/core-js-pure/internals/number-parse-float.js","../../node_modules/core-js-pure/modules/es.parse-float.js","../../node_modules/core-js-pure/es/parse-float.js","../../node_modules/core-js-pure/internals/engine-v8-version.js","../../node_modules/core-js-pure/internals/to-object.js","../../node_modules/core-js-pure/internals/is-array.js","../../node_modules/core-js-pure/internals/array-species-create.js","../../node_modules/core-js-pure/internals/array-iteration.js","../../node_modules/core-js-pure/internals/get-built-in.js","../../node_modules/core-js-pure/internals/engine-user-agent.js","../../node_modules/core-js-pure/internals/array-method-has-species-support.js","../../node_modules/core-js-pure/modules/es.array.map.js","../../node_modules/core-js-pure/es/array/virtual/map.js","../../node_modules/core-js-pure/es/instance/map.js","../../node_modules/core-js-pure/modules/es.array.is-array.js","../../node_modules/core-js-pure/es/array/is-array.js","../../node_modules/core-js-pure/features/array/is-array.js","../../node_modules/core-js-pure/internals/create-property.js","../../node_modules/core-js-pure/modules/es.array.concat.js","../../node_modules/core-js-pure/internals/to-absolute-index.js","../../node_modules/core-js-pure/internals/object-create.js","../../node_modules/core-js-pure/internals/array-includes.js","../../node_modules/core-js-pure/internals/hidden-keys.js","../../node_modules/core-js-pure/internals/object-keys-internal.js","../../node_modules/core-js-pure/internals/enum-bug-keys.js","../../node_modules/core-js-pure/internals/object-keys.js","../../node_modules/core-js-pure/internals/object-define-properties.js","../../node_modules/core-js-pure/internals/html.js","../../node_modules/core-js-pure/internals/shared-key.js","../../node_modules/core-js-pure/internals/object-get-own-property-names.js","../../node_modules/core-js-pure/internals/object-get-own-property-names-external.js","../../node_modules/core-js-pure/internals/object-get-own-property-symbols.js","../../node_modules/core-js-pure/internals/redefine.js","../../node_modules/core-js-pure/internals/well-known-symbol-wrapped.js","../../node_modules/core-js-pure/internals/define-well-known-symbol.js","../../node_modules/core-js-pure/internals/to-string-tag-support.js","../../node_modules/core-js-pure/internals/classof.js","../../node_modules/core-js-pure/internals/object-to-string.js","../../node_modules/core-js-pure/internals/set-to-string-tag.js","../../node_modules/core-js/internals/collection-weak.js","../../node_modules/core-js/modules/es.weak-map.js","../../node_modules/core-js-pure/internals/inspect-source.js","../../node_modules/core-js-pure/internals/internal-state.js","../../node_modules/core-js-pure/internals/native-weak-map.js","../../node_modules/core-js-pure/modules/es.symbol.js","../../node_modules/core-js-pure/modules/es.symbol.async-iterator.js","../../node_modules/core-js-pure/modules/es.symbol.has-instance.js","../../node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js","../../node_modules/core-js-pure/modules/es.symbol.iterator.js","../../node_modules/core-js-pure/modules/es.symbol.match.js","../../node_modules/core-js-pure/modules/es.symbol.match-all.js","../../node_modules/core-js-pure/modules/es.symbol.replace.js","../../node_modules/core-js-pure/modules/es.symbol.search.js","../../node_modules/core-js-pure/modules/es.symbol.species.js","../../node_modules/core-js-pure/modules/es.symbol.split.js","../../node_modules/core-js-pure/modules/es.symbol.to-primitive.js","../../node_modules/core-js-pure/modules/es.symbol.to-string-tag.js","../../node_modules/core-js-pure/modules/es.symbol.unscopables.js","../../node_modules/core-js-pure/modules/es.json.to-string-tag.js","../../node_modules/core-js-pure/es/symbol/index.js","../../node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js","../../node_modules/core-js-pure/modules/esnext.symbol.dispose.js","../../node_modules/core-js-pure/modules/esnext.symbol.observable.js","../../node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js","../../node_modules/core-js-pure/modules/esnext.symbol.replace-all.js","../../node_modules/core-js-pure/features/symbol/index.js","../../node_modules/core-js-pure/internals/iterators-core.js","../../node_modules/core-js-pure/internals/iterators.js","../../node_modules/core-js-pure/internals/correct-prototype-getter.js","../../node_modules/core-js-pure/internals/object-get-prototype-of.js","../../node_modules/core-js-pure/internals/create-iterator-constructor.js","../../node_modules/core-js-pure/internals/object-set-prototype-of.js","../../node_modules/core-js-pure/internals/a-possible-prototype.js","../../node_modules/core-js-pure/internals/define-iterator.js","../../node_modules/core-js-pure/modules/es.array.iterator.js","../../node_modules/core-js-pure/internals/dom-iterables.js","../../node_modules/core-js-pure/modules/web.dom-collections.iterator.js","../../node_modules/core-js-pure/internals/string-multibyte.js","../../node_modules/core-js-pure/modules/es.string.iterator.js","../../node_modules/core-js-pure/internals/is-iterable.js","../../node_modules/core-js-pure/internals/get-iterator-method.js","../../node_modules/core-js-pure/internals/get-iterator.js","../../node_modules/core-js-pure/modules/es.array.slice.js","../../node_modules/core-js-pure/es/array/virtual/slice.js","../../node_modules/core-js-pure/es/instance/slice.js","../../node_modules/core-js-pure/features/instance/slice.js","../../node_modules/core-js-pure/internals/iterator-close.js","../../node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js","../../node_modules/core-js-pure/internals/is-array-iterator-method.js","../../node_modules/core-js-pure/internals/check-correctness-of-iteration.js","../../node_modules/core-js-pure/modules/es.array.from.js","../../node_modules/core-js-pure/internals/array-from.js","../../node_modules/core-js-pure/es/array/from.js","../../node_modules/core-js-pure/features/array/from.js","../../node_modules/@babel/runtime-corejs3/helpers/arrayLikeToArray/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/unsupportedIterableToArray/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/slicedToArray/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/arrayWithHoles/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/iterableToArrayLimit/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/nonIterableRest/_index.mjs","../../node_modules/core-js-pure/modules/es.object.define-property.js","../../node_modules/core-js-pure/es/object/define-property.js","../../node_modules/core-js-pure/stable/object/define-property.js","../../node_modules/core-js-pure/modules/es.object.define-properties.js","../../node_modules/core-js-pure/es/object/define-properties.js","../../node_modules/core-js-pure/internals/own-keys.js","../../node_modules/core-js-pure/modules/es.object.get-own-property-descriptors.js","../../node_modules/core-js-pure/es/object/get-own-property-descriptors.js","../../node_modules/core-js-pure/internals/array-method-is-strict.js","../../node_modules/core-js-pure/internals/array-for-each.js","../../node_modules/core-js-pure/modules/es.array.for-each.js","../../node_modules/core-js-pure/es/array/virtual/for-each.js","../../node_modules/core-js-pure/stable/instance/for-each.js","../../node_modules/core-js-pure/modules/es.object.get-own-property-descriptor.js","../../node_modules/core-js-pure/es/object/get-own-property-descriptor.js","../../node_modules/core-js-pure/stable/object/get-own-property-descriptor.js","../../node_modules/core-js-pure/modules/es.array.filter.js","../../node_modules/core-js-pure/es/array/virtual/filter.js","../../node_modules/core-js-pure/es/instance/filter.js","../../node_modules/core-js-pure/es/object/get-own-property-symbols.js","../../node_modules/core-js-pure/modules/es.object.keys.js","../../node_modules/core-js-pure/es/object/keys.js","../../node_modules/@babel/runtime-corejs3/regenerator/index.js","../../node_modules/core-js-pure/internals/iterate.js","../../node_modules/core-js-pure/modules/es.aggregate-error.js","../../node_modules/core-js/modules/es.promise.finally.js","../../node_modules/core-js-pure/internals/native-promise-constructor.js","../../node_modules/core-js-pure/internals/redefine-all.js","../../node_modules/core-js-pure/internals/set-species.js","../../node_modules/core-js-pure/internals/an-instance.js","../../node_modules/core-js-pure/internals/species-constructor.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js-pure/internals/engine-is-ios.js","../../node_modules/core-js-pure/internals/task.js","../../node_modules/core-js-pure/internals/engine-is-node.js","../../node_modules/core-js-pure/internals/microtask.js","../../node_modules/core-js-pure/internals/engine-is-webos-webkit.js","../../node_modules/core-js-pure/internals/new-promise-capability.js","../../node_modules/core-js-pure/internals/promise-resolve.js","../../node_modules/core-js-pure/internals/perform.js","../../node_modules/core-js-pure/modules/es.promise.js","../../node_modules/core-js-pure/internals/host-report-errors.js","../../node_modules/core-js-pure/internals/is-pure.js","../../node_modules/core-js-pure/modules/es.promise.all-settled.js","../../node_modules/core-js-pure/modules/es.promise.any.js","../../node_modules/core-js-pure/modules/es.promise.finally.js","../../node_modules/core-js-pure/es/promise/index.js","../../node_modules/core-js-pure/modules/esnext.promise.try.js","../../node_modules/core-js-pure/features/promise/index.js","../../node_modules/@babel/runtime-corejs3/helpers/asyncToGenerator/_index.mjs","../../node_modules/core-js-pure/features/object/define-property.js","../../node_modules/@babel/runtime-corejs3/helpers/defineProperty/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/classCallCheck/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/createClass/_index.mjs","../../node_modules/core-js-pure/es/array/virtual/concat.js","../../node_modules/core-js-pure/es/instance/concat.js","../../node_modules/core-js/internals/array-reduce.js","../../node_modules/core-js/modules/es.array.reduce.js","../../node_modules/core-js-pure/internals/array-reduce.js","../../node_modules/core-js-pure/modules/es.array.reduce.js","../../node_modules/core-js-pure/es/array/virtual/reduce.js","../../node_modules/core-js-pure/es/instance/reduce.js","../../node_modules/core-js-pure/modules/es.date.now.js","../../node_modules/core-js-pure/es/date/now.js","../../node_modules/core-js/modules/es.array.every.js","../../node_modules/core-js-pure/modules/es.array.every.js","../../node_modules/core-js-pure/es/array/virtual/every.js","../../node_modules/core-js-pure/es/instance/every.js","../../node_modules/core-js-pure/stable/promise/index.js","../../node_modules/core-js-pure/internals/function-bind.js","../../node_modules/core-js-pure/modules/es.function.bind.js","../../node_modules/raf/index.js","../../node_modules/core-js-pure/es/function/virtual/bind.js","../../node_modules/core-js-pure/es/instance/bind.js","../../node_modules/performance-now/lib/performance-now.js","../../node_modules/core-js-pure/internals/string-trim-forced.js","../../node_modules/core-js-pure/modules/es.string.trim.js","../../node_modules/core-js-pure/es/string/virtual/trim.js","../../node_modules/core-js-pure/es/instance/trim.js","../../node_modules/rgbcolor/index.js","../../node_modules/core-js-pure/modules/es.reflect.construct.js","../../node_modules/core-js-pure/es/reflect/construct.js","../../node_modules/core-js-pure/modules/es.object.create.js","../../node_modules/core-js-pure/es/object/create.js","../../node_modules/core-js-pure/modules/es.object.set-prototype-of.js","../../node_modules/core-js-pure/es/object/set-prototype-of.js","../../node_modules/@babel/runtime-corejs3/helpers/setPrototypeOf/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/inherits/_index.mjs","../../node_modules/core-js-pure/es/symbol/iterator.js","../../node_modules/@babel/runtime-corejs3/helpers/typeof/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/assertThisInitialized/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/possibleConstructorReturn/_index.mjs","../../node_modules/core-js-pure/modules/es.object.get-prototype-of.js","../../node_modules/core-js-pure/es/object/get-prototype-of.js","../../node_modules/@babel/runtime-corejs3/helpers/getPrototypeOf/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/toConsumableArray/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/arrayWithoutHoles/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/iterableToArray/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/nonIterableSpread/_index.mjs","../../node_modules/core-js-pure/modules/es.array.some.js","../../node_modules/core-js-pure/es/array/virtual/some.js","../../node_modules/core-js-pure/es/instance/some.js","../../node_modules/core-js-pure/modules/es.array.includes.js","../../node_modules/core-js-pure/es/array/virtual/includes.js","../../node_modules/core-js-pure/modules/es.string.includes.js","../../node_modules/core-js-pure/es/string/virtual/includes.js","../../node_modules/core-js-pure/es/instance/includes.js","../../node_modules/core-js-pure/stable/array/from.js","../../node_modules/core-js-pure/modules/es.array.reverse.js","../../node_modules/core-js-pure/es/array/virtual/reverse.js","../../node_modules/core-js-pure/es/instance/reverse.js","../../node_modules/core-js-pure/modules/es.array.index-of.js","../../node_modules/core-js-pure/es/array/virtual/index-of.js","../../node_modules/core-js-pure/es/instance/index-of.js","../../node_modules/core-js-pure/modules/es.reflect.get.js","../../node_modules/core-js-pure/es/reflect/get.js","../../node_modules/core-js-pure/features/object/get-own-property-descriptor.js","../../node_modules/@babel/runtime-corejs3/helpers/get/_index.mjs","../../node_modules/@babel/runtime-corejs3/helpers/superPropBase/_index.mjs","../../node_modules/core-js-pure/modules/es.array.fill.js","../../node_modules/core-js-pure/internals/array-fill.js","../../node_modules/core-js-pure/es/array/virtual/fill.js","../../node_modules/core-js-pure/es/instance/fill.js","../../node_modules/svg-pathdata/lib/SVGPathData.module.js","../../node_modules/core-js-pure/modules/es.reflect.delete-property.js","../../node_modules/core-js-pure/es/reflect/delete-property.js","../../node_modules/core-js-pure/es/array/virtual/values.js","../../node_modules/core-js-pure/stable/instance/values.js","../../node_modules/core-js-pure/internals/number-parse-int.js","../../node_modules/core-js-pure/modules/es.parse-int.js","../../node_modules/core-js-pure/es/parse-int.js","../../node_modules/core-js-pure/stable/array/is-array.js","../../node_modules/core-js-pure/features/get-iterator-method.js","../../node_modules/core-js-pure/stable/symbol/index.js","../../node_modules/core-js-pure/stable/instance/slice.js","../../node_modules/core-js/modules/es.object.is-extensible.js","../../node_modules/core-js/modules/es.object.prevent-extensions.js","../../node_modules/core-js-pure/internals/freezing.js","../../node_modules/core-js-pure/internals/internal-metadata.js","../../node_modules/core-js-pure/internals/collection.js","../../node_modules/core-js-pure/internals/collection-strong.js","../../node_modules/core-js-pure/modules/es.map.js","../../node_modules/core-js-pure/es/map/index.js","../../node_modules/core-js-pure/modules/es.reflect.apply.js","../../node_modules/core-js-pure/es/reflect/apply.js","../../node_modules/core-js-pure/modules/es.reflect.get-prototype-of.js","../../node_modules/core-js-pure/es/reflect/get-prototype-of.js","../../node_modules/stackblur-canvas/dist/stackblur-es.js","../../src/svgcanvas/jQuery.attr.js","../../src/svgcanvas/svgtransformlist.js","../../node_modules/core-js/modules/es.array.reduce-right.js","../../src/svgcanvas/math.js","../../node_modules/core-js/internals/array-buffer-view-core.js","../../node_modules/core-js/internals/array-buffer-native.js","../../node_modules/core-js/internals/typed-array-constructors-require-wrappers.js","../../node_modules/core-js/internals/to-index.js","../../node_modules/core-js/internals/ieee754.js","../../node_modules/core-js/internals/array-buffer.js","../../node_modules/core-js/internals/to-offset.js","../../node_modules/core-js/internals/to-positive-integer.js","../../node_modules/core-js/internals/typed-array-from.js","../../node_modules/core-js/internals/typed-array-constructor.js","../../node_modules/core-js/modules/es.typed-array.uint8-array.js","../../node_modules/core-js/internals/array-copy-within.js","../../node_modules/core-js/modules/es.typed-array.copy-within.js","../../node_modules/core-js/modules/es.typed-array.every.js","../../node_modules/core-js/modules/es.typed-array.fill.js","../../node_modules/core-js/internals/typed-array-from-species-and-list.js","../../node_modules/core-js/modules/es.typed-array.filter.js","../../node_modules/core-js/modules/es.typed-array.find.js","../../node_modules/core-js/modules/es.typed-array.find-index.js","../../node_modules/core-js/modules/es.typed-array.for-each.js","../../node_modules/core-js/modules/es.typed-array.includes.js","../../node_modules/core-js/modules/es.typed-array.index-of.js","../../node_modules/core-js/modules/es.typed-array.iterator.js","../../node_modules/core-js/modules/es.typed-array.join.js","../../node_modules/core-js/internals/array-last-index-of.js","../../node_modules/core-js/modules/es.typed-array.last-index-of.js","../../node_modules/core-js/modules/es.typed-array.map.js","../../node_modules/core-js/modules/es.typed-array.reduce.js","../../node_modules/core-js/modules/es.typed-array.reduce-right.js","../../node_modules/core-js/modules/es.typed-array.reverse.js","../../node_modules/core-js/modules/es.typed-array.set.js","../../node_modules/core-js/modules/es.typed-array.slice.js","../../node_modules/core-js/modules/es.typed-array.some.js","../../node_modules/core-js/modules/es.typed-array.sort.js","../../node_modules/core-js/modules/es.typed-array.subarray.js","../../node_modules/core-js/modules/es.typed-array.to-locale-string.js","../../node_modules/core-js/modules/es.typed-array.to-string.js","../../node_modules/core-js/modules/es.array-buffer.slice.js","../../src/svgcanvas/utilities.js","../../src/svgcanvas/history.js","../../src/svgcanvas/path-method.js","../../src/svgcanvas/path-actions.js","../../src/svgcanvas/path.js","../../src/svgcanvas/layer.js","../../src/svgcanvas/historyrecording.js","../../src/svgcanvas/copy-elem.js","../../src/svgcanvas/draw.js","../../src/svgcanvas/recalculate.js","../../src/svgcanvas/paste-elem.js","../../src/svgcanvas/undo.js","../../src/svgcanvas/selection.js","../../src/svgcanvas/text-actions.js","../../src/svgcanvas/event.js","../../src/svgcanvas/json.js","../../src/svgcanvas/elem-get-set.js","../../src/svgcanvas/coords.js","../../src/svgcanvas/selected-elem.js","../../src/svgcanvas/blur-event.js","../../src/svgcanvas/sanitize.js","../../node_modules/rollup-plugin-node-polyfills/polyfills/global.js","../../node_modules/core-js/modules/es.array-buffer.constructor.js","../../node_modules/core-js/modules/es.number.min-safe-integer.js","../../node_modules/core-js/modules/es.regexp.flags.js","../../node_modules/core-js/modules/es.number.is-integer.js","../../node_modules/core-js/modules/es.typed-array.uint32-array.js","../../node_modules/core-js/modules/es.typed-array.int8-array.js","../../node_modules/core-js/modules/es.typed-array.uint8-clamped-array.js","../../node_modules/core-js/modules/es.typed-array.int16-array.js","../../node_modules/core-js/modules/es.typed-array.uint16-array.js","../../node_modules/core-js/modules/es.typed-array.int32-array.js","../../node_modules/core-js/modules/es.typed-array.float32-array.js","../../node_modules/core-js/modules/es.typed-array.float64-array.js","../../node_modules/core-js/modules/es.string.link.js","../../node_modules/core-js/modules/es.string.trim-start.js","../../node_modules/core-js/modules/es.data-view.js","../../node_modules/core-js/modules/es.array.last-index-of.js","../../node_modules/fflate/esm/browser.js","../../node_modules/jspdf/dist/jspdf.es.min.js","../../node_modules/core-js/modules/es.string.anchor.js","../../node_modules/cssesc/cssesc.js","../../node_modules/font-family-papandreou/index.js","../../node_modules/svgpath/lib/path_parse.js","../../node_modules/svgpath/lib/matrix.js","../../node_modules/svgpath/lib/transform_parse.js","../../node_modules/svgpath/lib/a2c.js","../../node_modules/svgpath/lib/ellipse.js","../../node_modules/svgpath/lib/svgpath.js","../../node_modules/specificity/dist/specificity.mjs","../../node_modules/svg2pdf.js/dist/svg2pdf.es.js","../../src/svgcanvas/svg-exec.js","../../src/svgcanvas/select.js","../../src/svgcanvas/clear.js","../../src/svgcanvas/svgcanvas.js","../../src/svgcanvas/svgroot.js","../../src/editor/locale.js","../../node_modules/deparam/dist/deparam.umd.js","../../src/editor/ConfigObj.js","../../node_modules/core-js/modules/es.string.bold.js","../../node_modules/core-js/modules/es.string.italics.js","../../src/editor/contextmenu.js","../../src/editor/templates/editorTemplate.js","../../src/editor/panels/LayersPanel.js","../../src/editor/panels/LeftPanelHandlers.js","../../src/editor/panels/BottomPanelHandlers.js","../../src/editor/panels/TopPanelHandlers.js","../../src/editor/templates/rulersTemplate.js","../../src/editor/Rulers.js","../../src/editor/EditorStartup.js","../../src/editor/svgedit.js","../../src/editor/index.js","../../node_modules/core-js/modules/es.string.from-code-point.js","../../node_modules/html2canvas/dist/html2canvas.js","../../node_modules/core-js/modules/es.object.is-frozen.js","../../node_modules/core-js/modules/es.object.seal.js","../../node_modules/core-js/modules/es.reflect.apply.js","../../node_modules/core-js/internals/function-bind.js","../../node_modules/core-js/modules/es.reflect.construct.js","../../node_modules/dompurify/dist/purify.js","../../src/editor/locale/lang.af.js","../../src/editor/locale/lang.ar.js","../../src/editor/locale/lang.az.js","../../src/editor/locale/lang.be.js","../../src/editor/locale/lang.bg.js","../../src/editor/locale/lang.ca.js","../../src/editor/locale/lang.cs.js","../../src/editor/locale/lang.cy.js","../../src/editor/locale/lang.da.js","../../src/editor/locale/lang.de.js","../../src/editor/locale/lang.el.js","../../src/editor/locale/lang.en.js","../../src/editor/locale/lang.es.js","../../src/editor/locale/lang.et.js","../../src/editor/locale/lang.fa.js","../../src/editor/locale/lang.fi.js","../../src/editor/locale/lang.fr.js","../../src/editor/locale/lang.fy.js","../../src/editor/locale/lang.ga.js","../../src/editor/locale/lang.gl.js","../../src/editor/locale/lang.he.js","../../src/editor/locale/lang.hi.js","../../src/editor/locale/lang.hr.js","../../src/editor/locale/lang.hu.js","../../src/editor/locale/lang.hy.js","../../src/editor/locale/lang.id.js","../../src/editor/locale/lang.is.js","../../src/editor/locale/lang.it.js","../../src/editor/locale/lang.ja.js","../../src/editor/locale/lang.ko.js","../../src/editor/locale/lang.lt.js","../../src/editor/locale/lang.lv.js","../../src/editor/locale/lang.mk.js","../../src/editor/locale/lang.ms.js","../../src/editor/locale/lang.mt.js","../../src/editor/locale/lang.nl.js","../../src/editor/locale/lang.no.js","../../src/editor/locale/lang.pl.js","../../src/editor/locale/lang.pt-BR.js","../../src/editor/locale/lang.pt-PT.js","../../src/editor/locale/lang.ro.js","../../src/editor/locale/lang.ru.js","../../src/editor/locale/lang.sk.js","../../src/editor/locale/lang.sl.js","../../src/editor/locale/lang.sq.js","../../src/editor/locale/lang.sr.js","../../src/editor/locale/lang.sv.js","../../src/editor/locale/lang.sw.js","../../src/editor/locale/lang.test.js","../../src/editor/locale/lang.th.js","../../src/editor/locale/lang.tl.js","../../src/editor/locale/lang.tr.js","../../src/editor/locale/lang.uk.js","../../src/editor/locale/lang.vi.js","../../src/editor/locale/lang.yi.js","../../src/editor/locale/lang.zh-CN.js","../../src/editor/locale/lang.zh-HK.js","../../src/editor/locale/lang.zh-TW.js"],"sourcesContent":["var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n /* global globalThis -- safe */\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return nativeDefineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.9.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n /* global Symbol -- required for testing */\n return !String(Symbol());\n});\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n /* global Symbol -- safe */\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name)) {\n if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar fails = require('./fails');\n\n// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,\n// so we use an intermediate function.\nfunction RE(s, f) {\n return RegExp(s, f);\n}\n\nexports.UNSUPPORTED_Y = fails(function () {\n // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\n var re = RE('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = RE('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n","'use strict';\nvar regexpFlags = require('./regexp-flags');\nvar stickyHelpers = require('./regexp-sticky-helpers');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\n// eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = regexpFlags.call(re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = flags.replace('y', '');\n if (flags.indexOf('g') === -1) {\n flags += 'g';\n }\n\n strCopy = String(str).slice(re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = match.input.slice(charsAdded);\n match[0] = match[0].slice(charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar regexpExec = require('../internals/regexp-exec');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\nvar REPLACE = wellKnownSymbol('replace');\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nmodule.exports = function (KEY, length, exec, sham) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !(\n REPLACE_SUPPORTS_NAMED_GROUPS &&\n REPLACE_KEEPS_$0 &&\n !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n )) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }, {\n REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,\n REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n });\n var stringMethod = methods[0];\n var regexMethod = methods[1];\n\n redefine(String.prototype, KEY, stringMethod);\n redefine(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return regexMethod.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return regexMethod.call(string, this); }\n );\n }\n\n if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);\n};\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\n\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SUPPORTS_Y);\n","var toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar replace = ''.replace;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\nvar max = Math.max;\nvar min = Math.min;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n if (\n (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n ) {\n var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n if (res.done) return res.value;\n }\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n});\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseFloat = global.parseFloat;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity;\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(String(string));\n var result = $parseFloat(trimmedString);\n return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $ = require('../internals/export');\nvar parseFloatImplementation = require('../internals/number-parse-float');\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\n$({ global: true, forced: parseFloat != parseFloatImplementation }, {\n parseFloat: parseFloatImplementation\n});\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_OUT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push.call(target, value); // filterOut\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterOut` method\n // https://github.com/tc39/proposal-array-filtering\n filterOut: createMethod(7)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n /* global ActiveXObject -- old IE */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","'use strict';\nvar $ = require('../internals/export');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeJoin = [].join;\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar test = [];\nvar nativeSort = test.sort;\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD;\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? nativeSort.call(toObject(this))\n : nativeSort.call(toObject(this), aFunction(comparefn));\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar quot = /\"/g;\n\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n var S = String(requireObjectCoercible(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '&quot;') + '\"';\n return p1 + '>' + S + '</' + tag + '>';\n};\n","var fails = require('../internals/fails');\n\n// check the existence of a method, lowercase\n// of a tag and escaping quotes in arguments\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n var test = ''[METHOD_NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.sub` method\n// https://tc39.es/ecma262/#sec-string.prototype.sub\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('sub') }, {\n sub: function sub() {\n return createHTML(this, 'sub', '', '');\n }\n});\n","var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar hex = /^[+-]?0[Xx]/;\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22;\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(String(string));\n return $parseInt(S, (radix >>> 0) || (hex.test(S) ? 16 : 10));\n} : $parseInt;\n","var $ = require('../internals/export');\nvar parseIntImplementation = require('../internals/number-parse-int');\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\n$({ global: true, forced: parseInt != parseIntImplementation }, {\n parseInt: parseIntImplementation\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar FORCED = fails(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n});\n\n// `Date.prototype.toJSON` method\n// https://tc39.es/ecma262/#sec-date.prototype.tojson\n$({ target: 'Date', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\n$({ target: 'URL', proto: true, enumerable: true }, {\n toJSON: function toJSON() {\n return URL.prototype.toString.call(this);\n }\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","/* eslint-disable no-proto -- safe */\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isRegExp = require('../internals/is-regexp');\nvar getFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar setInternalState = require('../internals/internal-state').set;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar FORCED = DESCRIPTORS && isForced('RegExp', (!CORRECT_NEW || UNSUPPORTED_Y || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\n})));\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (FORCED) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = this instanceof RegExpWrapper;\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var sticky;\n\n if (!thisIsRegExp && patternIsRegExp && pattern.constructor === RegExpWrapper && flagsAreUndefined) {\n return pattern;\n }\n\n if (CORRECT_NEW) {\n if (patternIsRegExp && !flagsAreUndefined) pattern = pattern.source;\n } else if (pattern instanceof RegExpWrapper) {\n if (flagsAreUndefined) flags = getFlags.call(pattern);\n pattern = pattern.source;\n }\n\n if (UNSUPPORTED_Y) {\n sticky = !!flags && flags.indexOf('y') > -1;\n if (sticky) flags = flags.replace(/y/g, '');\n }\n\n var result = inheritIfRequired(\n CORRECT_NEW ? new NativeRegExp(pattern, flags) : NativeRegExp(pattern, flags),\n thisIsRegExp ? this : RegExpPrototype,\n RegExpWrapper\n );\n\n if (UNSUPPORTED_Y && sticky) setInternalState(result, { sticky: sticky });\n\n return result;\n };\n var proxy = function (key) {\n key in RegExpWrapper || defineProperty(RegExpWrapper, key, {\n configurable: true,\n get: function () { return NativeRegExp[key]; },\n set: function (it) { NativeRegExp[key] = it; }\n });\n };\n var keys = getOwnPropertyNames(NativeRegExp);\n var index = 0;\n while (keys.length > index) proxy(keys[index++]);\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n redefine(global, 'RegExp', RegExpWrapper);\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","'use strict';\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\nvar flags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = String(R.source);\n var rf = R.flags;\n var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative(nativeMatch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\nvar nativeReverse = [].reverse;\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n reverse: function reverse() {\n // eslint-disable-next-line no-self-assign -- dirty hack\n if (isArray(this)) this.length = this.length;\n return nativeReverse.call(this);\n }\n});\n","/*! jQuery v1.7.1 jquery.com | jquery.org/license */\n(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f(\"<\"+a+\">\").appendTo(b),e=d.css(\"display\");d.remove();if(e===\"none\"||e===\"\"){cl||(cl=c.createElement(\"iframe\"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode===\"CSS1Compat\"?\"<!doctype html>\":\"\")+\"<html><body>\"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,\"display\"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h==\"string\"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k===\"*\")k=l;else if(l!==\"*\"&&l!==k){m=l+\" \"+k,n=e[m]||e[\"* \"+k];if(!n){p=b;for(o in e){j=o.split(\" \");if(j[0]===l||j[0]===\"*\"){p=e[j[1]+\" \"+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error(\"No conversion from \"+m.replace(\" \",\" to \")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]===\"*\")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader(\"content-type\"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+\" \"+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+\"[\"+(typeof e==\"object\"||f.isArray(e)?b:\"\")+\"]\",e,c,d)});else if(!c&&b!=null&&typeof b==\"object\")for(var e in b)ca(a+\"[\"+e+\"]\",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l==\"string\"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g[\"*\"]&&(l=b$(a,c,d,e,\"*\",g));return l}function bZ(a){return function(b,c){typeof b!=\"string\"&&(c=b,b=\"*\");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\\+/.test(h),j&&(h=h.substr(1)||\"*\"),i=a[h]=a[h]||[],i[j?\"unshift\":\"push\"](c)}}}function bC(a,b,c){var d=b===\"width\"?a.offsetWidth:a.offsetHeight,e=b===\"width\"?bx:by,g=0,h=e.length;if(d>0){if(c!==\"border\")for(;g<h;g++)c||(d-=parseFloat(f.css(a,\"padding\"+e[g]))||0),c===\"margin\"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,\"border\"+e[g]+\"Width\"))||0;return d+\"px\"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,\"padding\"+e[g]))||0,c!==\"padding\"&&(d+=parseFloat(f.css(a,\"border\"+e[g]+\"Width\"))||0),c===\"margin\"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+\"px\"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:\"script\"}):f.globalEval((b.text||b.textContent||b.innerHTML||\"\").replace(bf,\"/*$0*/\")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement(\"div\");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||\"\").toLowerCase();b===\"input\"?bm(a):b!==\"script\"&&typeof a.getElementsByTagName!=\"undefined\"&&f.grep(a.getElementsByTagName(\"input\"),bm)}function bm(a){if(a.type===\"checkbox\"||a.type===\"radio\")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!=\"undefined\"?a.getElementsByTagName(\"*\"):typeof a.querySelectorAll!=\"undefined\"?a.querySelectorAll(\"*\"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c===\"object\")b.outerHTML=a.outerHTML;else if(c!==\"input\"||a.type!==\"checkbox\"&&a.type!==\"radio\"){if(c===\"option\")b.selected=a.defaultSelected;else if(c===\"input\"||c===\"textarea\")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?\".\":\"\")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,\"table\")?a.getElementsByTagName(\"tbody\")[0]||a.appendChild(a.ownerDocument.createElement(\"tbody\")):a}function U(a){var b=V.split(\"|\"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b==\"string\"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+\"defer\",e=b+\"queue\",g=b+\"mark\",h=f._data(a,d);h&&(c===\"queue\"||!f._data(a,e))&&(c===\"mark\"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b===\"data\"&&f.isEmptyObject(a[b]))continue;if(b!==\"toJSON\")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e=\"data-\"+c.replace(k,\"-$1\").toLowerCase();d=a.getAttribute(e);if(typeof d==\"string\"){try{d=d===\"true\"?!0:d===\"false\"?!1:d===\"null\"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll(\"left\")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,j=/\\S/,k=/^\\s+/,l=/\\s+$/,m=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,n=/^[\\],:{}\\s]*$/,o=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,q=/(?:^|:|,)(?:\\s*\\[)+/g,r=/(webkit)[ \\/]([\\w.]+)/,s=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,t=/(msie) ([\\w.]+)/,u=/(mozilla)(?:.*? rv:([\\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+\"\").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a===\"body\"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a==\"string\"){a.charAt(0)!==\"<\"||a.charAt(a.length-1)!==\">\"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:\"\",jquery:\"1.7.1\",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b===\"find\"?d.selector=this.selector+(this.selector?\" \":\"\")+c:b&&(d.selector=this.selector+\".\"+b+\"(\"+c+\")\");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),\"slice\",F.call(arguments).join(\",\"))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==\"boolean\"&&(l=i,i=arguments[1]||{},j=2),typeof i!=\"object\"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger(\"ready\").off(\"ready\")}},bindReady:function(){if(!A){A=e.Callbacks(\"once memory\");if(c.readyState===\"complete\")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener(\"DOMContentLoaded\",B,!1),a.addEventListener(\"load\",e.ready,!1);else if(c.attachEvent){c.attachEvent(\"onreadystatechange\",B),a.attachEvent(\"onload\",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)===\"function\"},isArray:Array.isArray||function(a){return e.type(a)===\"array\"},isWindow:function(a){return a&&typeof a==\"object\"&&\"setInterval\"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||\"object\"},isPlainObject:function(a){if(!a||e.type(a)!==\"object\"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,\"constructor\")&&!D.call(a.constructor.prototype,\"isPrototypeOf\"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!=\"string\"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,\"@\").replace(p,\"]\").replace(q,\"\")))return(new Function(\"return \"+b))();e.error(\"Invalid JSON: \"+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,\"text/xml\")):(d=new ActiveXObject(\"Microsoft.XMLDOM\"),d.async=\"false\",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName(\"parsererror\").length)&&e.error(\"Invalid XML: \"+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,\"ms-\").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?\"\":G.call(a)}:function(a){return a==null?\"\":(a+\"\").replace(k,\"\").replace(l,\"\")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d===\"string\"||d===\"function\"||d===\"regexp\"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length==\"number\")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j==\"number\"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c==\"string\"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c==\"object\"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf(\"compatible\")<0&&u.exec(a)||[];return{browser:b[1]||\"\",version:b[2]||\"0\"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"),function(a,b){I[\"[object \"+b+\"]\"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(\" \")&&(k=/^[\\s\\xA0]+/,l=/[\\s\\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener(\"DOMContentLoaded\",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState===\"complete\"&&(c.detachEvent(\"onreadystatechange\",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h===\"array\"?m(g):h===\"function\"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks(\"once memory\"),c=f.Callbacks(\"once memory\"),d=f.Callbacks(\"memory\"),e=\"pending\",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,\"resolve\"],fail:[b,\"reject\"],progress:[c,\"notify\"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+\"With\"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+\"With\"]=g[j].fireWith;i.done(function(){e=\"resolved\"},c.disable,d.lock).fail(function(){e=\"rejected\"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement(\"div\"),r=c.documentElement;q.setAttribute(\"className\",\"t\"),q.innerHTML=\" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\",d=q.getElementsByTagName(\"*\"),e=q.getElementsByTagName(\"a\")[0];if(!d||!d.length||!e)return{};g=c.createElement(\"select\"),h=g.appendChild(c.createElement(\"option\")),i=q.getElementsByTagName(\"input\")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName(\"tbody\").length,htmlSerialize:!!q.getElementsByTagName(\"link\").length,style:/top/.test(e.getAttribute(\"style\")),hrefNormalized:e.getAttribute(\"href\")===\"/a\",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value===\"on\",optSelected:h.selected,getSetAttribute:q.className!==\"t\",enctype:!!c.createElement(\"form\").enctype,html5Clone:c.createElement(\"nav\").cloneNode(!0).outerHTML!==\"<:nav></:nav>\",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent(\"onclick\",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent(\"onclick\")),i=c.createElement(\"input\"),i.value=\"t\",i.setAttribute(\"type\",\"radio\"),b.radioValue=i.value===\"t\",i.setAttribute(\"checked\",\"checked\"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML=\"\",a.getComputedStyle&&(j=c.createElement(\"div\"),j.style.width=\"0\",j.style.marginRight=\"0\",q.style.width=\"2px\",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n=\"on\"+o,p=n in q,p||(q.setAttribute(n,\"return;\"),p=typeof q[n]==\"function\"),b[o+\"Bubbles\"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName(\"body\")[0];!r||(j=1,k=\"position:absolute;top:0;left:0;width:1px;height:1px;margin:0;\",m=\"visibility:hidden;border:0;\",n=\"style='\"+k+\"border:5px solid #000;padding:0;'\",o=\"<div \"+n+\"><div></div></div>\"+\"<table \"+n+\" cellpadding='0' cellspacing='0'>\"+\"<tr><td></td></tr></table>\",a=c.createElement(\"div\"),a.style.cssText=m+\"width:0;height:0;position:static;top:0;margin-top:\"+j+\"px\",r.insertBefore(a,r.firstChild),q=c.createElement(\"div\"),a.appendChild(q),q.innerHTML=\"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\",l=q.getElementsByTagName(\"td\"),p=l[0].offsetHeight===0,l[0].style.display=\"\",l[1].style.display=\"none\",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML=\"\",q.style.width=q.style.paddingLeft=\"1px\",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!=\"undefined\"&&(q.style.display=\"inline\",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display=\"\",q.innerHTML=\"<div style='width:4px;'></div>\",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position=\"fixed\",e.style.top=\"20px\",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top=\"\",d.style.overflow=\"hidden\",d.style.position=\"relative\",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\\{.*\\}|\\[.*\\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:\"jQuery\"+(f.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c==\"string\",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c===\"events\";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c==\"object\"||typeof c==\"function\")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(\" \")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute(\"classid\")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a==\"undefined\"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],\"parsedAttrs\")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf(\"data-\")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],\"parsedAttrs\",!0)}}return h}if(typeof a==\"object\")return this.each(function(){f.data(this,a)});d=a.split(\".\"),d[1]=d[1]?\".\"+d[1]:\"\";if(c===b){h=this.triggerHandler(\"getData\"+d[1]+\"!\",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler(\"setData\"+d[1]+\"!\",e),f.data(this,a,c),b.triggerHandler(\"changeData\"+d[1]+\"!\",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||\"fx\")+\"mark\",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||\"fx\";var d=c+\"mark\",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,\"mark\"))}},queue:function(a,b,c){var d;if(a){b=(b||\"fx\")+\"queue\",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||\"fx\";var c=f.queue(a,b),d=c.shift(),e={};d===\"inprogress\"&&(d=c.shift()),d&&(b===\"fx\"&&c.unshift(\"inprogress\"),f._data(a,b+\".run\",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+\"queue \"+b+\".run\",!0),n(a,b,\"queue\"))}}),f.fn.extend({queue:function(a,c){typeof a!=\"string\"&&(c=a,a=\"fx\");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a===\"fx\"&&b[0]!==\"inprogress\"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||\"fx\";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!=\"string\"&&(c=a,a=b),a=a||\"fx\";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+\"defer\",j=a+\"queue\",k=a+\"mark\",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks(\"once memory\"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\\n\\t\\r]/g,p=/\\s+/,q=/\\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a==\"string\"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=\" \"+e.className+\" \";for(h=0,i=b.length;h<i;h++)~g.indexOf(\" \"+b[h]+\" \")||(g+=b[h]+\" \");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a==\"string\"||a===b){c=(a||\"\").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(\" \"+g.className+\" \").replace(o,\" \");for(i=0,j=c.length;i<j;i++)h=h.replace(\" \"+c[i]+\" \",\" \");g.className=f.trim(h)}else g.className=\"\"}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b==\"boolean\";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c===\"string\"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?\"addClass\":\"removeClass\"](e)}else if(c===\"undefined\"||c===\"boolean\")this.className&&f._data(this,\"__className__\",this.className),this.className=this.className||a===!1?\"\":f._data(this,\"__className__\")||\"\"})},hasClass:function(a){var b=\" \"+a+\" \",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(\" \"+this[c].className+\" \").replace(o,\" \").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h=\"\":typeof h==\"number\"?h+=\"\":f.isArray(h)&&(h=f.map(h,function(a){return a==null?\"\":a+\"\"})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!(\"set\"in c)||c.set(this,h,\"value\")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&\"get\"in c&&(d=c.get(g,\"value\"))!==b)return d;d=g.value;return typeof d==\"string\"?d.replace(q,\"\"):d==null?\"\":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type===\"select-one\";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute(\"disabled\")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,\"optgroup\"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find(\"option\").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute==\"undefined\")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&\"set\"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,\"\"+d);return d}if(h&&\"get\"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,\"\"),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error(\"type property can't be changed\");else if(!f.support.radioValue&&b===\"radio\"&&f.nodeName(a,\"input\")){var c=a.value;a.setAttribute(\"type\",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,\"button\"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,\"button\"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&\"set\"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&\"get\"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode(\"tabindex\");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!=\"boolean\"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!==\"\":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+\"\"}},f.attrHooks.tabindex.set=w.set,f.each([\"width\",\"height\"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===\"\"){a.setAttribute(b,\"auto\");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===\"\"&&(b=\"false\"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each([\"href\",\"src\",\"width\",\"height\"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=\"\"+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype=\"encoding\"),f.support.checkOn||f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]={get:function(a){return a.getAttribute(\"value\")===null?\"on\":a.value}}}),f.each([\"radio\",\"checkbox\"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\\.]*)?(?:\\.(.+))?$/,B=/\\bhover(\\.\\S+)?\\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||\"\").toLowerCase(),b[3]=b[3]&&new RegExp(\"(?:^|\\\\s)\"+b[3]+\"(?:\\\\s|$)\"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c[\"class\"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,\"mouseenter$1 mouseleave$1\")};\nf.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!=\"undefined\"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(\" \");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||\"\").split(\".\").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(\".\")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent(\"on\"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||\"\")).split(\" \");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp(\"(^|\\\\.)\"+l.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d===\"**\"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,[\"events\",\"handle\"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf(\"!\")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(\".\")>=0&&(i=h.split(\".\"),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c==\"object\"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join(\".\"),c.namespace_re=c.namespace?new RegExp(\"(^|\\\\.)\"+i.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null,o=h.indexOf(\":\")<0?\"on\"+h:\"\";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,\"events\")||{})[c.type]&&f._data(m,\"handle\"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!==\"click\"||!f.nodeName(e,\"a\"))&&f.acceptData(e)&&o&&e[h]&&(h!==\"focus\"&&h!==\"blur\"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,\"events\")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!==\"click\")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:\"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusout\"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent(\"on\"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,\"form\"))return!1;f.event.add(this,\"click._submit keypress._submit\",function(a){var c=a.target,d=f.nodeName(c,\"input\")||f.nodeName(c,\"button\")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,\"submit._submit\",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate(\"submit\",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,\"form\"))return!1;f.event.remove(this,\"._submit\")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type===\"checkbox\"||this.type===\"radio\")f.event.add(this,\"propertychange._change\",function(a){a.originalEvent.propertyName===\"checked\"&&(this._just_changed=!0)}),f.event.add(this,\"click._change\",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate(\"change\",this,a,!0))});return!1}f.event.add(this,\"beforeactivate._change\",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,\"change._change\",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate(\"change\",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!==\"radio\"&&b.type!==\"checkbox\")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,\"._change\");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a==\"object\"){typeof c!=\"string\"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c==\"string\"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+\".\"+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a==\"object\"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c==\"function\")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||\"**\",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,\"**\"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,\"lastToggle\"+a.guid)||0)%d;f._data(this,\"lastToggle\"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!=\"string\"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,d=\"sizcache\"+(Math.random()+\"\").replace(\".\",\"\"),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\\\/g,k=/\\r\\n/g,l=/\\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=\"string\")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(\"\"),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]===\"~\"||w[0]===\"+\")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q=\"\",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)===\"[object Array]\")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!==\"\\\\\"){g[1]=(g[1]||\"\").replace(j,\"\"),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],\"\");break}}}}d||(d=typeof b.getElementsByTagName!=\"undefined\"?b.getElementsByTagName(\"*\"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)===\"\\\\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],\"\");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e=\"\";if(d){if(d===1||d===9){if(typeof a.textContent==\"string\")return a.textContent;if(typeof a.innerText==\"string\")return a.innerText.replace(k,\"\");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,NAME:/\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:{},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(a){return a.getAttribute(\"href\")},type:function(a){return a.getAttribute(\"type\")}},relative:{\"+\":function(a,b){var c=typeof b==\"string\",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},\">\":function(a,b){var c,d=typeof b==\"string\",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},\"\":function(a,b,c){var d,f=e++,g=x;typeof b==\"string\"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g(\"parentNode\",b,f,a,d,c)},\"~\":function(a,b,c){var d,f=e++,g=x;typeof b==\"string\"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g(\"previousSibling\",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!=\"undefined\"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!=\"undefined\"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute(\"name\")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!=\"undefined\")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=\" \"+a[1].replace(j,\"\")+\" \";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(\" \"+h.className+\" \").replace(/[\\t\\n\\r]/g,\" \").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,\"\")},TAG:function(a,b){return a[1].replace(j,\"\").toLowerCase()},CHILD:function(a){if(a[1]===\"nth\"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\\+|\\s*/g,\"\");var b=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(a[2]===\"even\"&&\"2n\"||a[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(a[2])&&\"0n+\"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,\"\");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||\"\").replace(j,\"\"),a[2]===\"~=\"&&(a[4]=\" \"+a[4]+\" \");return a},PSEUDO:function(b,c,d,e,f){if(b[1]===\"not\")if((a.exec(b[3])||\"\").length>1||/^\\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!==\"hidden\"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute(\"type\"),c=a.type;return a.nodeName.toLowerCase()===\"input\"&&\"text\"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"radio\"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===a.type},file:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"file\"===a.type},password:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"password\"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"submit\"===a.type},image:function(a){return a.nodeName.toLowerCase()===\"input\"&&\"image\"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b===\"input\"||b===\"button\")&&\"reset\"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b===\"input\"&&\"button\"===a.type||b===\"button\"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e===\"contains\")return(a.textContent||a.innerText||n([a])||\"\").indexOf(b[3])>=0;if(e===\"not\"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case\"only\":case\"first\":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k===\"first\")return!0;l=a;case\"last\":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case\"nth\":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute(\"id\")===b},TAG:function(a,b){return b===\"*\"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(\" \"+(a.className||a.getAttribute(\"class\"))+\" \").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+\"\",f=b[2],g=b[4];return d==null?f===\"!=\":!f&&m.attr?d!=null:f===\"=\"?e===g:f===\"*=\"?e.indexOf(g)>=0:f===\"~=\"?(\" \"+e+\" \").indexOf(g)>=0:g?f===\"!=\"?e!==g:f===\"^=\"?e.indexOf(g)===0:f===\"$=\"?e.substr(e.length-g.length)===g:f===\"|=\"?e===g||e.substr(0,g.length+1)===g+\"-\":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return\"\\\\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\\[]*\\])(?![^\\(]*\\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+o.match[r].source.replace(/\\\\(\\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)===\"[object Array]\")Array.prototype.push.apply(d,a);else if(typeof a.length==\"number\")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement(\"div\"),d=\"script\"+(new Date).getTime(),e=c.documentElement;a.innerHTML=\"<a name='\"+d+\"'/>\",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!=\"undefined\"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=\"undefined\"&&e.getAttributeNode(\"id\").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=\"undefined\"&&a.getAttributeNode(\"id\");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement(\"div\");a.appendChild(c.createComment(\"\")),a.getElementsByTagName(\"*\").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]===\"*\"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=\"<a href='#'></a>\",a.firstChild&&typeof a.firstChild.getAttribute!=\"undefined\"&&a.firstChild.getAttribute(\"href\")!==\"#\"&&(o.attrHandle.href=function(a){return a.getAttribute(\"href\",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement(\"div\"),d=\"__sizzle__\";b.innerHTML=\"<p class='TEST'></p>\";if(!b.querySelectorAll||b.querySelectorAll(\".TEST\").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b===\"body\"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!==\"object\"){var k=e,l=e.getAttribute(\"id\"),n=l||d,p=e.parentNode,q=/^\\s*[+~]/.test(b);l?n=n.replace(/'/g,\"\\\\$&\"):e.setAttribute(\"id\",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll(\"[id='\"+n+\"'] \"+b),f)}catch(r){}finally{l||k.removeAttribute(\"id\")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement(\"div\"),\"div\"),e=!1;try{b.call(c.documentElement,\"[test!='']:sizzle\")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement(\"div\");a.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(!!a.getElementsByClassName&&a.getElementsByClassName(\"e\").length!==0){a.lastChild.className=\"e\";if(a.getElementsByClassName(\"e\").length===1)return;o.order.splice(1,0,\"CLASS\"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=\"undefined\"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!==\"HTML\":!1};var y=function(a,b,c){var d,e=[],f=\"\",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,\"\");a=o.relative[a]?a+\"*\":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[\":\"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!=\"string\")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack(\"\",\"find\",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),\"not\",a)},filter:function(a){return this.pushStack(T(this,a,!0),\"filter\",a)},is:function(a){return!!a&&(typeof a==\"string\"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!=\"string\"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,\"closest\",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a==\"string\")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==\"string\"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return f.dir(a,\"parentNode\",c)},next:function(a){return f.nth(a,2,\"nextSibling\")},prev:function(a){return f.nth(a,2,\"previousSibling\")},nextAll:function(a){return f.dir(a,\"nextSibling\")},prevAll:function(a){return f.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return f.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return f.dir(a,\"previousSibling\",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d==\"string\"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(\",\"))}}),f.extend({filter:function(a,b,c){c&&(a=\":not(\"+a+\")\");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V=\"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",W=/ jQuery\\d+=\"(?:\\d+|null)\"/g,X=/^\\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,Z=/<([\\w:]+)/,$=/<tbody/i,_=/<|&#?\\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp(\"<(?:\"+V+\")\",\"i\"),bd=/checked\\s*(?:[^=]|=\\s*.checked.)/i,be=/\\/(java|ecma)script/i,bf=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,bg={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],area:[1,\"<map>\",\"</map>\"],_default:[0,\"\",\"\"]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,\"div<div>\",\"</div>\"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!=\"object\"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,\"body\")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,\"before\",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,\"after\",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName(\"*\")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()\n{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName(\"*\"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,\"\"):null;if(typeof a==\"string\"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=a.replace(Y,\"<$1></$2>\");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName(\"*\")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!=\"string\"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),\"replaceWith\",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j==\"string\"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,\"tr\");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j==\"string\"&&j.length<512&&i===c&&j.charAt(0)===\"<\"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test(\"<\"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement==\"undefined\"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k==\"number\"&&(k+=\"\");if(!k)continue;if(typeof k==\"string\")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,\"<$1></$2>\");var l=(Z.exec(k)||[\"\",\"\"])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement(\"div\");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l===\"table\"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===\"<table>\"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],\"tbody\")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)==\"number\")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],\"script\")&&(!h[j].type||h[j].type.toLowerCase()===\"text/javascript\"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName(\"script\"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\\([^)]*\\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\\d+(?:px)?$/i,bu=/^-?\\d/,bv=/^([\\-+])=([\\-+.\\de]+)/,bw={position:\"absolute\",visibility:\"hidden\",display:\"block\"},bx=[\"Left\",\"Right\"],by=[\"Top\",\"Bottom\"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,\"opacity\",\"opacity\");return c===\"\"?\"1\":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":f.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&\"get\"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h===\"string\"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h=\"number\");if(d==null||h===\"number\"&&isNaN(d))return;h===\"number\"&&!f.cssNumber[i]&&(d+=\"px\");if(!k||!(\"set\"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c===\"cssFloat\"&&(c=\"float\");if(g&&\"get\"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each([\"height\",\"width\"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+\"px\"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?parseFloat(RegExp.$1)/100+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?\"alpha(opacity=\"+b*100+\")\":\"\",g=d&&d.filter||c.filter||\"\";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,\"\"))===\"\"){c.removeAttribute(\"filter\");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+\" \"+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:\"inline-block\"},function(){b?c=bz(a,\"margin-right\",\"marginRight\"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,\"-$1\").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===\"\"&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b===\"fontSize\"?\"1em\":f||0,f=g.pixelLeft+\"px\",g.left=c,d&&(a.runtimeStyle.left=d));return f===\"\"?\"auto\":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,\"display\"))===\"none\"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\\[\\]$/,bF=/\\r?\\n/g,bG=/#.*$/,bH=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\\/\\//,bM=/\\?/,bN=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=[\"*/\"]+[\"*\"];try{bV=e.href}catch(bY){bV=c.createElement(\"a\"),bV.href=\"\",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!=\"string\"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(\" \");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h=\"GET\";c&&(f.isFunction(c)?(d=c,c=b):typeof c==\"object\"&&(c=f.param(c,f.ajaxSettings.traditional),h=\"POST\"));var i=this;f.ajax({url:a,type:h,dataType:\"html\",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f(\"<div>\").append(c.replace(bN,\"\")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,\"\\r\\n\")}}):{name:b.name,value:c.replace(bF,\"\\r\\n\")}}).get()}}),f.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each([\"get\",\"post\"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,\"script\")},getJSON:function(a,b,c){return f.get(a,b,c,\"json\")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:!0,async:!0,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":a.String,\"text html\":!0,\"text json\":f.parseJSON,\"text xml\":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||\"\",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader(\"Last-Modified\"))f.lastModified[k]=y;if(z=v.getResponseHeader(\"Etag\"))f.etag[k]=z}if(a===304)w=\"notmodified\",o=!0;else try{r=cc(d,x),w=\"success\",o=!0}catch(A){w=\"parsererror\",u=A}}else{u=w;if(!w||a)w=\"error\",a<0&&(a=0)}v.status=a,v.statusText=\"\"+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger(\"ajax\"+(o?\"Success\":\"Error\"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger(\"ajaxComplete\",[v,d]),--f.active||f.event.trigger(\"ajaxStop\"))}}typeof a==\"object\"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks(\"once memory\"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||\"abort\",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+\"\").replace(bG,\"\").replace(bL,bW[1]+\"//\"),d.dataTypes=f.trim(d.dataType||\"*\").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]===\"http:\"?80:443))==(bW[3]||(bW[1]===\"http:\"?80:443)))),d.data&&d.processData&&typeof d.data!=\"string\"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger(\"ajaxStart\");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?\"&\":\"?\")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,\"$1_=\"+x);d.url=y+(y===d.url?(bM.test(d.url)?\"&\":\"?\")+\"_=\"+x:\"\")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader(\"Content-Type\",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader(\"If-Modified-Since\",f.lastModified[k]),f.etag[k]&&v.setRequestHeader(\"If-None-Match\",f.etag[k])),v.setRequestHeader(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!==\"*\"?\", \"+bX+\"; q=0.01\":\"\"):d.accepts[\"*\"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,\"No Transport\");else{v.readyState=1,t&&g.trigger(\"ajaxSend\",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort(\"timeout\")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join(\"&\").replace(bD,\"+\")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\\=)\\?(&|$)|\\?\\?/i;f.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return f.expando+\"_\"+cd++}}),f.ajaxPrefilter(\"json jsonp\",function(b,c,d){var e=b.contentType===\"application/x-www-form-urlencoded\"&&typeof b.data==\"string\";if(b.dataTypes[0]===\"jsonp\"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l=\"$1\"+h+\"$2\";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\\?/.test(j)?\"&\":\"?\")+b.jsonp+\"=\"+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters[\"script json\"]=function(){g||f.error(h+\" was not called\");return g[0]},b.dataTypes[0]=\"json\";return\"script\"}}),f.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter(\"script\",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\",a.global=!1)}),f.ajaxTransport(\"script\",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName(\"head\")[0]||c.documentElement;return{send:function(f,g){d=c.createElement(\"script\"),d.async=\"async\",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,\"success\")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&\"withCredentials\"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e[\"X-Requested-With\"]&&(e[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=\"\"}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,cp,cq=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu(\"show\",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,\"olddisplay\")&&e===\"none\"&&(e=d.style.display=\"\"),e===\"\"&&f.css(d,\"display\")===\"none\"&&f._data(d,\"olddisplay\",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===\"\"||e===\"none\")d.style.display=f._data(d,\"olddisplay\")||\"\"}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu(\"hide\",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,\"display\"),e!==\"none\"&&!f._data(d,\"olddisplay\")&&f._data(d,\"olddisplay\",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display=\"none\");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a==\"boolean\";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(\":hidden\");f(this)[b?\"show\":\"hide\"]()}):this.animate(cu(\"toggle\",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(\":hidden\").css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(\":hidden\"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||\"swing\";if(h===\"hide\"&&d||h===\"show\"&&!d)return b.complete.call(this);c&&(g===\"height\"||g===\"width\")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,\"display\")===\"inline\"&&f.css(this,\"float\")===\"none\"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)===\"inline\"?this.style.display=\"inline-block\":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow=\"hidden\");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,\"toggle\"+i)||(h===\"toggle\"?d?\"show\":\"hide\":0),o?(f._data(this,\"toggle\"+i,o===\"show\"?\"hide\":\"show\"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?\"\":\"px\"),n!==\"px\"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]===\"-=\"?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,\"\"));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!=\"string\"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||\"fx\",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(\".run\")===b.length-4&&h(this,g,b);else g[b=a+\".run\"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu(\"show\",1),slideUp:cu(\"hide\",1),slideToggle:cu(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a==\"object\"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration==\"number\"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue=\"fx\";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b===\"auto\"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?\"\":\"px\"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,\"fxshow\"+e.prop)===b&&f._data(e.elem,\"fxshow\"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,\"fxshow\"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each([\"\",\"X\",\"Y\"],function(a,b){h.style[\"overflow\"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,\"fxshow\"+b,!0),f.removeData(h,\"toggle\"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,\"opacity\",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each([\"width\",\"height\"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;\"getBoundingClientRect\"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position===\"fixed\")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!==\"visible\"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position===\"relative\"||k.position===\"static\")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position===\"fixed\"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,\"marginTop\"))||0,c+=parseFloat(f.css(a,\"marginLeft\"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,\"position\");d===\"static\"&&(a.style.position=\"relative\");var e=f(a),g=e.offset(),h=f.css(a,\"top\"),i=f.css(a,\"left\"),j=(d===\"absolute\"||d===\"fixed\")&&f.inArray(\"auto\",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),\"using\"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,\"marginTop\"))||0,c.left-=parseFloat(f.css(a,\"marginLeft\"))||0,d.top+=parseFloat(f.css(b[0],\"borderTopWidth\"))||0,d.left+=parseFloat(f.css(b[0],\"borderLeftWidth\"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,\"position\")===\"static\")a=a.offsetParent;return a})}}),f.each([\"Left\",\"Top\"],function(a,c){var d=\"scroll\"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?\"pageXOffset\"in g?g[a?\"pageYOffset\":\"pageXOffset\"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each([\"Height\",\"Width\"],function(a,c){var d=c.toLowerCase();f.fn[\"inner\"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,\"padding\")):this[d]():null},f.fn[\"outer\"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?\"margin\":\"border\")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement[\"client\"+c],h=e.document.body;return e.document.compatMode===\"CSS1Compat\"&&g||h&&h[\"client\"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement[\"client\"+c],e.body[\"scroll\"+c],e.documentElement[\"scroll\"+c],e.body[\"offset\"+c],e.documentElement[\"offset\"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a==\"string\"?a:a+\"px\")}}),a.jQuery=a.$=f,typeof define==\"function\"&&define.amd&&define.amd.jQuery&&define(\"jquery\",[],function(){return f})})(window);","// import {isMac} from '../../common/browser.js';\n// if (isMac() && !window.opera) 'Ctrl+' 'Cmd+'\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n :host(:hover) :not(.disabled)\n {\n background-color: var(--icon-bg-color-hover);\n }\n div\n {\n height: 24px;\n width: 24px;\n margin: 2px 1px 4px;\n padding: 3px;\n background-color: var(--icon-bg-color);\n cursor: pointer;\n border-radius: 3px;\n }\n .small {\n width: 14px;\n height: 14px;\n padding: 1px;\n border-radius: 1px;\n }\n img {\n border: none;\n width: 100%;\n height: 100%;\n }\n .pressed {\n background-color: var(--icon-bg-color-hover);\n }\n .disabled {\n opacity: 0.3;\n cursor: default;\n }\n </style>\n <div title=\"title\">\n <img src=\"./images/logo.svg\" alt=\"icon\">\n </div>\n`;\n/**\n * @class ToolButton\n */\nexport class ToolButton extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n // locate the component\n this.$div = this._shadowRoot.querySelector('div');\n this.$img = this._shadowRoot.querySelector('img');\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['title', 'src', 'pressed', 'disabled', 'size', 'style'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'title':\n {\n const shortcut = this.getAttribute('shortcut');\n this.$div.setAttribute('title', `${newValue} ${shortcut ? `[${shortcut}]` : ''}`);\n }\n break;\n case 'style':\n this.$div.style = newValue;\n break;\n case 'src':\n this.$img.setAttribute('src', newValue);\n break;\n case 'pressed':\n if (newValue) {\n this.$div.classList.add('pressed');\n } else {\n this.$div.classList.remove('pressed');\n }\n break;\n case 'size':\n if (newValue === 'small') {\n this.$div.classList.add('small');\n } else {\n this.$div.classList.remove('small');\n }\n break;\n case 'disabled':\n if (newValue) {\n this.$div.classList.add('disabled');\n } else {\n this.$div.classList.remove('disabled');\n }\n break;\n default:\n // eslint-disable-next-line no-console\n console.error(`unknown attribute: ${name}`);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get title () {\n return this.getAttribute('title');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set title (value) {\n this.setAttribute('title', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get pressed () {\n return this.hasAttribute('pressed');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set pressed (value) {\n // boolean value => existence = true\n if (value) {\n this.setAttribute('pressed', 'true');\n } else {\n this.removeAttribute('pressed', '');\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get disabled () {\n return this.hasAttribute('disabled');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set disabled (value) {\n // boolean value => existence = true\n if (value) {\n this.setAttribute('disabled', 'true');\n } else {\n this.removeAttribute('disabled', '');\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get src () {\n return this.getAttribute('src');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set src (value) {\n this.setAttribute('src', value);\n }\n\n /**\n * @function get\n * @returns {any}\n */\n get size () {\n return this.getAttribute('size');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set size (value) {\n this.setAttribute('size', value);\n }\n\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n // capture shortcuts\n const shortcut = this.getAttribute('shortcut');\n if (shortcut) {\n // register the keydown event\n document.addEventListener('keydown', (e) => {\n // only track keyboard shortcuts for the body containing the SVG-Editor\n if (e.target.nodeName !== 'BODY') return;\n // normalize key\n const key = `${(e.metaKey) ? 'meta+' : ''}${(e.ctrlKey) ? 'ctrl+' : ''}${e.key.toUpperCase()}`;\n if (shortcut !== key) return;\n // launch the click event\n this.click();\n e.preventDefault();\n });\n }\n }\n}\n\n// Register\ncustomElements.define('se-button', ToolButton);\n","const template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n :host {\n position:relative;\n }\n .overall:hover *\n {\n background-color: var(--icon-bg-color-hover);\n }\n img {\n border: none;\n width: 24px;\n height: 24px;\n }\n .overall.pressed .button-icon,\n .overall.pressed .handle {\n background-color: var(--icon-bg-color-hover) !important;\n }\n .overall.pressed .menu-button {\n background-color: var(--icon-bg-color-hover) !important;\n }\n .disabled {\n opacity: 0.3;\n cursor: default;\n }\n .menu-button {\n height: 24px;\n width: 24px;\n margin: 2px 1px 4px;\n padding: 3px;\n background-color: var(--icon-bg-color);\n cursor: pointer;\n position: relative;\n border-radius: 3px;\n overflow: hidden;\n }\n .handle {\n height: 8px;\n width: 8px;\n background-image: url(./images/handle.svg);\n position:absolute;\n bottom: 0px;\n right: 0px;\n }\n .button-icon {\n }\n .menu {\n position: absolute;\n top:-2px;\n left:32px;\n background: none !important;\n display:none;\n }\n .open {\n display: flex;\n }\n .menu-item {\n align-content: flex-start;\n height: 24px;\n width: 24px;\n top:0px;\n left:0px;\n }\n .overall {\n background: none !important;\n }\n </style>\n\n <div class=\"overall\">\n <div class=\"menu-button\">\n <img class=\"button-icon\" src=\"./images/logo.svg\" alt=\"icon\">\n <div class=\"handle\"></div>\n </div>\n <div class=\"menu\">\n <slot></slot>\n </div>\n </div>\n\n`;\n/**\n * @class FlyingButton\n */\nexport class FlyingButton extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n // locate the component\n this.$button = this._shadowRoot.querySelector('.menu-button');\n this.$handle = this._shadowRoot.querySelector('.handle');\n this.$overall = this._shadowRoot.querySelector('.overall');\n this.$img = this._shadowRoot.querySelector('img');\n this.$menu = this._shadowRoot.querySelector('.menu');\n // the last element of the div is the slot\n // we retrieve all elements added in the slot (i.e. se-buttons)\n this.$elements = this.$menu.lastElementChild.assignedElements();\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['title', 'pressed', 'disabled', 'opened'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'title':\n {\n const shortcut = this.getAttribute('shortcut');\n this.$button.setAttribute('title', `${newValue} [${shortcut}]`);\n }\n break;\n case 'pressed':\n if (newValue) {\n this.$overall.classList.add('pressed');\n } else {\n this.$overall.classList.remove('pressed');\n }\n break;\n case 'opened':\n if (newValue) {\n this.$menu.classList.add('open');\n } else {\n this.$menu.classList.remove('open');\n }\n break;\n case 'disabled':\n if (newValue) {\n this.$div.classList.add('disabled');\n } else {\n this.$div.classList.remove('disabled');\n }\n break;\n default:\n // eslint-disable-next-line no-console\n console.error(`unknown attribute: ${name}`);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get title () {\n return this.getAttribute('title');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set title (value) {\n this.setAttribute('title', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get pressed () {\n return this.hasAttribute('pressed');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set pressed (value) {\n // boolean value => existence = true\n if (value) {\n this.setAttribute('pressed', 'true');\n } else {\n this.removeAttribute('pressed', '');\n // close also the menu if open\n this.removeAttribute('opened');\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get opened () {\n return this.hasAttribute('opened');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set opened (value) {\n // boolean value => existence = true\n if (value) {\n this.setAttribute('opened', 'opened');\n } else {\n this.removeAttribute('opened');\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get disabled () {\n return this.hasAttribute('disabled');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set disabled (value) {\n // boolean value => existence = true\n if (value) {\n this.setAttribute('disabled', 'true');\n } else {\n this.removeAttribute('disabled', '');\n }\n }\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n // initialize currentAction with the first slot of the list\n this.activeSlot = this.shadowRoot.querySelector('slot').assignedElements()[0];\n this.$img.setAttribute('src', this.activeSlot.getAttribute('src'));\n // capture click event on the button to manage the logic\n const onClickHandler = (ev) => {\n ev.stopPropagation();\n switch (ev.target.nodeName) {\n case 'SE-FLYINGBUTTON':\n if (this.pressed) {\n this.setAttribute('opened', 'opened');\n } else {\n // launch current action\n this.activeSlot.click();\n this.setAttribute('pressed', 'pressed');\n }\n break;\n case 'SE-BUTTON':\n // change to the current action\n this.$img.setAttribute('src', ev.target.getAttribute('src'));\n this.activeSlot = ev.target;\n this.setAttribute('pressed', 'pressed');\n // and close the menu\n this.$menu.classList.remove('open');\n break;\n case 'DIV':\n // this is a click on the handle so let's open/close the menu.\n if (this.opened) {\n this.removeAttribute('opened');\n } else {\n this.setAttribute('opened', 'opened');\n }\n break;\n default:\n // eslint-disable-next-line no-console\n console.error('unkonw nodeName for:', ev.target, ev.target.className);\n }\n };\n // capture event from slots\n this.addEventListener('click', onClickHandler);\n this.$handle.addEventListener('click', onClickHandler);\n }\n}\n\n// Register\ncustomElements.define('se-flyingbutton', FlyingButton);\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return nativeGetOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar isSymbol = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPrimitive(P, true);\n anObject(Attributes);\n if (has(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPrimitive(V, true);\n var enumerable = nativePropertyIsEnumerable.call(this, P);\n if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPrimitive(P, true);\n if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n result.push(AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = String(key);\n if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = [it];\n var index = 1;\n var $replacer;\n while (arguments.length > index) args.push(arguments[index++]);\n $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return $stringify.apply(null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar has = require('../internals/has');\nvar isObject = require('../internals/is-object');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\n\nif (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);\n var result = this instanceof SymbolWrapper\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;\n symbolPrototype.constructor = SymbolWrapper;\n\n var symbolToString = symbolPrototype.toString;\n var native = String(NativeSymbol('test')) == 'Symbol(test)';\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n defineProperty(symbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = isObject(this) ? this.valueOf() : this;\n var string = symbolToString.call(symbol);\n if (has(EmptyStringDescriptionStore, symbol)) return '';\n var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar fails = require('../internals/fails');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","module.exports = {};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: String(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n}\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n","var setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\n$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {\n forEach: forEach\n});\n","var $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n setPrototypeOf: setPrototypeOf\n});\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var anObject = require('../internals/an-object');\n\nmodule.exports = function (iterator) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) {\n return anObject(returnMethod.call(iterator)).value;\n }\n};\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar location = global.location;\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\n\nvar run = function (id) {\n // eslint-disable-next-line no-prototype-builtins -- safe\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(id + '', location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func -- spec requirement\n (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n typeof postMessage == 'function' &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n then = promise.then;\n notify = function () {\n then.call(promise, flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar isObject = require('../internals/is-object');\nvar aFunction = require('../internals/a-function');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar PromiseConstructor = NativePromise;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar $fetch = getBuiltIn('fetch');\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);\n if (!GLOBAL_CORE_JS_PROMISE) {\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (V8_VERSION === 66) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n if (!IS_NODE && !NATIVE_REJECTION_EVENT) return true;\n }\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromiseConstructor.prototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = PromiseConstructor.resolve(1);\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n return !(promise.then(function () { /* empty */ }) instanceof FakePromise);\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n then.call(value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromiseConstructor, PROMISE);\n aFunction(executor);\n Internal.call(this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromiseConstructor.prototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n state.reactions.push(reaction);\n if (state.state != PENDING) notify(state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && typeof NativePromise == 'function') {\n nativeThen = NativePromise.prototype.then;\n\n // wrap native Promise#then for native async functions\n redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n nativeThen.call(that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // wrap fetch result\n if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n fetch: function fetch(input /* , init */) {\n return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));\n }\n });\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n capability.reject.call(undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n $promiseResolve.call(C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n iterate(iterable, function (promise) {\n $promiseResolve.call(C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n }\n};\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\n result.push(TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","/* eslint-disable no-unsanitized/property */\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n :host {\n position:relative;\n }\n .menu-button:hover, se-button:hover, .menu-item:hover\n {\n background-color: var(--icon-bg-color-hover);\n }\n img {\n border: none;\n width: 24px;\n height: 24px;\n }\n .overall.pressed .button-icon,\n .overall.pressed,\n .menu-item.pressed {\n background-color: var(--icon-bg-color-hover) !important;\n }\n .overall.pressed .menu-button {\n background-color: var(--icon-bg-color-hover) !important;\n }\n .disabled {\n opacity: 0.3;\n cursor: default;\n }\n .menu-button {\n height: 24px;\n width: 24px;\n margin: 2px 1px 4px;\n padding: 3px;\n background-color: var(--icon-bg-color);\n cursor: pointer;\n position: relative;\n border-radius: 3px;\n overflow: hidden;\n }\n .handle {\n height: 8px;\n width: 8px;\n background-image: url(./images/handle.svg);\n position:absolute;\n bottom: 0px;\n right: 0px;\n }\n .button-icon {\n }\n .menu {\n position: absolute;\n top:0px;\n left:204px;\n background: none !important;\n display:none;\n }\n .image-lib {\n position: absolute;\n top: 0px;\n left:34px;\n background: #E8E8E8;\n display: none;\n flex-wrap: wrap;\n flex-direction: row;\n width: 170px;\n }\n .menu-item {\n line-height: 1em;\n padding: 0.5em;\n border: 1px solid #B0B0B0;\n background: #E8E8E8;\n margin-bottom: -1px;\n white-space: nowrap;\n }\n .open-lib {\n display: inline-flex;\n }\n .open {\n display: block;\n }\n .overall {\n background: none !important;\n }\n </style>\n\n <div class=\"overall\">\n <div class=\"menu-button\">\n <img class=\"button-icon\" src=\"./images/logo.svg\" alt=\"icon\">\n <div class=\"handle\"></div>\n </div>\n <div class=\"image-lib\"\">\n <se-button></se-button>\n </div>\n <div class=\"menu\">\n <div class=\"menu-item\">menu</div>\n </div>\n </div>\n\n`;\n/**\n * @class ExplorerButton\n */\nexport class ExplorerButton extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n // locate the component\n this.$button = this._shadowRoot.querySelector('.menu-button');\n this.$overall = this._shadowRoot.querySelector('.overall');\n this.$img = this._shadowRoot.querySelector('.menu-button img');\n this.$menu = this._shadowRoot.querySelector('.menu');\n this.$handle = this._shadowRoot.querySelector('.handle');\n this.$lib = this._shadowRoot.querySelector('.image-lib');\n this.files = [];\n this.request = new XMLHttpRequest();\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['title', 'pressed', 'disabled', 'lib', 'src'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n async attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'title':\n {\n const shortcut = this.getAttribute('shortcut');\n this.$button.setAttribute('title', `${newValue} [${shortcut}]`);\n }\n break;\n case 'pressed':\n if (newValue) {\n this.$overall.classList.add('pressed');\n } else {\n this.$overall.classList.remove('pressed');\n }\n break;\n case 'disabled':\n if (newValue) {\n this.$div.classList.add('disabled');\n } else {\n this.$div.classList.remove('disabled');\n }\n break;\n case 'lib':\n try {\n const response = await fetch(`${newValue}index.json`);\n const json = await response.json();\n const {lib} = json;\n this.$menu.innerHTML = lib.map((menu, i) => (\n `<div data-menu=\"${menu}\" class=\"menu-item ${(i === 0) ? 'pressed' : ''} \">${menu}</div>`\n )).join('');\n await this.updateLib(lib[0]);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n break;\n case 'src':\n this.$img.setAttribute('src', newValue);\n break;\n default:\n // eslint-disable-next-line no-console\n console.error(`unknown attribute: ${name}`);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get title () {\n return this.getAttribute('title');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set title (value) {\n this.setAttribute('title', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get pressed () {\n return this.hasAttribute('pressed');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set pressed (value) {\n // boolean value => existence = true\n if (value) {\n this.setAttribute('pressed', 'true');\n } else {\n this.removeAttribute('pressed', '');\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get disabled () {\n return this.hasAttribute('disabled');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set disabled (value) {\n // boolean value => existence = true\n if (value) {\n this.setAttribute('disabled', 'true');\n } else {\n this.removeAttribute('disabled', '');\n }\n }\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n // capture click event on the button to manage the logic\n const onClickHandler = (ev) => {\n ev.stopPropagation();\n switch (ev.target.nodeName) {\n case 'SE-EXPLORERBUTTON':\n this.$menu.classList.add('open');\n this.$lib.classList.add('open-lib');\n break;\n case 'SE-BUTTON':\n // change to the current action\n this.currentAction = ev.target;\n this.$img.setAttribute('src', this.currentAction.getAttribute('src'));\n this.dataset.draw = this.data[this.currentAction.dataset.shape];\n this._shadowRoot.querySelectorAll('.image-lib [pressed]').forEach((b) => { b.pressed = false; });\n this.currentAction.setAttribute('pressed', 'pressed');\n // and close the menu\n this.$menu.classList.remove('open');\n this.$lib.classList.remove('open-lib');\n break;\n case 'DIV':\n if (ev.target.classList[0] === 'handle') {\n // this is a click on the handle so let's open/close the menu.\n this.$menu.classList.toggle('open');\n this.$lib.classList.toggle('open-lib');\n } else {\n this._shadowRoot.querySelectorAll('.menu > .pressed').forEach((b) => { b.classList.remove('pressed'); });\n ev.target.classList.add('pressed');\n this.updateLib(ev.target.dataset.menu);\n }\n break;\n default:\n // eslint-disable-next-line no-console\n console.error('unknown nodeName for:', ev.target, ev.target.className);\n }\n };\n // capture event from slots\n this.addEventListener('click', onClickHandler);\n this.$menu.addEventListener('click', onClickHandler);\n this.$lib.addEventListener('click', onClickHandler);\n this.$handle.addEventListener('click', onClickHandler);\n }\n /**\n * @function updateLib\n * @param {string} lib\n * @returns {void}\n */\n async updateLib (lib) {\n const libDir = this.getAttribute('lib');\n try {\n // initialize buttons for all shapes defined for this library\n const response = await fetch(`${libDir}${lib}.json`);\n const json = await response.json();\n this.data = json.data;\n const size = json.size ?? 300;\n const fill = json.fill ? '#333' : 'none';\n const off = size * 0.05;\n const vb = [-off, -off, size + off * 2, size + off * 2].join(' ');\n const stroke = json.fill ? 0 : (size / 30);\n this.$lib.innerHTML = Object.entries(this.data).map(([key, path]) => {\n const encoded = btoa(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\n <svg viewBox=\"${vb}\"><path fill=\"${fill}\" stroke=\"#000\" stroke-width=\"${stroke}\" d=\"${path}\"></path></svg>\n </svg>`);\n return `<se-button data-shape=\"${key}\"src=\"data:image/svg+xml;base64,${encoded}\"></se-button>`;\n }).join('');\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`could not read file:${libDir}${lib}.json`, error);\n }\n }\n}\n\n// Register\ncustomElements.define('se-explorerbutton', ExplorerButton);\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n /* global Symbol -- required for testing */\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : nativeAssign;\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n result = new C();\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n for (; delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\n// eslint-disable-next-line max-statements -- TODO\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n for (var k = base; /* no condition */; k += base) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n return output.join('');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\n }\n return encoded.join('.');\n};\n","var anObject = require('../internals/an-object');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = function (it) {\n var iteratorMethod = getIteratorMethod(it);\n if (typeof iteratorMethod != 'function') {\n throw TypeError(String(it) + ' is not iterable');\n } return anObject(iteratorMethod.call(it));\n};\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $fetch = getBuiltIn('fetch');\nvar Headers = getBuiltIn('Headers');\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n try {\n return decodeURIComponent(sequence);\n } catch (error) {\n return sequence;\n }\n};\n\nvar deserialize = function (it) {\n var result = it.replace(plus, ' ');\n var bytes = 4;\n try {\n return decodeURIComponent(result);\n } catch (error) {\n while (bytes) {\n result = result.replace(percentSequence(bytes--), percentDecode);\n }\n return result;\n }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replace = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n};\n\nvar replacer = function (match) {\n return replace[match];\n};\n\nvar serialize = function (it) {\n return encodeURIComponent(it).replace(find, replacer);\n};\n\nvar parseSearchParams = function (result, query) {\n if (query) {\n var attributes = query.split('&');\n var index = 0;\n var attribute, entry;\n while (index < attributes.length) {\n attribute = attributes[index++];\n if (attribute.length) {\n entry = attribute.split('=');\n result.push({\n key: deserialize(entry.shift()),\n value: deserialize(entry.join('='))\n });\n }\n }\n }\n};\n\nvar updateSearchParams = function (query) {\n this.entries.length = 0;\n parseSearchParams(this.entries, query);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n setInternalState(this, {\n type: URL_SEARCH_PARAMS_ITERATOR,\n iterator: getIterator(getInternalParamsState(params).entries),\n kind: kind\n });\n}, 'Iterator', function next() {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var step = state.iterator.next();\n var entry = step.value;\n if (!step.done) {\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n } return step;\n});\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n var init = arguments.length > 0 ? arguments[0] : undefined;\n var that = this;\n var entries = [];\n var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\n\n setInternalState(that, {\n type: URL_SEARCH_PARAMS,\n entries: entries,\n updateURL: function () { /* empty */ },\n updateSearchParams: updateSearchParams\n });\n\n if (init !== undefined) {\n if (isObject(init)) {\n iteratorMethod = getIteratorMethod(init);\n if (typeof iteratorMethod === 'function') {\n iterator = iteratorMethod.call(init);\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n entryIterator = getIterator(anObject(step.value));\n entryNext = entryIterator.next;\n if (\n (first = entryNext.call(entryIterator)).done ||\n (second = entryNext.call(entryIterator)).done ||\n !entryNext.call(entryIterator).done\n ) throw TypeError('Expected sequence with length 2');\n entries.push({ key: first.value + '', value: second.value + '' });\n }\n } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' });\n } else {\n parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');\n }\n }\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n // `URLSearchParams.prototype.append` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n append: function append(name, value) {\n validateArgumentsLength(arguments.length, 2);\n var state = getInternalParamsState(this);\n state.entries.push({ key: name + '', value: value + '' });\n state.updateURL();\n },\n // `URLSearchParams.prototype.delete` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n 'delete': function (name) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var key = name + '';\n var index = 0;\n while (index < entries.length) {\n if (entries[index].key === key) entries.splice(index, 1);\n else index++;\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.get` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n get: function get(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) return entries[index].value;\n }\n return null;\n },\n // `URLSearchParams.prototype.getAll` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n getAll: function getAll(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var result = [];\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) result.push(entries[index].value);\n }\n return result;\n },\n // `URLSearchParams.prototype.has` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n has: function has(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var index = 0;\n while (index < entries.length) {\n if (entries[index++].key === key) return true;\n }\n return false;\n },\n // `URLSearchParams.prototype.set` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n set: function set(name, value) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var found = false;\n var key = name + '';\n var val = value + '';\n var index = 0;\n var entry;\n for (; index < entries.length; index++) {\n entry = entries[index];\n if (entry.key === key) {\n if (found) entries.splice(index--, 1);\n else {\n found = true;\n entry.value = val;\n }\n }\n }\n if (!found) entries.push({ key: key, value: val });\n state.updateURL();\n },\n // `URLSearchParams.prototype.sort` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n sort: function sort() {\n var state = getInternalParamsState(this);\n var entries = state.entries;\n // Array#sort is not stable in some engines\n var slice = entries.slice();\n var entry, entriesIndex, sliceIndex;\n entries.length = 0;\n for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\n entry = slice[sliceIndex];\n for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\n if (entries[entriesIndex].key > entry.key) {\n entries.splice(entriesIndex, 0, entry);\n break;\n }\n }\n if (entriesIndex === sliceIndex) entries.push(entry);\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.forEach` method\n forEach: function forEach(callback /* , thisArg */) {\n var entries = getInternalParamsState(this).entries;\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n boundFunction(entry.value, entry.key, this);\n }\n },\n // `URLSearchParams.prototype.keys` method\n keys: function keys() {\n return new URLSearchParamsIterator(this, 'keys');\n },\n // `URLSearchParams.prototype.values` method\n values: function values() {\n return new URLSearchParamsIterator(this, 'values');\n },\n // `URLSearchParams.prototype.entries` method\n entries: function entries() {\n return new URLSearchParamsIterator(this, 'entries');\n }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n var entries = getInternalParamsState(this).entries;\n var result = [];\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n result.push(serialize(entry.key) + '=' + serialize(entry.value));\n } return result.join('&');\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` for correct work with polyfilled `URLSearchParams`\n// https://github.com/zloirock/core-js/issues/674\nif (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {\n $({ global: true, enumerable: true, forced: true }, {\n fetch: function fetch(input /* , init */) {\n var args = [input];\n var init, body, headers;\n if (arguments.length > 1) {\n init = arguments[1];\n if (isObject(init)) {\n body = init.body;\n if (classof(body) === URL_SEARCH_PARAMS) {\n headers = init.headers ? new Headers(init.headers) : new Headers();\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n init = create(init, {\n body: createPropertyDescriptor(0, String(body)),\n headers: createPropertyDescriptor(0, headers)\n });\n }\n }\n args.push(init);\n } return $fetch.apply(this, args);\n }\n });\n}\n\nmodule.exports = {\n URLSearchParams: URLSearchParamsConstructor,\n getState: getInternalParamsState\n};\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar defineProperties = require('../internals/object-define-properties');\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar has = require('../internals/has');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar URLSearchParamsModule = require('../modules/web.url-search-params');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar NativeURL = global.URL;\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar floor = Math.floor;\nvar pow = Math.pow;\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[A-Za-z]/;\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\nvar DIGIT = /\\d/;\nvar HEX_START = /^(0x|0X)/;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\dA-Fa-f]+$/;\n/* eslint-disable no-control-regex -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\u0000\\t\\u000A\\u000D #%/:?@[\\\\]]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\u0000\\t\\u000A\\u000D #/:?@[\\\\]]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\u000A\\u000D]/g;\n/* eslint-enable no-control-regex -- safe */\nvar EOF;\n\nvar parseHost = function (url, input) {\n var result, codePoints, index;\n if (input.charAt(0) == '[') {\n if (input.charAt(input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(input.slice(1, -1));\n if (!result) return INVALID_HOST;\n url.host = result;\n // opaque host\n } else if (!isSpecial(url)) {\n if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n url.host = result;\n } else {\n input = toASCII(input);\n if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n url.host = result;\n }\n};\n\nvar parseIPv4 = function (input) {\n var parts = input.split('.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.pop();\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && part.charAt(0) == '0') {\n radix = HEX_START.test(part) ? 16 : 8;\n part = part.slice(radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;\n number = parseInt(part, radix);\n }\n numbers.push(number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = numbers.pop();\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var char = function () {\n return input.charAt(pointer);\n };\n\n if (char() == ':') {\n if (input.charAt(1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (char()) {\n if (pieceIndex == 8) return;\n if (char() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && HEX.test(char())) {\n value = value * 16 + parseInt(char(), 16);\n pointer++;\n length++;\n }\n if (char() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (char()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (char() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!DIGIT.test(char())) return;\n while (DIGIT.test(char())) {\n number = parseInt(char(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (char() == ':') {\n pointer++;\n if (!char()) return;\n } else if (char()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n result.unshift(host % 256);\n host = floor(host / 256);\n } return result.join('.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += host[index].toString(16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (char, set) {\n var code = codeAt(char, 0);\n return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\n};\n\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\nvar isSpecial = function (url) {\n return has(specialSchemes, url.scheme);\n};\n\nvar includesCredentials = function (url) {\n return url.username != '' || url.password != '';\n};\n\nvar cannotHaveUsernamePasswordPort = function (url) {\n return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\n};\n\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && ALPHA.test(string.charAt(0))\n && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));\n};\n\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (\n string.length == 2 ||\n ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\nvar shortenURLsPath = function (url) {\n var path = url.path;\n var pathSize = path.length;\n if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.pop();\n }\n};\n\nvar isSingleDot = function (segment) {\n return segment === '.' || segment.toLowerCase() === '%2e';\n};\n\nvar isDoubleDot = function (segment) {\n segment = segment.toLowerCase();\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\n// eslint-disable-next-line max-statements -- TODO\nvar parseURL = function (url, input, stateOverride, base) {\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, char, bufferCodePoints, failure;\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = input.replace(TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n char = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (char && ALPHA.test(char)) {\n buffer += char.toLowerCase();\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\n buffer += char.toLowerCase();\n } else if (char == ':') {\n if (stateOverride && (\n (isSpecial(url) != has(specialSchemes, buffer)) ||\n (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (isSpecial(url) && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (isSpecial(url)) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n url.path.push('');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && char == '#') {\n url.scheme = base.scheme;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (char == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (char == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (char == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '/' || (char == '\\\\' && isSpecial(url))) {\n state = RELATIVE_SLASH;\n } else if (char == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.path.pop();\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (isSpecial(url) && (char == '/' || char == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (char == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (char != '/' && char != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (char == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += char;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (char == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (isSpecial(url) && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (char == '[') seenBracket = true;\n else if (char == ']') seenBracket = false;\n buffer += char;\n } break;\n\n case PORT:\n if (DIGIT.test(char)) {\n buffer += char;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url)) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (char == '/' || char == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (char == EOF) {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '?') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n url.host = base.host;\n url.path = base.path.slice();\n shortenURLsPath(url);\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (char == '/' || char == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = parseHost(url, buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += char;\n break;\n\n case PATH_START:\n if (isSpecial(url)) {\n state = PATH;\n if (char != '/' && char != '\\\\') continue;\n } else if (!stateOverride && char == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n state = PATH;\n if (char != '/') continue;\n } break;\n\n case PATH:\n if (\n char == EOF || char == '/' ||\n (char == '\\\\' && isSpecial(url)) ||\n (!stateOverride && (char == '?' || char == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n shortenURLsPath(url);\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else if (isSingleDot(buffer)) {\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = buffer.charAt(0) + ':'; // normalize windows drive letter\n }\n url.path.push(buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n url.path.shift();\n }\n }\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(char, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n if (char == \"'\" && isSpecial(url)) url.query += '%27';\n else if (char == '#') url.query += '%23';\n else url.query += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLConstructor, 'URL');\n var base = arguments.length > 1 ? arguments[1] : undefined;\n var urlString = String(url);\n var state = setInternalState(that, { type: 'URL' });\n var baseState, failure;\n if (base !== undefined) {\n if (base instanceof URLConstructor) baseState = getInternalURLState(base);\n else {\n failure = parseURL(baseState = {}, String(base));\n if (failure) throw TypeError(failure);\n }\n }\n failure = parseURL(state, urlString, null, baseState);\n if (failure) throw TypeError(failure);\n var searchParams = state.searchParams = new URLSearchParams();\n var searchParamsState = getInternalSearchParamsState(searchParams);\n searchParamsState.updateSearchParams(state.query);\n searchParamsState.updateURL = function () {\n state.query = String(searchParams) || null;\n };\n if (!DESCRIPTORS) {\n that.href = serializeURL.call(that);\n that.origin = getOrigin.call(that);\n that.protocol = getProtocol.call(that);\n that.username = getUsername.call(that);\n that.password = getPassword.call(that);\n that.host = getHost.call(that);\n that.hostname = getHostname.call(that);\n that.port = getPort.call(that);\n that.pathname = getPathname.call(that);\n that.search = getSearch.call(that);\n that.searchParams = getSearchParams.call(that);\n that.hash = getHash.call(that);\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar serializeURL = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (includesCredentials(url)) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n};\n\nvar getOrigin = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var port = url.port;\n if (scheme == 'blob') try {\n return new URL(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !isSpecial(url)) return 'null';\n return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\n};\n\nvar getProtocol = function () {\n return getInternalURLState(this).scheme + ':';\n};\n\nvar getUsername = function () {\n return getInternalURLState(this).username;\n};\n\nvar getPassword = function () {\n return getInternalURLState(this).password;\n};\n\nvar getHost = function () {\n var url = getInternalURLState(this);\n var host = url.host;\n var port = url.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n};\n\nvar getHostname = function () {\n var host = getInternalURLState(this).host;\n return host === null ? '' : serializeHost(host);\n};\n\nvar getPort = function () {\n var port = getInternalURLState(this).port;\n return port === null ? '' : String(port);\n};\n\nvar getPathname = function () {\n var url = getInternalURLState(this);\n var path = url.path;\n return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n};\n\nvar getSearch = function () {\n var query = getInternalURLState(this).query;\n return query ? '?' + query : '';\n};\n\nvar getSearchParams = function () {\n return getInternalURLState(this).searchParams;\n};\n\nvar getHash = function () {\n var fragment = getInternalURLState(this).fragment;\n return fragment ? '#' + fragment : '';\n};\n\nvar accessorDescriptor = function (getter, setter) {\n return { get: getter, set: setter, configurable: true, enumerable: true };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor(serializeURL, function (href) {\n var url = getInternalURLState(this);\n var urlString = String(href);\n var failure = parseURL(url, urlString);\n if (failure) throw TypeError(failure);\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor(getOrigin),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor(getProtocol, function (protocol) {\n var url = getInternalURLState(this);\n parseURL(url, String(protocol) + ':', SCHEME_START);\n }),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor(getUsername, function (username) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom(String(username));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor(getPassword, function (password) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom(String(password));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor(getHost, function (host) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, String(host), HOST);\n }),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor(getHostname, function (hostname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, String(hostname), HOSTNAME);\n }),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor(getPort, function (port) {\n var url = getInternalURLState(this);\n if (cannotHaveUsernamePasswordPort(url)) return;\n port = String(port);\n if (port == '') url.port = null;\n else parseURL(url, port, PORT);\n }),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor(getPathname, function (pathname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n url.path = [];\n parseURL(url, pathname + '', PATH_START);\n }),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor(getSearch, function (search) {\n var url = getInternalURLState(this);\n search = String(search);\n if (search == '') {\n url.query = null;\n } else {\n if ('?' == search.charAt(0)) search = search.slice(1);\n url.query = '';\n parseURL(url, search, QUERY);\n }\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor(getSearchParams),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor(getHash, function (hash) {\n var url = getInternalURLState(this);\n hash = String(hash);\n if (hash == '') {\n url.fragment = null;\n return;\n }\n if ('#' == hash.charAt(0)) hash = hash.slice(1);\n url.fragment = '';\n parseURL(url, hash, FRAGMENT);\n })\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\n return nativeCreateObjectURL.apply(NativeURL, arguments);\n });\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\n return nativeRevokeObjectURL.apply(NativeURL, arguments);\n });\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","// `SameValue` abstract operation\n// https://tc39.es/ecma262/#sec-samevalue\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar sameValue = require('../internals/same-value');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@search logic\nfixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.es/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = requireObjectCoercible(this);\n var searcher = regexp == undefined ? undefined : regexp[SEARCH];\n return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative(nativeSearch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","/**\n * Collection of shared Symbol objects for internal component communication.\n *\n * The shared `Symbol` objects in this module let mixins and a component\n * internally communicate without exposing these internal properties and methods\n * in the component's public API. They also help avoid unintentional name\n * collisions, as a component developer must specifically import the `internal`\n * module and reference one of its symbols.\n *\n * To use these `Symbol` objects in your own component, include this module and\n * then create a property or method whose key is the desired Symbol. E.g.,\n * [ShadowTemplateMixin](ShadowTemplateMixin) expects a component to define\n * a property called [template](#template):\n *\n * import { template } from 'elix/src/core/internal.js';\n * import { templateFrom } from 'elix/src/core/htmlLiterals.js'\n * import ShadowTemplateMixin from 'elix/src/core/ShadowTemplateMixin.js';\n *\n * class MyElement extends ShadowTemplateMixin(HTMLElement) {\n * [template]() {\n * return templateFrom.html`Hello, <em>world</em>.`;\n * }\n * }\n *\n * The above use of the internal `template` member lets the mixin find the\n * component's template in a way that will not pollute the component's public\n * API or interfere with other component logic. For example, if for some reason\n * the component wants to define a separate property with the plain string name,\n * \"template\", it can do so without affecting the above property setter.\n *\n * @module internal\n */\n\n/**\n * Symbol for the default state for this element.\n */\nexport const defaultState = Symbol(\"defaultState\");\n\n/**\n * Symbol for the `delegatesFocus` property.\n *\n * [DelegatesFocusMixin](DelegatesFocusMixin) defines this property, returning\n * true to indicate that the focus is being delegated, even in browsers that\n * don't support that natively. Mixins like [KeyboardMixin](KeyboardMixin) use\n * this to accommodate focus delegation.\n */\nexport const delegatesFocus = Symbol(\"delegatesFocus\");\n\n/**\n * Symbol for the `firstRender` property.\n *\n * [ReactiveMixin](ReactiveMixin) sets the property to `true` during the\n * element's first `render` and `rendered` callback, then `false` in subsequent\n * callbacks.\n *\n * You can inspect this property in your own `rendered` callback handler to do\n * work like wiring up events that should only happen once.\n */\nexport const firstRender = Symbol(\"firstRender\");\n\n/**\n * Symbol for the `focusTarget` property.\n *\n * [DelegatesFocusMixin](DelegatesFocusMixin) defines this property as either:\n * 1) the element itself, in browsers that support native focus delegation or,\n * 2) the shadow root's first focusable element.\n */\nexport const focusTarget = Symbol(\"focusTarget\");\n\n/**\n * Symbol for the `hasDynamicTemplate` property.\n *\n * If your component class does not always use the same template, define a\n * static class property getter with this symbol and have it return `true`.\n * This will disable template caching for your component.\n */\nexport const hasDynamicTemplate = Symbol(\"hasDynamicTemplate\");\n\n/**\n * Symbol for the `ids` property.\n *\n * [ShadowTemplateMixin](ShadowTemplateMixin) defines a shorthand function\n * `internal.ids` that can be used to obtain a reference to a shadow element with\n * a given ID.\n *\n * Example: if component's template contains a shadow element\n * `<button id=\"foo\">`, you can use the reference `this[ids].foo` to obtain\n * the corresponding button in the component instance's shadow tree.\n * The `ids` function is simply a shorthand for `getElementById`, so\n * `this[ids].foo` is the same as `this.shadowRoot.getElementById('foo')`.\n */\nexport const ids = Symbol(\"ids\");\n\n/**\n * Symbol for access to native HTML element internals.\n */\nexport const nativeInternals = Symbol(\"nativeInternals\");\n\n/**\n * Symbol for the `raiseChangeEvents` property.\n *\n * This property is used by mixins to determine whether they should raise\n * property change events. The standard HTML pattern is to only raise such\n * events in response to direct user interactions. For a detailed discussion\n * of this point, see the Gold Standard checklist item for\n * [Propery Change Events](https://github.com/webcomponents/gold-standard/wiki/Property%20Change%20Events).\n *\n * The above article describes a pattern for using a flag to track whether\n * work is being performed in response to internal component activity, and\n * whether the component should therefore raise property change events.\n * This `raiseChangeEvents` symbol is a shared flag used for that purpose by\n * all Elix mixins and components. Sharing this flag ensures that internal\n * activity (e.g., a UI event listener) in one mixin can signal other mixins\n * handling affected properties to raise change events.\n *\n * All UI event listeners (and other forms of internal handlers, such as\n * timeouts and async network handlers) should set `raiseChangeEvents` to\n * `true` at the start of the event handler, then `false` at the end:\n *\n * this.addEventListener('click', event => {\n * this[raiseChangeEvents] = true;\n * // Do work here, possibly setting properties, like:\n * this.foo = 'Hello';\n * this[raiseChangeEvents] = false;\n * });\n *\n * Elsewhere, property setters that raise change events should only do so it\n * this property is `true`:\n *\n * set foo(value) {\n * // Save foo value here, do any other work.\n * if (this[raiseChangeEvents]) {\n * export const event = new CustomEvent('foochange');\n * this.dispatchEvent(event);\n * }\n * }\n *\n * In this way, programmatic attempts to set the `foo` property will not trigger\n * the `foochange` event, but UI interactions that update that property will\n * cause those events to be raised.\n */\nexport const raiseChangeEvents = Symbol(\"raiseChangeEvents\");\n\n/**\n * Symbol for the `render` method.\n *\n * [ReactiveMixin](ReactiveMixin) invokes this `internal.render` method to give\n * the component a chance to render recent changes in component state.\n */\nexport const render = Symbol(\"render\");\n\n/**\n * Symbol for the `renderChanges` method.\n *\n * [ReactiveMixin](ReactiveMixin) invokes this method in response to a\n * `setState` call; you should generally not invoke this method yourself.\n */\nexport const renderChanges = Symbol(\"renderChanges\");\n\n/**\n * Symbol for the `rendered` method.\n *\n * [ReactiveMixin](ReactiveMixin) will invoke this method after your\n * element has completely finished rendering.\n *\n * If you only want to do work the first time rendering happens (for example, if\n * you want to wire up event handlers), your `internal.rendered` implementation\n * can inspect the `internal.firstRender` flag.\n */\nexport const rendered = Symbol(\"rendered\");\n\n/**\n * Symbol for the `rendering` property.\n *\n * [ReactiveMixin](ReactiveMixin) sets this property to true during rendering,\n * at other times it will be false.\n */\nexport const rendering = Symbol(\"rendering\");\n\n/**\n * Symbol for the `setState` method.\n *\n * A component using [ReactiveMixin](ReactiveMixin) can invoke this method to\n * apply changes to the element's current state.\n */\nexport const setState = Symbol(\"setState\");\n\n/**\n * Symbol for the `shadowRoot` property.\n *\n * This property holds a reference to an element's shadow root, like\n * `this.shadowRoot`. This propery exists because `this.shadowRoot` is not\n * available for components with closed shadow roots.\n * [ShadowTemplateMixin](ShadowTemplateMixin) creates open shadow roots by\n * default, but you can opt into creating closed shadow roots; see\n * [shadowRootMode](internal#internal.shadowRootMode).\n */\nexport const shadowRoot = Symbol(\"shadowRoot\");\n\n/**\n * Symbol for the `shadowRootMode` property.\n *\n * If true (the default), then [ShadowTemplateMixin](ShadowTemplateMixin) will\n * create an open shadow root when the component is instantiated. Set this to\n * false if you want to programmatically hide component internals in a closed\n * shadow root.\n */\nexport const shadowRootMode = Symbol(\"shadowRootMode\");\n\n/**\n * Symbol for the element's current state.\n *\n * This is managed by [ReactiveMixin](ReactiveMixin).\n */\nexport const state = Symbol(\"state\");\n\n/**\n * Symbol for the `stateEffects` method.\n *\n * See [stateEffects](ReactiveMixin#stateEffects).\n */\nexport const stateEffects = Symbol(\"stateEffects\");\n\n/**\n * Symbol for the `template` method.\n *\n * [ShadowTemplateMixin](ShadowTemplateMixin) uses this property to obtain a\n * component's template, which it will clone into a component's shadow root.\n */\nexport const template = Symbol(\"template\");\n","/**\n * Collection of shared Symbol objects for internal component communication.\n *\n * The shared `Symbol` objects in this module let mixins and a component\n * internally communicate without exposing these internal properties and methods\n * in the component's public API. They also help avoid unintentional name\n * collisions, as a component developer must specifically import the `internal`\n * module and reference one of its symbols.\n *\n * To use these `Symbol` objects in your own component, include this module and\n * then create a property or method whose key is the desired Symbol. E.g.,\n * [ShadowTemplateMixin](ShadowTemplateMixin) expects a component to define\n * a property called [template](#template):\n *\n * import { template } from 'elix/src/core/internal.js';\n * import { templateFrom } from 'elix/src/core/htmlLiterals.js'\n * import ShadowTemplateMixin from 'elix/src/core/ShadowTemplateMixin.js';\n *\n * class MyElement extends ShadowTemplateMixin(HTMLElement) {\n * [template]() {\n * return templateFrom.html`Hello, <em>world</em>.`;\n * }\n * }\n *\n * The above use of the internal `template` member lets the mixin find the\n * component's template in a way that will not pollute the component's public\n * API or interfere with other component logic. For example, if for some reason\n * the component wants to define a separate property with the plain string name,\n * \"template\", it can do so without affecting the above property setter.\n *\n * @module internal\n */\n\nimport * as coreInternal from \"../core/internal.js\";\n\n/**\n * Symbol for the `applyElementData` method.\n *\n * Components that want to be able to apply data from one element to another\n * can support this method. E.g., [DropdownList](DropdownList) uses this to\n * apply data from the selected item to the component's value part.\n */\nexport const applyElementData = Symbol(\"applyElementData\");\n\n/**\n * Symbol for the `checkSize` method.\n *\n * If defined, this method will be invoked by [ResizeMixin](ResizeMixin)\n * when an element's size may have changed. The default implementation of\n * this method compares the element's current `clientHeight` and `clientWidth`\n * properties against the last known values of those properties (saved in\n * `state.clienHeight` and `state.clientWidth`).\n *\n * Components should override this method if they contain elements that may need\n * to know about size changes as well. For example, when an [Overlay](Overlay)\n * mixin opens, it invokes this method on any content elements that define it.\n * This gives the contents a chance to resize in response to being displayed.\n */\nexport const checkSize = Symbol(\"checkSize\");\n\n/**\n * Symbol for the `closestAvailableItemIndex` method.\n *\n * This method is defined by [ItemsCursorMixin](ItemsCursorMixin). You can call\n * this if you want to find an item at a particular location, but may need to\n * account for the fact that the item at that position is not available, and\n * would like to find the closest item that is available.\n */\nexport const closestAvailableItemIndex = Symbol(\"closestAvailableItemIndex\");\n\n/**\n * Symbol for the `contentSlot` property.\n *\n * [SlotContentMixin](SlotContentMixin) uses this to identify which slot\n * element in the component's shadow tree that holds the component's content.\n * By default, this is the first slot element with no \"name\" attribute. You\n * can override this to return a different slot.\n */\nexport const contentSlot = Symbol(\"contentSlot\");\n\n/**\n * The default state for this element.\n */\nexport const defaultState = coreInternal.defaultState;\n\n/**\n * Symbol for the `defaultTabIndex` property.\n *\n * [KeyboardMixin](KeyboardMixin) uses this if it is unable to successfully\n * parse a string tabindex attribute.\n */\nexport const defaultTabIndex = Symbol(\"defaultTabIndex\");\n\n/**\n * Symbol for the `delegatesFocus` property.\n *\n * [DelegatesFocusMixin](DelegatesFocusMixin) defines this property, returning\n * true to indicate that the focus is being delegated, even in browsers that\n * don't support that natively. Mixins like [KeyboardMixin](KeyboardMixin) use\n * this to accommodate focus delegation.\n */\nexport const delegatesFocus = coreInternal.delegatesFocus;\n\n/**\n * Symbol for the `effectEndTarget` property.\n *\n * [TransitionEffectMixin](TransitionEffectMixin) inspects this property to\n * determine which element's `transitionend` event will signal the end of a\n * transition effect.\n */\nexport const effectEndTarget = Symbol(\"effectEndTarget\");\n\n/**\n * Symbol for the `firstRender` property.\n *\n * [ReactiveMixin](ReactiveMixin) sets the property to `true` during the\n * element's first `connectedCallback`, then `false` in subsequent callbacks.\n *\n * You can inspect this property in your own `connectedCallback` handler\n * to do work like wiring up events that should only happen once.\n */\nexport const firstRender = coreInternal.firstRender;\n\n/**\n * Symbol for the `focusTarget` property.\n *\n * [DelegatesFocusMixin](DelegatesFocusMixin) defines this property as either:\n * 1) the element itself, in browsers that support native focus delegation or,\n * 2) the shadow root's first focusable element.\n */\nexport const focusTarget = coreInternal.focusTarget;\n\n/**\n * Symbol for the `getItemText` method.\n *\n * This method can be applied to an item to return its text.\n * [KeyboardPrefixCursorMixin](KeyboardPrefixCursorMixin) uses this to\n * obtain the text for each item in a list, then matches keypresses again that\n * text.\n *\n * This method takes a single parameter: the `HTMLElement` of the item from\n * which text should be extracted.\n */\nexport const getItemText = Symbol(\"getItemText\");\n\n/**\n * Symbol for the `goDown` method.\n *\n * This method is invoked when the user wants to go/navigate down.\n */\nexport const goDown = Symbol(\"goDown\");\n\n/**\n * Symbol for the `goEnd` method.\n *\n * This method is invoked when the user wants to go/navigate to the end (e.g.,\n * of a list).\n */\nexport const goEnd = Symbol(\"goEnd\");\n\n/**\n * Symbol for the `goFirst` method.\n *\n * This method is invoked when the user wants to go to the first item in a list.\n */\nexport const goFirst = Symbol(\"goFirst\");\n\n/**\n * Symbol for the `goLast` method.\n *\n * This method is invoked when the user wants to go to the last item in a list.\n */\nexport const goLast = Symbol(\"goLast\");\n\n/**\n * Symbol for the `goLeft` method.\n *\n * This method is invoked when the user wants to go/navigate left. Mixins that\n * make use of this method include\n * [KeyboardDirectionMixin](KeyboardDirectionMixin) and\n * [SwipeDirectionMixin](SwipeDirectionMixin).\n */\nexport const goLeft = Symbol(\"goLeft\");\n\n/**\n * Symbol for the `goNext` method.\n *\n * This method is invoked when the user wants to go/navigate to the next item.\n */\nexport const goNext = Symbol(\"goNext\");\n\n/**\n * Symbol for the `goPrevious` method.\n *\n * This method is invoked when the user wants to go/navigate to the previous item.\n */\nexport const goPrevious = Symbol(\"goPrevious\");\n\n/**\n * Symbol for the `goRight` method.\n *\n * This method is invoked when the user wants to go/navigate right. Mixins\n * that make use of this method include\n * [KeyboardDirectionMixin](KeyboardDirectionMixin) and\n * [SwipeDirectionMixin](SwipeDirectionMixin).\n */\nexport const goRight = Symbol(\"goRight\");\n\n/**\n * Symbol for the `goStart` method.\n *\n * This method is invoked when the user wants to go/navigate to the start\n * (e.g., of a list).\n */\nexport const goStart = Symbol(\"goStart\");\n\n/**\n * Symbol for the `goToItemWithPrefix` method.\n *\n * This method is invoked by\n * [KeyboardPrefixCursorMixin](KeyboardPrefixCursorMixin) when the user types\n * text characters.\n */\nexport const goToItemWithPrefix = Symbol(\"goToItemWithPrefix\");\n\n/**\n * Symbol for the `goUp` method.\n *\n * This method is invoked when the user wants to go/navigate up.\n */\nexport const goUp = Symbol(\"goUp\");\n\n/**\n * Symbol for the `hasDynamicTemplate` property.\n *\n * If your component class does not always use the same template, define a\n * static class property getter with this symbol and have it return `true`.\n * This will disable template caching for your component.\n */\nexport const hasDynamicTemplate = coreInternal.hasDynamicTemplate;\n\n/**\n * Symbol for the `ids` property.\n *\n * [ShadowTemplateMixin](ShadowTemplateMixin) defines a shorthand function\n * `internal.ids` that can be used to obtain a reference to a shadow element with\n * a given ID.\n *\n * Example: if component's template contains a shadow element\n * `<button id=\"foo\">`, you can use the reference `this[ids].foo` to obtain\n * the corresponding button in the component instance's shadow tree.\n * The `ids` function is simply a shorthand for `getElementById`, so\n * `this[ids].foo` is the same as `this.shadowRoot.getElementById('foo')`.\n */\nexport const ids = coreInternal.ids;\n\n/**\n * Symbol for the `inputDelegate` property.\n *\n * [DelegateInputSelectionMixin](DelegateInputSelectionMixin) uses this property\n * to indicate which shadow element is the input-type element to which text\n * selection methods and properties should be delegated.\n */\nexport const inputDelegate = Symbol(\"inputDelegate\");\n\n/**\n * Symbol for the `itemsDelegate` property.\n *\n * A component using [DelegateItemsMixin](DelegateItemsMixin) uses this property\n * to indicate which one of its shadow elements is the one whose `items`\n * property will be treated as the component's own `items`.\n */\nexport const itemsDelegate = Symbol(\"itemsDelegate\");\n\n/**\n * Symbol for the `keydown` method.\n *\n * This method is invoked when an element receives a `keydown` event.\n *\n * An implementation of `internal.keydown` should return `true` if it handled\n * the event, and `false` otherwise. If `true` is returned (the event was\n * handled), `KeyboardMixin` invokes the event's `preventDefault` and\n * `stopPropagation` methods to let the browser know the event was handled.\n *\n * The convention for handling `internal.keydown` is that the last mixin\n * applied wins. That is, if an implementation of `internal.keydown` *did*\n * handle the event, it can return immediately. If it did not, it should\n * invoke `super` to let implementations further up the prototype chain have\n * their chance.\n *\n * This method takes a `KeyboardEvent` parameter that contains the event being\n * processed.\n */\nexport const keydown = Symbol(\"keydown\");\n\n/**\n * Symbol for the `matchText` method.\n *\n * [AutoCompleteInput](AutoCompleteInput) invokes this method when trying\n * to find a match for a given input string against its set of texts.\n */\nexport const matchText = Symbol(\"matchText\");\n\n/**\n * Symbol for the `mouseenter` method.\n *\n * [HoverMixin](HoverMixin) invokes this method when the user moves the\n * mouse over a component. That mixin provides a base implementation of this\n * method, but you can extend it to do additional work on `mouseenter`.\n *\n * This method takes a `MouseEvent` parameter that contains the event being\n * processed.\n */\nexport const mouseenter = Symbol(\"mouseenter\");\n\n/**\n * Symbol for the `mouseleave` method.\n *\n * [HoverMixin](HoverMixin) invokes this method when the user moves off a\n * component. That mixin provides a base implementation of this method, but\n * you can extend it to do additional work on `mouseleave`.\n *\n * This method takes a `MouseEvent` parameter that contains the event being\n * processed.\n */\nexport const mouseleave = Symbol(\"mouseleave\");\n\n/**\n * Symbol for access to native HTML element internals.\n */\nexport const nativeInternals = coreInternal.nativeInternals;\n\n/**\n * Symbol for the `raiseChangeEvents` property.\n *\n * This property is used by mixins to determine whether they should raise\n * property change events. The standard HTML pattern is to only raise such\n * events in response to direct user interactions. For a detailed discussion\n * of this point, see the Gold Standard checklist item for\n * [Propery Change Events](https://github.com/webcomponents/gold-standard/wiki/Property%20Change%20Events).\n *\n * The above article describes a pattern for using a flag to track whether\n * work is being performed in response to internal component activity, and\n * whether the component should therefore raise property change events.\n * This `raiseChangeEvents` symbol is a shared flag used for that purpose by\n * all Elix mixins and components. Sharing this flag ensures that internal\n * activity (e.g., a UI event listener) in one mixin can signal other mixins\n * handling affected properties to raise change events.\n *\n * All UI event listeners (and other forms of internal handlers, such as\n * timeouts and async network handlers) should set `raiseChangeEvents` to\n * `true` at the start of the event handler, then `false` at the end:\n *\n * this.addEventListener('click', event => {\n * this[raiseChangeEvents] = true;\n * // Do work here, possibly setting properties, like:\n * this.foo = 'Hello';\n * this[raiseChangeEvents] = false;\n * });\n *\n * Elsewhere, property setters that raise change events should only do so it\n * this property is `true`:\n *\n * set foo(value) {\n * // Save foo value here, do any other work.\n * if (this[raiseChangeEvents]) {\n * export const event = new CustomEvent('foochange');\n * this.dispatchEvent(event);\n * }\n * }\n *\n * In this way, programmatic attempts to set the `foo` property will not trigger\n * the `foochange` event, but UI interactions that update that property will\n * cause those events to be raised.\n */\nexport const raiseChangeEvents = coreInternal.raiseChangeEvents;\n\n/**\n * Symbol for the `render` method.\n *\n * [ReactiveMixin](ReactiveMixin) invokes this `internal.render` method to give\n * the component a chance to render recent changes in component state.\n */\nexport const render = coreInternal.render;\n\n/**\n * Symbol for the `renderChanges` method.\n *\n * [ReactiveMixin](ReactiveMixin) invokes this method in response to a\n * `setState` call; you should generally not invoke this method yourself.\n */\nexport const renderChanges = coreInternal.renderChanges;\n\n/**\n * Symbol for the `renderDataToElement` method.\n *\n * [DataItemsMixin](DataItemsMixin) invokes this method to render data to an\n * element being used as an item in a list.\n */\nexport const renderDataToElement = Symbol(\"renderDataToElement\");\n\n/**\n * Symbol for the `rendered` method.\n *\n * [ReactiveMixin](ReactiveMixin) will invoke this method after your\n * element has completely finished rendering.\n */\nexport const rendered = coreInternal.rendered;\n\n/**\n * Symbol for the `rendering` property.\n *\n * [ReactiveMixin](ReactiveMixin) sets this property to true during rendering,\n * at other times it will be false.\n */\nexport const rendering = coreInternal.rendering;\n\n/**\n * Symbol for the `scrollTarget` property.\n *\n * This property indicates which element in a component's shadow subtree\n * should be scrolled. [CursorInViewMixin](CursorInViewMixin) can use\n * this property to determine which element should be scrolled to keep the\n * selected item in view.\n */\nexport const scrollTarget = Symbol(\"scrollTarget\");\n\n/**\n * Symbol for the `setState` method.\n *\n * A component using [ReactiveMixin](ReactiveMixin) can invoke this method to\n * apply changes to the element's current state.\n */\nexport const setState = coreInternal.setState;\n\n/**\n * Symbol for the `shadowRoot` property.\n *\n * This property holds a reference to an element's shadow root, like\n * `this.shadowRoot`. This propery exists because `this.shadowRoot` is not\n * available for components with closed shadow roots.\n * [ShadowTemplateMixin](ShadowTemplateMixin) creates open shadow roots by\n * default, but you can opt into creating closed shadow roots; see\n * [shadowRootMode](internal#internal.shadowRootMode).\n */\nexport const shadowRoot = coreInternal.shadowRoot;\n\n/**\n * Symbol for the `shadowRootMode` property.\n *\n * If true (the default), then [ShadowTemplateMixin](ShadowTemplateMixin) will\n * create an open shadow root when the component is instantiated. Set this to\n * false if you want to programmatically hide component internals in a closed\n * shadow root.\n */\nexport const shadowRootMode = coreInternal.shadowRootMode;\n\n/**\n * Symbol for the `startEffect` method.\n *\n * A component using [TransitionEffectMixin](TransitionEffectMixin) can invoke\n * this method to trigger the application of a named, asynchronous CSS\n * transition effect.\n *\n * This method takes a single `string` parameter giving the name of the effect\n * to start.\n */\nexport const startEffect = Symbol(\"startEffect\");\n\n/**\n * The element's current state.\n *\n * This is managed by [ReactiveMixin](ReactiveMixin).\n */\nexport const state = coreInternal.state;\n\nexport const stateEffects = coreInternal.stateEffects;\n\n/**\n * Symbol for the `swipeDown` method.\n *\n * The swipe mixin [TouchSwipeMixin](TouchSwipeMixin) invokes this method when\n * the user finishes a gesture to swipe down.\n */\nexport const swipeDown = Symbol(\"swipeDown\");\n\n/**\n * Symbol for the `swipeDownComplete` method.\n *\n * [SwipeCommandsMixin](SwipeCommandsMixin) invokes this method after any\n * animated transition associated with a swipe down has completed.\n */\nexport const swipeDownComplete = Symbol(\"swipeDownComplete\");\n\n/**\n * Symbol for the `swipeLeft` method.\n *\n * The swipe mixins [TouchSwipeMixin](TouchSwipeMixin) and\n * [TrackpadSwipeMixin](TrackpadSwipeMixin) invoke this method when the user\n * finishes a gesture to swipe left.\n */\nexport const swipeLeft = Symbol(\"swipeLeft\");\n\n/**\n * Symbol for the `swipeLeftTransitionEnd` method.\n *\n * [SwipeCommandsMixin](SwipeCommandsMixin) invokes this method after any\n * animated transition associated with a swipe left has completed.\n */\nexport const swipeLeftTransitionEnd = Symbol(\"swipeLeftTransitionEnd\");\n\n/**\n * Symbol for the `swipeRight` method.\n *\n * The swipe mixins [TouchSwipeMixin](TouchSwipeMixin) and\n * [TrackpadSwipeMixin](TrackpadSwipeMixin) invoke this method when the user\n * finishes a gesture to swipe right.\n */\nexport const swipeRight = Symbol(\"swipeRight\");\n\n/**\n * Symbol for the `swipeRightTransitionEnd` method.\n *\n * [SwipeCommandsMixin](SwipeCommandsMixin) invokes this method after any\n * animated transition associated with a swipe right has completed.\n */\nexport const swipeRightTransitionEnd = Symbol(\"swipeRightTransitionEnd\");\n\n/**\n * Symbol for the `swipeUp` method.\n *\n * The swipe mixin [TouchSwipeMixin](TouchSwipeMixin) invokes this method when\n * the user finishes a gesture to swipe up.\n */\nexport const swipeUp = Symbol(\"swipeUp\");\n\n/**\n * Symbol for the `swipeUpComplete` method.\n *\n * [SwipeCommandsMixin](SwipeCommandsMixin) invokes this method after any\n * animated transition associated with a swipe up has completed.\n */\nexport const swipeUpComplete = Symbol(\"swipeUpComplete\");\n\n/**\n * Symbol for the `swipeStart` method.\n *\n * [TouchSwipeMixin](TouchSwipeMixin) and\n * [TrackpadSwipeMixin](TrackpadSwipeMixin) invoke this method when a swipe\n * is starting, passing in the starting (x, y) client coordinate.\n */\nexport const swipeStart = Symbol(\"swipeStart\");\n\n/**\n * Symbol for the `swipeTarget` property.\n *\n * By default, the swipe mixins [TouchSwipeMixin](TouchSwipeMixin) and\n * [TrackpadSwipeMixin](TrackpadSwipeMixin) assume that the element the user\n * is swiping the top-level element. In some cases (e.g., [Drawer](Drawer)),\n * the component wants to let the user swipe a shadow element. In such cases,\n * this property should return the element that should be swiped.\n *\n * The swipe target's `offsetWidth` is used by the mixin to calculate the\n * `state.swipeFraction` member when the user drags their finger. The\n * `swipeFraction` is the distance the user has dragged in the current drag\n * operation over that `offsetWidth`.\n */\nexport const swipeTarget = Symbol(\"swipeTarget\");\n\n/**\n * Symbol for the `tap` method.\n *\n * This method is invoked when an element receives an operation that should\n * be interpreted as a tap. [TapCursorMixin](TapCursorMixin)\n * invokes this when the element receives a `mousedown` event, for example.\n */\nexport const tap = Symbol(\"tap\");\n\n/**\n * Symbol for the `template` method.\n *\n * [ShadowTemplateMixin](ShadowTemplateMixin) uses this property to obtain a\n * component's template, which it will clone into a component's shadow root.\n */\nexport const template = coreInternal.template;\n\n/**\n * Symbol for the `toggleSelectedFlag` method.\n *\n * [ItemsMultiSelectMixin](ItemsMultiSelectMixin) exposes this method to let\n * other mixins like [MultiSelectAPIMixin](MultiSelectAPIMixin) toggle the\n * selected state of an individual item.\n */\nexport const toggleSelectedFlag = Symbol(\"toggleSelectedFlag\");\n\n// Expose internals as a global when debugging.\nconst elixdebug = new URLSearchParams(location.search).get(\"elixdebug\");\nif (elixdebug === \"true\") {\n /** @type {any} */ (window).elix = {\n internal: {\n checkSize,\n closestAvailableItemIndex,\n contentSlot,\n defaultState,\n defaultTabIndex,\n delegatesFocus,\n effectEndTarget,\n firstRender,\n focusTarget,\n getItemText,\n goDown,\n goEnd,\n goFirst,\n goLast,\n goLeft,\n goNext,\n goPrevious,\n goRight,\n goStart,\n goToItemWithPrefix,\n goUp,\n hasDynamicTemplate,\n ids,\n inputDelegate,\n itemsDelegate,\n keydown,\n mouseenter,\n mouseleave,\n nativeInternals,\n event,\n raiseChangeEvents,\n render,\n renderChanges,\n renderDataToElement,\n rendered,\n rendering,\n scrollTarget,\n setState,\n shadowRoot,\n shadowRootMode,\n startEffect,\n state,\n stateEffects,\n swipeDown,\n swipeDownComplete,\n swipeLeft,\n swipeLeftTransitionEnd,\n swipeRight,\n swipeRightTransitionEnd,\n swipeUp,\n swipeUpComplete,\n swipeStart,\n swipeTarget,\n tap,\n template,\n toggleSelectedFlag,\n },\n };\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names-external').f;\n\nvar FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n getOwnPropertyNames: nativeGetOwnPropertyNames\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","import { rendering } from \"./internal.js\";\n\n// Memoized maps of attribute to property names and vice versa.\n// We initialize this with the special case of the tabindex (lowercase \"i\")\n// attribute, which is mapped to the tabIndex (capital \"I\") property.\n/** @type {IndexedObject<string>} */\nconst attributeToPropertyNames = {\n tabindex: \"tabIndex\",\n};\n/** @type {IndexedObject<string>} */\nconst propertyNamesToAttributes = {\n tabIndex: \"tabindex\",\n};\n\n/**\n * Sets properties when the corresponding attributes change\n *\n * If your component exposes a setter for a property, it's generally a good\n * idea to let devs using your component be able to set that property in HTML\n * via an element attribute. You can code that yourself by writing an\n * `attributeChangedCallback`, or you can use this mixin to get a degree of\n * automatic support.\n *\n * This mixin implements an `attributeChangedCallback` that will attempt to\n * convert a change in an element attribute into a call to the corresponding\n * property setter. Attributes typically follow hyphenated names (\"foo-bar\"),\n * whereas properties typically use camelCase names (\"fooBar\"). This mixin\n * respects that convention, automatically mapping the hyphenated attribute\n * name to the corresponding camelCase property name.\n *\n * Example: You define a component using this mixin:\n *\n * class MyElement extends AttributeMarshallingMixin(HTMLElement) {\n * get fooBar() { return this._fooBar; }\n * set fooBar(value) { this._fooBar = value; }\n * }\n *\n * If someone then instantiates your component in HTML:\n *\n * <my-element foo-bar=\"Hello\"></my-element>\n *\n * Then, after the element has been upgraded, the `fooBar` setter will\n * automatically be invoked with the initial value \"Hello\".\n *\n * Attributes can only have string values. If you'd like to convert string\n * attributes to other types (numbers, booleans), you must implement parsing\n * yourself.\n *\n * @module AttributeMarshallingMixin\n * @param {Constructor<CustomElement>} Base\n */\nexport default function AttributeMarshallingMixin(Base) {\n // The class prototype added by the mixin.\n class AttributeMarshalling extends Base {\n /**\n * Handle a change to the attribute with the given name.\n *\n * @ignore\n * @param {string} attributeName\n * @param {string} oldValue\n * @param {string} newValue\n */\n attributeChangedCallback(attributeName, oldValue, newValue) {\n if (super.attributeChangedCallback) {\n super.attributeChangedCallback(attributeName, oldValue, newValue);\n }\n\n // Sometimes this callback is invoked when there's not actually any\n // change, in which we skip invoking the property setter.\n //\n // We also skip setting properties if we're rendering. A component may\n // want to reflect property values to attributes during rendering, but\n // such attribute changes shouldn't trigger property updates.\n if (newValue !== oldValue && !this[rendering]) {\n const propertyName = attributeToPropertyName(attributeName);\n // If the attribute name corresponds to a property name, set the property.\n if (propertyName in this) {\n // Parse standard boolean attributes.\n const parsed = standardBooleanAttributes[attributeName]\n ? booleanAttributeValue(attributeName, newValue)\n : newValue;\n this[propertyName] = parsed;\n }\n }\n }\n\n // Because maintaining the mapping of attributes to properties is tedious,\n // this provides a default implementation for `observedAttributes` that\n // assumes that your component will want to expose all public properties in\n // your component's API as properties.\n //\n // You can override this default implementation of `observedAttributes`. For\n // example, if you have a system that can statically analyze which\n // properties are available to your component, you could hand-author or\n // programmatically generate a definition for `observedAttributes` that\n // avoids the minor run-time performance cost of inspecting the component\n // prototype to determine your component's public properties.\n static get observedAttributes() {\n return attributesForClass(this);\n }\n }\n\n return AttributeMarshalling;\n}\n\n/**\n * Return the custom attributes for the given class.\n *\n * E.g., if the supplied class defines a `fooBar` property, then the resulting\n * array of attribute names will include the \"foo-bar\" attribute.\n *\n * @private\n * @param {Constructor<HTMLElement>} classFn\n * @returns {string[]}\n */\nfunction attributesForClass(classFn) {\n // We treat the HTMLElement base class as if it has no attributes, since we\n // don't want to receive attributeChangedCallback for it (or anything further\n // up the protoype chain).\n if (classFn === HTMLElement) {\n return [];\n }\n\n // Get attributes for parent class.\n const baseClass = Object.getPrototypeOf(classFn.prototype).constructor;\n\n // See if parent class defines observedAttributes manually.\n let baseAttributes = baseClass.observedAttributes;\n if (!baseAttributes) {\n // Calculate parent class attributes ourselves.\n baseAttributes = attributesForClass(baseClass);\n }\n\n // Get the properties for this particular class.\n const propertyNames = Object.getOwnPropertyNames(classFn.prototype);\n const setterNames = propertyNames.filter((propertyName) => {\n const descriptor = Object.getOwnPropertyDescriptor(\n classFn.prototype,\n propertyName\n );\n return descriptor && typeof descriptor.set === \"function\";\n });\n\n // Map the property names to attribute names.\n const attributes = setterNames.map((setterName) =>\n propertyNameToAttribute(setterName)\n );\n\n // Merge the attribute for this class and its base class.\n const diff = attributes.filter(\n (attribute) => baseAttributes.indexOf(attribute) < 0\n );\n const result = baseAttributes.concat(diff);\n\n return result;\n}\n\n/**\n * Convert hyphenated foo-bar attribute name to camel case fooBar property name.\n *\n * @private\n * @param {string} attributeName\n */\nfunction attributeToPropertyName(attributeName) {\n let propertyName = attributeToPropertyNames[attributeName];\n if (!propertyName) {\n // Convert and memoize.\n const hyphenRegEx = /-([a-z])/g;\n propertyName = attributeName.replace(hyphenRegEx, (match) =>\n match[1].toUpperCase()\n );\n attributeToPropertyNames[attributeName] = propertyName;\n }\n return propertyName;\n}\n\n/**\n * Given a string value for a named boolean attribute, return `true` if the\n * value is either: a) the empty string, or b) a case-insensitive match for the\n * name.\n *\n * This is native HTML behavior; see the MDN documentation on [boolean\n * attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes#Boolean_Attributes)\n * for the reasoning.\n *\n * Given a null value, this return `false`.\n * Given a boolean value, this return the value as is.\n *\n * @param {string} name\n * @param {string|boolean|null} value\n */\nexport function booleanAttributeValue(name, value) {\n return typeof value === \"boolean\"\n ? value\n : typeof value === \"string\"\n ? value === \"\" || name.toLowerCase() === value.toLowerCase()\n : false;\n}\n\n/**\n * Convert a camel case fooBar property name to a hyphenated foo-bar attribute.\n *\n * @private\n * @param {string} propertyName\n */\nfunction propertyNameToAttribute(propertyName) {\n let attribute = propertyNamesToAttributes[propertyName];\n if (!attribute) {\n // Convert and memoize.\n const uppercaseRegEx = /([A-Z])/g;\n attribute = propertyName.replace(uppercaseRegEx, \"-$1\").toLowerCase();\n propertyNamesToAttributes[propertyName] = attribute;\n }\n return attribute;\n}\n\n/** @type {IndexedObject<boolean>} */\nexport const standardBooleanAttributes = {\n checked: true,\n defer: true,\n disabled: true,\n hidden: true,\n ismap: true,\n multiple: true,\n noresize: true,\n readonly: true,\n selected: true,\n};\n","import * as attributes from \"./AttributeMarshallingMixin.js\";\nimport { focusTarget, nativeInternals } from \"./internal.js\";\n\n/**\n * Miscellaneous DOM helpers for web components\n *\n * @module dom\n */\n\nconst mousedownListenerKey = Symbol(\"mousedownListener\");\n\n/**\n * Given a string value for a named boolean attribute, return `true` if the\n * value is either: a) the empty string, or b) a case-insensitive match for the\n * name.\n *\n * This is native HTML behavior; see the MDN documentation on [boolean\n * attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes#Boolean_Attributes)\n * for the reasoning.\n *\n * Given a null value, this return `false`.\n * Given a boolean value, this return the value as is.\n *\n * @private\n * @param {string} name\n * @param {string|boolean|null} value\n */\nexport function booleanAttributeValue(name, value) {\n console.warn(\n `booleanAttributes has moved from dom.js to AttributeMarshallingMixin.js. Please update your imports.`\n );\n return attributes.booleanAttributeValue(name, value);\n}\n\n/**\n * Return the closest focusable node that's either the node itself (if it's\n * focusable), or the closest focusable ancestor in the *composed* tree.\n *\n * If no focusable node is found, this returns null.\n *\n * @param {Node} node\n * @returns {HTMLElement|null}\n */\nexport function closestFocusableNode(node) {\n for (const current of selfAndComposedAncestors(node)) {\n // If the current element defines a focusTarget (e.g., via\n // DelegateFocusMixin), use that, otherwise use the element itself.\n const target = current[focusTarget] || current;\n // We want an element that has a tabIndex of 0 or more. We ignore disabled\n // elements, and slot elements (which oddly have a tabIndex of 0).\n /** @type {any} */ const cast = target;\n const focusable =\n target instanceof HTMLElement &&\n target.tabIndex >= 0 &&\n !cast.disabled &&\n !(target instanceof HTMLSlotElement);\n if (focusable) {\n return target;\n }\n }\n return null;\n}\n\n/**\n * Return the ancestors of the given node in the composed tree.\n *\n * In the composed tree, the ancestor of a node assigned to a slot is that slot,\n * not the node's DOM ancestor. The ancestor of a shadow root is its host.\n *\n * @param {Node} node\n * @returns {Iterable<Node>}\n */\nexport function* composedAncestors(node) {\n /** @type {Node|null} */\n let current = node;\n while (true) {\n current =\n current instanceof HTMLElement && current.assignedSlot\n ? current.assignedSlot\n : current instanceof ShadowRoot\n ? current.host\n : current.parentNode;\n if (current) {\n yield current;\n } else {\n break;\n }\n }\n}\n\n/**\n * Returns true if the first node contains the second, even if the second node\n * is in a shadow tree.\n *\n * The standard Node.contains() function does not account for Shadow DOM, and\n * returns false if the supplied target node is sitting inside a shadow tree\n * within the container.\n *\n * @param {Node} container - The container to search within.\n * @param {Node} target - The node that may be inside the container.\n * @returns {boolean} - True if the container contains the target node.\n */\nexport function deepContains(container, target) {\n /** @type {any} */\n let current = target;\n while (current) {\n const parent = current.assignedSlot || current.parentNode || current.host;\n if (parent === container) {\n return true;\n }\n current = parent;\n }\n return false;\n}\n\n/**\n * Return the first focusable element in the composed tree below the given root.\n * The composed tree includes nodes assigned to slots.\n *\n * This heuristic considers only the document order of the elements below the\n * root and whether a given element is focusable. It currently does not respect\n * the tab sort order defined by tabindex values greater than zero.\n *\n * @param {Node} root - the root of the tree in which to search\n * @returns {HTMLElement|null} - the first focusable element, or null if none\n * was found\n */\nexport function firstFocusableElement(root) {\n // CSS selectors for focusable elements from\n // https://stackoverflow.com/a/30753870/76472\n const focusableQuery =\n 'a[href],area[href],button:not([disabled]),details,iframe,input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[contentEditable=\"true\"],[tabindex]';\n // Walk the tree looking for nodes that match the above selectors.\n const walker = walkComposedTree(\n root,\n (/** @type {Node} */ node) =>\n node instanceof HTMLElement &&\n node.matches(focusableQuery) &&\n node.tabIndex >= 0\n );\n // We only actually need the first matching value.\n const { value } = walker.next();\n // value, if defined, will always be an HTMLElement, but we do the following\n // check to pass static type checking.\n return value instanceof HTMLElement ? value : null;\n}\n\n/**\n * Trap any `mousedown` events on the `origin` element and prevent the default\n * behavior from setting the focus on that element. Instead, put the focus on\n * the `target` element (or, if the `target` is not focusable, on the target's\n * closest focusable ancestor).\n *\n * If this method is called again with the same `origin` element, the old\n * forwarding is overridden, and focus will now go to the new `target` element.\n *\n * If the `target` parameter is `null`, focus handling will be removed from the\n * indicated `origin`.\n *\n * @param {HTMLElement} origin\n * @param {HTMLElement|null} target\n */\nexport function forwardFocus(origin, target) {\n if (origin[mousedownListenerKey]) {\n // Origin was previously forwarding focus, probably to a different target.\n // Remove the previous event listener.\n origin.removeEventListener(\"mousedown\", origin[mousedownListenerKey]);\n }\n if (target) {\n origin[mousedownListenerKey] = (/** @type {MouseEvent} */ event) => {\n // Only process events for the main (usually left) button.\n if (event.button !== 0) {\n return;\n }\n // What element wants the focus?\n const desiredTarget = target[focusTarget] || target;\n // What ancestor can actually take the focus?\n const focusableTarget = closestFocusableNode(desiredTarget);\n if (focusableTarget) {\n focusableTarget.focus();\n event.preventDefault();\n }\n };\n origin.addEventListener(\"mousedown\", origin[mousedownListenerKey]);\n }\n}\n\n/**\n * Search a list element for the item that contains the specified target.\n *\n * When dealing with UI events (e.g., mouse clicks) that may occur in\n * subelements inside a list item, you can use this routine to obtain the\n * containing list item.\n *\n * @param {NodeList|Node[]} items - A list element containing a set of items\n * @param {Node} target - A target element that may or may not be an item in the\n * list.\n * @returns {number} - The index of the list child that is or contains the\n * indicated target node. Returns -1 if not found.\n */\nexport function indexOfItemContainingTarget(items, target) {\n return Array.prototype.findIndex.call(\n items,\n (/** @type Node */ item) => item === target || deepContains(item, target)\n );\n}\n\n/**\n * Return true if the event came from within the node (or from the node itself);\n * false otherwise.\n *\n * @param {Node} node - The node to consider in relation to the event\n * @param {Event} event - The event which may have been raised within/by the\n * node\n * @returns {boolean} - True if the event was raised within or by the node\n */\nexport function ownEvent(node, event) {\n /** @type {any} */\n const cast = event;\n const eventSource = cast.composedPath()[0];\n return node === eventSource || deepContains(node, eventSource);\n}\n\n/**\n * Returns the set that includes the given node and all of its ancestors in the\n * composed tree. See [composedAncestors](#composedAncestors) for details on the\n * latter.\n *\n * @param {Node} node\n * @returns {Iterable<Node>}\n */\nexport function* selfAndComposedAncestors(node) {\n if (node) {\n yield node;\n yield* composedAncestors(node);\n }\n}\n\n/**\n * Set an internal state for browsers that support custom state pseudo classes,\n * as well as an attribute of the same name to permit state-based styling on\n * older browsers.\n *\n * When all browsers support custom state pseudo classes, we'd like to deprecate\n * use of attributes.\n *\n * @param {Element} element\n * @param {string} name\n * @param {boolean} value\n */\nexport function setInternalState(element, name, value) {\n element.toggleAttribute(name, value);\n if (element[nativeInternals] && element[nativeInternals].states) {\n const states = element[nativeInternals].states;\n const stateName = `--${name}`;\n if (value) {\n states.add(stateName);\n } else {\n states.delete(stateName);\n }\n }\n}\n\n/**\n * Adds or removes the element's `childNodes` as necessary to match the nodes\n * indicated in the `childNodes` parameter.\n *\n * This operation is useful in cases where you maintain your own set of nodes\n * which should be rendered as the children of some element. When you insert or\n * remove nodes in that set, you can invoke this function to efficiently apply\n * the new set as a delta to the existing children. Only the items in the set\n * that have actually changed will be added or removed.\n *\n * @param {Element} element - the element to update\n * @param {(NodeList|Node[])} childNodes - the set of nodes to apply\n */\nexport function updateChildNodes(element, childNodes) {\n // If the childNodes parameter is the actual childNodes of an element, then as\n // we append those nodes to the indicated target element, they'll get removed\n // from the original set. To keep the list stable, we make a copy.\n const copy = [...childNodes];\n\n const oldLength = element.childNodes.length;\n const newLength = copy.length;\n const length = Math.max(oldLength, newLength);\n for (let i = 0; i < length; i++) {\n const oldChild = element.childNodes[i];\n const newChild = copy[i];\n if (i >= oldLength) {\n // Add new item not in old set.\n element.append(newChild);\n } else if (i >= newLength) {\n // Remove old item past end of new set.\n element.removeChild(element.childNodes[newLength]);\n } else if (oldChild !== newChild) {\n if (copy.indexOf(oldChild, i) >= i) {\n // Old node comes later in final set. Insert the new node rather than\n // replacing it so that we don't detach the old node only to have to\n // reattach it later.\n element.insertBefore(newChild, oldChild);\n } else {\n // Replace old item with new item.\n element.replaceChild(newChild, oldChild);\n }\n }\n }\n}\n\n/**\n * Walk the composed tree at the root for elements that pass the given filter.\n *\n * Note: the jsDoc types required for the filter function are too complex for\n * the current jsDoc parser to support strong type-checking.\n *\n * @private\n * @param {Node} node\n * @param {function} filter\n * @returns {IterableIterator<Node>}\n */\nfunction* walkComposedTree(node, filter) {\n if (filter(node)) {\n yield node;\n }\n let children;\n if (node instanceof HTMLElement && node.shadowRoot) {\n // Walk the shadow instead of the light DOM.\n children = node.shadowRoot.children;\n } else {\n const assignedNodes =\n node instanceof HTMLSlotElement\n ? node.assignedNodes({ flatten: true })\n : [];\n children =\n assignedNodes.length > 0\n ? // Walk light DOM nodes assigned to this slot.\n assignedNodes\n : // Walk light DOM children.\n node.childNodes;\n }\n if (children) {\n for (let i = 0; i < children.length; i++) {\n yield* walkComposedTree(children[i], filter);\n }\n }\n}\n","var $ = require('../internals/export');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\n\n// `String.raw` method\n// https://tc39.es/ecma262/#sec-string.raw\n$({ target: 'String', stat: true }, {\n raw: function raw(template) {\n var rawTemplate = toIndexedObject(template.raw);\n var literalSegments = toLength(rawTemplate.length);\n var argumentsLength = arguments.length;\n var elements = [];\n var i = 0;\n while (literalSegments > i) {\n elements.push(String(rawTemplate[i++]));\n if (i < argumentsLength) elements.push(String(arguments[i]));\n } return elements.join('');\n }\n});\n","/**\n * JavaScript template literals for constructing DOM nodes from HTML\n *\n * @module html\n */\n\n/**\n * A JavaScript template string literal that returns an HTML document fragment.\n *\n * Example:\n *\n * const fragment = fragmentFrom.html`Hello, <em>world</em>.`\n *\n * returns a `DocumentFragment` whose `innerHTML` is `Hello, <em>world</em>.`\n *\n * This function is called `html` so that it can be easily used with HTML\n * syntax-highlighting extensions for various popular code editors.\n *\n * See also [templateFrom.html](template#html), which returns a similar result but\n * as an HTMLTemplateElement.\n *\n * @param {TemplateStringsArray} strings - the strings passed to the JavaScript template\n * literal\n * @param {string[]} substitutions - the variable values passed to the\n * JavaScript template literal\n * @returns {DocumentFragment}\n */\nexport const fragmentFrom = {\n html(strings, ...substitutions) {\n return templateFrom.html(strings, ...substitutions).content;\n },\n};\n\n/**\n * A JavaScript template string literal that returns an HTML template.\n *\n * Example:\n *\n * const myTemplate = templateFrom.html`Hello, <em>world</em>.`\n *\n * returns an `HTMLTemplateElement` whose `innerHTML` is `Hello, <em>world</em>.`\n *\n * This function is called `html` so that it can be easily used with HTML\n * syntax-highlighting extensions for various popular code editors.\n *\n * See also [html](html), a helper which returns a similar result but as an\n * DocumentFragment.\n *\n * @param {TemplateStringsArray} strings - the strings passed to the JavaScript template\n * literal\n * @param {string[]} substitutions - the variable values passed to the\n * JavaScript template literal\n * @returns {HTMLTemplateElement}\n */\nexport const templateFrom = {\n html(strings, ...substitutions) {\n const template = document.createElement(\"template\");\n template.innerHTML = String.raw(strings, ...substitutions);\n return template;\n },\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar defineProperty = require('../internals/object-define-property').f;\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + ++id, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar meta = module.exports = {\n REQUIRED: false,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var nativeMethod = NativePrototype[KEY];\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n nativeMethod.call(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n nativeMethod.call(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.REQUIRED = true;\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, Constructor, CONSTRUCTOR_NAME);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, CONSTRUCTOR_NAME);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(C.prototype, IS_MAP ? {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return C;\n },\n setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","/**\n * Helpers for dynamically creating and patching component templates.\n *\n * The [ShadowTemplateMixin](ShadowTemplateMixin) lets you define a component\n * template that will be used to popuplate the shadow subtree of new component\n * instances. These helpers, especially the [html](#html) function, are intended\n * to simplify the creation of such templates.\n *\n * In particular, these helpers can be useful in [patching\n * templates](customizing#template-patching) inherited from a base class.\n *\n * Some of these functions take _descriptors_ that can either be a class, a tag\n * name, or an HTML template. These are generally used to fill specific roles in\n * an element's template; see [element roles](customizing#element-part-types).\n *\n * @module template\n */\n\n// Used by registerCustomElement.\nconst mapBaseTagToCount = new Map();\n\n/**\n * Create an element from a role descriptor (a component class constructor or\n * an HTML tag name).\n *\n * If the descriptor is an HTML template, and the resulting document fragment\n * contains a single top-level node, that node is returned directly (instead of\n * the fragment).\n *\n * @param {PartDescriptor} descriptor - the descriptor that will be used to\n * create the element\n * @returns {Element} the new element\n */\nexport function createElement(descriptor) {\n if (typeof descriptor === \"function\") {\n // Instantiable component class constructor\n let element;\n try {\n element = new descriptor();\n } catch (e) {\n if (e.name === \"TypeError\") {\n // Most likely this error results from the fact that the indicated\n // component class hasn't been registered. Register it now with a random\n // name and try again.\n registerCustomElement(descriptor);\n element = new descriptor();\n } else {\n // The exception was for some other reason.\n throw e;\n }\n }\n return element;\n // @ts-ignore\n } else {\n // String tag name: e.g., 'div'\n return document.createElement(descriptor);\n }\n}\n\n/**\n * Register the indicated constructor as a custom element class.\n *\n * This function generates a suitable string tag for the class. If the\n * constructor is a named function (which is typical for hand-authored code),\n * the function's `name` will be used as the base for the tag. If the\n * constructor is an anonymous function (which often happens in\n * generated/minified code), the tag base will be \"custom-element\".\n *\n * In either case, this function adds a uniquifying number to the end of the\n * base to produce a complete tag.\n *\n * @private\n * @param {Constructor<HTMLElement>} classFn\n */\nfunction registerCustomElement(classFn) {\n let baseTag;\n // HTML places more restrictions on the first character in a tag than\n // JavaScript places on the first character of a class name. We apply this\n // more restrictive condition to the class names we'll convert to tags. Class\n // names that fail this check -- often generated class names -- will result in\n // a base tag name of \"custom-element\".\n const classNameRegex = /^[A-Za-z][A-Za-z0-9_$]*$/;\n const classNameMatch = classFn.name && classFn.name.match(classNameRegex);\n if (classNameMatch) {\n // Given the class name `FooBar`, calculate the base tag name `foo-bar`.\n const className = classNameMatch[0];\n const uppercaseRegEx = /([A-Z])/g;\n const hyphenated = className.replace(\n uppercaseRegEx,\n (match, letter, offset) => (offset > 0 ? `-${letter}` : letter)\n );\n baseTag = hyphenated.toLowerCase();\n } else {\n baseTag = \"custom-element\";\n }\n // Add a uniquifying number to the end of the tag until we find a tag\n // that hasn't been registered yet.\n let count = mapBaseTagToCount.get(baseTag) || 0;\n let tag;\n for (; ; count++) {\n tag = `${baseTag}-${count}`;\n if (!customElements.get(tag)) {\n // Not in use.\n break;\n }\n }\n // Register with the generated tag.\n customElements.define(tag, /** @type {any} */ classFn);\n // Bump number and remember it. If we see the same base tag again later, we'll\n // start counting at that number in our search for a uniquifying number.\n mapBaseTagToCount.set(baseTag, count + 1);\n}\n\n/**\n * Replace an original node in a tree or document fragment with the indicated\n * replacement node. The attributes, classes, styles, and child nodes of the\n * original node will be moved to the replacement.\n *\n * @param {Node} original - an existing node to be replaced\n * @param {Node} replacement - the node to replace the existing node with\n * @returns {Node} the updated replacement node\n */\nexport function replace(original, replacement) {\n const parent = original.parentNode;\n if (!parent) {\n throw \"An element must have a parent before it can be substituted.\";\n }\n if (\n (original instanceof HTMLElement || original instanceof SVGElement) &&\n (replacement instanceof HTMLElement || replacement instanceof SVGElement)\n ) {\n // Merge attributes from original to replacement, letting replacement win\n // conflicts. Handle classes and styles separately (below).\n Array.prototype.forEach.call(original.attributes, (\n /** @type {Attr} */ attribute\n ) => {\n if (\n !replacement.getAttribute(attribute.name) &&\n attribute.name !== \"class\" &&\n attribute.name !== \"style\"\n ) {\n replacement.setAttribute(attribute.name, attribute.value);\n }\n });\n // Copy classes/styles from original to replacement, letting replacement win\n // conflicts.\n Array.prototype.forEach.call(original.classList, (\n /** @type {string} */ className\n ) => {\n replacement.classList.add(className);\n });\n Array.prototype.forEach.call(original.style, (\n /** @type {number} */ key\n ) => {\n if (!replacement.style[key]) {\n replacement.style[key] = original.style[key];\n }\n });\n }\n // Copy over children.\n // @ts-ignore\n replacement.append(...original.childNodes);\n\n parent.replaceChild(replacement, original);\n return replacement;\n}\n\n/**\n * Replace a node with a new element, transferring all attributes, classes,\n * styles, and child nodes from the original(s) to the replacement(s).\n *\n * The descriptor used for the replacements can be a 1) component class\n * constructor, 2) an HTML tag name, or 3) an HTML template. For #1 and #2, if\n * the existing elements that match the selector are already of the desired\n * class/tag name, the replacement operation is skipped.\n *\n * @param {Element} original - the node to replace\n * @param {PartDescriptor} descriptor - the descriptor used to generate the\n * replacement element\n * @returns {Element} the replacement node(s)\n */\nexport function transmute(original, descriptor) {\n if (\n (typeof descriptor === \"function\" && original.constructor === descriptor) ||\n (typeof descriptor === \"string\" &&\n original instanceof Element &&\n original.localName === descriptor)\n ) {\n // Already correct type of element, no transmutation necessary.\n return original;\n } else {\n // Transmute the single node.\n const replacement = createElement(descriptor);\n replace(original, replacement);\n return replacement;\n }\n}\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","var $ = require('../internals/export');\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\n\nvar nativeFreeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeFreeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n freeze: function freeze(it) {\n return nativeFreeze && isObject(it) ? nativeFreeze(onFreeze(it)) : it;\n }\n});\n","import {\n defaultState,\n firstRender,\n raiseChangeEvents,\n render,\n renderChanges,\n rendered,\n rendering,\n setState,\n state,\n stateEffects,\n} from \"./internal.js\";\n\n/** @type {any} */\nconst stateKey = Symbol(\"state\");\n/** @type {any} */\nconst raiseChangeEventsInNextRenderKey = Symbol(\n \"raiseChangeEventsInNextRender\"\n);\n// Tracks total set of changes made to elements since their last render.\n/** @type {any} */\nconst changedSinceLastRenderKey = Symbol(\"changedSinceLastRender\");\n\n/**\n * Manages component state and renders changes in state\n *\n * This is modeled after React/Preact's state management, and is adapted for\n * use with web components. Applying this mixin to a component will give it\n * FRP behavior comparable to React's.\n *\n * This model is very basic. It's key aspects are:\n * * an immutable `state` property updated via `setState` calls.\n * * a `render` method that will be invoked asynchronously when state changes.\n *\n * @module ReactiveMixin\n * @param {Constructor<CustomElement>} Base\n */\nexport default function ReactiveMixin(Base) {\n class Reactive extends Base {\n constructor() {\n super();\n\n // Components can inspect `firstRender` during rendering to do special\n // work the first time (like wire up event handlers). Until the first\n // render actually happens, we set that flag to be undefined so we have a\n // way of distinguishing between a component that has never rendered and\n // one that is being rendered for the nth time.\n this[firstRender] = undefined;\n\n // We want to support the standard HTML pattern of only raising events in\n // response to direct user interactions. For a detailed discussion of this\n // point, see the Gold Standard checklist item for [Propery Change\n // Events](https://github.com/webcomponents/gold-standard/wiki/Property%20Change%20Events).\n //\n // To support this pattern, we define a flag indicating whether change\n // events should be raised. By default, we want the flag to be false. In\n // UI event handlers, a component can temporarily set the flag to true. If\n // a setState call is made while the flag is true, then that fact will be\n // remembered and passed the subsequent render/rendered methods. That will\n // let the methods know whether they should raise property change events.\n this[raiseChangeEvents] = false;\n\n // Maintain a change log of all fields which have changed since the\n // component was last rendered.\n this[changedSinceLastRenderKey] = null;\n\n // Set the initial state from the default state defined by the component\n // and its mixins/base classes.\n this[setState](this[defaultState]);\n }\n\n // When the component is attached to the document (or upgraded), we will\n // generally render the component for the first time. That operation will\n // include rendering of the default state and any state changes that\n // happened between constructor time and this connectedCallback.\n connectedCallback() {\n if (super.connectedCallback) {\n super.connectedCallback();\n }\n\n // Render the component.\n //\n // If the component was forced to render before this point, and the state\n // hasn't changed, this call will be a no-op.\n this[renderChanges]();\n }\n\n /**\n * The default state for the component. This can be extended by mixins and\n * classes to provide additional default state.\n *\n * @type {PlainObject}\n */\n // @ts-ignore\n get [defaultState]() {\n // Defer to base implementation if defined.\n return super[defaultState] || {};\n }\n\n /**\n * Render the indicated changes in state to the DOM.\n *\n * The default implementation of this method does nothing. Override this\n * method in your component to update your component's host element and\n * any shadow elements to reflect the component's new state. See the\n * [rendering example](ReactiveMixin#rendering).\n *\n * Be sure to call `super` in your method implementation so that your\n * component's base classes and mixins have a chance to perform their own\n * render work.\n *\n * @param {ChangedFlags} changed - dictionary of flags indicating which state\n * members have changed since the last render\n */\n [render](changed) {\n if (super[render]) {\n super[render](changed);\n }\n }\n\n /**\n * Render any pending component changes to the DOM.\n *\n * This method does nothing if the state has not changed since the last\n * render call.\n *\n * ReactiveMixin will invoke this method following a `setState` call;\n * you should not need to invoke this method yourself.\n *\n * This method invokes the internal `render` method, then invokes the\n * `rendered` method.\n */\n [renderChanges]() {\n if (this[firstRender] === undefined) {\n // First render.\n this[firstRender] = true;\n }\n\n // Get the log of which fields have changed since the last render.\n const changed = this[changedSinceLastRenderKey];\n\n // We only render if this is the first render, or state has changed since\n // the last render.\n if (this[firstRender] || changed) {\n // If at least one of the[setState] calls was made in response\n // to user interaction or some other component-internal event, set the\n // raiseChangeEvents flag so that render/rendered methods know whether\n // to raise property change events. See the comments in the component\n // constructor where we initialize this flag for details.\n const saveRaiseChangeEvents = this[raiseChangeEvents];\n this[raiseChangeEvents] = this[raiseChangeEventsInNextRenderKey];\n\n // From this point on, we'll assume we won't need to raise events in the\n // next render. If raiseChangeEvents is true right now, however, and the\n // rendered method calls setState, then this flag will be set to true\n // for the next render. That's apporopriate because the second-order\n // setState call in rendered still counts as a user-initiated effect\n // that should raise change events.\n this[raiseChangeEventsInNextRenderKey] = false;\n\n // We set a flag to indicate that rendering is happening. The component\n // may use this to avoid triggering other updates during the render.\n this[rendering] = true;\n\n // Invoke any internal render implementations.\n this[render](changed);\n\n this[rendering] = false;\n\n // Since we've now rendered all changes, clear the change log. If other\n // async render calls are queued up behind this call, they'll see an\n // empty change log, and so skip unnecessary render work.\n this[changedSinceLastRenderKey] = null;\n\n // Let the component know it was rendered.\n this[rendered](changed);\n\n // We've now rendered for the first time.\n this[firstRender] = false;\n\n // Restore state of event flag.\n this[raiseChangeEvents] = saveRaiseChangeEvents;\n }\n }\n\n /**\n * Perform any work that must happen after state changes have been rendered\n * to the DOM.\n *\n * The default implementation of this method does nothing. Override this\n * method in your component to perform work that requires the component to\n * be fully rendered, such as setting focus on a shadow element or\n * inspecting the computed style of an element. If such work should result\n * in a change in component state, you can safely call `setState` during the\n * `rendered` method.\n *\n * Be sure to call `super` in your method implementation so that your\n * component's base classes and mixins have a chance to perform their own\n * post-render work.\n *\n * @param {ChangedFlags} changed\n */\n [rendered](changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n }\n\n /**\n * Update the component's state by merging the specified changes on\n * top of the existing state. If the component is connected to the document,\n * and the new state has changed, this returns a promise to asynchronously\n * render the component. Otherwise, this returns a resolved promise.\n *\n * @param {PlainObject} changes - the changes to apply to the element's state\n * @returns {Promise} - resolves when the new state has been rendered\n */\n async [setState](changes) {\n // There's no good reason to have a render method update state.\n if (this[rendering]) {\n /* eslint-disable no-console */\n console.warn(\n `${this.constructor.name} called [setState] during rendering, which you should avoid.\\nSee https://elix.org/documentation/ReactiveMixin.`\n );\n }\n\n // Apply the changes to a copy of the component's current state to produce\n // a new, updated state and a dictionary of flags indicating which fields\n // actually changed.\n const { state, changed } = copyStateWithChanges(this, changes);\n\n // We only need to apply the changes to the component state if: a) the\n // current state is undefined (this is the first time setState has been\n // called), or b) the supplied changes parameter actually contains\n // substantive changes.\n if (this[stateKey] && Object.keys(changed).length === 0) {\n // No need to update state.\n return;\n }\n\n // Freeze the new state so it's immutable. This prevents accidental\n // attempts to set state without going through setState.\n Object.freeze(state);\n\n // Set this as the component's new state.\n this[stateKey] = state;\n\n // If setState was called with the raiseChangeEvents flag set, record that\n // fact for use in rendering. See the comments in the component\n // constructor for details.\n if (this[raiseChangeEvents]) {\n this[raiseChangeEventsInNextRenderKey] = true;\n }\n\n // Look to see whether the component is already set up to render.\n const willRender =\n this[firstRender] === undefined ||\n this[changedSinceLastRenderKey] !== null;\n\n // Add this round of changed fields to the complete log of fields that\n // have changed since the component was last rendered.\n this[changedSinceLastRenderKey] = Object.assign(\n this[changedSinceLastRenderKey] || {},\n changed\n );\n\n // We only need to queue a render if we're in the document and a render\n // operation hasn't already been queued for this component. If we're not\n // in the document yet, when the component is eventually added to the\n // document, the connectedCallback will ensure we render at that point.\n const needsRender = this.isConnected && !willRender;\n if (needsRender) {\n // Yield with promise timing. This lets any *synchronous* setState calls\n // that happen after this current setState call complete first. Their\n // effects on the state will be batched up, and accumulate in the change\n // log stored under this[changedSinceLastRenderKey].\n await Promise.resolve();\n\n // Now that the above promise has resolved, render the component. By the\n // time this line is reached, the complete log of batched changes can be\n // applied in a single render call.\n this[renderChanges]();\n }\n }\n\n /**\n * The component's current state.\n *\n * The returned state object is immutable. To update it, invoke\n * `internal.setState`.\n *\n * It's extremely useful to be able to inspect component state while\n * debugging. If you append `?elixdebug=true` to a page's URL, then\n * ReactiveMixin will conditionally expose a public `state` property that\n * returns the component's state. You can then access the state in your\n * browser's debug console.\n *\n * @type {PlainObject}\n */\n get [state]() {\n return this[stateKey];\n }\n\n /**\n * Ask the component whether a state with a set of recently-changed fields\n * implies that additional second-order changes should be applied to that\n * state to make it consistent.\n *\n * This method is invoked during a call to `internal.setState` to give all\n * of a component's mixins and classes a chance to respond to changes in\n * state. If one mixin/class updates state that it controls, another\n * mixin/class may want to respond by updating some other state member that\n * *it* controls.\n *\n * This method should return a dictionary of changes that should be applied\n * to the state. If the dictionary object is not empty, the\n * `internal.setState` method will apply the changes to the state, and\n * invoke this `stateEffects` method again to determine whether there are\n * any third-order effects that should be applied. This process repeats\n * until all mixins/classes report that they have no additional changes to\n * make.\n *\n * See an example of how `ReactiveMixin` invokes the `stateEffects` to\n * [ensure state consistency](ReactiveMixin#ensuring-state-consistency).\n *\n * @param {PlainObject} state - a proposal for a new state\n * @param {ChangedFlags} changed - the set of fields changed in this\n * latest proposal for the new state\n * @returns {PlainObject}\n */\n [stateEffects](state, changed) {\n return super[stateEffects] ? super[stateEffects](state, changed) : {};\n }\n }\n\n // Expose state when debugging; see note for `[state]` getter.\n const elixdebug = new URLSearchParams(location.search).get(\"elixdebug\");\n if (elixdebug === \"true\") {\n Object.defineProperty(Reactive.prototype, \"state\", {\n get() {\n return this[state];\n },\n });\n }\n\n return Reactive;\n}\n\n/**\n * Create a copy of the component's state with the indicated changes applied.\n * Ask the component whether the new state implies any second-order effects. If\n * so, apply those and loop again until the state has stabilized. Return the new\n * state and a dictionary of flags indicating which fields were actually\n * changed.\n *\n * @private\n * @param {Element} element\n * @param {PlainObject} changes\n */\nexport function copyStateWithChanges(element, changes) {\n // Start with a copy of the current state.\n /** @type {PlainObject} */\n const state = Object.assign({}, element[stateKey]);\n /** @type {ChangedFlags} */\n const changed = {};\n // Take the supplied changes as the first round of effects.\n let effects = changes;\n // Loop until there are no effects to apply.\n /* eslint-disable no-constant-condition */\n while (true) {\n // See whether the effects actually changed anything in state.\n const changedByEffects = fieldsChanged(state, effects);\n if (Object.keys(changedByEffects).length === 0) {\n // No more effects to apply; we're done.\n break;\n }\n // Apply the effects.\n Object.assign(state, effects);\n Object.assign(changed, changedByEffects);\n // Ask the component if there are any second- (or third-, etc.) order\n // effects that should be applied.\n effects = element[stateEffects](state, changedByEffects);\n }\n return { state, changed };\n}\n\n/**\n * Return true if the two values are equal.\n *\n * @private\n * @param {any} value1\n * @param {any} value2\n * @returns {boolean}\n */\nfunction equal(value1, value2) {\n if (value1 instanceof Date && value2 instanceof Date) {\n return value1.getTime() === value2.getTime();\n }\n return value1 === value2;\n}\n\n/**\n * Return a dictionary of flags indicating which of the indicated changes to the\n * state are actually substantive changes.\n *\n * @private\n * @param {PlainObject} state\n * @param {PlainObject} changes\n */\nfunction fieldsChanged(state, changes) {\n /** @type {ChangedFlags} */\n const changed = {};\n for (const field in changes) {\n if (!equal(changes[field], state[field])) {\n changed[field] = true;\n }\n }\n return changed;\n}\n","import {\n delegatesFocus,\n hasDynamicTemplate,\n ids,\n render,\n shadowRoot,\n shadowRootMode,\n template,\n} from \"./internal.js\";\n\n// A cache of processed templates, indexed by element class.\nconst classTemplateMap = new Map();\n\n// A Proxy that maps shadow element IDs to shadow elements.\n// This will be return as the element's `this[ids]` property;\n// see comments in that property below.\n/** @type {any} */\nconst shadowIdProxyKey = Symbol(\"shadowIdProxy\");\n\n// A reference stored on the shadow element proxy target to get to the actual\n// element. We use a Symbol here instead of a string name to avoid naming\n// conflicts with the element's internal shadow element IDs.\nconst proxyElementKey = Symbol(\"proxyElement\");\n\n// A handler used for the shadow element ID proxy.\nconst shadowIdProxyHandler = {\n get(target, id) {\n // From this proxy, obtain a reference to the original component.\n const element = target[proxyElementKey];\n\n // Get a reference to the component's open or closed shadow root.\n const root = element[shadowRoot];\n\n // Look for a shadow element with the indicated ID.\n return root && typeof id === \"string\" ? root.getElementById(id) : null;\n },\n};\n\n/**\n * Stamps a template into a component's Shadow DOM when instantiated\n *\n * To use this mixin, define a `template` method that returns a string or HTML\n * `<template>` element:\n *\n * import { createElement, replace, transmute } from 'elix/src/template.js';\n *\n * class MyElement extends ShadowTemplateMixin(HTMLElement) {\n * get [template]() {\n * return templateFrom.html`Hello, <em>world</em>.`;\n * }\n * }\n *\n * When your component class is instantiated, a shadow root will be created on\n * the instance, and the contents of the template will be cloned into the\n * shadow root. If your component does not define a `template` method, this\n * mixin has no effect.\n *\n * This adds a member on the component called `this[ids]` that can be used to\n * reference shadow elements with IDs. E.g., if component's shadow contains an\n * element `<button id=\"foo\">`, then this mixin will create a member\n * `this[ids].foo` that points to that button.\n *\n * @module ShadowTemplateMixin\n * @param {Constructor<HTMLElement>} Base\n */\nexport default function ShadowTemplateMixin(Base) {\n // The class prototype added by the mixin.\n class ShadowTemplate extends Base {\n /**\n * A convenient shortcut for looking up an element by ID in the component's\n * Shadow DOM subtree.\n *\n * Example: if component's template contains a shadow element `<button\n * id=\"foo\">`, you can use the reference `this[ids].foo` to obtain\n * the corresponding button in the component instance's shadow tree. The\n * `ids` property is simply a shorthand for `getElementById`, so\n * `this[ids].foo` is the same as\n * `this[shadowRoot].getElementById('foo')`.\n *\n * @type {object} - a dictionary mapping shadow element IDs to elements\n */\n get [ids]() {\n if (!this[shadowIdProxyKey]) {\n // Construct a proxy that maps to getElementById.\n const target = {\n // Give the proxy a means of refering to this element via the target.\n [proxyElementKey]: this,\n };\n this[shadowIdProxyKey] = new Proxy(target, shadowIdProxyHandler);\n }\n return this[shadowIdProxyKey];\n }\n\n /*\n * If the component defines a template, a shadow root will be created on the\n * component instance, and the template stamped into it.\n */\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n // We populate the shadow root if the component doesn't have a shadow;\n // i.e., the first time the component is rendered. For this check, we use\n // an internal reference we maintain for the shadow root; see below.\n if (!this[shadowRoot]) {\n // If this type of element defines a template, prepare it for use.\n const template = getTemplate(this);\n\n if (template) {\n // Stamp the template into a new shadow root.\n const root = this.attachShadow({\n delegatesFocus: this[delegatesFocus],\n mode: this[shadowRootMode],\n });\n const clone = document.importNode(template.content, true);\n root.append(clone);\n\n // After this call, we won't be able to rely on being able to access\n // the shadow root via `this.shadowRoot`, because the component may\n // have asked for a closed shadow root. We save a reference to the\n // shadow root now so that the component always has a consistent means\n // to reference its own shadow root.\n this[shadowRoot] = root;\n } else {\n // No template. Set shadow root to null (instead of undefined) so we\n // won't try to render shadow on next render.\n this[shadowRoot] = null;\n }\n }\n }\n\n /**\n * @type {ShadowRootMode}\n * @default \"open\"\n */\n get [shadowRootMode]() {\n return \"open\";\n }\n }\n\n return ShadowTemplate;\n}\n\n/**\n * Return the template for the element being instantiated.\n *\n * If this is the first time we're creating this type of element, or the\n * component has indicated that its template is dynamic (and should be retrieved\n * each time), ask the component class for the template and cache the result.\n * Otherwise, immediately return the cached template.\n *\n * @private\n * @param {HTMLElement} element\n * @returns {HTMLTemplateElement}\n */\nfunction getTemplate(element) {\n let t = element[hasDynamicTemplate]\n ? undefined // Always retrieve template\n : classTemplateMap.get(element.constructor); // See if we've cached it\n if (t === undefined) {\n // Ask the component for its template.\n t = element[template];\n // A component using this mixin isn't required to supply a template --\n // if they don't, they simply won't end up with a shadow root.\n if (t) {\n // But if the component does supply a template, it needs to be an\n // HTMLTemplateElement instance.\n if (!(t instanceof HTMLTemplateElement)) {\n throw `Warning: the [template] property for ${element.constructor.name} must return an HTMLTemplateElement.`;\n }\n }\n if (!element[hasDynamicTemplate]) {\n // Store prepared template for next creation of same type of element.\n // If the component didn't define a template, store null so that we skip\n // the template retrieval next time.\n classTemplateMap.set(element.constructor, t || null);\n }\n }\n return t;\n}\n","import AttributeMarshallingMixin from \"./AttributeMarshallingMixin.js\";\nimport ReactiveMixin from \"./ReactiveMixin.js\";\nimport ShadowTemplateMixin from \"./ShadowTemplateMixin.js\";\n\n/**\n * General-purpose base for writing components in functional-reactive style\n *\n * This base class lets you create web components in a functional-reactive\n * programming (FRP) style. It simply bundles a small set of mixins:\n *\n * const ReactiveElement =\n * AttributeMarshallingMixin(\n * ReactiveMixin(\n * ShadowTemplateMixin(\n * HTMLElement\n * )))));\n *\n * `ReactiveElement` is provided as a convenience. You can achieve the same\n * result by applying the mixins yourself to `HTMLElement`.\n *\n * @inherits HTMLElement\n * @mixes AttributeMarshallingMixin\n * @mixes ReactiveMixin\n * @mixes ShadowTemplateMixin\n */\nconst ReactiveElement = AttributeMarshallingMixin(\n ReactiveMixin(ShadowTemplateMixin(HTMLElement))\n);\n\nexport default ReactiveElement;\n","import { firstFocusableElement } from \"../core/dom.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { delegatesFocus, focusTarget, shadowRoot } from \"./internal.js\";\n\n/**\n * Delegates a component's focus to its first focusable shadow element.\n *\n * This mixin serves as a polyfill for the standard `delegatesFocus` shadow root\n * property. As of June 2020, that property is still only natively supported in\n * Chrome. The Chrome delegatesFocus implementation has some subtle issues;\n * until additional implementations are available, it's hard to know whether the\n * issues are with the definition of delegatesFocus, with Chrome's\n * implementation, or with Elix component code. Accordingly, for the time being\n * this polyfill is used even on Chrome.\n *\n * @module DelegateFocusMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function DelegateFocusMixin(Base) {\n // The class prototype added by the mixin.\n class DelegateFocus extends Base {\n /**\n * Returns true if the component is delegating its focus.\n *\n * A component using `DelegateFocusMixin` will always have this property be\n * true unless a class takes measures to override it.\n *\n * @type {boolean}\n * @default true\n */\n get [delegatesFocus]() {\n return true;\n }\n\n /**\n * If someone tries to put the focus on us, delegate the focus to the first\n * focusable element in the composed tree below our shadow root.\n *\n * @ignore\n * @param {FocusOptions=} focusOptions\n */\n focus(focusOptions) {\n // On browsers that support delegatesFocus natively, we should just be\n // able to let the browser handle the focus method. However, we hit a bug\n // in June 2020 where the native focus method in Chrome did not always\n // produce the expected results if delegatesFocus is set.\n //\n // Specific bug: a PopupButton would like to delegates focus to its source\n // button. Tabbing to a PopupButton focused on the source button as\n // expected. Moreover, programmatically setting focus on the button also\n // worked. However, when a PopupButton's popup was closed with the Escape\n // key, OverlayMixin attemped to set programmatically focus to the\n // PopupButton. This did *not* work as expecte, and focus ended up on the\n // body. Until we have a second native implementation to compare against,\n // it's difficult to determine whether this is a bug in the definition of\n // delegatesFocus, Chrome's implementation, or our code.\n\n // /** @type {any} */ const cast = this[shadowRoot];\n // if (cast.delegatesFocus) {\n // // Native support for delegatesFocus, so don't need to do anything.\n // super.focus(focusOptions);\n // return;\n // }\n const focusElement = this[focusTarget];\n if (focusElement) {\n focusElement.focus(focusOptions);\n }\n }\n\n get [focusTarget]() {\n // HACK: The commented-out code lets us rely on the browser to indicate\n // which element should be focused on in browsers that don't support\n // native delegatesFocus. However, this code creates subtle focus problems\n // in components like AutoCompleteListBox: if the user clicks the toggle\n // button, the focus won't be placed on the top-level AutoCompleteComboBox\n // as expected; that element will be returned as the focus target, but if\n // it doesn't have a non-negative tabindex, forwardFocus won't think it's\n // focusable. A more correct solution would be for all components that are\n // focusable to give themselves a tabIndex of 0 by default or define a new\n // public `focusable` that components could use to indicate that they're\n // focusable. Until we have time to fully explore that, we workaround the\n // bug by providing the polyfill behavior even in browsers that have\n // delegatesFocus.\n\n // /** @type {any} */ const cast = this[shadowRoot];\n // return cast.delegatesFocus\n // ? this\n // : firstFocusableElement(this[shadowRoot]);\n return firstFocusableElement(this[shadowRoot]);\n }\n }\n\n return DelegateFocus;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n firstRender,\n inputDelegate,\n raiseChangeEvents,\n render,\n rendered,\n setState,\n state,\n stateEffects,\n} from \"./internal.js\";\n\n/**\n * Delegates its ARIA label property to an inner input-type element.\n *\n * This helps ensure that elements built around an inner input element provide a\n * proper accessible label for assistive technologies like screen readers.\n *\n * You can identify which inner input element selection should be delegated to\n * by defining an `internal.inputDelegate` property and returning the desired\n * inner input.\n *\n * @module DelegateInputLabelMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function DelegateInputLabelMixin(Base) {\n // The class prototype added by the mixin.\n class DelegateInputLabel extends Base {\n // Forward any ARIA label to the input element.\n get ariaLabel() {\n return this[state].ariaLabel;\n }\n set ariaLabel(ariaLabel) {\n if (!this[state].removingAriaAttribute) {\n this[setState]({\n ariaLabel: String(ariaLabel),\n });\n }\n }\n\n // Forward ARIA labelledby as an aria-label to the input element.\n // Note the lowercase \"b\" in the name, necessary to support the actual\n // attribute name \"aria-labelledby\", which has no hyphen before the \"by\".\n get ariaLabelledby() {\n return this[state].ariaLabelledby;\n }\n set ariaLabelledby(ariaLabelledby) {\n if (!this[state].removingAriaAttribute) {\n this[setState]({\n ariaLabelledby: String(ariaLabelledby),\n });\n }\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n ariaLabel: null,\n ariaLabelledby: null,\n inputLabel: null,\n removingAriaAttribute: false,\n });\n }\n\n [render](changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n if (this[firstRender]) {\n // Refresh the input label on focus. This refresh appears to happen fast\n // enough that the screen reader will announce the refreshed label.\n this.addEventListener(\"focus\", () => {\n this[raiseChangeEvents] = true;\n const inputLabel = refreshInputLabel(this, this[state]);\n this[setState]({ inputLabel });\n this[raiseChangeEvents] = false;\n });\n }\n\n // Apply the latest input label to the input delegate.\n if (changed.inputLabel) {\n const { inputLabel } = this[state];\n if (inputLabel) {\n this[inputDelegate].setAttribute(\"aria-label\", inputLabel);\n } else {\n this[inputDelegate].removeAttribute(\"aria-label\");\n }\n }\n }\n\n [rendered](changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n if (this[firstRender]) {\n // Refresh the label on first render. This is not guaranteed to pick up\n // labels defined by another element, as that element (or elements) may\n // not be in the DOM yet. For that reason, we'll also refresh the label\n // on focus. The reason to do it now is to handle the common cases where\n // the element defining the label does exist so that accessibility\n // testing tools can confirm that the input delegate does have a label.\n // Because this refresh can entail multiple searches of the tree, we\n // defer the refresh to idle time.\n // @ts-ignore\n const idleCallback = window.requestIdleCallback || setTimeout;\n idleCallback(() => {\n const inputLabel = refreshInputLabel(this, this[state]);\n this[setState]({ inputLabel });\n });\n }\n\n // Once we've obtained an aria-label or aria-labelledby from the host, we\n // remove those attirbutes so that the labels don't get announced twice.\n // We use a flag to distinguish between us removing our own ARIA\n // attributes (which should not update state), and someone removing\n // those attributes from the outside (which should update state).\n const { ariaLabel, ariaLabelledby } = this[state];\n if (changed.ariaLabel && !this[state].removingAriaAttribute) {\n if (this.getAttribute(\"aria-label\")) {\n this.setAttribute(\"delegated-label\", ariaLabel);\n this[setState]({ removingAriaAttribute: true });\n this.removeAttribute(\"aria-label\");\n }\n }\n if (changed.ariaLabelledby && !this[state].removingAriaAttribute) {\n if (this.getAttribute(\"aria-labelledby\")) {\n this.setAttribute(\"delegated-labelledby\", ariaLabelledby);\n this[setState]({ removingAriaAttribute: true });\n this.removeAttribute(\"aria-labelledby\");\n }\n }\n\n if (changed.removingAriaAttribute && this[state].removingAriaAttribute) {\n // We've done whatever removal we needed, and can now reset our flag.\n this[setState]({ removingAriaAttribute: false });\n }\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects]\n ? super[stateEffects](state, changed)\n : {};\n\n // If the ariaLabel changes, we can update our inputLabel state\n // immediately. Among other things, this facilitates scenarios where we\n // have nested elements using DelegateInputLabelMixin: the outermost\n // element can use whatever label approach it wants, the inner elements\n // will all use ariaLabel.\n //\n // We also update the label if we're focused, using ariaLabelledby, and\n // the selectedText changes. One pattern with select-like elements is to\n // have them include their own ID in the IDs specified by aria-labelledby.\n // This can incorporate the element's own `selectedText` in the announced\n // label. That `selectedText` can change while the element has focus, in\n // which case we'll refresh.\n if (\n (changed.ariaLabel && state.ariaLabel) ||\n (changed.selectedText &&\n state.ariaLabelledby &&\n this.matches(\":focus-within\"))\n ) {\n const inputLabel = refreshInputLabel(this, state);\n Object.assign(effects, { inputLabel });\n }\n\n return effects;\n }\n }\n\n return DelegateInputLabel;\n}\n\n// Given an element that is being used as a label, extract its label text.\nfunction getLabelFromElement(element) {\n // We use innerText here instead of textContent because we want the rendered\n // text. If, e.g., a text node includes a span with `display: none`,\n // textContent would include that hidden text, but innerText would leave it\n // out -- which is what we want here.\n if (\"selectedText\" in element) {\n // Element (most likely Elix) with selectedText property\n return element.selectedText;\n } else if (\"value\" in element && \"options\" in element) {\n // select or select-like element\n const value = element.value;\n const option = element.options.find((option) => option.value === value);\n return option ? option.innerText : \"\";\n } else if (\"value\" in element) {\n // Other input element\n return element.value;\n } else {\n // Other\n return element.innerText;\n }\n}\n\n/**\n * Calculate an appropriate label for the component's delegated input element.\n * When the element gets the focus, we refresh its label. This is done because\n * three of the labeling strategies (`aria-labelledby` attribute, `for`\n * attribute, and wrapping `label`) reference other elements in the tree -- and\n * the contents of those elements can change dynamically.\n *\n * @private\n * @param {HTMLElement} element\n * @param {PlainObject} state\n */\nfunction refreshInputLabel(element, state) {\n const { ariaLabel, ariaLabelledby } = state;\n /** @type {any} */ const rootNode = element.isConnected\n ? element.getRootNode()\n : null;\n let inputLabel = null;\n\n // Prefer aria-labelledby over aria-label, per\n // https://developers.google.com/web/fundamentals/accessibility/semantics-aria/aria-labels-and-relationships.\n // After that, we prefer a `label` element with a `for` attribute, and finally\n // a wrapping `label` element.\n //\n // There do not appear to be consistent cross-browser rules for handling\n // multiple forms of label assignment on the same component. E.g., if you\n // place an element in a wrapping label *and* point a `label` element at that\n // element with a `for` attribute, as of August 2020 Chrome and Firefox will\n // announce both, but Safari will only announce the `for` label.\n //\n // Since people are probably not relying upon specific results for multiple\n // forms of label assignment, we don't attempt to construct a combined label\n // in those cases.\n if (ariaLabelledby && rootNode) {\n // Collect labels from elements with the indicated IDs.\n const ids = ariaLabelledby.split(\" \");\n const labels = ids.map((id) => {\n const elementWithId = rootNode.getElementById(id);\n // Get a label from the indicated element.\n // Special case: if the element is providing its own label, we return its\n // current `selectedText` state.\n const label = !elementWithId\n ? \"\"\n : elementWithId === element && state.value !== null\n ? state.selectedText\n : getLabelFromElement(elementWithId);\n return label;\n });\n inputLabel = labels.join(\" \");\n } else if (ariaLabel) {\n // Use ariaLabel property as input label.\n inputLabel = ariaLabel;\n } else if (rootNode) {\n const id = element.id;\n if (id) {\n // Look for labelling element with `for` attribute.\n const elementWithFor = rootNode.querySelector(`[for=\"${id}\"]`);\n if (elementWithFor instanceof HTMLElement) {\n // Obtain label from wrapping label element.\n inputLabel = getLabelFromElement(elementWithFor);\n }\n }\n if (inputLabel === null) {\n // Last option is to look for closest wrapping label element.\n const labelElement = element.closest(\"label\");\n if (labelElement) {\n inputLabel = getLabelFromElement(labelElement);\n }\n }\n }\n\n if (inputLabel) {\n inputLabel = inputLabel.trim();\n }\n\n return inputLabel;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { inputDelegate } from \"./internal.js\";\n\n/**\n * Delegates text selection methods and properties to an inner input-type element\n *\n * This mixin makes it easy for you to support the complete set standard DOM\n * APIs for selecting text by delegating those methods to an inner input-type\n * element.\n *\n * You can identify which inner input element selection should be delegated to\n * by defining an `internal.inputDelegate` property and returning the desired\n * inner input.\n *\n * @module DelegateInputSelectionMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function DelegateInputSelectionMixin(Base) {\n // The class prototype added by the mixin.\n class DelegateInputSelection extends Base {\n /**\n * Selects all the text.\n *\n * See the standard [select](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/select)\n * documentation for details.\n */\n select() {\n this[inputDelegate].select();\n }\n\n /**\n * The end index of the selected text.\n *\n * See the standard [input](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement)\n * element documentation for details.\n */\n get selectionEnd() {\n return this[inputDelegate].selectionEnd;\n }\n set selectionEnd(selectionEnd) {\n this[inputDelegate].selectionEnd = selectionEnd;\n }\n\n /**\n * The beginning index of the selected text.\n *\n * See the standard [input](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement)\n * element documentation for details.\n */\n get selectionStart() {\n return this[inputDelegate].selectionStart;\n }\n set selectionStart(selectionStart) {\n this[inputDelegate].selectionStart = selectionStart;\n }\n\n /**\n * Replaces a range of text.\n *\n * See the standard [setRangeText](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setRangeText)\n * documentation for details.\n */\n setRangeText(...params) {\n this[inputDelegate].setRangeText(...params);\n }\n\n /**\n * Sets the start and end positions of the current text selection.\n *\n * See the standard [setSelectionRange](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange)\n * documentation for details.\n */\n setSelectionRange(...params) {\n this[inputDelegate].setSelectionRange(...params);\n /** @type {HTMLInputElement} */ const e = document.createElement(\"input\");\n e.select;\n }\n }\n\n return DelegateInputSelection;\n}\n","import { deepContains } from \"../core/dom.js\";\nimport { fragmentFrom, templateFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { defaultState, render, setState, state, template } from \"./internal.js\";\n\n// We consider the keyboard to be active if the window has received a keydown\n// event since the last mousedown event.\nlet keyboardActive = false;\n\n/** @type {any} */\nconst focusVisibleChangedListenerKey = Symbol(\"focusVisibleChangedListener\");\n\n/**\n * Shows a focus indication if and only if the keyboard is active.\n *\n * The keyboard is considered to be active if a keyboard event has occurred\n * since the last mousedown event.\n *\n * This is loosely modeled after the proposed\n * [focus-visible](https://github.com/WICG/focus-visible) feature for CSS.\n *\n * @module FocusVisibleMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function FocusVisibleMixin(Base) {\n // The class prototype added by the mixin.\n return class FocusVisible extends Base {\n constructor() {\n // @ts-ignore\n super();\n\n // We listen to focusin/focusout instead of focus/blur because components\n // like Menu want to handle focus visiblity for the items they contain,\n // and those contained items can get the focus. Using focusin/focusout\n // lets us know whether this element *or any element it contains* has the\n // focus.\n //\n // Focus events are problematic in that they can occur during rendering:\n // if an element with the focus is updated so that its tabindex is\n // removed, it will lose focus. Since these focus handlers need to set\n // state, this could lead to setting state during rendering, which is bad.\n // To avoid this problem, we use promise timing to defer the setting of\n // state.\n this.addEventListener(\"focusout\", (event) => {\n Promise.resolve().then(() => {\n // What has the focus now?\n /** @type {any} */ const cast = event;\n const newFocusedElement =\n cast.relatedTarget || document.activeElement;\n const isFocusedElement = this === newFocusedElement;\n const containsFocus = deepContains(this, newFocusedElement);\n const lostFocus = !isFocusedElement && !containsFocus;\n if (lostFocus) {\n this[setState]({\n focusVisible: false,\n });\n // No longer need to listen for changes in focus visibility.\n document.removeEventListener(\n \"focusvisiblechange\",\n this[focusVisibleChangedListenerKey]\n );\n this[focusVisibleChangedListenerKey] = null;\n }\n });\n });\n this.addEventListener(\"focusin\", () => {\n Promise.resolve().then(() => {\n if (this[state].focusVisible !== keyboardActive) {\n // Show the element as focused if the keyboard has been used.\n this[setState]({\n focusVisible: keyboardActive,\n });\n }\n if (!this[focusVisibleChangedListenerKey]) {\n // Listen to subsequent changes in focus visibility.\n this[focusVisibleChangedListenerKey] = () => refreshFocus(this);\n document.addEventListener(\n \"focusvisiblechange\",\n this[focusVisibleChangedListenerKey]\n );\n }\n });\n });\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n focusVisible: false,\n });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n // Suppress the component's normal `outline` style unless we know the\n // focus should be visible.\n if (changed.focusVisible) {\n const { focusVisible } = this[state];\n this.toggleAttribute(\"focus-visible\", focusVisible);\n }\n }\n\n get [template]() {\n const result = super[template] || templateFrom.html``;\n result.content.append(fragmentFrom.html`\n <style>\n :host {\n outline: none;\n }\n\n :host([focus-visible]:focus-within) {\n outline-color: Highlight; /* Firefox */\n outline-color: -webkit-focus-ring-color; /* All other browsers */\n outline-style: auto;\n }\n </style>\n `);\n return result;\n }\n };\n}\n\nfunction refreshFocus(/** @type {ReactiveElement} */ element) {\n element[setState]({\n focusVisible: keyboardActive,\n });\n}\n\nfunction updateKeyboardActive(/** @type {boolean} */ newKeyboardActive) {\n if (keyboardActive !== newKeyboardActive) {\n keyboardActive = newKeyboardActive;\n const event = new CustomEvent(\"focusvisiblechange\", {\n detail: {\n focusVisible: keyboardActive,\n },\n });\n document.dispatchEvent(event);\n }\n}\n\n// Listen for top-level keydown and mousedown events.\n// Use capture phase so we detect events even if they're handled.\nwindow.addEventListener(\n \"keydown\",\n () => {\n updateKeyboardActive(true);\n },\n { capture: true }\n);\n\nwindow.addEventListener(\n \"mousedown\",\n () => {\n updateKeyboardActive(false);\n },\n { capture: true }\n);\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n nativeInternals,\n render,\n rendered,\n setState,\n state,\n} from \"./internal.js\";\n\n/**\n * Allows a component to participate in HTML form submission.\n *\n * The mixin expects the component to define a `value` property of type\n * `string`.\n *\n * @module FormElementMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function FormElementMixin(Base) {\n // The class prototype added by the mixin.\n class FormElement extends Base {\n constructor() {\n super();\n /** @type {any} */ const cast = this;\n if (!this[nativeInternals] && cast.attachInternals) {\n this[nativeInternals] = cast.attachInternals();\n }\n }\n\n checkValidity() {\n return this[nativeInternals].checkValidity();\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n name: \"\",\n validationMessage: \"\",\n valid: true,\n });\n }\n\n // Uncomment for debugging only\n get internals() {\n return this[nativeInternals];\n }\n\n static get formAssociated() {\n return true;\n }\n\n /**\n * The ID of the `form` element with which this element is associated,\n * or `null` if the element is not associated with any form. This is provided\n * for consistency with the native HTML\n * [form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#form)\n * property.\n *\n * @type {string}\n */\n get form() {\n return this[nativeInternals].form;\n }\n\n /**\n * The name of the form field that will be filled with this element's\n * `value`. This is an analogue of the standard HTML\n * [name](https://developer.mozilla.org/en-US/docs/Web/API/Element/name)\n * property.\n *\n * @type {string}\n */\n get name() {\n return this[state] ? this[state].name : \"\";\n }\n set name(name) {\n const s = String(name);\n if (\"name\" in Base.prototype) {\n super.name = s;\n }\n this[setState]({\n name: s,\n });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n // Reflect name property to attribute so form will pick it up.\n if (changed.name) {\n const { name } = this[state];\n if (name) {\n this.setAttribute(\"name\", name);\n } else {\n this.removeAttribute(\"name\");\n }\n }\n\n if (this[nativeInternals] && this[nativeInternals].setValidity) {\n // Reflect validity state to internals.\n if (changed.valid || changed.validationMessage) {\n const { valid, validationMessage } = this[state];\n if (valid) {\n this[nativeInternals].setValidity({});\n } else {\n this[nativeInternals].setValidity(\n {\n customError: true,\n },\n validationMessage\n );\n }\n }\n }\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n if (changed.value) {\n if (this[nativeInternals]) {\n this[nativeInternals].setFormValue(this[state].value, this[state]);\n }\n }\n }\n\n reportValidity() {\n return this[nativeInternals].reportValidity();\n }\n\n /**\n * The \"type\" of the form field, provided for consistency with the\n * native HTML\n * [type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#type)\n * property.\n *\n * If a base class provides a `type` property, that will be returned. (If\n * this mixin is applied to a class defined by WrappedStandardElement, this\n * will return the `type` of the inner standard element.) Otherwise, the\n * default value of this property will be the same as the HTML tag name\n * registered for the custom element.\n *\n * @type {string}\n */\n get type() {\n // Defer to base class value.\n return super.type || this.localName;\n }\n\n get validationMessage() {\n return this[state].validationMessage;\n }\n\n get validity() {\n return this[nativeInternals].validity;\n }\n\n get willValidate() {\n return this[nativeInternals].willValidate;\n }\n }\n\n return FormElement;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\";\nimport { firstRender, render } from \"./internal.js\";\n\n/**\n * An element with no visible appearance\n *\n * In some situations, you may be using a component that defines an\n * [element role](customizing#element-part-types) that you don't want to fill.\n * In such cases, you can indicate that the `Hidden` element class should be\n * used to fill that role. The component will create an instance of this class\n * inside its shadow tree, but the element will be invisible to the user.\n *\n * @inherits ReactiveElement\n */\nclass Hidden extends ReactiveElement {\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n if (this[firstRender]) {\n this.setAttribute(\"hidden\", \"\");\n }\n }\n}\n\nexport default Hidden;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof-raw');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n defaultTabIndex,\n delegatesFocus,\n keydown,\n raiseChangeEvents,\n render,\n rendering,\n setState,\n state,\n} from \"./internal.js\";\n\n/**\n * Manages keyboard handling for a component.\n *\n * This mixin handles several keyboard-related features.\n *\n * First, it wires up a single keydown event handler that can be shared by\n * multiple mixins on a component. The event handler will invoke a `keydown`\n * method with the event object, and any mixin along the prototype chain that\n * wants to handle that method can do so.\n *\n * If a mixin wants to indicate that keyboard event has been handled, and that\n * other mixins should *not* handle it, the mixin's `keydown` handler should\n * return a value of true. The convention that seems to work well is that a\n * mixin should see if it wants to handle the event and, if not, then ask the\n * superclass to see if it wants to handle the event. This has the effect of\n * giving the mixin that was applied last the first chance at handling a\n * keyboard event.\n *\n * Example:\n *\n * [keydown](event) {\n * let handled;\n * switch (event.key) {\n * // Handle the keys you want, setting handled = true if appropriate.\n * }\n * // Prefer mixin result if it's defined, otherwise use base result.\n * return handled || (super[keydown] && super[keydown](event));\n * }\n *\n * A second feature provided by this mixin is that it implicitly makes the\n * component a tab stop if it isn't already, by setting `tabindex` to 0. This\n * has the effect of adding the component to the tab order in document order.\n *\n * @module KeyboardMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function KeyboardMixin(Base) {\n // The class prototype added by the mixin.\n class Keyboard extends Base {\n constructor() {\n // @ts-ignore\n super();\n this.addEventListener(\"keydown\", async (event) => {\n this[raiseChangeEvents] = true;\n // For use with FocusVisibleMixin.\n if (!this[state].focusVisible) {\n // The user may have begun interacting with this element using the\n // mouse/touch, but has now begun using the keyboard, so show focus.\n this[setState]({\n focusVisible: true,\n });\n }\n const handled = this[keydown](event);\n if (handled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n await Promise.resolve();\n this[raiseChangeEvents] = false;\n });\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"tabindex\") {\n // Parse the passed value, which could be a string or null.\n let parsed;\n if (newValue === null) {\n // tabindex attribute was removed.\n parsed = -1;\n } else {\n parsed = Number(newValue);\n if (isNaN(parsed)) {\n // Non-numeric tabindex falls back to default value (if defined).\n parsed = this[defaultTabIndex] ? this[defaultTabIndex] : 0;\n }\n }\n this.tabIndex = parsed;\n } else {\n super.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n // @ts-ignore\n get [defaultState]() {\n // If we're using DelegateFocusMixin, we don't need or want to set a\n // tabindex on the host; we'll rely on the inner shadow elements to take\n // the focus and raise keyboard events. Otherwise, we do set a tabindex on\n // the host, so that we can get keyboard events.\n const tabIndex = this[delegatesFocus] ? -1 : 0;\n const state = Object.assign(super[defaultState] || {}, {\n tabIndex,\n });\n\n return state;\n }\n\n /**\n * See the [symbols](internal#internal.keydown) documentation for details.\n */\n [keydown](/** @type {KeyboardEvent} */ event) {\n if (super[keydown]) {\n return super[keydown](event);\n }\n return false;\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n if (changed.tabIndex) {\n this.tabIndex = this[state].tabIndex;\n }\n }\n\n // Record our own notion of the state of the tabIndex property so we can\n // rerender if necessary.\n get tabIndex() {\n return super.tabIndex;\n }\n set tabIndex(tabIndex) {\n // If value has changed, invoke the super setter.\n if (super.tabIndex !== tabIndex) {\n super.tabIndex = tabIndex;\n }\n\n // The tabIndex setter can get called during rendering when we render our\n // own notion of the tabIndex state, in which case we don't need or want\n // to set state again.\n if (!this[rendering]) {\n // Record the new tabIndex in our state.\n this[setState]({\n tabIndex,\n });\n }\n }\n }\n\n return Keyboard;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n ids,\n raiseChangeEvents,\n rendered,\n setState,\n shadowRoot,\n state,\n stateEffects,\n} from \"./internal.js\";\n\nconst documentMouseupListenerKey = Symbol(\"documentMouseupListener\");\n\n/**\n * Add drag-select behavior to an element with a popup.\n *\n * This allows a user to mouse down on a popup source, drag into the resulting\n * popup, and release the mouse to select something in the popup. This can be\n * used in conjunction with [PopupListMixin](PopupListMixin).\n *\n * @module PopupDragSelectMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function PopupDragSelectMixin(Base) {\n // The class prototype added by the mixin.\n class PopupDragSelect extends Base {\n connectedCallback() {\n super.connectedCallback();\n // Handle edge case where component is opened, removed, then added back.\n listenIfOpenAndConnected(this);\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n dragSelect: true,\n });\n }\n\n disconnectedCallback() {\n if (super.disconnectedCallback) {\n super.disconnectedCallback();\n }\n listenIfOpenAndConnected(this);\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n super[rendered](changed);\n\n if (changed.opened) {\n listenIfOpenAndConnected(this);\n }\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects](state, changed);\n\n // Set things when opening, or reset things when closing.\n if (changed.opened) {\n if (state.opened) {\n // Opening\n Object.assign(effects, {\n // Until we get a mouseup, we're doing a drag-select.\n dragSelect: true,\n });\n }\n }\n\n return effects;\n }\n }\n\n return PopupDragSelect;\n}\n\nasync function handleMouseup(/** @type {MouseEvent} */ event) {\n // @ts-ignore\n const element = this;\n const hitTargets = element[shadowRoot].elementsFromPoint(\n event.clientX,\n event.clientY\n );\n if (element.opened) {\n // Was mouseup over source part?\n const overSource = hitTargets.indexOf(element[ids].source) >= 0;\n\n // Was mouseup over the popup or popup frame?\n const popup = element[ids].popup;\n const overPopup = hitTargets.indexOf(popup) >= 0;\n const overPopupFrame = popup.frame && hitTargets.indexOf(popup.frame) >= 0;\n\n if (overSource) {\n // User released the mouse over the source button (behind the\n // backdrop), so we're no longer doing a drag-select.\n if (element[state].dragSelect) {\n element[raiseChangeEvents] = true;\n element[setState]({\n dragSelect: false,\n });\n element[raiseChangeEvents] = false;\n }\n } else if (!(overPopup || overPopupFrame)) {\n // If we get to this point, the user released over the backdrop with\n // the popup open, so close.\n element[raiseChangeEvents] = true;\n await element.close();\n element[raiseChangeEvents] = false;\n }\n }\n}\n\nfunction listenIfOpenAndConnected(element) {\n if (element[state].opened && element.isConnected) {\n // If the popup is open and user releases the mouse over the backdrop, we\n // want to close the popup. We need to listen to mouseup on the document,\n // not this element. If the user mouses down on the source, then moves the\n // mouse off the document before releasing the mouse, the element itself\n // won't get the mouseup. The document will, however, so it's a more\n // reliable source of mouse state.\n //\n // Coincidentally, we *also* need to listen to mouseup on the document to\n // tell whether the user released the mouse over the source button. When the\n // user mouses down, the backdrop will appear and cover the source, so from\n // that point on the source won't receive a mouseup event. Again, we can\n // listen to mouseup on the document and do our own hit-testing to see if\n // the user released the mouse over the source.\n if (!element[documentMouseupListenerKey]) {\n // Not listening yet; start.\n element[documentMouseupListenerKey] = handleMouseup.bind(element);\n document.addEventListener(\"mouseup\", element[documentMouseupListenerKey]);\n }\n } else if (element[documentMouseupListenerKey]) {\n // Currently listening; stop.\n document.removeEventListener(\n \"mouseup\",\n element[documentMouseupListenerKey]\n );\n element[documentMouseupListenerKey] = null;\n }\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n raiseChangeEvents,\n rendered,\n setState,\n state,\n} from \"./internal.js\";\n\n/**\n * Tracks the disabled state of a component that can be disabled\n *\n * @module DisabledMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function DisabledMixin(Base) {\n // The class prototype added by the mixin.\n class Disabled extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n disabled: false,\n });\n }\n\n /**\n * True if the component is disabled, false (the default) if not.\n *\n * The value of this property will be reflected to the `disabled` attribute\n * so that it can be referenced in CSS. Note that this non-native\n * implementation of the `disabled` attribute will *not* trigger the\n * `:disabled` CSS pseudo-class, so your style rules will have to reference\n * the presence or absence of the `disabled` attribute. That is, instead\n * of writing\n *\n * my-component:disabled { ... }\n *\n * write this instead\n *\n * my-component[disabled] { ... }\n *\n * Like the native `disabled` attribute, this attribute is boolean. That\n * means that it's *existence* in markup sets the attribute, even if set to\n * an empty string or a string like \"false\".\n *\n * @type {boolean}\n * @default false\n */\n get disabled() {\n return this[state].disabled;\n }\n // AttributeMarshallingMixin should parse this as a boolean attribute for us.\n set disabled(disabled) {\n this[setState]({ disabled });\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n if (changed.disabled) {\n // Reflect value of disabled property to the corresponding attribute.\n this.toggleAttribute(\"disabled\", this.disabled);\n\n if (this[raiseChangeEvents]) {\n /**\n * Raised when the `disabled` property changes.\n *\n * @event disabledchange\n */\n const event = new CustomEvent(\"disabledchange\", {\n bubbles: true,\n });\n this.dispatchEvent(event);\n }\n }\n }\n }\n\n return Disabled;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { setState } from \"./internal.js\";\n\n/**\n * Lets an element determine whether it resides in right-to-left text.\n *\n * @module LanguageDirectionMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function LanguageDirectionMixin(Base) {\n // The class prototype added by the mixin.\n return class LanguageDirection extends Base {\n // The only way to get text direction is to wait for the component to\n // connect and then inspect the computed style on its root element. We set\n // state before calling super so the new state will be included when\n // ReactiveMixin calls render.\n connectedCallback() {\n /** @type {any} */ const element = this;\n const languageDirection = getComputedStyle(element).direction;\n const rightToLeft = languageDirection === \"rtl\";\n this[setState]({ rightToLeft });\n super.connectedCallback();\n }\n };\n}\n","/**\n * Function for positioning a popup relative to a source element.\n *\n * @module positionPopup\n */\n\n/**\n * Given an (x, y) origin point, a bounding rectangle, and a layout, return the\n * height and width of the available space in the quadrant used by that layout.\n *\n * @private\n * @param {DOMRect} sourceRect\n * @param {DOMRect} boundsRect\n */\nfunction availableSpace(sourceRect, boundsRect, direction, align) {\n const sourceOrigin = getSourceOrigin(sourceRect, direction, align);\n\n let height = 0;\n let width = 0;\n const vertical = direction === \"above\" || direction === \"below\";\n switch (direction) {\n case \"above\":\n height = sourceOrigin.y - boundsRect.top;\n break;\n case \"below\":\n height = boundsRect.bottom - sourceOrigin.y;\n break;\n case \"left\":\n width = sourceOrigin.x - boundsRect.left;\n break;\n case \"right\":\n width = boundsRect.right - sourceOrigin.x;\n break;\n }\n switch (align) {\n case \"bottom\":\n height = sourceOrigin.y - boundsRect.top;\n break;\n case \"center\":\n if (vertical) {\n width = boundsRect.width;\n } else {\n height = boundsRect.height;\n }\n break;\n case \"stretch\":\n if (vertical) {\n width = sourceRect.width;\n } else {\n height = sourceRect.height;\n }\n break;\n case \"left\":\n width = boundsRect.right - sourceOrigin.x;\n break;\n case \"right\":\n width = sourceOrigin.x - boundsRect.left;\n break;\n case \"top\":\n height = boundsRect.bottom - sourceOrigin.y;\n break;\n }\n height = Math.max(0, height);\n width = Math.max(0, width);\n return { height, width };\n}\n\n/**\n * Given two layouts, return -1 if the first is better, 1 if the second is\n * better, and 0 if they're equally good.\n *\n * Our comparison uses a heuristic that looks to see whether a layout can fit\n * the popup in height, width, or both. A layout is best if it fits both height\n * and width. If each layout only fits one dimension, then the layout that gives\n * the popup more space is preferred.\n *\n * @private\n * @param {DOMRect} sourceRect\n * @param {DOMRect} popupRect\n * @param {DOMRect} boundsRect\n */\nfunction compareLayouts(layout1, layout2, sourceRect, popupRect, boundsRect) {\n const space1 = availableSpace(\n sourceRect,\n boundsRect,\n layout1.direction,\n layout1.align\n );\n const space2 = availableSpace(\n sourceRect,\n boundsRect,\n layout2.direction,\n layout2.align\n );\n const fitsWidth1 = popupRect.width <= space1.width;\n const fitsHeight1 = popupRect.height <= space1.height;\n const fitsEither1 = fitsWidth1 || fitsHeight1;\n const fitsBoth1 = fitsWidth1 && fitsHeight1;\n const fitsWidth2 = popupRect.width <= space2.width;\n const fitsHeight2 = popupRect.height <= space2.height;\n const fitsEither2 = fitsWidth2 || fitsHeight2;\n const fitsBoth2 = fitsWidth2 && fitsHeight2;\n const area1 = space1.width * space1.height;\n const area2 = space2.width * space2.height;\n if (fitsBoth1 && fitsBoth2) {\n // Both layouts can fit in both dimensions; they're equally good.\n return 0;\n } else if (fitsBoth1) {\n // Layout 1 has space for popup in both dimensions.\n return -1;\n } else if (fitsBoth2) {\n // Layout 2 has space for popup in both dimensions.\n return 1;\n } else if (fitsEither1 && !fitsEither2) {\n // Layout 1 fits in one dimension, layout 2 doesn't fit either.\n return -1;\n } else if (fitsEither2 && !fitsEither1) {\n // Layout 2 fits in one dimensions, layout 1 doesn't fit either.\n return 1;\n } else if (fitsEither1 && area1 > area2) {\n // Layout 1 fits in one dimension and gives popup more space.\n return -1;\n } else if (fitsEither2 && area2 > area1) {\n // Layout 2 fits in one dimension and gives popup more space.\n return 1;\n } else if (area1 > area2) {\n // Layout 1 gives popup more space.\n return -1;\n } else if (area2 > area1) {\n // Layout 2 gives popup more space.\n return 1;\n } else {\n // Layouts equally good or bad.\n return 0;\n }\n}\n\n/**\n * Determine the (x, y) location at which the popup should be positioned to\n * touch the indicated source origin point.\n *\n * @private\n * @param {DOMRect} sourceRect\n * @param {DOMRect} popupRect\n * @param {DOMRect} boundsRect\n */\nfunction getPositionedRect(\n sourceRect,\n popupRect,\n boundsRect,\n direction,\n align\n) {\n // With respect to which point on the source will we position the popup?\n const sourceOrigin = getSourceOrigin(sourceRect, direction, align);\n\n // We'll adjust our bounds depending upon the layout.\n let {\n x: boundsLeft,\n y: boundsTop,\n bottom: boundsBottom,\n right: boundsRight,\n } = boundsRect;\n\n let x = 0;\n let y = 0;\n let height = popupRect.height;\n let width = popupRect.width;\n const vertical = direction === \"above\" || direction === \"below\";\n switch (direction) {\n case \"above\":\n y = sourceOrigin.y - popupRect.height;\n boundsBottom = sourceOrigin.y;\n break;\n case \"below\":\n y = sourceOrigin.y;\n boundsTop = sourceOrigin.y;\n break;\n case \"left\":\n x = sourceOrigin.x - popupRect.width;\n boundsRight = sourceOrigin.x;\n break;\n case \"right\":\n x = sourceOrigin.x;\n boundsLeft = sourceOrigin.x;\n break;\n }\n switch (align) {\n case \"bottom\":\n y = sourceOrigin.y - popupRect.height;\n boundsBottom = sourceOrigin.y;\n break;\n case \"left\":\n x = sourceOrigin.x;\n boundsLeft = sourceOrigin.x;\n break;\n case \"center\":\n if (vertical) {\n x = sourceOrigin.x - popupRect.width / 2;\n } else {\n y = sourceOrigin.y - popupRect.height / 2;\n }\n break;\n case \"right\":\n x = sourceOrigin.x - popupRect.width;\n boundsRight = sourceOrigin.x;\n break;\n case \"stretch\":\n if (vertical) {\n x = sourceOrigin.x;\n width = sourceRect.width;\n } else {\n y = sourceOrigin.y;\n height = sourceRect.height;\n }\n break;\n case \"top\":\n y = sourceOrigin.y;\n boundsTop = sourceOrigin.y;\n break;\n }\n\n // Force the desired rectangle to fit within the bounds.\n x = Math.max(x, boundsLeft);\n y = Math.max(y, boundsTop);\n width = Math.min(width, boundsRight - x);\n height = Math.min(height, boundsBottom - y);\n\n return new DOMRect(x, y, width, height);\n}\n\n/**\n * For a given layout, we will use a different point on the source element as a\n * reference point to position the popup. Return that (x, y) point.\n *\n * @private\n * @param {DOMRect} sourceRect\n */\nfunction getSourceOrigin(sourceRect, direction, align) {\n let x = 0;\n let y = 0;\n const vertical = direction === \"above\" || direction === \"below\";\n switch (direction) {\n case \"above\":\n y = sourceRect.top;\n break;\n case \"below\":\n y = sourceRect.bottom;\n break;\n case \"left\":\n case \"right\":\n x = sourceRect[direction];\n break;\n }\n switch (align) {\n case \"bottom\":\n case \"top\":\n y = sourceRect[align];\n break;\n case \"left\":\n case \"right\":\n x = sourceRect[align];\n break;\n case \"center\":\n if (vertical) {\n x = sourceRect.left + sourceRect.width / 2;\n } else {\n y = sourceRect.top + sourceRect.height / 2;\n }\n break;\n case \"stretch\":\n if (vertical) {\n x = sourceRect.left;\n } else {\n y = sourceRect.top;\n }\n break;\n }\n return { x, y };\n}\n\n/**\n * Return the optimum layout for the popup element with respect to a source\n * element that fits in the given bounds.\n *\n * @param {DOMRect} sourceRect\n * @param {DOMRect} popupRect\n * @param {DOMRect} boundsRect\n * @param {any} options\n */\nexport default function layoutPopup(\n sourceRect,\n popupRect,\n boundsRect,\n options\n) {\n const normalized = normalizeOptions(options);\n\n // Given the direction and alignment, which layouts do we want to consider?\n const layouts = prioritizedLayouts(normalized.direction, normalized.align);\n\n // Sort layouts by our heuristic.\n layouts.sort((layout1, layout2) =>\n compareLayouts(layout1, layout2, sourceRect, popupRect, boundsRect)\n );\n\n // Take the best layout.\n const layout = layouts[0];\n\n // Find the positioned rect with respect to the source origin.\n layout.rect = getPositionedRect(\n sourceRect,\n popupRect,\n boundsRect,\n layout.direction,\n layout.align\n );\n\n return layout;\n}\n\n// Normalize the popup options. Convert any logical layout options (start, end)\n// to physical options (e.g., left, right). Replace any unknown option values\n// with defaults.\nfunction normalizeOptions(options) {\n const {\n align: logicalAlign,\n direction: logicalDirection,\n rightToLeft,\n } = options;\n const defaultDirection = \"below\";\n const physicalDirection =\n {\n above: \"above\",\n below: \"below\",\n column: \"below\",\n \"column-reverse\": \"above\",\n left: \"left\",\n right: \"right\",\n row: rightToLeft ? \"left\" : \"right\",\n \"row-reverse\": rightToLeft ? \"right\" : \"left\",\n }[logicalDirection] || defaultDirection;\n const crossAxis = {\n above: \"horizontal\",\n below: \"horizontal\",\n left: \"vertical\",\n right: \"vertical\",\n }[physicalDirection];\n const defaultAlign = {\n horizontal: \"left\",\n vertical: \"top\",\n }[crossAxis];\n const physicalAlign =\n {\n horizontal: {\n center: \"center\",\n end: rightToLeft ? \"left\" : \"right\",\n left: \"left\",\n right: \"right\",\n start: rightToLeft ? \"right\" : \"left\",\n stretch: \"stretch\",\n },\n vertical: {\n bottom: \"bottom\",\n center: \"center\",\n end: \"bottom\",\n start: \"top\",\n stretch: \"stretch\",\n top: \"top\",\n },\n }[crossAxis][logicalAlign] || defaultAlign;\n return {\n align: physicalAlign,\n direction: physicalDirection,\n rightToLeft,\n };\n}\n\n// Given a preferred direction and alignment, determine the set of 2 or 4 layout\n// alternatives that should be considered, in priority order.\nfunction prioritizedLayouts(preferredDirection, preferredAlign) {\n const flipDirection = {\n above: \"below\",\n below: \"above\",\n left: \"right\",\n right: \"left\",\n };\n const flipAlign = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n };\n\n // Our first choice of layout will be the preferred options.\n const possibilties = [\n { align: preferredAlign, direction: preferredDirection },\n ];\n\n if (preferredAlign === \"center\" || preferredAlign === \"stretch\") {\n // Center/stretch align only needs to consider flipping over main axis.\n possibilties.push({\n align: preferredAlign,\n direction: flipDirection[preferredDirection],\n });\n } else {\n // Consider possibilities of flipping on either axis or both.\n possibilties.push({\n align: flipAlign[preferredAlign],\n direction: preferredDirection,\n });\n possibilties.push({\n align: preferredAlign,\n direction: flipDirection[preferredDirection],\n });\n possibilties.push({\n align: flipAlign[preferredAlign],\n direction: flipDirection[preferredDirection],\n });\n }\n\n return possibilties;\n}\n","import { booleanAttributeValue } from \"../core/AttributeMarshallingMixin.js\";\nimport { setInternalState } from \"../core/dom.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n raiseChangeEvents,\n render,\n rendered,\n setState,\n startEffect,\n state,\n stateEffects,\n} from \"./internal.js\";\n\n/** @type {any} */\nconst closePromiseKey = Symbol(\"closePromise\");\n/** @type {any} */\nconst closeResolveKey = Symbol(\"closeResolve\");\n\n/**\n * Tracks the open/close state of a component.\n *\n * @module OpenCloseMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function OpenCloseMixin(Base) {\n // The class prototype added by the mixin.\n class OpenClose extends Base {\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"opened\") {\n const value = booleanAttributeValue(name, newValue);\n if (this.opened !== value) {\n this.opened = value;\n }\n } else {\n super.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n /**\n * Close the component (if not already closed).\n *\n * Some components like [AlertDialog](AlertDialog) want to indicate why or\n * how they were closed. To support such scenarios, you can supply a value\n * to the optional `closeResult` parameter. This closeResult will be made\n * available in the `whenClosed` promise and the `state.closeResult` member.\n *\n * @param {object} [closeResult] - an indication of how or why the element closed\n */\n async close(closeResult) {\n if (super.close) {\n await super.close();\n }\n this[setState]({ closeResult });\n await this.toggle(false);\n }\n\n /**\n * True if the element is currently closed.\n *\n * This read-only property is provided as a convenient inverse of `opened`.\n *\n * @type {boolean}\n */\n get closed() {\n return this[state] && !this[state].opened;\n }\n\n /**\n * True if the element has completely closed.\n *\n * For components not using asynchronous open/close effects, this property\n * returns the same value as the `closed` property. For elements that have a\n * true value of `state.openCloseEffects` (e.g., elements using\n * [TransitionEffectMixin](TransitionEffectMixin)), this property returns\n * true only if `state.effect` is \"close\" and `state.effectPhase` is\n * \"after\".\n *\n * @type {boolean}\n */\n get closeFinished() {\n return this[state].closeFinished;\n }\n\n get closeResult() {\n return this[state].closeResult;\n }\n\n // @ts-ignore\n get [defaultState]() {\n const defaults = {\n closeResult: null,\n opened: false,\n };\n // If this component defines a `startEffect` method (e.g., by using\n // TransitionEffectMixin), include default state for open/close effects.\n // Since the component is closed by default, the default effect state is\n // after the close effect has completed.\n if (this[startEffect]) {\n Object.assign(defaults, {\n closeFinished: true,\n effect: \"close\",\n effectPhase: \"after\",\n openCloseEffects: true,\n });\n }\n return Object.assign(super[defaultState] || {}, defaults);\n }\n\n /**\n * Open the element (if not already opened).\n */\n async open() {\n if (super.open) {\n await super.open();\n }\n this[setState]({ closeResult: undefined });\n await this.toggle(true);\n }\n\n /**\n * True if the element is currently opened.\n *\n * This property can be set as a boolean attribute\n *\n * @type {boolean}\n * @default false\n */\n get opened() {\n return this[state] && this[state].opened;\n }\n set opened(opened) {\n this[setState]({ closeResult: undefined });\n this.toggle(opened);\n }\n\n [render](changed) {\n super[render](changed);\n\n // Reflect opened state.\n if (changed.opened) {\n const { opened } = this[state];\n setInternalState(this, \"opened\", opened);\n }\n\n // Reflect closed state. To handle asynchronous close effects, we reflect\n // the inverse of closeFinished instead of reflecting closed.\n if (changed.closeFinished) {\n const { closeFinished } = this[state];\n setInternalState(this, \"closed\", closeFinished);\n }\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n if (changed.opened && this[raiseChangeEvents]) {\n /**\n * Raised when the opened/closed state of the component changes.\n *\n * @event openedchange\n */\n const openedChangeEvent = new CustomEvent(\"openedchange\", {\n bubbles: true,\n detail: {\n closeResult: this[state].closeResult,\n opened: this[state].opened,\n },\n });\n this.dispatchEvent(openedChangeEvent);\n\n if (this[state].opened) {\n const oldOpenedEvent = new CustomEvent(\"opened\", {\n bubbles: true,\n });\n this.dispatchEvent(oldOpenedEvent);\n /**\n * Raised when the component opens.\n *\n * @event open\n */\n const openEvent = new CustomEvent(\"open\", {\n bubbles: true,\n });\n this.dispatchEvent(openEvent);\n } else {\n const oldClosedEvent = new CustomEvent(\"closed\", {\n bubbles: true,\n detail: {\n closeResult: this[state].closeResult,\n },\n });\n this.dispatchEvent(oldClosedEvent);\n /**\n * Raised when the component closes.\n *\n * @event close\n */\n const closeEvent = new CustomEvent(\"close\", {\n bubbles: true,\n detail: {\n closeResult: this[state].closeResult,\n },\n });\n this.dispatchEvent(closeEvent);\n }\n }\n\n // If someone's waiting for the component to close, and it's completely\n // finished closing, then resolve the close promise.\n const closeResolve = this[closeResolveKey];\n if (this.closeFinished && closeResolve) {\n this[closeResolveKey] = null;\n this[closePromiseKey] = null;\n closeResolve(this[state].closeResult);\n }\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects]\n ? super[stateEffects](state, changed)\n : {};\n\n // Update our notion of closeFinished to track the closed state for\n // components with synchronous open/close effects and components with\n // asynchronous open/close effects.\n if (\n changed.openCloseEffects ||\n changed.effect ||\n changed.effectPhase ||\n changed.opened\n ) {\n const { effect, effectPhase, openCloseEffects, opened } = state;\n const closeFinished = openCloseEffects\n ? effect === \"close\" && effectPhase === \"after\"\n : !opened;\n Object.assign(effects, { closeFinished });\n }\n\n return effects;\n }\n\n /**\n * Toggle the open/close state of the element.\n *\n * @param {boolean} [opened] - true if the element should be opened, false\n * if closed.\n */\n async toggle(opened = !this.opened) {\n if (super.toggle) {\n await super.toggle(opened);\n }\n const changed = opened !== this[state].opened;\n if (changed) {\n /** @type {PlainObject} */ const changes = { opened };\n if (this[state].openCloseEffects) {\n changes.effect = opened ? \"open\" : \"close\";\n if (this[state].effectPhase === \"after\") {\n changes.effectPhase = \"before\";\n }\n }\n await this[setState](changes);\n }\n }\n\n /**\n * This method can be used as an alternative to listening to the\n * \"openedchange\" event, particularly in situations where you want to only\n * handle the next time the component is closed.\n *\n * @returns {Promise} A promise that resolves when the element has\n * completely closed, including the completion of any asynchronous opening\n * effect.\n */\n whenClosed() {\n if (!this[closePromiseKey]) {\n this[closePromiseKey] = new Promise((resolve) => {\n this[closeResolveKey] = resolve;\n });\n }\n return this[closePromiseKey];\n }\n }\n\n return OpenClose;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n render,\n rendering,\n setState,\n state,\n} from \"./internal.js\";\n\n/**\n * Lets a component define its ARIA role through a `role` state member\n *\n * Among other things, this allows a class or mixin to define a default\n * role through the component's `defaultState`.\n *\n * Some mixins come with identicial support for managing an ARIA role. Those\n * mixins include [AriaListMixin](AriaListMixin),\n * [AriaMenuMixin](AriaMenuMixin), [DialogModalityMixin](DialogModalityMixin),\n * and [PopupModalityMixin](PopupModalityMixin). If you're using one of those\n * mixins, you do *not* need to use this mixin.\n *\n * @module AriaRoleMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function AriaRoleMixin(Base) {\n // The class prototype added by the mixin.\n class AriaRole extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n role: null,\n });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n if (changed.role) {\n // Apply top-level role.\n const { role } = this[state];\n if (role) {\n this.setAttribute(\"role\", role);\n } else {\n this.removeAttribute(\"role\");\n }\n }\n }\n\n // Setting the standard role attribute will invoke this property setter,\n // which will allow us to update our state.\n get role() {\n return super.role;\n }\n set role(role) {\n const s = String(role);\n super.role = s;\n if (!this[rendering]) {\n this[setState]({ s });\n }\n }\n }\n\n return AriaRole;\n}\n","import { templateFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\";\nimport AriaRoleMixin from \"./AriaRoleMixin.js\";\nimport { defaultState, template } from \"./internal.js\";\n\nconst Base = AriaRoleMixin(ReactiveElement);\n\n/**\n * Background element shown behind an overlay's primary content\n *\n * The backdrop is transparent by default, suggesting to the user that the\n * overlay is modeless, and they can click through it to reach the background\n * elements. For a modal variant, see [ModalBackdrop](ModalBackdrop).\n *\n * @inherits ReactiveElement\n * @mixes AriaRoleMixin\n */\nclass Backdrop extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n role: \"none\",\n });\n }\n\n get [template]() {\n return templateFrom.html`\n <style>\n :host {\n display: inline-block;\n height: 100%;\n left: 0;\n position: fixed;\n top: 0;\n touch-action: manipulation;\n width: 100%;\n }\n </style>\n <slot></slot>\n `;\n }\n}\n\nexport default Backdrop;\n","import { templateFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\";\nimport { template } from \"./internal.js\";\n\n/**\n * A simple frame for overlay content.\n *\n * The default appearance of `OverlayFrame` uses a simple drop-shadow to let the\n * user see the framed content as being on top of the background page content.\n *\n * @inherits ReactiveElement\n */\nclass OverlayFrame extends ReactiveElement {\n get [template]() {\n return templateFrom.html`\n <style>\n :host {\n display: inline-block;\n position: relative;\n }\n </style>\n <slot></slot>\n `;\n }\n}\n\nexport default OverlayFrame;\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","import { deepContains, firstFocusableElement } from \"../core/dom.js\";\nimport { fragmentFrom, templateFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n firstRender,\n render,\n rendered,\n setState,\n state,\n template,\n} from \"./internal.js\";\n\n/** @type {any} */\nconst appendedToDocumentKey = Symbol(\"appendedToDocument\");\n/** @type {any} */\nconst defaultZIndexKey = Symbol(\"assignedZIndex\");\n/** @type {any} */\nconst restoreFocusToElementKey = Symbol(\"restoreFocusToElement\");\n\n/**\n * Displays an opened element on top of other page elements.\n *\n * This mixin handles showing and hiding an overlay element. It, together with\n * [OpenCloseMixin](OpenCloseMixin), form the core behavior for [Overlay](Overlay),\n * which in turn forms the basis of Elix's overlay components.\n *\n * @module OverlayMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function OverlayMixin(Base) {\n // The class prototype added by the mixin.\n class Overlay extends Base {\n // TODO: Document\n get autoFocus() {\n return this[state].autoFocus;\n }\n set autoFocus(autoFocus) {\n this[setState]({ autoFocus });\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n autoFocus: true,\n persistent: false,\n });\n }\n\n async open() {\n if (!this[state].persistent && !this.isConnected) {\n // Overlay isn't in document yet.\n this[appendedToDocumentKey] = true;\n document.body.append(this);\n }\n if (super.open) {\n await super.open();\n }\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n if (this[firstRender]) {\n this.addEventListener(\"blur\", (event) => {\n // What has the focus now?\n const newFocusedElement =\n event.relatedTarget || document.activeElement;\n /** @type {any} */\n const node = this;\n if (newFocusedElement instanceof HTMLElement) {\n const focusInside = deepContains(node, newFocusedElement);\n if (!focusInside) {\n if (this.opened) {\n // The user has most likely clicked on something in the background\n // of a modeless overlay. Remember that element, and restore focus\n // to it when the overlay finishes closing.\n this[restoreFocusToElementKey] = newFocusedElement;\n } else {\n // A blur event fired, but the overlay closed itself before the blur\n // event could be processed. In closing, we may have already\n // restored the focus to the element that originally invoked the\n // overlay. Since the user has clicked somewhere else to close the\n // overlay, put the focus where they wanted it.\n newFocusedElement.focus();\n this[restoreFocusToElementKey] = null;\n }\n }\n }\n });\n }\n\n if (changed.effectPhase || changed.opened || changed.persistent) {\n if (!this[state].persistent) {\n // Temporary overlay\n const closed =\n typeof this.closeFinished === \"undefined\"\n ? this.closed\n : this.closeFinished;\n\n if (closed) {\n if (this[defaultZIndexKey]) {\n // Remove default z-index.\n this.style.zIndex = \"\";\n this[defaultZIndexKey] = null;\n }\n } else if (this[defaultZIndexKey]) {\n this.style.zIndex = this[defaultZIndexKey];\n } else {\n if (!hasZIndex(this)) {\n bringToFront(this);\n }\n }\n }\n }\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n if (this[firstRender]) {\n // Perform one-time check to see if component needs a default z-index.\n if (this[state].persistent && !hasZIndex(this)) {\n bringToFront(this);\n }\n }\n\n if (changed.opened) {\n if (this[state].autoFocus) {\n if (this[state].opened) {\n // Opened\n if (\n !this[restoreFocusToElementKey] &&\n document.activeElement !== document.body\n ) {\n // Remember which element had the focus before we were opened.\n this[restoreFocusToElementKey] = document.activeElement;\n }\n // Focus on the element itself (if it's focusable), or the first focusable\n // element inside it.\n // TODO: We'd prefer to require that overlays (like the Overlay base\n // class) make use of delegatesFocus via DelegateFocusMixin, which would\n // let us drop the need for this mixin here to do anything special with\n // focus. However, an initial trial of this revealed an issue in\n // MenuButton, where invoking the menu did not put the focus on the first\n // menu item as expected. Needs more investigation.\n const focusElement = firstFocusableElement(this);\n if (focusElement) {\n focusElement.focus();\n }\n } else {\n // Closed\n if (this[restoreFocusToElementKey]) {\n // Restore focus to the element that had the focus before the overlay was\n // opened.\n this[restoreFocusToElementKey].focus();\n this[restoreFocusToElementKey] = null;\n }\n }\n }\n }\n\n // If we're finished closing an overlay that was automatically added to the\n // document, remove it now. Note: we only do this when the component\n // updates, not when it mounts, because we don't want an automatically-added\n // element to be immediately removed during its connectedCallback.\n if (\n !this[firstRender] &&\n !this[state].persistent &&\n this.closeFinished &&\n this[appendedToDocumentKey]\n ) {\n this[appendedToDocumentKey] = false;\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n }\n }\n\n get [template]() {\n const result = super[template] || templateFrom.html``;\n\n // We'd like to just use the `hidden` attribute, but a side-effect of\n // styling with the hidden attribute is that naive styling of the\n // component from the outside (to change to display: flex, say) will\n // override the display: none implied by hidden. To work around this\n // problem, we use display: none when the overlay is closed.\n result.content.append(fragmentFrom.html`\n <style>\n :host([closed]) {\n display: none;\n }\n </style>\n `);\n\n return result;\n }\n }\n\n return Overlay;\n}\n\n// Pick a default z-index, remember it, and apply it.\nfunction bringToFront(element) {\n const defaultZIndex = maxZIndexInUse() + 1;\n element[defaultZIndexKey] = defaultZIndex;\n element.style.zIndex = defaultZIndex.toString();\n}\n\n/**\n * If the element has or inherits an explicit numeric z-index, return true.\n * Otherwise, return false.\n *\n * @private\n * @param {HTMLElement} element\n * @returns {boolean}\n */\nfunction hasZIndex(element) {\n const computedZIndex = getComputedStyle(element).zIndex;\n const explicitZIndex = element.style.zIndex;\n const isExplicitZIndexNumeric = !isNaN(parseInt(explicitZIndex));\n if (computedZIndex === \"auto\") {\n return isExplicitZIndexNumeric;\n }\n if (computedZIndex === \"0\" && !isExplicitZIndexNumeric) {\n // Might be on Safari, which reports a computed z-index of zero even in\n // cases where no z-index has been inherited but the element creates a\n // stacking context. Inspect the composed tree parent to infer whether the\n // element is really inheriting a z-index.\n const parent =\n element.assignedSlot ||\n (element instanceof ShadowRoot ? element.host : element.parentNode);\n if (!(parent instanceof HTMLElement)) {\n // Theoretical edge case, assume zero z-index is real.\n return true;\n }\n if (!hasZIndex(parent)) {\n // The parent doesn't have a numeric z-index, and the element itself\n // doesn't have a numeric z-index, so the \"0\" value for the computed\n // z-index is simulated, not a real assigned numeric z-index.\n return false;\n }\n }\n // Element has a non-zero numeric z-index.\n return true;\n}\n\n/*\n * Return the highest z-index currently in use in the document's light DOM.\n *\n * This calculation looks at all light DOM elements, so is theoretically\n * expensive. That said, it only runs when an overlay is opening, and is only used\n * if an overlay doesn't have a z-index already. In cases where performance is\n * an issue, this calculation can be completely circumvented by manually\n * applying a z-index to an overlay.\n */\nfunction maxZIndexInUse() {\n const elements = document.body.querySelectorAll(\"*\");\n const zIndices = Array.from(elements, (element) => {\n const style = getComputedStyle(element);\n let zIndex = 0;\n if (style.position !== \"static\" && style.zIndex !== \"auto\") {\n const parsed = style.zIndex ? parseInt(style.zIndex) : 0;\n zIndex = !isNaN(parsed) ? parsed : 0;\n }\n return zIndex;\n });\n return Math.max(...zIndices);\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n contentSlot,\n defaultState,\n firstRender,\n raiseChangeEvents,\n rendered,\n setState,\n shadowRoot,\n} from \"./internal.js\";\n\n/**\n * Defines a component's content as the flattened set of nodes assigned to a\n * slot.\n *\n * This mixin defines a component's `content` state member as the flattened\n * set of nodes assigned to a slot, typically the default slot.\n *\n * If the set of assigned nodes changes, the `content` state will be updated.\n * This helps a component satisfy the Gold Standard checklist item for\n * monitoring\n * [Content Changes](https://github.com/webcomponents/gold-standard/wiki/Content-Changes).\n *\n * By default, the mixin looks in the component's shadow subtree for a default\n * (unnamed) `slot` element. You can specify that a different slot should be\n * used by overriding the `internal.contentSlot` property.\n *\n * Most Elix [elements](elements) use `SlotContentMixin`, including\n * [ListBox](ListBox), [Modes](Modes), and [Tabs](Tabs).\n *\n * @module SlotContentMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function SlotContentMixin(Base) {\n // The class prototype added by the mixin.\n class SlotContent extends Base {\n /**\n * See [contentSlot](internal#internal.contentSlot).\n */\n get [contentSlot]() {\n /** @type {HTMLSlotElement|null} */ const slot =\n this[shadowRoot] && this[shadowRoot].querySelector(\"slot:not([name])\");\n if (!this[shadowRoot] || !slot) {\n /* eslint-disable no-console */\n console.warn(\n `SlotContentMixin expects ${this.constructor.name} to define a shadow tree that includes a default (unnamed) slot.\\nSee https://elix.org/documentation/SlotContentMixin.`\n );\n }\n return slot;\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n content: null,\n });\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n if (this[firstRender]) {\n // Listen to changes on the default slot.\n const slot = this[contentSlot];\n if (slot) {\n slot.addEventListener(\"slotchange\", async () => {\n // Although slotchange isn't generally a user-driven event, it's\n // impossible for us to know whether a change in slot content is going\n // to result in effects that the host of this element can predict.\n // To be on the safe side, we raise any change events that come up\n // during the processing of this event.\n this[raiseChangeEvents] = true;\n\n // The nodes assigned to the given component have changed.\n // Update the component's state to reflect the new content.\n const content = slot.assignedNodes({ flatten: true });\n Object.freeze(content);\n this[setState]({ content });\n\n await Promise.resolve();\n this[raiseChangeEvents] = false;\n });\n }\n }\n }\n }\n\n return SlotContent;\n}\n","import { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\";\nimport { transmute } from \"../core/template.js\";\nimport Backdrop from \"./Backdrop.js\";\nimport {\n checkSize,\n defaultState,\n ids,\n render,\n rendered,\n setState,\n shadowRoot,\n state,\n template,\n} from \"./internal.js\";\nimport OpenCloseMixin from \"./OpenCloseMixin.js\";\nimport OverlayFrame from \"./OverlayFrame.js\";\nimport OverlayMixin from \"./OverlayMixin.js\";\nimport SlotContentMixin from \"./SlotContentMixin.js\";\n\n// TODO: We'd like to use DelegateFocusMixin in this component, but see the note\n// at OverlayMixin's openedChanged function.\nconst Base = OpenCloseMixin(OverlayMixin(SlotContentMixin(ReactiveElement)));\n\n/**\n * An element that appears over other page elements\n *\n * The main overlay content is presented within a frame on top of an optional\n * backdrop.\n *\n * The overlay logic is provided by [OverlayMixin](OverlayMixin). `Overlay` adds\n * the definition of customizable element tags: [frameTag](#frameTag) for the\n * frame around the overlay content, and [backdropTag](#backdropTag) (if\n * defined) for the optional element covering the page elements behind the\n * overlay.\n *\n * As a convenience, the `open` method of `Overlay` will automatically add the\n * overlay to the end of the document body if the overlay isn't already in the\n * document. If the overlay is automatically attached in this way, then when it\n * closes, it will automatically be removed.\n *\n * See [Dialog](Dialog) and [Popup](Popup) for modal and modeless subclasses,\n * respectively.\n *\n * @inherits ReactiveElement\n * @mixes OpenCloseMixin\n * @mixes OverlayMixin\n * @mixes SlotContentMixin\n * @part {Backdrop} backdrop - the backdrop behind the overlay\n * @part {OverlayFrame} frame - the frame around the overlay\n */\nclass Overlay extends Base {\n get backdrop() {\n return this[ids] && this[ids].backdrop;\n }\n\n /**\n * The class or tag used for the `backdrop` part - the optional\n * element shown behind the overlay.\n *\n * This can help focus the user's attention on the overlay content.\n * Additionally, a backdrop can be used to absorb clicks on background page\n * elements. For example, [Dialog](Dialog) uses [ModalBackdrop](ModalBackdrop)\n * as an overlay backdrop in such a way.\n *\n * @type {PartDescriptor}\n * @default Backdrop\n */\n get backdropPartType() {\n return this[state].backdropPartType;\n }\n set backdropPartType(backdropPartType) {\n this[setState]({ backdropPartType });\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n backdropPartType: Backdrop,\n framePartType: OverlayFrame,\n });\n }\n\n get frame() {\n return this[ids].frame;\n }\n\n /**\n * The class or tag used to create the `frame` part the overlay's\n * primary content.\n *\n * The frame element can be used to provide a border around the overlay\n * content, and to provide visual effects such as a drop-shadow to help\n * distinguish overlay content from background page elements.\n *\n * @type {PartDescriptor}\n * @default OverlayFrame\n */\n get framePartType() {\n return this[state].framePartType;\n }\n set framePartType(framePartType) {\n this[setState]({ framePartType });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n renderParts(this[shadowRoot], this[state], changed);\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n super[rendered](changed);\n\n if (changed.opened && this[state].content) {\n // If contents know how to size themselves, ask them to check their size.\n this[state].content.forEach((element) => {\n if (element[checkSize]) {\n element[checkSize]();\n }\n });\n }\n }\n\n get [template]() {\n const result = super[template];\n\n // Using a grid here is tricky, because we want to deliver size-to-content\n // and expand-to-container sizing here. We also want to apply `overflow:\n // hidden` to the frame for use in a popup source like ListComboBox with a\n // popup that needs to scroll. However, tHe presence of `overflow` will\n // cause a grid at the viewport's right edge to *not* size to content as\n // expected, which will throw off our popup layout heuristics because they\n // can't get the real intrinsic size of the popup by looking at the popup\n // itself.\n //\n // To work around that, PopupSource must have special logic to inspect the\n // frame's intrinsic size directly. We'd prefer to avoid such entanglements\n // when we can, but after much experimentation with both grid and block\n // styling, grid seemed to minimize the amount of trickery needed.\n result.content.append(fragmentFrom.html`\n <style>\n :host {\n max-height: 100vh;\n max-width: 100vw;\n outline: none;\n position: fixed;\n -webkit-tap-highlight-color: transparent;\n }\n\n [part~=\"frame\"] {\n box-sizing: border-box;\n display: grid;\n overflow: hidden;\n overscroll-behavior: contain;\n pointer-events: initial;\n position: relative;\n }\n </style>\n <div id=\"backdrop\" part=\"backdrop\" tabindex=\"-1\"></div>\n <div id=\"frame\" part=\"frame\" role=\"none\">\n <slot></slot>\n </div>\n `);\n\n renderParts(result.content, this[state]);\n\n return result;\n }\n}\n\n/**\n * Render parts for the template or an instance.\n *\n * @private\n * @param {DocumentFragment} root\n * @param {PlainObject} state\n * @param {ChangedFlags} [changed]\n */\nfunction renderParts(root, state, changed) {\n if (!changed || changed.backdropPartType) {\n const { backdropPartType } = state;\n const backdrop = root.getElementById(\"backdrop\");\n if (backdrop) {\n transmute(backdrop, backdropPartType);\n }\n }\n if (!changed || changed.framePartType) {\n const { framePartType } = state;\n const frame = root.getElementById(\"frame\");\n if (frame) {\n transmute(frame, framePartType);\n }\n }\n}\n\nexport default Overlay;\n","import { deepContains, ownEvent } from \"../core/dom.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n firstRender,\n keydown,\n raiseChangeEvents,\n render,\n rendered,\n rendering,\n setState,\n state,\n} from \"./internal.js\";\n\n/** @type {any} */\nconst implicitCloseListenerKey = Symbol(\"implicitCloseListener\");\n\nconst elixdebugpopup =\n new URLSearchParams(location.search).get(\"elixdebugpopup\") === \"true\";\n\n/**\n * Gives an overlay lightweight popup-style behavior.\n *\n * This mixin expects the component to provide:\n *\n * * An open/close API compatible with `OpenCloseMixin`.\n *\n * The mixin provides these features to the component:\n *\n * * Event handlers that close the element presses the Esc key, moves the focus\n * outside the element, scrolls the document, resizes the document, or\n * switches focus away from the document.\n * * A default ARIA role of `alert`.\n *\n * For modal overlays, use `DialogModalityMixin` instead. See the documentation\n * of that mixin for a comparison of modality behaviors.\n *\n * @module PopupModalityMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function PopupModalityMixin(Base) {\n // The class prototype added by the mixin.\n class PopupModality extends Base {\n /**\n * True if the popup should close if the user resizes the window.\n *\n * @type {boolean}\n * @default true\n */\n get closeOnWindowResize() {\n return this[state].closeOnWindowResize;\n }\n set closeOnWindowResize(closeOnWindowResize) {\n this[setState]({ closeOnWindowResize });\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n closeOnWindowResize: true,\n role: \"alert\",\n });\n }\n\n // Close on Esc key.\n [keydown](/** @type {KeyboardEvent} */ event) {\n let handled = false;\n\n switch (event.key) {\n case \"Escape\":\n this.close({\n canceled: \"Escape\",\n });\n handled = true;\n break;\n }\n\n // Prefer mixin result if it's defined, otherwise use base result.\n return handled || (super.keydown && super.keydown(event)) || false;\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n if (this[firstRender]) {\n // Don't wire up popup blur handling if we're debugging popups.\n if (!elixdebugpopup) {\n // If we lose focus, and the new focus isn't inside us, then close.\n this.addEventListener(\"blur\", blurHandler.bind(this));\n }\n }\n\n if (changed.role) {\n // Apply top-level role.\n const { role } = this[state];\n this.setAttribute(\"role\", role);\n }\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n if (changed.opened) {\n if (this.opened) {\n // Wait before wiring up events if the popup was opened because the\n // user clicked something, that opening click event may still be\n // bubbling up, and we only want to start listening after it's been\n // processed. Alternatively, if the popup caused the page to scroll, we\n // don't want to immediately close because the page scrolled (only if\n // the user scrolls).\n const callback =\n \"requestIdleCallback\" in window\n ? window[\"requestIdleCallback\"]\n : setTimeout;\n callback(() => {\n // It's conceivable the popup was closed before the timeout completed,\n // so double-check that it's still opened before listening to events.\n if (this.opened) {\n addEventListeners(this);\n }\n });\n } else {\n removeEventListeners(this);\n }\n }\n }\n\n // Setting the standard role attribute will invoke this property setter,\n // which will allow us to update our state.\n get role() {\n return super.role;\n }\n set role(role) {\n super.role = role;\n if (!this[rendering]) {\n this[setState]({ role });\n }\n }\n }\n\n return PopupModality;\n}\n\nfunction addEventListeners(/** @type {ReactiveElement} */ element) {\n // Close handlers for window events.\n element[implicitCloseListenerKey] = closeHandler.bind(element);\n\n if (!elixdebugpopup) {\n // Window blur event tracks loss of focus of *window*, not just element.\n window.addEventListener(\"blur\", element[implicitCloseListenerKey]);\n }\n window.addEventListener(\"resize\", element[implicitCloseListenerKey]);\n window.addEventListener(\"scroll\", element[implicitCloseListenerKey]);\n}\n\nfunction removeEventListeners(/** @type {ReactiveElement} */ element) {\n if (element[implicitCloseListenerKey]) {\n if (!elixdebugpopup) {\n window.removeEventListener(\"blur\", element[implicitCloseListenerKey]);\n }\n window.removeEventListener(\"resize\", element[implicitCloseListenerKey]);\n window.removeEventListener(\"scroll\", element[implicitCloseListenerKey]);\n element[implicitCloseListenerKey] = null;\n }\n}\n\n// Note: This routine also exists in PopupButton, may want to eventually\n// share that. Note that PopupButton handles blur on the *button*; here\n// we're dealing with the popup.\nasync function blurHandler(/** @type {Event} */ event) {\n // @ts-ignore\n /** @type {any} */ const element = this;\n // What has the focus now?\n const newFocusedElement =\n /** @type {any} */ (event).relatedTarget || document.activeElement;\n /** @type {any} */\n if (\n newFocusedElement instanceof Element &&\n !deepContains(element, newFocusedElement)\n ) {\n element[raiseChangeEvents] = true;\n await element.close({ canceled: \"window blur\" });\n element[raiseChangeEvents] = false;\n }\n}\n\nasync function closeHandler(/** @type {Event} */ event) {\n // @ts-ignore\n /** @type {any} */ const element = this;\n const handleEvent =\n event.type !== \"resize\" || element[state].closeOnWindowResize;\n if (!ownEvent(element, event) && handleEvent) {\n element[raiseChangeEvents] = true;\n await element.close({\n canceled: `window ${event.type}`,\n });\n element[raiseChangeEvents] = false;\n }\n}\n","import { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport { ids, raiseChangeEvents, render, template } from \"./internal.js\";\nimport KeyboardMixin from \"./KeyboardMixin.js\";\nimport Overlay from \"./Overlay.js\";\nimport PopupModalityMixin from \"./PopupModalityMixin.js\";\n\nconst Base = KeyboardMixin(PopupModalityMixin(Overlay));\n\n/**\n * Lightweight form of modeless overlay that can be easily dismissed\n *\n * When opened, the popup displays its children on top of other page elements.\n *\n * @inherits Overlay\n * @mixes KeyboardMixin\n * @mixes PopupModalityMixin\n */\nclass Popup extends Base {\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n if (changed.backdropPartType) {\n this[ids].backdrop.addEventListener(\n \"mousedown\",\n mousedownHandler.bind(this)\n );\n\n // Mobile Safari doesn't seem to generate a mousedown handler on the\n // backdrop in some cases that Mobile Chrome handles. For completeness, we\n // also listen to touchend.\n if (!(\"PointerEvent\" in window)) {\n this[ids].backdrop.addEventListener(\"touchend\", mousedownHandler);\n }\n }\n }\n\n get [template]() {\n const result = super[template];\n\n result.content.append(\n fragmentFrom.html`\n <style>\n :host {\n display: grid;\n grid-template: minmax(0, max-content) / minmax(0, max-content);\n }\n </style>\n `\n );\n\n return result;\n }\n}\n\n/**\n * @private\n * @param {Event} event\n */\nasync function mousedownHandler(event) {\n // @ts-ignore\n const element = this;\n element[raiseChangeEvents] = true;\n await element.close({\n canceled: \"mousedown outside\",\n });\n element[raiseChangeEvents] = false;\n event.preventDefault();\n event.stopPropagation();\n}\n\nexport default Popup;\n","import { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\";\nimport { transmute } from \"../core/template.js\";\nimport DisabledMixin from \"./DisabledMixin.js\";\nimport FocusVisibleMixin from \"./FocusVisibleMixin.js\";\nimport {\n defaultState,\n firstRender,\n ids,\n inputDelegate,\n raiseChangeEvents,\n render,\n rendered,\n setState,\n shadowRoot,\n state,\n stateEffects,\n template,\n} from \"./internal.js\";\nimport LanguageDirectionMixin from \"./LanguageDirectionMixin.js\";\nimport layoutPopup from \"./layoutPopup.js\";\nimport OpenCloseMixin from \"./OpenCloseMixin.js\";\nimport Popup from \"./Popup.js\";\n\nconst resizeListenerKey = Symbol(\"resizeListener\");\n\nconst Base = DisabledMixin(\n FocusVisibleMixin(LanguageDirectionMixin(OpenCloseMixin(ReactiveElement)))\n);\n\n/**\n * Positions a popup with respect to a source element\n *\n * @inherits ReactiveElement\n * @mixes DisabledMixin\n * @mixes FocusVisibleMixin\n * @mixes OpenCloseMixin\n * @part {Popup} popup - the popup element\n * @part {button} source - the element used as the reference point for positioning the popup, generally the element that invokes the popup\n */\nclass PopupSource extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n ariaHasPopup: \"true\",\n popupAlign: \"start\",\n popupDirection: \"column\",\n popupLayout: null,\n popupPartType: Popup,\n sourcePartType: \"div\",\n });\n }\n\n // By default, assume that the source part is an input-like element that will\n // get the foucs.\n get [inputDelegate]() {\n return this[ids].source;\n }\n\n get frame() {\n return /** @type {any} */ (this[ids].popup).frame;\n }\n\n /**\n * The alignment of the popup with respect to the source button.\n *\n * * `bottom`: popup and source are bottom-aligned\n * * `end`: popup and source are aligned on the trailing edge according to the\n * text direction\n * * `left`: popup and source are left-aligned\n * * `right`: popup and source are right-aligned\n * * `start`: popup and source are aligned on the leading edge according to\n * the text direction\n * * `stretch`: both left and right edges are aligned\n * * `top`: popup and source are top-aligned\n *\n * @type {('bottom'|'end'|'left'|'right'|'start'|'stretch'|'top')}\n * @default 'start'\n */\n get popupAlign() {\n return this[state].popupAlign;\n }\n set popupAlign(popupAlign) {\n this[setState]({ popupAlign });\n }\n\n /**\n * The preferred direction for the popup.\n *\n * * `above`: popup appears above the source\n * * `below`: popup appears below the source\n * * `column-reverse`: popup appears before the source in the block axis\n * * `column`: popup appears after the source in the block axis\n * * `left`: popup appears to the left of the source\n * * `right`: popup appears to the right of the source\n * * `row-reverse`: popup appears before the source in the inline axis\n * * `row`: popup appears after the source in the inline axis\n *\n * @type {('above'|'below'|'column-reverse'|'column'|'left'|'right'|'row-reverse'|'row')}\n * @default 'column'\n */\n get popupDirection() {\n return this[state].popupDirection;\n }\n set popupDirection(popupDirection) {\n this[setState]({ popupDirection });\n }\n\n /**\n * The class or tag used to create the `popup` part the element\n * responsible for displaying the popup and handling overlay behavior.\n *\n * @type {PartDescriptor}\n * @default Popup\n */\n get popupPartType() {\n return this[state].popupPartType;\n }\n set popupPartType(popupPartType) {\n this[setState]({ popupPartType });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n\n renderParts(this[shadowRoot], this[state], changed);\n\n if (this[firstRender] || changed.ariaHasPopup) {\n const { ariaHasPopup } = this[state];\n if (ariaHasPopup === null) {\n this[inputDelegate].removeAttribute(\"aria-haspopup\");\n } else {\n this[inputDelegate].setAttribute(\n \"aria-haspopup\",\n this[state].ariaHasPopup\n );\n }\n }\n\n if (changed.popupPartType) {\n // Popup's opened state becomes our own opened state.\n this[ids].popup.addEventListener(\"open\", () => {\n if (!this.opened) {\n this[raiseChangeEvents] = true;\n this.open();\n this[raiseChangeEvents] = false;\n }\n });\n\n // Popup's closed state becomes our own closed state.\n this[ids].popup.addEventListener(\"close\", (event) => {\n if (!this.closed) {\n this[raiseChangeEvents] = true;\n /** @type {any} */\n\n const cast = event;\n const closeResult = cast.detail.closeResult;\n this.close(closeResult);\n this[raiseChangeEvents] = false;\n }\n });\n }\n\n if (changed.opened || changed.popupLayout) {\n const { opened, popupLayout } = this[state];\n\n // By default, we reset the styles used to position the popup.\n /** @type {any} */\n const styling = {\n height: \"\",\n left: \"\",\n opacity: \"\",\n top: \"\",\n width: \"\",\n };\n if (!opened) {\n // Popup closed. Use the reset above.\n } else if (!popupLayout) {\n // Popup opened but not yet laid out.\n //\n // Render the component invisibly so we can measure it before showing\n // it. We hide it by giving it zero opacity. If we use `visibility:\n // hidden` for this purpose, the popup won't be able to receive the\n // focus, which would complicate our overlay focus handling.\n //\n // In case the popup is being relayed out because a layout-affecting\n // property changed while the popup is open, we reset the positiong\n // styles too.\n styling.opacity = 0;\n } else {\n // Popup opened and laid out. Position the popup using only the edges\n // implicated in the layout.\n const { align, direction, rect } = popupLayout;\n const stretch = align === \"stretch\";\n const vertical = direction === \"above\" || direction === \"below\";\n const gridTemplateRows = !vertical && stretch ? \"minmax(0, 1fr)\" : \"\";\n const gridTemplateColumns = vertical && stretch ? \"minmax(0, 1fr)\" : \"\";\n Object.assign(styling, {\n gridTemplateColumns,\n gridTemplateRows,\n height: `${rect.height}px`,\n left: `${rect.left}px`,\n top: `${rect.top}px`,\n width: `${rect.width}px`,\n });\n }\n Object.assign(this[ids].popup.style, styling);\n }\n\n if (changed.opened) {\n const { opened } = this[state];\n /** @type {any} */ (this[ids].popup).opened = opened;\n }\n\n if (changed.disabled) {\n if (\"disabled\" in this[ids].source) {\n const { disabled } = this[state];\n /** @type {any} */ (this[ids].source).disabled = disabled;\n }\n }\n\n // Let the popup know its position relative to the source.\n if (changed.popupLayout) {\n const { popupLayout } = this[state];\n if (popupLayout) {\n const { align, direction } = popupLayout;\n /** @type {any} */ const popup = this[ids].popup;\n if (\"position\" in popup) {\n popup.position = direction;\n }\n if (\"align\" in popup) {\n popup.align = align;\n }\n }\n }\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n super[rendered](changed);\n const { opened } = this[state];\n if (changed.opened) {\n if (opened) {\n // Worth noting that's possible (but unusual) for a popup to render\n // opened on first render.\n waitThenRenderOpened(this);\n } else {\n removeEventListeners(this);\n }\n } else if (\n changed.popupLayout &&\n this[state].opened &&\n !this[state].popupLayout\n ) {\n // A layout-affecting property changed while the popup is open; do layout\n // again.\n choosePopupLayout(this);\n }\n }\n\n /**\n * The class or tag used to create the `source` part - the button\n * (or other element) the user can tap/click to invoke the popup.\n *\n * @type {PartDescriptor}\n * @default 'button'\n */\n get sourcePartType() {\n return this[state].sourcePartType;\n }\n set sourcePartType(sourcePartType) {\n this[setState]({ sourcePartType });\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects](state, changed);\n\n // We reset our popup calculations when the popup closes, or if it's open\n // and state that affects positioning has changed.\n if (\n (changed.opened && !state.opened) ||\n (state.opened &&\n (changed.popupAlign || changed.popupDirection || changed.rightToLeft))\n ) {\n Object.assign(effects, {\n popupLayout: null,\n });\n }\n\n return effects;\n }\n\n get [template]() {\n const result = super[template];\n result.content.append(fragmentFrom.html`\n <style>\n :host {\n display: inline-block;\n position: relative;\n }\n\n [part~=\"source\"] {\n height: 100%;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n width: 100%;\n }\n\n [part~=\"popup\"] {\n outline: none;\n position: fixed;\n }\n </style>\n <div id=\"source\" part=\"source\">\n <slot name=\"source\"></slot>\n </div>\n <div id=\"popup\" part=\"popup\" exportparts=\"backdrop, frame\" role=\"none\">\n <slot></slot>\n </div>\n `);\n\n renderParts(result.content, this[state]);\n\n return result;\n }\n}\n\nfunction addEventListeners(/** @type {PopupSource} */ element) {\n /** @type {any} */ const cast = element;\n cast[resizeListenerKey] = () => {\n // If viewport resizes while the popup is open, we may want to change which\n // layout we're using for the popup.\n choosePopupLayout(element);\n };\n const viewport = window.visualViewport || window;\n viewport.addEventListener(\"resize\", cast[resizeListenerKey]);\n}\n\n/**\n * Based on the current size of the source, popup, and viewport, determine which\n * layout we'll use for the popup.\n *\n * @private\n * @param {PopupSource} element\n */\nfunction choosePopupLayout(element) {\n const { popupAlign, popupDirection, rightToLeft } = element[state];\n const sourceRect = element[ids].source.getBoundingClientRect();\n const popupRect = element[ids].popup.getBoundingClientRect();\n\n // If the popup defines a frame, ask the frame for its intrinsic size by\n // inspecting the scrollHeight/Width properties. These will report the correct\n // size even if the popup is currently constraining the frame.\n const frame = /** @type {any} */ (element[ids].popup).frame;\n if (frame) {\n popupRect.height = element[ids].popup[ids].frame.scrollHeight;\n popupRect.width = element[ids].popup[ids].frame.scrollWidth;\n }\n\n const boundsRect = viewportBounds();\n\n const popupLayout = layoutPopup(sourceRect, popupRect, boundsRect, {\n align: popupAlign,\n direction: popupDirection,\n rightToLeft,\n });\n\n element[setState]({ popupLayout });\n}\n\nfunction removeEventListeners(/** @type {PopupSource} */ element) {\n /** @type {any} */ const cast = element;\n if (cast[resizeListenerKey]) {\n const viewport = window.visualViewport || window;\n viewport.removeEventListener(\"resize\", cast[resizeListenerKey]);\n cast[resizeListenerKey] = null;\n }\n}\n\n/**\n * Render parts for the template or an instance.\n *\n * @private\n * @param {DocumentFragment} root\n * @param {PlainObject} state\n * @param {ChangedFlags} [changed]\n */\nfunction renderParts(root, state, changed) {\n if (!changed || changed.popupPartType) {\n const { popupPartType } = state;\n const popup = root.getElementById(\"popup\");\n if (popup) {\n transmute(popup, popupPartType);\n }\n }\n if (!changed || changed.sourcePartType) {\n const { sourcePartType } = state;\n const source = root.getElementById(\"source\");\n if (source) {\n transmute(source, sourcePartType);\n }\n }\n}\n\n// Determine the bounding rectangle of the viewport. We prefer the\n// VisualViewport API where that's available, as that handles a pinch-zoomed\n// viewport on mobile. If not availble (as of October 2020, Firefox), we fall\n// back to using the window as the viewport.\nfunction viewportBounds() {\n // @ts-ignore\n const viewport = window.visualViewport;\n const boundsRect = viewport\n ? new DOMRect(\n viewport.offsetLeft,\n viewport.offsetTop,\n viewport.width,\n viewport.height\n )\n : new DOMRect(0, 0, window.innerWidth, window.innerHeight);\n return boundsRect;\n}\n\n/**\n *\n * When a popup is first rendered, we let it render invisibly so that it doesn't\n * affect the page layout.\n *\n * We then wait, for two reasons:\n *\n * 1) We need to give the popup time to render invisibly. That lets us get the\n * true size of the popup content.\n *\n * 2) Wire up events that can dismiss the popup. If the popup was opened because\n * the user clicked something, that opening click event may still be bubbling\n * up, and we only want to start listening after it's been processed.\n * Along the same lines, if the popup caused the page to scroll, we don't\n * want to immediately close because the page scrolled (only if the user\n * scrolls).\n *\n * After waiting, we can take care of both of the above tasks.\n *\n * @private\n * @param {PopupSource} element\n */\nfunction waitThenRenderOpened(element) {\n // Wait a tick to let the newly-opened component actually render.\n setTimeout(() => {\n // It's conceivable the popup was closed before the timeout completed,\n // so double-check that it's still opened before listening to events.\n if (element[state].opened) {\n choosePopupLayout(element);\n addEventListeners(element);\n }\n });\n}\n\nexport default PopupSource;\n","import { templateFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\";\nimport DisabledMixin from \"./DisabledMixin.js\";\nimport {\n defaultState,\n ids,\n render,\n setState,\n state,\n template,\n} from \"./internal.js\";\n\nconst Base = DisabledMixin(ReactiveElement);\n\n/**\n * An element that can point up or down.\n *\n * @inherits ReactiveElement\n * @mixes DisabledMixin\n * @part down-icon - the icon shown in the toggle if the popup will open or close in the down direction\n * @part toggle-icon - both the up and down icons\n * @part up-icon - the icon shown in the toggle if the popup will open or close in the up direction\n */\nclass UpDownToggle extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n direction: \"down\",\n });\n }\n\n /**\n * Indicates which direction the element should point to.\n *\n * @type {'down'|'up'}\n * @default 'down'\n */\n get direction() {\n return this[state].direction;\n }\n set direction(direction) {\n this[setState]({ direction });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n\n if (changed.direction) {\n const { direction } = this[state];\n this[ids].downIcon.style.display =\n direction === \"down\" ? \"block\" : \"none\";\n this[ids].upIcon.style.display = direction === \"up\" ? \"block\" : \"none\";\n }\n }\n\n get [template]() {\n return templateFrom.html`\n <style>\n :host {\n display: inline-block;\n }\n </style>\n <div id=\"downIcon\" part=\"toggle-icon down-icon\">\n <slot name=\"down-icon\"></slot>\n </div>\n <div id=\"upIcon\" part=\"toggle-icon up-icon\">\n <slot name=\"up-icon\"></slot>\n </div>\n `;\n }\n}\n\nexport default UpDownToggle;\n","import { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { transmute } from \"../core/template.js\";\nimport {\n defaultState,\n ids,\n render,\n setState,\n shadowRoot,\n state,\n template,\n} from \"./internal.js\";\nimport UpDownToggle from \"./UpDownToggle.js\";\n\n/**\n * Manages a popup toggle part for a popup source.\n *\n * @module PopupToggleMixin\n * @part {UpDownToggle} popup-toggle - the element that lets the user know they can open the popup\n * @part down-icon - the icon shown in the toggle if the popup will open or close in the down direction\n * @part up-icon - the icon shown in the toggle if the popup will open or close in the up direction\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function PopupToggleMixin(Base) {\n // The class prototype added by the mixin.\n class PopupToggle extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n popupTogglePartType: UpDownToggle,\n });\n }\n\n /**\n * The class or tag used to create the `popup-toggle` part the\n * element that lets the user know they can open the popup.\n *\n * @type {PartDescriptor}\n * @default UpDownToggle\n */\n get popupTogglePartType() {\n return this[state].popupTogglePartType;\n }\n set popupTogglePartType(popupTogglePartType) {\n this[setState]({ popupTogglePartType });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n\n renderParts(this[shadowRoot], this[state], changed);\n\n // Tell the toggle which direction it should point to depending on which\n // direction the popup will open. Since we assume this is used for up/down\n // popup directions, we don't handle left/right directions.\n if (changed.popupDirection || changed.popupTogglePartType) {\n const { popupDirection } = this[state];\n const toggleDirection =\n popupDirection === \"above\" || popupDirection === \"column-reverse\"\n ? \"up\"\n : \"down\";\n /** @type {any} */ const popupToggle = this[ids].popupToggle;\n if (\"direction\" in popupToggle) {\n popupToggle.direction = toggleDirection;\n }\n }\n\n if (changed.disabled) {\n const { disabled } = this[state];\n /** @type {any} */ (this[ids].popupToggle).disabled = disabled;\n }\n }\n\n get [template]() {\n const result = super[template];\n\n // Append a toggle button to the source.\n const source = result.content.querySelector('[part~=\"source\"]');\n if (source) {\n source.append(fragmentFrom.html`\n <div\n id=\"popupToggle\"\n part=\"popup-toggle\"\n exportparts=\"toggle-icon, down-icon, up-icon\"\n tabindex=\"-1\"\n ></div>\n `);\n }\n\n renderParts(result.content, this[state]);\n\n result.content.append(fragmentFrom.html`\n <style>\n [part~=\"popup-toggle\"] {\n outline: none;\n }\n\n [part~=\"source\"] {\n align-items: center;\n display: flex;\n }\n </style>\n `);\n\n return result;\n }\n }\n\n return PopupToggle;\n}\n\n/**\n * Render parts for the template or an instance.\n *\n * @private\n * @param {DocumentFragment} root\n * @param {PlainObject} state\n * @param {ChangedFlags} [changed]\n */\nfunction renderParts(root, state, changed) {\n if (!changed || changed.popupTogglePartType) {\n const { popupTogglePartType } = state;\n const popupToggle = root.getElementById(\"popupToggle\");\n if (popupToggle) {\n transmute(popupToggle, popupTogglePartType);\n }\n }\n}\n","import { forwardFocus } from \"../core/dom.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport { transmute } from \"../core/template.js\";\nimport DelegateFocusMixin from \"./DelegateFocusMixin.js\";\nimport DelegateInputLabelMixin from \"./DelegateInputLabelMixin.js\";\nimport DelegateInputSelectionMixin from \"./DelegateInputSelectionMixin.js\";\nimport FocusVisibleMixin from \"./FocusVisibleMixin.js\";\nimport FormElementMixin from \"./FormElementMixin.js\";\nimport Hidden from \"./Hidden.js\";\nimport {\n defaultState,\n ids,\n inputDelegate,\n keydown,\n raiseChangeEvents,\n render,\n rendered,\n setState,\n shadowRoot,\n state,\n stateEffects,\n template,\n} from \"./internal.js\";\nimport KeyboardMixin from \"./KeyboardMixin.js\";\nimport PopupDragSelectMixin from \"./PopupDragSelectMixin.js\";\nimport PopupSource from \"./PopupSource.js\";\nimport PopupToggleMixin from \"./PopupToggleMixin.js\";\n\nconst elixdebugpopup =\n new URLSearchParams(location.search).get(\"elixdebugpopup\") === \"true\";\n\nconst Base = DelegateFocusMixin(\n DelegateInputLabelMixin(\n DelegateInputSelectionMixin(\n FocusVisibleMixin(\n FormElementMixin(\n KeyboardMixin(PopupDragSelectMixin(PopupToggleMixin(PopupSource)))\n )\n )\n )\n )\n);\n\n/**\n * A text input paired with a popup that can be used as an alternative to typing\n *\n * @inherits PopupSource\n * @mixes DelegateFocusMixin\n * @mixes DelegateInputLabelMixin\n * @mixes DelegateInputSelectionMixin\n * @mixes FocusVisibleMixin\n * @mixes FormElementMixin\n * @mixes KeyboardMixin\n * @mixes PopupDragSelectMixin\n * @mixes PopupToggleMixin\n * @part {Hidden} backdrop\n * @part {input} input - the text input element\n * @part {div} source\n */\nclass ComboBox extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n ariaHasPopup: null,\n confirmedValue: \"\",\n focused: false,\n inputPartType: \"input\",\n orientation: \"vertical\",\n placeholder: \"\",\n selectText: false,\n value: \"\",\n });\n }\n\n get [inputDelegate]() {\n return this[ids].input;\n }\n\n /**\n * The combo box's input element.\n *\n * @type {Element|null}\n */\n get input() {\n return this[shadowRoot] ? this[ids].input : null;\n }\n\n /**\n * The class or tag used to create the `input` part into which the\n * user can enter text.\n *\n * @type {PartDescriptor}\n * @default 'input'\n */\n get inputPartType() {\n return this[state].inputPartType;\n }\n set inputPartType(inputPartType) {\n this[setState]({ inputPartType });\n }\n\n [keydown](/** @type {KeyboardEvent} */ event) {\n let handled;\n\n switch (event.key) {\n // Up/Down arrow keys and Page Up/Page Down open the popup.\n case \"ArrowDown\":\n case \"ArrowUp\":\n case \"PageDown\":\n case \"PageUp\":\n if (this.closed) {\n this.open();\n handled = true;\n }\n break;\n\n // Enter opens popup.\n case \"Enter\":\n if (!this.opened) {\n this.open();\n handled = true;\n }\n break;\n\n // Escape cancels popup.\n case \"Escape\":\n this.close({ canceled: \"Escape\" });\n handled = true;\n break;\n\n // On Windows, F4 is a standard keyboard shortcut to open or cancel a\n // combo box.\n case \"F4\":\n if (this.opened) {\n this.close({ canceled: \"F4\" });\n } else {\n this.open();\n }\n handled = true;\n break;\n }\n\n // Prefer mixin result if it's defined, otherwise use base result.\n return handled || (super[keydown] && super[keydown](event));\n }\n\n /**\n * The prompt text shown in the input if it is empty.\n *\n * @type {string}\n */\n get placeholder() {\n return this[state].placeholder;\n }\n set placeholder(placeholder) {\n this[setState]({\n placeholder: String(placeholder),\n });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n\n renderParts(this[shadowRoot], this[state], changed);\n\n if (changed.inputPartType) {\n this[ids].input.addEventListener(\"blur\", () => {\n this[setState]({\n focused: false,\n });\n // Don't close on blur if we're debugging popups.\n if (!elixdebugpopup) {\n // If we're open and lose focus, then close.\n if (this.opened) {\n this[raiseChangeEvents] = true;\n this.close();\n this[raiseChangeEvents] = false;\n }\n }\n });\n\n this[ids].input.addEventListener(\"focus\", () => {\n this[raiseChangeEvents] = true;\n this[setState]({\n focused: true,\n });\n this[raiseChangeEvents] = false;\n });\n\n this[ids].input.addEventListener(\"input\", () => {\n this[raiseChangeEvents] = true;\n /** @type {any} */\n const cast = this[ids].input;\n const value = cast.value;\n /** @type {PlainObject} */ const changes = {\n value,\n selectText: false,\n };\n if (this.closed && value > \"\") {\n // If user types while popup is closed, implicitly open it.\n changes.opened = true;\n }\n this[setState](changes);\n this[raiseChangeEvents] = false;\n });\n\n this[ids].input.addEventListener(\"keydown\", () => {\n this[raiseChangeEvents] = true;\n this[setState]({\n selectText: false,\n });\n this[raiseChangeEvents] = false;\n });\n\n // If the user clicks on the input and the popup is closed, open it.\n this[ids].input.addEventListener(\"mousedown\", (event) => {\n // Only process events for the main (usually left) button.\n if (/** @type {MouseEvent} */ (event).button !== 0) {\n return;\n }\n this[raiseChangeEvents] = true;\n this[setState]({\n selectText: false,\n });\n if (this.closed && !this.disabled) {\n this.open();\n }\n this[raiseChangeEvents] = false;\n });\n }\n\n // If input wants to know whether combo box is opened, let it know.\n if (changed.opened || changed.inputPartType) {\n /** @type {any} */ const input = this[ids].input;\n if (\"opened\" in input) {\n const { opened } = this[state];\n input.opened = opened;\n }\n }\n\n if (changed.popupTogglePartType) {\n const popupToggle = this[ids].popupToggle;\n const input = this[ids].input;\n popupToggle.addEventListener(\"mousedown\", (event) => {\n // Only process events for the main (usually left) button.\n if (/** @type {MouseEvent} */ (event).button !== 0) {\n return;\n }\n // Ignore mousedown if we're presently disabled.\n if (this[state].disabled) {\n event.preventDefault();\n return;\n }\n this[raiseChangeEvents] = true;\n this.toggle();\n this[raiseChangeEvents] = false;\n });\n if (popupToggle instanceof HTMLElement && input instanceof HTMLElement) {\n // Forward focus for new toggle button.\n forwardFocus(popupToggle, input);\n }\n }\n\n if (changed.popupPartType) {\n const popup = this[ids].popup;\n /** @type {any} */ const cast = popup;\n\n // Make popup not focusable.\n popup.removeAttribute(\"tabindex\");\n\n // Override popup's backdrop to hide it.\n if (\"backdropPartType\" in popup) {\n cast.backdropPartType = Hidden;\n }\n if (\"autoFocus\" in popup) {\n cast.autoFocus = false;\n }\n if (\"closeOnWindowResize\" in popup) {\n cast.closeOnWindowResize = false;\n }\n }\n\n if (changed.disabled) {\n const { disabled } = this[state];\n /** @type {any} */ (this[ids].input).disabled = disabled;\n /** @type {any} */ (this[ids].popupToggle).disabled = disabled;\n }\n\n if (changed.placeholder) {\n const { placeholder } = this[state];\n /** @type {any} */ (this[ids].input).placeholder = placeholder;\n }\n\n if (changed.value) {\n const { value } = this[state];\n /** @type {any} */ (this[ids].input).value = value;\n }\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n super[rendered](changed);\n if (this[state].selectText) {\n // Select the text in the input after giving the inner input a chance to render the value.\n setTimeout(() => {\n // Text selection might have been turned off in the interim;\n // double-check that we still want to select text.\n if (this[state].selectText) {\n /** @type {any} */\n const cast = this[ids].input;\n const value = cast.value;\n if (value > \"\") {\n cast.selectionStart = 0;\n cast.selectionEnd = cast.value.length;\n }\n }\n });\n }\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects](state, changed);\n\n // If the value changes while the popup is closed (or closing), consider the\n // value to be confirmed. This confirmed value will be restored if the user\n // later opens the popup and then cancels it. On the other hand, if the user\n // is cancelling the popup, then restore the value from the most recent\n // confirmed value.\n if (changed.opened || changed.value) {\n const { closeResult, opened } = state;\n if (!opened) {\n const canceled = closeResult && closeResult.canceled;\n if (canceled) {\n // Restore previous confirmed value.\n Object.assign(effects, {\n value: state.confirmedValue,\n });\n } else {\n // Confirm current value.\n Object.assign(effects, {\n confirmedValue: state.value,\n });\n }\n }\n }\n\n // Select text on closing.\n // Exception: on mobile devices, leaving the text selected may show\n // selection handles, which may suggest to the user that there's something\n // more they should be doing with the text even though they're done with it.\n // We therefore avoid leaving text selected if an on-screen keyboard is in\n // use. Since we can't actually detect that, we use the absence of a\n // fine-grained pointer (mouse) as a proxy for mobile.\n if (changed.opened && !state.opened) {\n const probablyMobile = matchMedia(\"(pointer: coarse)\").matches;\n const selectText = !probablyMobile;\n Object.assign(effects, { selectText });\n }\n\n return effects;\n }\n\n get [template]() {\n const result = super[template];\n\n // Put an input element and toggle in the source.\n const sourceSlot = result.content.querySelector('slot[name=\"source\"]');\n if (sourceSlot) {\n sourceSlot.replaceWith(fragmentFrom.html`\n <input id=\"input\" part=\"input\"></input>\n `);\n }\n\n renderParts(result.content, this[state]);\n\n result.content.append(\n fragmentFrom.html`\n <style>\n [part~=\"source\"] {\n background-color: inherit;\n display: inline-grid;\n grid-template-columns: 1fr auto;\n position: relative;\n }\n\n [part~=\"input\"] {\n outline: none;\n }\n </style>\n `\n );\n\n return result;\n }\n\n get value() {\n return this[state].value;\n }\n set value(value) {\n this[setState]({ value });\n }\n}\n\n/**\n * Render parts for the template or an instance.\n *\n * @private\n * @param {DocumentFragment} root\n * @param {PlainObject} state\n * @param {ChangedFlags} [changed]\n */\nfunction renderParts(root, state, changed) {\n if (!changed || changed.inputPartType) {\n const { inputPartType } = state;\n const input = root.getElementById(\"input\");\n if (input) {\n transmute(input, inputPartType);\n }\n }\n}\n\nexport default ComboBox;\n","/**\n * Helpers for working with element content.\n *\n * @module content\n */\n\n// These are tags for elements that can appear in the document body, but do not\n// seem to have any user-visible manifestation.\n// See https://developer.mozilla.org/en-US/docs/Web/HTML/Element\nconst auxiliarycustomTags = [\n \"applet\", // deprecated\n \"basefont\", // deprecated\n \"embed\",\n \"font\", // deprecated\n \"frame\", // deprecated\n \"frameset\", // deprecated\n \"isindex\", // deprecated\n \"keygen\", // deprecated\n \"link\",\n \"multicol\", // deprecated\n \"nextid\", // deprecated\n \"noscript\",\n \"object\",\n \"param\",\n \"script\",\n \"style\",\n \"template\",\n \"noembed\", // deprecated\n];\n\n/**\n * Use a heuristic to extract text from the given item.\n *\n * This looks, in order, at: the `aria-label` attribute, the `alt` attribute,\n * `innerText`, or `textContent`.\n *\n * This function is used as the default implementation of the\n * [getItemText](internal#getItemText) function in several mixins.\n *\n * @param {Element} element\n * @returns {string}\n */\nexport function getDefaultText(element) {\n return (\n element.getAttribute(\"aria-label\") ||\n element.getAttribute(\"alt\") ||\n /** @type {any} */ (element).innerText ||\n element.textContent ||\n \"\"\n );\n}\n\n/**\n * Return true if the given node is likely to be useful as component content.\n *\n * This will be `true` for nodes that are: a) instances of `Element`\n * (`HTMLElement` or `SVGElement`), and b) not on a blacklist of normally\n * invisible elements (such as `style` or `script`). Among other things, this\n * returns `false` for Text nodes.\n *\n * This is used by [ContentItemsMixin](ContentItemsMixin) to filter out nodes\n * which are unlikely to be interesting as list items. This is intended to\n * satisfy the Gold Standard checklist criteria [Auxiliary\n * Content](https://github.com/webcomponents/gold-standard/wiki/Auxiliary-Content),\n * so that a component does not inadvertently treat `<style>` and other invisible\n * items as element content.\n *\n * @param {Node} node\n * @returns {boolean}\n */\nexport function isSubstantiveElement(node) {\n return (\n node instanceof Element &&\n (!node.localName || auxiliarycustomTags.indexOf(node.localName) < 0)\n );\n}\n\n/**\n * Return a set of Elements which are likely to be useful as component content.\n *\n * Given a `NodeList` or array of objects, this will return only those array\n * members that are: a) instances of `Element` (`HTMLElement` or `SVGElement`),\n * and b) not on a blacklist of normally invisible elements (such as `style` or\n * `script`). Among other things, this filters out Text nodes.\n *\n * @param {(NodeList|Node[])} nodes - the list of nodes to filter\n * @returns {Element[]} the filtered elements\n */\nexport function substantiveElements(nodes) {\n return [].filter.call(nodes, (/** @type {Node} */ node) =>\n isSubstantiveElement(node)\n );\n}\n","import { booleanAttributeValue } from \"../core/AttributeMarshallingMixin.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n goFirst,\n goLast,\n goNext,\n goPrevious,\n raiseChangeEvents,\n rendered,\n setState,\n state,\n} from \"./internal.js\";\n\n/**\n * Exposes a public API for navigating a cursor over a set of items\n *\n * This mixin expects a component to provide an `items` Array of all elements in\n * the list. This mixin also expects the component to apply\n * [ItemsCursorMixin](ItemsCursorMixin) or otherwise define a compatible\n * `currentIndex` state and other state members for navigating the current item.\n *\n * Given the above, this mixin exposes a consistent public API for reading and\n * manipulating the cursor.\n *\n * @module CursorAPIMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function CursorAPIMixin(Base) {\n // The class prototype added by the mixin.\n class CursorAPI extends Base {\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"current-index\") {\n this.currentIndex = Number(newValue);\n } else if (name === \"current-item-required\") {\n const value = booleanAttributeValue(name, newValue);\n if (this.currentItemRequired !== value) {\n this.currentItemRequired = value;\n }\n } else if (name === \"cursor-operations-wrap\") {\n const value = booleanAttributeValue(name, newValue);\n if (this.cursorOperationsWrap !== value) {\n this.cursorOperationsWrap = value;\n }\n } else {\n super.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n /**\n * The index of the current item, or -1 if no item is current.\n *\n * @type {number}\n */\n get currentIndex() {\n const { items, currentIndex } = this[state];\n return items && items.length > 0 ? currentIndex : -1;\n }\n set currentIndex(currentIndex) {\n if (!isNaN(currentIndex)) {\n this[setState]({ currentIndex });\n }\n }\n\n /**\n * The current item, or null if no item is current.\n *\n * @type {Element}\n */\n get currentItem() {\n const { items, currentIndex } = this[state];\n return items && items[currentIndex];\n }\n set currentItem(currentItem) {\n const { items } = this[state];\n if (!items) {\n return;\n }\n const currentIndex = items.indexOf(currentItem);\n this[setState]({ currentIndex });\n }\n\n /**\n * True if the list should always have a current item (if it has items).\n *\n * @type {boolean}\n * @default false\n */\n get currentItemRequired() {\n return this[state].currentItemRequired;\n }\n set currentItemRequired(currentItemRequired) {\n this[setState]({ currentItemRequired });\n }\n\n /**\n * True if cursor operations wrap from last to first, and vice versa.\n *\n * @type {boolean}\n * @default false\n */\n get cursorOperationsWrap() {\n return this[state].cursorOperationsWrap;\n }\n set cursorOperationsWrap(cursorOperationsWrap) {\n this[setState]({ cursorOperationsWrap });\n }\n\n /**\n * Moves to the first item in the list.\n *\n * @returns {Boolean} True if the current item changed, false if not.\n */\n goFirst() {\n if (super.goFirst) {\n super.goFirst();\n }\n return this[goFirst]();\n }\n\n /**\n * Move to the last item in the list.\n *\n * @returns {Boolean} True if the current item changed\n */\n goLast() {\n if (super.goLast) {\n super.goLast();\n }\n return this[goLast]();\n }\n\n /**\n * Move to the next item in the list.\n *\n * If the list has no current item, the first item will become current.\n *\n * @returns {Boolean} True if the current item changed\n */\n goNext() {\n if (super.goNext) {\n super.goNext();\n }\n return this[goNext]();\n }\n\n /**\n * Moves to the previous item in the list.\n *\n * If the list has no current item, the last item will become current.\n *\n * @returns {Boolean} True if the current item changed\n */\n goPrevious() {\n if (super.goPrevious) {\n super.goPrevious();\n }\n return this[goPrevious]();\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n if (changed.currentIndex && this[raiseChangeEvents]) {\n const { currentIndex } = this[state];\n /**\n * Raised when the `currentIndex` property changes.\n *\n * @event currentindexchanged\n */\n const event = new CustomEvent(\"currentindexchange\", {\n bubbles: true,\n detail: { currentIndex },\n });\n this.dispatchEvent(event);\n }\n }\n }\n\n return CursorAPI;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n goFirst,\n goLast,\n goNext,\n goPrevious,\n itemsDelegate,\n setState,\n} from \"./internal.js\";\n\n/**\n * has the effect of adding the component to the tab order in document order.\n *\n * @module DelegateCursorMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function DelegateCursorMixin(Base) {\n // The class prototype added by the mixin.\n class DelegateCursor extends Base {\n [goFirst]() {\n return delegateCursorOperation(this, goFirst);\n }\n\n [goLast]() {\n return delegateCursorOperation(this, goLast);\n }\n\n [goNext]() {\n return delegateCursorOperation(this, goNext);\n }\n\n [goPrevious]() {\n return delegateCursorOperation(this, goPrevious);\n }\n }\n\n return DelegateCursor;\n}\n\nfunction delegateCursorOperation(element, operation) {\n /** @type {any} */ const cast = element[itemsDelegate];\n if (!cast[operation]) {\n return false;\n }\n\n const changed = cast[operation]();\n if (changed) {\n const currentIndex = cast.currentIndex;\n element[setState]({ currentIndex });\n }\n\n return changed;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n itemsDelegate,\n render,\n rendered,\n setState,\n state,\n} from \"./internal.js\";\n\n/** @type {any} */\nconst itemsChangedListenerKey = Symbol(\"itemsChangedListener\");\n/** @type {any} */\nconst previousItemsDelegateKey = Symbol(\"previousItemsDelegate\");\n/** @type {any} */\nconst currentIndexChangedListenerKey = Symbol(\"currentIndexChangedListener\");\n\n/**\n * Treats the items inside a shadow element as the component's own items.\n *\n * @module DelegateItemsMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function DelegateItemsMixin(Base) {\n // The class prototype added by the mixin.\n class DelegateItems extends Base {\n constructor() {\n super();\n // @ts-ignore\n this[itemsChangedListenerKey] = (event) => {\n /** @type {any} */\n const cast = event.target;\n const delegateItems = cast.items;\n if (this[state].items !== delegateItems) {\n this[setState]({\n items: delegateItems,\n });\n }\n };\n // @ts-ignore\n this[currentIndexChangedListenerKey] = (event) => {\n /** @type {any} */\n const cast = event;\n const delegateCurrentIndex = cast.detail.currentIndex;\n if (this[state].currentIndex !== delegateCurrentIndex) {\n this[setState]({\n currentIndex: delegateCurrentIndex,\n });\n }\n };\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n items: null,\n });\n }\n\n /**\n * The current set of items drawn from the element's current state.\n *\n * @returns {Element[]|null} the element's current items\n */\n get items() {\n return this[state] ? this[state].items : null;\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n if (changed.currentIndex) {\n if (typeof this[itemsDelegate] === \"undefined\") {\n throw `To use DelegateItemsMixin, ${this.constructor.name} must define a getter for [itemsDelegate].`;\n }\n if (\"currentIndex\" in this[itemsDelegate]) {\n this[itemsDelegate].currentIndex = this[state].currentIndex;\n }\n }\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n // If the delegate changed, wire up event handlers.\n const previousItemsDelegate = this[previousItemsDelegateKey];\n if (this[itemsDelegate] !== previousItemsDelegate) {\n if (previousItemsDelegate) {\n // Stop listening to events on previous delegate.\n previousItemsDelegate.removeEventListener(\n this[itemsChangedListenerKey]\n );\n previousItemsDelegate.removeEventListener(\n this[currentIndexChangedListenerKey]\n );\n }\n // Start listening to events on new delegate.\n this[itemsDelegate].addEventListener(\n \"itemschange\",\n this[itemsChangedListenerKey]\n );\n this[itemsDelegate].addEventListener(\n \"currentindexchange\",\n this[currentIndexChangedListenerKey]\n );\n this[previousItemsDelegateKey] = this[itemsDelegate];\n }\n }\n }\n\n return DelegateItems;\n}\n","/**\n * Helpers related to universal accessibility\n *\n * Universal accessibility is a core goal of the Elix project. These helpers are\n * used by mixins like [AriaListMixin](AriaListMixin) and\n * [AriaMenuMixin](AriaMenuMixin) to support accessibility via ARIA.\n *\n * @module accessibility\n */\n\n// Used by ensureId\nconst generatedIdKey = Symbol(\"generatedId\");\nlet generatedIdCount = 0;\n\n/**\n * A dictionary mapping built-in HTML elements to their default ARIA role.\n *\n * Example: `defaultAriaRole.ol` returns \"list\", since the default ARIA role\n * for an `ol` (ordered list) element is \"list\".\n */\nexport const defaultAriaRole = {\n a: \"link\",\n article: \"region\",\n button: \"button\",\n h1: \"sectionhead\",\n h2: \"sectionhead\",\n h3: \"sectionhead\",\n h4: \"sectionhead\",\n h5: \"sectionhead\",\n h6: \"sectionhead\",\n hr: \"sectionhead\",\n iframe: \"region\",\n link: \"link\",\n menu: \"menu\",\n ol: \"list\",\n option: \"option\",\n output: \"liveregion\",\n progress: \"progressbar\",\n select: \"select\",\n table: \"table\",\n td: \"td\",\n textarea: \"textbox\",\n th: \"th\",\n ul: \"list\",\n};\n\n/**\n * If the given element already has an ID, return it. If not, generate a\n * previously unused ID and return that.\n *\n * @param {Element} element\n * @returns {string}\n */\nexport function ensureId(element) {\n let id = element.id || element[generatedIdKey];\n if (!id) {\n id = `_id${generatedIdCount++}`;\n // Remember that we generated an ID for this element.\n element[generatedIdKey] = id;\n }\n return id;\n}\n","import { closestFocusableNode } from \"../core/dom.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { defaultState, firstRender, render, state } from \"./internal.js\";\n\n// Quick detection of whether we'll need to handle focus.\n// As of February 2019, we don't need to handle this in Chrome, perhaps because\n// they already support delegatesFocus (which handles related focus issues).\nconst focusTest = document.createElement(\"div\");\nfocusTest.attachShadow({ mode: \"open\", delegatesFocus: true });\n/** @type {any} */\nconst focusTestShadowRoot = focusTest.shadowRoot;\nconst nativeDelegatesFocus = focusTestShadowRoot.delegatesFocus;\n\n/**\n * Normalizes focus treatment for custom elements with Shadow DOM\n *\n * This mixin exists because the default behavior for mousedown should set the\n * focus to the closest ancestor of the clicked element that can take the focus.\n * As of Nov 2018, Chrome and Safari don't handle this as expected when the\n * clicked element is reassigned across more than one slot to end up inside a\n * focusable element. In such cases, the focus will end up on the body. Firefox\n * exhibits the behavior we want. See\n * https://github.com/w3c/webcomponents/issues/773.\n *\n * This mixin normalizes behavior to provide what Firefox does. When the user\n * mouses down inside anywhere inside the component's light DOM or Shadow DOM,\n * we walk up the composed tree to find the first element that can take the\n * focus and put the focus on it.\n *\n * @module ComposedFocusMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function ComposedFocusMixin(Base) {\n // The class prototype added by the mixin.\n class ComposedFocus extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n composeFocus: !nativeDelegatesFocus,\n });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n if (this[firstRender]) {\n this.addEventListener(\"mousedown\", (event) => {\n if (!this[state].composeFocus) {\n return;\n }\n // Only process events for the main (usually left) button.\n if (event.button !== 0) {\n return;\n }\n if (event.target instanceof Element) {\n const target = closestFocusableNode(event.target);\n if (target) {\n target.focus();\n event.preventDefault();\n }\n }\n });\n }\n }\n }\n\n return ComposedFocus;\n}\n","import { selfAndComposedAncestors } from \"../core/dom.js\";\nimport { shadowRoot } from \"./internal.js\";\n\n/**\n * Utilities for working with scrolling.\n *\n * @module defaultScrollTarget\n */\n\n/**\n * Returns true if the given target or any of its ancestors can be scrolled\n * in the indicated direction.\n *\n * This is used, e.g., by gesture event handlers to predict if the default\n * behavior for a given event is likely to result in scrolling.\n *\n * @param {EventTarget} target\n * @param {'horizontal'|'vertical'} orientation\n * @param {boolean} downOrRight\n */\nexport function canScrollInDirection(target, orientation, downOrRight) {\n if (!(target instanceof Node)) {\n return false;\n }\n for (const ancestor of selfAndComposedAncestors(target)) {\n if (ancestor instanceof HTMLElement) {\n const style = getComputedStyle(ancestor);\n const vertical = orientation === \"vertical\";\n const scrollAxisMatch =\n (vertical &&\n (style.overflowY === \"scroll\" || style.overflowY === \"auto\")) ||\n (!vertical &&\n (style.overflowX === \"scroll\" || style.overflowX === \"auto\"));\n if (scrollAxisMatch) {\n // Found an ancestor that can potentially scroll in this orientation.\n const scrollEdge = vertical ? \"scrollTop\" : \"scrollLeft\";\n if (!downOrRight && ancestor[scrollEdge] > 0) {\n // Target has room to scroll up or left.\n return true;\n }\n const scrollLength = vertical ? \"scrollHeight\" : \"scrollWidth\";\n const clientLength = vertical ? \"clientHeight\" : \"clientWidth\";\n const scrollMax = ancestor[scrollLength] - ancestor[clientLength];\n if (downOrRight && ancestor[scrollEdge] < scrollMax) {\n // Target has room to scroll down or right.\n return true;\n }\n }\n }\n }\n return false;\n}\n\n/**\n * This helper returns a guess as to what portion of the given element can be\n * scrolled. This is used by [CursorInViewMixin](CursorInViewMixin) to\n * provide a default implementation of [scrollTarget].\n *\n * If the element has a shadow root containing a default (unnamed) slot, this\n * returns the first ancestor of that slot that has either `overflow-x` or\n * `overflow-y` styled as `auto` or `scroll`. If the element has no default\n * slot, or no scrolling ancestor is found, the element itself is returned.\n *\n * @param {Element} element the component to examine for a scrolling\n * element\n * @returns {Element}\n */\nexport function defaultScrollTarget(element) {\n const root = element[shadowRoot];\n const slot = root && root.querySelector(\"slot:not([name])\");\n const scrollingParent =\n slot &&\n slot.parentNode instanceof Element &&\n getScrollableElement(slot.parentNode);\n return scrollingParent || element;\n}\n\n/**\n * Return true if the given element can be scrolled.\n *\n * @private\n * @param {HTMLElement} element\n */\nfunction isElementScrollable(element) {\n const style = getComputedStyle(element);\n const overflowX = style.overflowX;\n const overflowY = style.overflowY;\n return (\n overflowX === \"scroll\" ||\n overflowX === \"auto\" ||\n overflowY === \"scroll\" ||\n overflowY === \"auto\"\n );\n}\n\n/**\n * If the given element can be scrolled, return that. If not, return the closest\n * ancestor that can be scrolled. If no such ancestor is found, return null.\n *\n * @param {Element} node\n * @returns {Element|null}\n */\nexport function getScrollableElement(node) {\n for (const ancestor of selfAndComposedAncestors(node)) {\n if (ancestor instanceof HTMLElement && isElementScrollable(ancestor)) {\n return ancestor;\n }\n }\n return null;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { rendered, scrollTarget, state } from \"./internal.js\";\nimport { defaultScrollTarget } from \"./scrolling.js\";\n\n/**\n * Scrolls to ensure the current item is visible\n *\n * When the current item in a list-like component changes, the current item\n * should be brought into view so that the user can confirm their selection.\n *\n * This mixin expects an `items` collection, such as that provided by\n * [ContentItemsMixin](ContentItemsMixin). It also expects a\n * `state.currentItem` member indicating which item is current. You\n * can supply that yourself, or use\n * [ItemsCursorMixin](ItemsCursorMixin).\n *\n * @module CursorInViewMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function CursorInViewMixin(Base) {\n // The class prototype added by the mixin.\n class CursorInView extends Base {\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n if (changed.currentItem) {\n this.scrollCurrentItemIntoView();\n }\n }\n\n /**\n * Scroll the current item completely into view, minimizing the degree of\n * scrolling performed.\n *\n * Blink has a `scrollIntoViewIfNeeded()` function that does something\n * similar, but unfortunately it's non-standard, and in any event often ends\n * up scrolling more than is absolutely necessary.\n *\n * This scrolls the containing element defined by the `scrollTarget`\n * property. By default, it will scroll the element itself.\n */\n scrollCurrentItemIntoView() {\n if (super.scrollCurrentItemIntoView) {\n super.scrollCurrentItemIntoView();\n }\n\n const { currentItem, items } = this[state];\n if (!currentItem || !items) {\n return;\n }\n\n // Determine the bounds of the scroll target and item. We use\n // getBoundingClientRect instead of .offsetTop, etc., because the latter\n // round values, and we want to handle fractional values.\n const scrollTargetRect = this[scrollTarget].getBoundingClientRect();\n const itemRect = currentItem.getBoundingClientRect();\n\n // Determine how far the item is outside the viewport.\n const bottomDelta = itemRect.bottom - scrollTargetRect.bottom;\n const leftDelta = itemRect.left - scrollTargetRect.left;\n const rightDelta = itemRect.right - scrollTargetRect.right;\n const topDelta = itemRect.top - scrollTargetRect.top;\n\n // Scroll the target as necessary to bring the item into view.\n // If an `orientation` state member is defined, only scroll along that\n // axis. Otherwise, assume the orientation is \"both\".\n const orientation = this[state].orientation || \"both\";\n if (orientation === \"horizontal\" || orientation === \"both\") {\n if (rightDelta > 0) {\n this[scrollTarget].scrollLeft += rightDelta; // Scroll right\n } else if (leftDelta < 0) {\n this[scrollTarget].scrollLeft += Math.ceil(leftDelta); // Scroll left\n }\n }\n if (orientation === \"vertical\" || orientation === \"both\") {\n if (bottomDelta > 0) {\n this[scrollTarget].scrollTop += bottomDelta; // Scroll down\n } else if (topDelta < 0) {\n this[scrollTarget].scrollTop += Math.ceil(topDelta); // Scroll up\n }\n }\n }\n\n /**\n * The element that should be scrolled to get the selected item into view.\n *\n * By default, this uses the [defaultScrollTarget](defaultScrollTarget)\n * helper to find the most likely candidate for scrolling. You can override\n * this property to directly identify which element should be scrolled.\n *\n * See also [scrollTarget](internal#internal.scrollTarget).\n */\n get [scrollTarget]() {\n const base = super[scrollTarget];\n /** @type {any} */\n const element = this;\n return base || defaultScrollTarget(element);\n }\n }\n\n return CursorInView;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n goDown,\n goEnd,\n goFirst,\n goLast,\n goLeft,\n goNext,\n goPrevious,\n goRight,\n goStart,\n goUp,\n state,\n stateEffects,\n} from \"./internal.js\";\n\n/**\n * Maps direction semantics to cursor semantics.\n *\n * This turns a movement in a direction (go left, go right) into a cursor\n * operation (go previous, go next).\n *\n * This mixin can be used in conjunction with\n * [KeyboardDirectionMixin](KeyboardDirectionMixin) (which maps keyboard events\n * to directions) and a mixin that handles cursor operations like\n * [ItemsCursorMixin](ItemsCursorMixin).\n *\n * @module DirectionCursorMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function DirectionCursorMixin(Base) {\n // The class prototype added by the mixin.\n class DirectionCursor extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n canGoDown: null,\n canGoLeft: null,\n canGoRight: null,\n canGoUp: null,\n });\n }\n\n /**\n * Interprets `goDown` to mean \"move to the next item\".\n */\n [goDown]() {\n if (super[goDown]) {\n super[goDown]();\n }\n return this[goNext]();\n }\n\n /**\n * Interprets `goEnd` to mean \"move to the last item\".\n */\n [goEnd]() {\n if (super[goEnd]) {\n super[goEnd]();\n }\n return this[goLast]();\n }\n\n /**\n * Interprets `goLeft` to mean \"move to the previous item\".\n *\n * If the element has a `rightToLeft` property and it is true, then this\n * moves to the _next_ item.\n */\n [goLeft]() {\n if (super[goLeft]) {\n super[goLeft]();\n }\n return this[state] && this[state].rightToLeft\n ? this[goNext]()\n : this[goPrevious]();\n }\n\n /**\n * Interprets `goRight` to mean \"move to the next item\".\n *\n * If the element has a `rightToLeft` property and it is true, then this\n * moves to the _previous_ item.\n */\n [goRight]() {\n if (super[goRight]) {\n super[goRight]();\n }\n return this[state] && this[state].rightToLeft\n ? this[goPrevious]()\n : this[goNext]();\n }\n\n /**\n * Interprets `goStart` to mean \"move to the first item\".\n */\n [goStart]() {\n if (super[goStart]) {\n super[goStart]();\n }\n return this[goFirst]();\n }\n\n /**\n * Interprets `goUp` to mean \"move to the previous item\".\n */\n [goUp]() {\n if (super[goUp]) {\n super[goUp]();\n }\n return this[goPrevious]();\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects]\n ? super[stateEffects](state, changed)\n : {};\n\n // Update computed state members to track whether we can go\n // down/left/right/up.\n if (\n changed.canGoNext ||\n changed.canGoPrevious ||\n changed.languageDirection ||\n changed.orientation ||\n changed.rightToLeft\n ) {\n const { canGoNext, canGoPrevious, orientation, rightToLeft } = state;\n const horizontal =\n orientation === \"horizontal\" || orientation === \"both\";\n const vertical = orientation === \"vertical\" || orientation === \"both\";\n const canGoDown = vertical && canGoNext;\n const canGoLeft = !horizontal\n ? false\n : rightToLeft\n ? canGoNext\n : canGoPrevious;\n const canGoRight = !horizontal\n ? false\n : rightToLeft\n ? canGoPrevious\n : canGoNext;\n const canGoUp = vertical && canGoPrevious;\n Object.assign(effects, {\n canGoDown,\n canGoLeft,\n canGoRight,\n canGoUp,\n });\n }\n\n return effects;\n }\n }\n\n return DirectionCursor;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { firstRender, raiseChangeEvents, rendered, state } from \"./internal.js\";\n\n/**\n * Exposes a public API for the set of items in a list-like element\n *\n * @module ItemsAPIMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function ItemsAPIMixin(Base) {\n // The class prototype added by the mixin.\n class ItemsAPI extends Base {\n /**\n * The current set of items drawn from the element's current state.\n *\n * @type {ListItemElement[]} the element's current items\n */\n get items() {\n return this[state] ? this[state].items : null;\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n // Raise items-changed if items changed after the initial render. We'll\n // see changed.items on initial render, and raiseChangeEvents will be true\n // if we're using SlotContentMixin, but we don't want to actually raise\n // the event then because the items didn't change in response to user\n // activity.\n if (!this[firstRender] && changed.items && this[raiseChangeEvents]) {\n /**\n * Raised when the `items` property changes.\n *\n * @event itemschange\n */\n const event = new CustomEvent(\"itemschange\", {\n bubbles: true,\n });\n this.dispatchEvent(event);\n }\n }\n }\n\n return ItemsAPI;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n closestAvailableItemIndex,\n defaultState,\n goFirst,\n goLast,\n goNext,\n goPrevious,\n setState,\n state,\n stateEffects,\n} from \"./internal.js\";\n\n/**\n * Tracks and navigates the current item in a set of items\n *\n * @module ItemsCursorMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function ItemsCursorMixin(Base) {\n // The class prototype added by the mixin.\n class ItemsCursor extends Base {\n /**\n * Look for an item which is available in the given state..\n *\n * The `options` parameter can accept options for:\n *\n * * `direction`: 1 to move forward, -1 to move backward\n * * `index`: the index to start at, defaults to `state.currentIndex`\n * * `wrap`: whether to wrap around the ends of the `items` array, defaults\n * to `state.cursorOperationsWrap`.\n *\n * If an available item was found, this returns its index. If no item was\n * found, this returns -1.\n *\n * @param {PlainObject} state\n * @param {PlainObject} options\n * @returns {number}\n */\n [closestAvailableItemIndex](state, options = {}) {\n const direction = options.direction !== undefined ? options.direction : 1;\n const index =\n options.index !== undefined ? options.index : state.currentIndex;\n const wrap =\n options.wrap !== undefined ? options.wrap : state.cursorOperationsWrap;\n\n const { items } = state;\n const count = items ? items.length : 0;\n\n if (count === 0) {\n // No items\n return -1;\n }\n\n if (wrap) {\n // Search with wrapping.\n\n // Modulus taking into account negative numbers.\n let i = ((index % count) + count) % count;\n const end = (((i - direction) % count) + count) % count;\n while (i !== end) {\n const available = state.availableItemFlags\n ? state.availableItemFlags[i]\n : true;\n if (available) {\n return i;\n }\n // See modulus note above.\n i = (((i + direction) % count) + count) % count;\n }\n } else {\n // Search without wrapping.\n for (let i = index; i >= 0 && i < count; i += direction) {\n const available = state.availableItemFlags\n ? state.availableItemFlags[i]\n : true;\n if (available) {\n return i;\n }\n }\n }\n\n return -1; // No item found\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n currentIndex: -1,\n desiredCurrentIndex: null,\n currentItem: null,\n currentItemRequired: false,\n cursorOperationsWrap: false,\n });\n }\n\n /**\n * Move to the first item in the set.\n *\n * @protected\n * @returns {Boolean} True if the current item changed, false if not.\n */\n [goFirst]() {\n if (super[goFirst]) {\n super[goFirst]();\n }\n return moveToIndex(this, 0, 1);\n }\n\n /**\n * Move to the last item in the set.\n *\n * @protected\n * @returns {Boolean} True if the current item changed, false if not.\n */\n [goLast]() {\n if (super[goLast]) {\n super[goLast]();\n }\n return moveToIndex(this, this[state].items.length - 1, -1);\n }\n\n /**\n * Move to the next item in the set.\n *\n * If no item is current, move to the first item.\n *\n * @protected\n * @returns {Boolean} True if the current item changed, false if not.\n */\n [goNext]() {\n if (super[goNext]) {\n super[goNext]();\n }\n const { currentIndex, items } = this[state];\n const start = currentIndex < 0 && items ? 0 : currentIndex + 1;\n return moveToIndex(this, start, 1);\n }\n\n /**\n * Move to the previous item in the set.\n *\n * If no item is current, move to the last item.\n *\n * @protected\n * @returns {Boolean} True if the current item changed, false if not.\n */\n [goPrevious]() {\n if (super[goPrevious]) {\n super[goPrevious]();\n }\n const { currentIndex, items } = this[state];\n const start =\n currentIndex < 0 && items ? items.length - 1 : currentIndex - 1;\n return moveToIndex(this, start, -1);\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects]\n ? super[stateEffects](state, changed)\n : {};\n\n // Ensure currentIndex is valid.\n if (\n changed.availableItemFlags ||\n changed.items ||\n changed.currentIndex ||\n changed.currentItemRequired\n ) {\n const {\n currentIndex,\n desiredCurrentIndex,\n currentItem,\n currentItemRequired,\n items,\n } = state;\n\n const count = items ? items.length : 0;\n\n // Determine the desired index: the one we want irrespective of whether\n // we have items or their availability.\n // Assume we'll stick with the same desired index we already have.\n let newDesiredIndex = desiredCurrentIndex;\n if (\n changed.items &&\n !changed.currentIndex &&\n currentItem &&\n count > 0 &&\n items[currentIndex] !== currentItem\n ) {\n // The items changed, and the item at the cursor is no longer the\n // same. See if we can find that item again in the list of items.\n const newItemIndex = items.indexOf(currentItem);\n if (newItemIndex >= 0) {\n // Found the item again; try to use its index.\n newDesiredIndex = newItemIndex;\n }\n } else if (\n changed.currentIndex &&\n ((currentIndex < 0 && currentItem !== null) ||\n (currentIndex >= 0 &&\n (count === 0 || items[currentIndex] !== currentItem)) ||\n desiredCurrentIndex === null)\n ) {\n // Someone explicitly moved the cursor, which trumps any previously\n // desired index.\n newDesiredIndex = currentIndex;\n }\n\n // If an item is required and there's no selection, we'll implicitly try\n // to get the first available item.\n if (currentItemRequired && newDesiredIndex < 0) {\n newDesiredIndex = 0;\n }\n\n // Now that we know what index we want, see how close we can get to it.\n let newIndex;\n if (newDesiredIndex < 0) {\n // All negative indices are equivalent to -1.\n newDesiredIndex = -1;\n newIndex = -1;\n } else if (count === 0) {\n // No items yet.\n newIndex = -1;\n } else {\n // See how close we can get to the desired index.\n // First clamp index to existing array bounds.\n newIndex = Math.max(Math.min(count - 1, newDesiredIndex), 0);\n // Look for an available item going forward.\n newIndex = this[closestAvailableItemIndex](state, {\n direction: 1,\n index: newIndex,\n wrap: false,\n });\n if (newIndex < 0) {\n // Next best: look for an available item going backward.\n newIndex = this[closestAvailableItemIndex](state, {\n direction: -1,\n index: newIndex - 1,\n wrap: false,\n });\n }\n }\n\n const newItem = (items && items[newIndex]) || null;\n Object.assign(effects, {\n currentIndex: newIndex,\n desiredCurrentIndex: newDesiredIndex,\n currentItem: newItem,\n });\n }\n\n return effects;\n }\n }\n\n return ItemsCursor;\n}\n\n/**\n * Update currentIndex and return true if it changed.\n *\n * @private\n * @param {Element} element\n * @param {number} index\n * @param {number} direction\n */\nfunction moveToIndex(element, index, direction) {\n const newIndex = element[closestAvailableItemIndex](element[state], {\n direction,\n index,\n });\n if (newIndex < 0) {\n // Couldn't find an item to move to.\n return false;\n }\n // Normally we don't check to see if state is going to change before setting\n // state, but the methods defined by this mixin want to be able to return true\n // if the index is actually going to change.\n const changed = element[state].currentIndex !== newIndex;\n if (changed) {\n element[setState]({\n currentIndex: newIndex,\n });\n }\n return changed;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { getDefaultText } from \"./content.js\";\nimport { defaultState, getItemText, stateEffects } from \"./internal.js\";\n\n/**\n * Exposes the text content of a list's items as an array of strings.\n *\n * @module ItemsTextMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function ItemsTextMixin(Base) {\n // The class prototype added by the mixin.\n class ItemsText extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n texts: null,\n });\n }\n\n /**\n * Extract the text from the given item.\n *\n * The default implementation returns an item's `aria-label`, `alt`\n * attribute, `innerText`, or `textContent`, in that order. You can override\n * this to return the text that should be used.\n *\n * @param {Element} item\n * @returns {string}\n */\n [getItemText](item) {\n return super[getItemText]\n ? super[getItemText](item)\n : getDefaultText(item);\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects]\n ? super[stateEffects](state, changed)\n : {};\n\n // Regenerate texts when items change.\n if (changed.items) {\n const { items } = state;\n const texts = getTextsFromItems(items, this[getItemText]);\n if (texts) {\n Object.freeze(texts);\n Object.assign(effects, { texts });\n }\n }\n\n return effects;\n }\n }\n\n return ItemsText;\n}\n\n/**\n * Extract the text from the given items.\n *\n * @private\n * @param {Element[]} items\n */\nexport function getTextsFromItems(items, getText) {\n return items ? Array.from(items, (item) => getText(item)) : null;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n goDown,\n goEnd,\n goLeft,\n goRight,\n goStart,\n goUp,\n keydown,\n state,\n} from \"./internal.js\";\n\n/**\n * Maps direction keys to direction semantics.\n *\n * This mixin is useful for components that want to map direction keys (Left,\n * Right, etc.) to movement in the indicated direction (go left, go right,\n * etc.).\n *\n * This mixin expects the component to invoke a `keydown` method when a key is\n * pressed. You can use [KeyboardMixin](KeyboardMixin) for that\n * purpose, or wire up your own keyboard handling and call `keydown` yourself.\n *\n * This mixin calls methods such as `goLeft` and `goRight`. You can define\n * what that means by implementing those methods yourself. If you want to use\n * direction keys to navigate a selection, use this mixin with\n * [DirectionCursorMixin](DirectionCursorMixin).\n *\n * If the component defines a property called `orientation`, the value of that\n * property will constrain navigation to the horizontal or vertical axis.\n *\n * @module KeyboardDirectionMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function KeyboardDirectionMixin(Base) {\n // The class prototype added by the mixin.\n class KeyboardDirection extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n handleBubblingDirectionKeys: false,\n });\n }\n\n /**\n * Invoked when the user wants to go/navigate down.\n * The default implementation of this method does nothing.\n */\n [goDown]() {\n if (super[goDown]) {\n return super[goDown]();\n }\n }\n\n /**\n * Invoked when the user wants to go/navigate to the end (e.g., of a list).\n * The default implementation of this method does nothing.\n */\n [goEnd]() {\n if (super[goEnd]) {\n return super[goEnd]();\n }\n }\n\n /**\n * Invoked when the user wants to go/navigate left.\n * The default implementation of this method does nothing.\n */\n [goLeft]() {\n if (super[goLeft]) {\n return super[goLeft]();\n }\n }\n\n /**\n * Invoked when the user wants to go/navigate right.\n * The default implementation of this method does nothing.\n */\n [goRight]() {\n if (super[goRight]) {\n return super[goRight]();\n }\n }\n\n /**\n * Invoked when the user wants to go/navigate to the start (e.g., of a\n * list). The default implementation of this method does nothing.\n */\n [goStart]() {\n if (super[goStart]) {\n return super[goStart]();\n }\n }\n\n /**\n * Invoked when the user wants to go/navigate up.\n * The default implementation of this method does nothing.\n */\n [goUp]() {\n if (super[goUp]) {\n return super[goUp]();\n }\n }\n\n [keydown](/** @type {KeyboardEvent} */ event) {\n let handled = false;\n\n // Direction keys generally are low-priority keys: if a shadow element\n // like an input has focus, we want to let that focused element handle\n // direction keys. So we only handle the event if we're the target.\n //\n // (We'd really like to be able to provide direction key handling as a\n // default — i.e., if the focused element doesn't handle a key, then we\n // would handle it here. Unfortunately, there doesn't seem to be any\n // general way for us to do that.)\n if (this[state].handleBubblingDirectionKeys || event.target === this) {\n // Respect orientation state if defined, otherwise assume \"both\".\n const orientation = this[state].orientation || \"both\";\n const horizontal =\n orientation === \"horizontal\" || orientation === \"both\";\n const vertical = orientation === \"vertical\" || orientation === \"both\";\n\n // Ignore Left/Right keys when metaKey or altKey modifier is also pressed,\n // as the user may be trying to navigate back or forward in the browser.\n switch (event.key) {\n case \"ArrowDown\":\n if (vertical) {\n handled = event.altKey ? this[goEnd]() : this[goDown]();\n }\n break;\n\n case \"ArrowLeft\":\n if (horizontal && !event.metaKey && !event.altKey) {\n handled = this[goLeft]();\n }\n break;\n\n case \"ArrowRight\":\n if (horizontal && !event.metaKey && !event.altKey) {\n handled = this[goRight]();\n }\n break;\n\n case \"ArrowUp\":\n if (vertical) {\n handled = event.altKey ? this[goStart]() : this[goUp]();\n }\n break;\n\n case \"End\":\n handled = this[goEnd]();\n break;\n\n case \"Home\":\n handled = this[goStart]();\n break;\n }\n }\n\n // Prefer mixin result if it's defined, otherwise use base result.\n return handled || (super[keydown] && super[keydown](event)) || false;\n }\n }\n\n return KeyboardDirection;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n closestAvailableItemIndex,\n keydown,\n raiseChangeEvents,\n scrollTarget,\n setState,\n state,\n} from \"./internal.js\";\nimport { defaultScrollTarget } from \"./scrolling.js\";\n\n/**\n * Maps the Page Up and Page Down keys to item cursor operations.\n *\n * The keyboard interaction model generally follows that of Microsoft Windows'\n * list boxes instead of those in OS X:\n *\n * * The Page Up/Down and Home/End keys actually move the item cursor, rather\n * than just scrolling. The former behavior seems more generally useful for\n * keyboard users.\n *\n * * Pressing Page Up/Down will first move the cursor to the topmost/bottommost\n * visible item if the cursor is not already there. Thereafter, the key\n * will move the cursor up/down by a page, and (per the above point) make\n * the current item visible.\n *\n * To ensure the current item is in view following use of Page Up/Down, use\n * the related [CursorInViewMixin](CursorInViewMixin).\n *\n * This mixin expects the component to provide:\n *\n * * A `[keydown]` method invoked when a key is pressed. You can use\n * [KeyboardMixin](KeyboardMixin) for that purpose, or wire up your own\n * keyboard handling and call `[keydown]` yourself.\n * * A `currentIndex` state member updatable via [setState]`.\n *\n * @module KeyboardPagedCursorMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function KeyboardPagedCursorMixin(Base) {\n // The class prototype added by the mixin.\n class KeyboardPagedCursor extends Base {\n [keydown](/** @type {KeyboardEvent} */ event) {\n let handled = false;\n const orientation = this.orientation;\n if (orientation !== \"horizontal\") {\n switch (event.key) {\n case \"PageDown\":\n handled = this.pageDown();\n break;\n\n case \"PageUp\":\n handled = this.pageUp();\n break;\n }\n }\n\n // Prefer mixin result if it's defined, otherwise use base result.\n return handled || (super[keydown] && super[keydown](event));\n }\n\n // Default orientation implementation defers to super,\n // but if not found, looks in state.\n get orientation() {\n return (\n super.orientation || (this[state] && this[state].orientation) || \"both\"\n );\n }\n\n /**\n * Scroll down one page.\n */\n pageDown() {\n if (super.pageDown) {\n super.pageDown();\n }\n return scrollOnePage(this, true);\n }\n\n /**\n * Scroll up one page.\n */\n pageUp() {\n if (super.pageUp) {\n super.pageUp();\n }\n return scrollOnePage(this, false);\n }\n\n /**\n * The element that will be scrolled when the user presses Page Up or\n * Page Down. The default value is calculated by\n * [defaultScrollTarget](defaultScrollTarget#defaultScrollTarget).\n *\n * See [scrollTarget](internal#internal.scrollTarget).\n *\n * @type {HTMLElement}\n */\n get [scrollTarget]() {\n /** @type {any} */\n const element = this;\n return super[scrollTarget] || defaultScrollTarget(element);\n }\n }\n\n return KeyboardPagedCursor;\n}\n\n/**\n * Return the item whose content spans the given y position (relative to the\n * top of the list's scrolling client area), or null if not found.\n *\n * If downward is true, move down the list of items to find the first item\n * found at the given y position; if downward is false, move up the list of\n * items to find the last item at that position.\n *\n * @private\n * @param {ReactiveElement} element\n * @param {number} y\n * @param {boolean} downward\n */\nfunction getIndexOfItemAtY(element, y, downward) {\n const items = element[state].items;\n const start = downward ? 0 : items.length - 1;\n const end = downward ? items.length : 0;\n const step = downward ? 1 : -1;\n\n // Find the item spanning the indicated y coordinate.\n let index;\n /** @type {HTMLElement|SVGElement|null} */ let item = null;\n let itemRect;\n const { availableItemFlags } = element[state];\n for (index = start; index !== end; index += step) {\n // Only consider items available in the element's current state.\n const available = availableItemFlags ? availableItemFlags[index] : true;\n if (available) {\n itemRect = items[index].getBoundingClientRect();\n if (itemRect.top <= y && y <= itemRect.bottom) {\n // Item spans the indicated y coordinate.\n item = items[index];\n break;\n }\n }\n }\n\n if (!item || !itemRect) {\n return null;\n }\n\n // We may have found an item whose padding spans the given y coordinate,\n // but whose content is actually above/below that point.\n // TODO: If the item has a border, then padding should be included in\n // considering a hit.\n const itemStyle = getComputedStyle(item);\n const itemPaddingTop = itemStyle.paddingTop\n ? parseFloat(itemStyle.paddingTop)\n : 0;\n const itemPaddingBottom = itemStyle.paddingBottom\n ? parseFloat(itemStyle.paddingBottom)\n : 0;\n const contentTop = itemRect.top + itemPaddingTop;\n const contentBottom =\n contentTop + item.clientHeight - itemPaddingTop - itemPaddingBottom;\n if ((downward && contentTop <= y) || (!downward && contentBottom >= y)) {\n // The indicated coordinate hits the actual item content.\n return index;\n } else {\n // The indicated coordinate falls within the item's padding. Back up to\n // the item below/above the item we found and return that.\n return index - step;\n }\n}\n\n/**\n * Move by one page downward (if downward is true), or upward (if false).\n * Return true if we ended up moving the cursor, false if not.\n *\n * @private\n * @param {ReactiveElement} element\n * @param {boolean} downward\n */\nfunction scrollOnePage(element, downward) {\n const items = element[state].items;\n const currentIndex = element[state].currentIndex;\n\n // Determine the item visible just at the edge of direction we're heading.\n // We'll move to that item if it's not already current.\n const targetRect = element[scrollTarget].getBoundingClientRect();\n const edge = downward ? targetRect.bottom : targetRect.top;\n const indexOfItemAtEdge = getIndexOfItemAtY(element, edge, downward);\n\n let newIndex;\n if (indexOfItemAtEdge && currentIndex === indexOfItemAtEdge) {\n // The item at the edge was already current, so scroll in the indicated\n // direction by one page, measuring from the bounds of the current item.\n // Leave the new item at that edge current.\n const currentItem = items[currentIndex];\n const currentRect = currentItem.getBoundingClientRect();\n const pageHeight = element[scrollTarget].clientHeight;\n const y = downward\n ? currentRect.bottom + pageHeight\n : currentRect.top - pageHeight;\n newIndex = getIndexOfItemAtY(element, y, downward);\n } else {\n // The item at the edge wasn't current yet. Instead of scrolling, we'll just\n // move to that item. That is, the first attempt to page up/down usually\n // just moves the cursor to the edge in that direction.\n newIndex = indexOfItemAtEdge;\n }\n\n if (!newIndex) {\n // We went past the first/last item without finding an item. Move to the\n // last item (if moving downward) or first item (if moving upward).\n const index = downward ? items.length - 1 : 0;\n newIndex = element[closestAvailableItemIndex]\n ? element[closestAvailableItemIndex](element[state], {\n direction: downward ? -1 /* Work up */ : 1 /* Work down */,\n index,\n })\n : index;\n }\n\n const changed = newIndex !== currentIndex;\n if (changed) {\n // If external code causes an operation that scrolls the page, it's\n // impossible for it to predict where the currentIndex is going to end up.\n // Accordingly, we raise change events.\n const saveRaiseChangesEvents = element[raiseChangeEvents];\n element[raiseChangeEvents] = true;\n element[setState]({\n currentIndex: newIndex,\n });\n element[raiseChangeEvents] = saveRaiseChangesEvents;\n }\n return changed;\n}\n","/**\n * Constants used by Elix mixins and components\n *\n * Sharing these constants allows for greater consistency in things such as user\n * interface timings.\n *\n * @module constants\n */\n\n/**\n * Time in milliseconds after which the user is considered to have stopped\n * typing.\n *\n * This is used by\n * [KeyboardPrefixCursorMixin](KeyboardPrefixCursorMixin).\n *\n * @const {number} TYPING_TIMEOUT_DURATION\n */\nexport const TYPING_TIMEOUT_DURATION = 1000;\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { TYPING_TIMEOUT_DURATION } from \"./constants.js\";\nimport { goToItemWithPrefix, keydown, setState, state } from \"./internal.js\";\n\n// Symbols for private data members on an element.\nconst typedPrefixKey = Symbol(\"typedPrefix\");\nconst prefixTimeoutKey = Symbol(\"prefixTimeout\");\n\n/**\n * Lets a user navigate an item cursor by typing the beginning of items\n *\n * Example: suppose a component using this mixin has the following items:\n *\n * <sample-list-component>\n * <div>Apple</div>\n * <div>Apricot</div>\n * <div>Banana</div>\n * <div>Blackberry</div>\n * <div>Blueberry</div>\n * <div>Cantaloupe</div>\n * <div>Cherry</div>\n * <div>Lemon</div>\n * <div>Lime</div>\n * </sample-list-component>\n *\n * If this component receives the focus, and the user presses the \"b\" or \"B\"\n * key, the item cursor will move to \"Banana\", because it's the first item that\n * matches the prefix \"b\". (Matching is case-insensitive.) If the user now\n * presses the \"l\" or \"L\" key quickly, the prefix to match becomes \"bl\", so the\n * cursor will move to \"Blackberry\".\n *\n * The prefix typing feature has a one second timeout — the prefix to match will\n * be reset after a second has passed since the user last typed a key. If, in\n * the above example, the user waits a second between typing \"b\" and \"l\", the\n * prefix will become \"l\", so the cursor would move to \"Lemon\".\n *\n * This mixin expects the component to invoke a `keydown` method when a key is\n * pressed. You can use [KeyboardMixin](KeyboardMixin) for that purpose, or wire\n * up your own keyboard handling and call `keydown` yourself.\n *\n * This mixin also expects the component to provide an `items` property. The\n * `textContent` of those items will be used for purposes of prefix matching.\n *\n * @module KeyboardPrefixCursorMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function KeyboardPrefixCursorMixin(Base) {\n // The class prototype added by the mixin.\n class KeyboardPrefixCursor extends Base {\n constructor() {\n // @ts-ignore\n super();\n resetTypedPrefix(this);\n }\n\n /**\n * Go to the first item whose text content begins with the given prefix.\n *\n * @param {string} prefix - The prefix string to search for\n * @returns {boolean}\n */\n [goToItemWithPrefix](prefix) {\n if (super[goToItemWithPrefix]) {\n super[goToItemWithPrefix](prefix);\n }\n if (prefix == null || prefix.length === 0) {\n return false;\n }\n // Find item that begins with the prefix. Ignore case.\n const searchText = prefix.toLowerCase();\n /** @type {string[]} */ const texts = this[state].texts;\n const index = texts.findIndex(\n (text) => text.substr(0, prefix.length).toLowerCase() === searchText\n );\n if (index >= 0) {\n const previousIndex = this[state].currentIndex;\n this[setState]({ currentIndex: index });\n return this[state].currentIndex !== previousIndex;\n } else {\n return false;\n }\n }\n\n [keydown](/** @type {KeyboardEvent} */ event) {\n let handled;\n\n switch (event.key) {\n case \"Backspace\":\n handleBackspace(this);\n handled = true;\n break;\n\n case \"Escape\":\n // Pressing Escape lets user quickly start typing a new prefix.\n resetTypedPrefix(this);\n break;\n\n default:\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n event.key.length === 1\n ) {\n handlePlainCharacter(this, event.key);\n }\n }\n\n // Prefer mixin result if it's defined, otherwise use base result.\n return handled || (super[keydown] && super[keydown](event));\n }\n }\n\n return KeyboardPrefixCursor;\n}\n\n/**\n * Handle the Backspace key: remove the last character from the prefix.\n *\n * @private\n * @param {ReactiveElement} element\n */\nfunction handleBackspace(element) {\n /** @type {any} */ const cast = element;\n const length = cast[typedPrefixKey] ? cast[typedPrefixKey].length : 0;\n if (length > 0) {\n cast[typedPrefixKey] = cast[typedPrefixKey].substr(0, length - 1);\n }\n element[goToItemWithPrefix](cast[typedPrefixKey]);\n setPrefixTimeout(element);\n}\n\n/**\n * Add a plain character to the prefix.\n *\n * @private\n * @param {ReactiveElement} element\n * @param {string} char\n */\nfunction handlePlainCharacter(element, char) {\n /** @type {any} */ const cast = element;\n const prefix = cast[typedPrefixKey] || \"\";\n cast[typedPrefixKey] = prefix + char;\n element[goToItemWithPrefix](cast[typedPrefixKey]);\n setPrefixTimeout(element);\n}\n\n/**\n * Stop listening for typing.\n *\n * @private\n * @param {ReactiveElement} element\n */\nfunction resetPrefixTimeout(element) {\n /** @type {any} */ const cast = element;\n if (cast[prefixTimeoutKey]) {\n clearTimeout(cast[prefixTimeoutKey]);\n cast[prefixTimeoutKey] = false;\n }\n}\n\n/**\n * Clear the prefix under construction.\n *\n * @private\n * @param {ReactiveElement} element\n */\nfunction resetTypedPrefix(element) {\n /** @type {any} */ (element)[typedPrefixKey] = \"\";\n resetPrefixTimeout(element);\n}\n\n/**\n * Wait for the user to stop typing.\n *\n * @private\n * @param {ReactiveElement} element\n */\nfunction setPrefixTimeout(element) {\n resetPrefixTimeout(element);\n /** @type {any} */ (element)[prefixTimeoutKey] = setTimeout(() => {\n resetTypedPrefix(element);\n }, TYPING_TIMEOUT_DURATION);\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { getDefaultText } from \"./content.js\";\nimport {\n defaultState,\n getItemText,\n setState,\n state,\n stateEffects,\n} from \"./internal.js\";\n\n/**\n * Exposes a public API for the selected text of a list-like element.\n *\n * This mixin exists for list-like components that want to provide a more\n * convenient way to get/set the selected item using text. It adds a `selectedText`\n * property that gets the `textContent` of a component's `selectedItem`. The\n * `selectedText` property can also be set to set the selection to the first item in\n * the `items` collection that has the requested `textContent`. If the indicated\n * text is not found in `items`, the selection is cleared.\n *\n * This mixin expects a component to provide an `items` array of all elements in\n * the list. A standard way to do that with is\n * [ContentItemsMixin](ContentItemsMixin). This also expects the definition of a\n * `selectedIndex` state, which can be obtained from\n * [CursorSelectMixin](CursorSelectMixin).\n *\n * @module SelectedTextAPIMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function SelectedTextAPIMixin(Base) {\n // The class prototype added by the mixin.\n class SelectedTextAPI extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n selectedText: \"\",\n });\n }\n\n /**\n * Extract the text from the given item.\n *\n * The default implementation returns an item's `aria-label`, `alt`\n * attribute, `innerText`, or `textContent`, in that order. You can override\n * this to return the text that should be used.\n *\n * @param {Element} item\n * @returns {string}\n */\n [getItemText](item) {\n return super[getItemText]\n ? super[getItemText](item)\n : getDefaultText(item);\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects]\n ? super[stateEffects](state, changed)\n : {};\n\n // selectedText tracks text of selected item\n if (changed.items || changed.selectedIndex) {\n const { items, selectedIndex } = state;\n const selectedItem = items ? items[selectedIndex] : null;\n const selectedText = selectedItem\n ? this[getItemText](selectedItem)\n : \"\";\n Object.assign(effects, { selectedText });\n }\n\n return effects;\n }\n\n /**\n * The text content of the selected item.\n *\n * Setting this value to a string will attempt to select the first list item\n * whose text matches that string. Setting this to a string not matching any\n * list item will result in no selection.\n *\n * @type {string}\n */\n get selectedText() {\n return this[state].selectedText;\n }\n set selectedText(selectedText) {\n // Find index of item with desired text.\n const { items } = this[state];\n const selectedIndex = items\n ? indexOfItemWithText(items, this[getItemText], String(selectedText))\n : -1;\n this[setState]({ selectedIndex });\n }\n }\n\n return SelectedTextAPI;\n}\n\n/**\n * @private\n * @param {Element[]} items\n * @param {string} text\n */\nfunction indexOfItemWithText(items, getText, text) {\n return items.findIndex((item) => getText(item) === text);\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { defaultState, setState, state, stateEffects } from \"./internal.js\";\n\n/**\n * Exposes a public API for the value of a list-like element.\n *\n * @module SelectedValueAPIMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function SelectedValueAPIMixin(Base) {\n // The class prototype added by the mixin.\n class SelectedValueAPI extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n value: \"\",\n });\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects]\n ? super[stateEffects](state, changed)\n : {};\n\n // Value tracks the value attribute on the selected item.\n if (changed.items || changed.selectedIndex) {\n const { items, selectedIndex } = state;\n const selectedItem = items ? items[selectedIndex] : null;\n const value = selectedItem ? selectedItem.getAttribute(\"value\") : \"\";\n Object.assign(effects, { value });\n }\n\n return effects;\n }\n\n /**\n * The value attribute of the selected item.\n *\n * Setting this to a string will attempt to select the first list item whose\n * value attribute matches that string. Setting this to a string not\n * matching any value attribute will result in no selection.\n *\n * @type {string}\n */\n get value() {\n return this[state].value;\n }\n set value(value) {\n // Find index of item with desired value.\n const { items } = this[state];\n const selectedIndex = items\n ? indexOfItemWithValue(items, String(value))\n : -1;\n this[setState]({ selectedIndex });\n }\n }\n\n return SelectedValueAPI;\n}\n\n/**\n * @private\n * @param {Element[]} items\n * @param {string} value\n */\nfunction indexOfItemWithValue(items, value) {\n return items.findIndex((item) => item.getAttribute(\"value\") === value);\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { raiseChangeEvents, rendered, setState, state } from \"./internal.js\";\n\n/**\n * Exposes a public API for single selection on a list-like element\n *\n * This mixin expects a component to provide an `items` Array of all elements in\n * the list. This mixin also expects the component to apply\n * [ItemsCursorMixin](ItemsCursorMixin) and\n * [CursorSelectMixin](CursorSelectMixin) or otherwise define a compatible\n * `selectedIndex` state and other state members for navigating the current\n * item.\n *\n * Given the above, this mixin exposes a consistent public API for reading and\n * manipulating the current item as a selection. This includes public members\n * `selectedIndex` and `selectedItem`, selection navigation methods, and a\n * `selected-index-changed` event.\n *\n * This mixin does not produce any user-visible effects to represent selection;\n * that is up to the component to provide.\n *\n * @module SingleSelectAPIMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function SingleSelectAPIMixin(Base) {\n // The class prototype added by the mixin.\n class SingleSelectAPI extends Base {\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"selected-index\") {\n this.selectedIndex = Number(newValue);\n } else {\n super.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n if (changed.selectedIndex && this[raiseChangeEvents]) {\n const selectedIndex = this[state].selectedIndex;\n /**\n * Raised when the `selectedIndex` property changes.\n *\n * @event selectedindexchange\n */\n const event = new CustomEvent(\"selectedindexchange\", {\n bubbles: true,\n detail: { selectedIndex },\n });\n this.dispatchEvent(event);\n }\n }\n\n /**\n * The index of the selected item, or -1 if no item is selected.\n *\n * @type {number}\n */\n get selectedIndex() {\n const { items, selectedIndex } = this[state];\n return items && items.length > 0 ? selectedIndex : -1;\n }\n set selectedIndex(selectedIndex) {\n if (!isNaN(selectedIndex)) {\n this[setState]({ selectedIndex });\n }\n }\n\n /**\n * The selected item, or null if no item is selected.\n *\n * @type {Element}\n */\n get selectedItem() {\n const { items, selectedIndex } = this[state];\n return items && items[selectedIndex];\n }\n set selectedItem(selectedItem) {\n const { items } = this[state];\n if (!items) {\n return;\n }\n const index = items.indexOf(selectedItem);\n if (index >= 0) {\n this[setState]({ selectedIndex: index });\n }\n }\n }\n\n return SingleSelectAPI;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { isSubstantiveElement } from \"./content.js\";\nimport { defaultState, stateEffects } from \"./internal.js\";\n\n/**\n * Treats an element's content nodes as list items.\n *\n * Items differ from nodes contents in several ways:\n *\n * * They are often referenced via index.\n * * They may have a selection state.\n * * It's common to do work to initialize the appearance or state of a new\n * item.\n * * Text nodes are filtered out.\n * * Auxiliary invisible child elements are filtered out and not counted as\n * items. Auxiliary elements include link, script, style, and template\n * elements. This filtering ensures that those auxiliary elements can be\n * used in markup inside of a list without being treated as list items.\n *\n * This mixin expects a component to provide a `content` state member returning\n * a raw set of elements. You can provide that yourself, or use\n * [SlotContentMixin](SlotContentMixin).\n *\n * Most Elix [elements](elements) use `ContentItemsMixin`, including\n * [ListBox](ListBox), [Modes](Modes), and [Tabs](Tabs).\n *\n * @module ContentItemsMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function ContentItemsMixin(Base) {\n return class ContentItems extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n items: null,\n });\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects]\n ? super[stateEffects](state, changed)\n : {};\n\n // Regenerate items when content changes.\n if (changed.content) {\n /** @type {Node[]} */ const content = state.content;\n const items = content\n ? Array.prototype.filter.call(content, (/** @type {Node} */ item) =>\n isSubstantiveElement(item)\n )\n : null;\n if (items) {\n Object.freeze(items);\n }\n Object.assign(effects, { items });\n }\n\n return effects;\n }\n };\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport ContentItemsMixin from \"./ContentItemsMixin.js\";\nimport SlotContentMixin from \"./SlotContentMixin.js\";\n\n/**\n * Treats the elements assigned to the default slot as list items\n *\n * This is simply a combination of\n * [ContentItemsMixin](ContentItemsMixin) and\n * [SlotContentMixin](SlotContentMixin).\n *\n * @module SlotItemsMixin\n * @mixes ContentItemsMixin\n * @mixes SlotContentMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function SlotItemsMixin(Base) {\n return ContentItemsMixin(SlotContentMixin(Base));\n}\n","import { indexOfItemContainingTarget } from \"../core/dom.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n firstRender,\n raiseChangeEvents,\n render,\n setState,\n state,\n tap,\n} from \"./internal.js\";\n\n/**\n * A tap/mousedown on a list item makes that item current.\n *\n * This simple mixin is useful in list-like elements like [ListBox](ListBox),\n * where a tap/mousedown on a list item implicitly selects it.\n *\n * The standard use for this mixin is in list-like elements. Native list\n * boxes don't appear to be consistent with regard to whether they select\n * on mousedown or click/mouseup. This mixin assumes the use of mousedown.\n * On touch devices, that event appears to trigger when the touch is *released*.\n *\n * This mixin only listens to mousedown events for the primary mouse button\n * (typically the left button). Right clicks are ignored so that the browser may\n * display a context menu.\n *\n * This mixin expects the component to provide an `state.items` member. It also\n * expects the component to define a `state.currentIndex` member; you can\n * provide that yourself, or use [ItemsCursorMixin](ItemsCursorMixin).\n *\n * If the component receives an event that doesn't correspond to an item (e.g.,\n * the user taps on the element background visible between items), the cursor\n * will be removed. However, if the component sets `state.currentItemRequired` to\n * true, a background tap will *not* remove the cursor.\n *\n * @module TapCursorMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function TapCursorMixin(Base) {\n // The class prototype added by the mixin.\n return class TapCursor extends Base {\n constructor() {\n // @ts-ignore\n super();\n this.addEventListener(\"mousedown\", (event) => {\n // Only process events for the main (usually left) button.\n if (event.button !== 0) {\n return;\n }\n this[raiseChangeEvents] = true;\n this[tap](event);\n this[raiseChangeEvents] = false;\n });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n if (this[firstRender]) {\n Object.assign(this.style, {\n touchAction: \"manipulation\", // for iOS Safari\n mozUserSelect: \"none\",\n msUserSelect: \"none\",\n webkitUserSelect: \"none\",\n userSelect: \"none\",\n });\n }\n }\n\n [tap](/** @type {MouseEvent} */ event) {\n // In some situations, the event target will not be the child which was\n // originally clicked on. E.g., if the item clicked on is a button, the\n // event seems to be raised in phase 2 (AT_TARGET) — but the event target\n // will be the component, not the item that was clicked on. Instead of\n // using the event target, we get the first node in the event's composed\n // path.\n // @ts-ignore\n const target = event.composedPath\n ? event.composedPath()[0]\n : event.target;\n\n // Find which item was clicked on and, if found, make it current. Ignore\n // clicks on disabled items.\n //\n // For elements which don't require a cursor, a background click will\n // determine the item was null, in which we case we'll remove the cursor.\n const { items, currentItemRequired } = this[state];\n if (items && target instanceof Node) {\n const targetIndex = indexOfItemContainingTarget(items, target);\n const item = targetIndex >= 0 ? items[targetIndex] : null;\n if ((item && !item.disabled) || (!item && !currentItemRequired)) {\n this[setState]({\n currentIndex: targetIndex,\n });\n event.stopPropagation();\n }\n }\n }\n };\n}\n","import { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\";\nimport AriaListMixin from \"./AriaListMixin.js\";\nimport ComposedFocusMixin from \"./ComposedFocusMixin.js\";\nimport CursorAPIMixin from \"./CursorAPIMixin.js\";\nimport CursorInViewMixin from \"./CursorInViewMixin.js\";\nimport CursorSelectMixin from \"./CursorSelectMixin.js\";\nimport DirectionCursorMixin from \"./DirectionCursorMixin.js\";\nimport FocusVisibleMixin from \"./FocusVisibleMixin.js\";\nimport FormElementMixin from \"./FormElementMixin.js\";\nimport {\n defaultState,\n ids,\n render,\n scrollTarget,\n setState,\n state,\n template,\n} from \"./internal.js\";\nimport ItemsAPIMixin from \"./ItemsAPIMixin.js\";\nimport ItemsCursorMixin from \"./ItemsCursorMixin.js\";\nimport ItemsTextMixin from \"./ItemsTextMixin.js\";\nimport KeyboardDirectionMixin from \"./KeyboardDirectionMixin.js\";\nimport KeyboardMixin from \"./KeyboardMixin.js\";\nimport KeyboardPagedCursorMixin from \"./KeyboardPagedCursorMixin.js\";\nimport KeyboardPrefixCursorMixin from \"./KeyboardPrefixCursorMixin.js\";\nimport LanguageDirectionMixin from \"./LanguageDirectionMixin.js\";\nimport SelectedTextAPIMixin from \"./SelectedTextAPIMixin.js\";\nimport SelectedValueAPIMixin from \"./SelectedValueAPIMixin.js\";\nimport SingleSelectAPIMixin from \"./SingleSelectAPIMixin.js\";\nimport SlotItemsMixin from \"./SlotItemsMixin.js\";\nimport TapCursorMixin from \"./TapCursorMixin.js\";\n\nconst Base = AriaListMixin(\n ComposedFocusMixin(\n CursorAPIMixin(\n CursorInViewMixin(\n CursorSelectMixin(\n DirectionCursorMixin(\n FocusVisibleMixin(\n FormElementMixin(\n ItemsAPIMixin(\n ItemsCursorMixin(\n ItemsTextMixin(\n KeyboardDirectionMixin(\n KeyboardMixin(\n KeyboardPagedCursorMixin(\n KeyboardPrefixCursorMixin(\n LanguageDirectionMixin(\n SingleSelectAPIMixin(\n SelectedTextAPIMixin(\n SelectedValueAPIMixin(\n SlotItemsMixin(\n TapCursorMixin(ReactiveElement)\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n);\n\n/**\n * Single-selection list box\n *\n * This component supports ARIA support and full keyboard navigation. See\n * [KeyboardDirectionMixin](KeyboardDirectionMixin),\n * [KeyboardPagedCursorMixin](KeyboardPagedCursorMixin), and\n * [KeyboardPrefixCursorMixin](KeyboardPrefixCursorMixin) for keyboard\n * details.\n *\n * @inherits ReactiveElement\n * @mixes AriaListMixin\n * @mixes ComposedFocusMixin\n * @mixes CursorInViewMixin\n * @mixes CursorAPIMixin\n * @mixes DirectionCursorMixin\n * @mixes FocusVisibleMixin\n * @mixes FormElementMixin\n * @mixes ItemsAPIMixin\n * @mixes ItemsCursorMixin\n * @mixes ItemsTextMixin\n * @mixes KeyboardDirectionMixin\n * @mixes KeyboardMixin\n * @mixes KeyboardPagedCursorMixin\n * @mixes KeyboardPrefixCursorMixin\n * @mixes LanguageDirectionMixin\n * @mixes SelectedTextAPIMixin\n * @mixes SelectedValueAPIMixin\n * @mixes SingleSelectAPIMixin\n * @mixes SlotItemsMixin\n * @mixes TapCursorMixin\n */\nclass ListBox extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n orientation: \"vertical\",\n });\n }\n\n get orientation() {\n return this[state].orientation;\n }\n set orientation(orientation) {\n this[setState]({ orientation });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n if (changed.items || changed.currentIndex) {\n // Apply `selected` style to the selected item only.\n const { currentIndex, items } = this[state];\n if (items) {\n items.forEach((item, index) => {\n item.toggleAttribute(\"selected\", index === currentIndex);\n });\n }\n }\n if (changed.orientation) {\n // Update list orientation styling.\n const style =\n this[state].orientation === \"vertical\"\n ? {\n display: \"block\",\n flexDirection: \"\",\n overflowX: \"hidden\",\n overflowY: \"auto\",\n }\n : {\n display: \"flex\",\n flexDirection: \"row\",\n overflowX: \"auto\",\n overflowY: \"hidden\",\n };\n Object.assign(this[ids].container.style, style);\n }\n }\n\n // @ts-ignore\n get [scrollTarget]() {\n return this[ids].container;\n }\n\n get [template]() {\n const result = super[template];\n result.content.append(fragmentFrom.html`\n <style>\n :host {\n box-sizing: border-box;\n cursor: default;\n display: flex;\n overflow: hidden; /* Container element is responsible for scrolling */\n -webkit-tap-highlight-color: transparent;\n }\n\n #container {\n display: flex;\n flex: 1;\n -webkit-overflow-scrolling: touch; /* for momentum scrolling */\n }\n </style>\n <div id=\"container\" role=\"none\">\n <slot id=\"slot\"></slot>\n </div>\n `);\n return result;\n }\n}\n\nexport default ListBox;\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { defaultAriaRole, ensureId } from \"./accessibility.js\";\nimport {\n defaultState,\n render,\n rendering,\n setState,\n state,\n} from \"./internal.js\";\n\n/**\n * Exposes a list's currently-selected item to assistive technologies.\n *\n * Handling ARIA selection state properly is actually quite complex:\n *\n * * The items in the list need to be indicated as possible items via an ARIA\n * `role` attribute value such as \"option\".\n * * The selected item(s) need to be marked as selected by setting the item's\n * `aria-selected` attribute to true *and* the other items need be marked as\n * *not* selected by setting `aria-selected` to false.\n * * The outermost element with the keyboard focus needs to have attributes\n * set on it so that the current item is knowable at the list level via the\n * `aria-activedescendant` attribute.\n * * Use of `aria-activedescendant` in turn requires that all items in the\n * list have ID attributes assigned to them.\n * * If the list supports mutli-selection, `aria-multiselectable` must be\n * set to \"true\" on the host.\n *\n * This mixin tries to address all of the above requirements. To that end,\n * this mixin will assign generated IDs to any item that doesn't already have\n * an ID.\n *\n * ARIA relies on elements to provide `role` attributes. This mixin will apply\n * a default role of \"listbox\" on the outer list if it doesn't already have an\n * explicit role. Similarly, this mixin will apply a default role of \"option\"\n * to any list item that does not already have a role specified.\n *\n * This mixin expects the component to define a `currentIndex` state member to\n * indicate the current item. You can supply that yourself, or do so via\n * [ItemsCursorMixin](ItemsCursorMixin). For a multi-select list, you must also\n * define a `selectedItemFlags` state member, available via\n * [ItemsMultiSelectMixin](ItemsMultiSelectMixin).\n *\n * @module AriaListMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function AriaListMixin(Base) {\n // The class prototype added by the mixin.\n class AriaList extends Base {\n // @ts-ignore\n get [defaultState]() {\n const base = super[defaultState];\n return Object.assign(base, {\n itemRole: base.itemRole || \"option\",\n role: base.role || \"listbox\",\n });\n }\n\n get itemRole() {\n return this[state].itemRole;\n }\n set itemRole(itemRole) {\n this[setState]({ itemRole });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n const { itemRole } = this[state];\n /** @type {ListItemElement[]} */ const items = this[state].items;\n\n // Give each item an ID.\n if (changed.items && items) {\n items.forEach((item) => {\n if (!item.id) {\n item.id = ensureId(item);\n }\n });\n }\n\n // Give each item a role.\n if ((changed.items || changed.itemRole) && items) {\n items.forEach((item) => {\n if (itemRole === defaultAriaRole[item.localName]) {\n item.removeAttribute(\"role\");\n } else {\n item.setAttribute(\"role\", itemRole);\n }\n });\n }\n\n // Reflect the selected state to each item.\n if (changed.items || changed.selectedIndex || changed.selectedItemFlags) {\n // Does the list support multi-selection?\n const { selectedItemFlags, selectedIndex } = this[state];\n if (items) {\n items.forEach((item, index) => {\n const selected = selectedItemFlags\n ? selectedItemFlags[index] // Multi-select\n : index === selectedIndex; // Single-select\n item.setAttribute(\"aria-selected\", selected.toString());\n });\n }\n }\n\n // Indicate on the host that the current item is active.\n if (changed.items || changed.selectedIndex) {\n const { selectedIndex } = this[state];\n const selectedItem =\n selectedIndex >= 0 && items ? items[selectedIndex] : null;\n if (selectedItem) {\n if (!selectedItem.id) {\n selectedItem.id = ensureId(selectedItem);\n }\n this.setAttribute(\"aria-activedescendant\", selectedItem.id);\n } else {\n this.removeAttribute(\"aria-activedescendant\");\n }\n }\n\n if (changed.selectedItemFlags) {\n // Let ARIA know this is a multi-select list box.\n if (this[state].selectedItemFlags) {\n this.setAttribute(\"aria-multiselectable\", \"true\");\n } else {\n this.removeAttribute(\"aria-multiselectable\");\n }\n }\n\n // Let ARIA know list orientation.\n if (changed.orientation) {\n const { orientation } = this[state];\n this.setAttribute(\"aria-orientation\", orientation);\n }\n\n // Apply top-level role.\n if (changed.role) {\n const { role } = this[state];\n this.setAttribute(\"role\", role);\n }\n }\n\n // Setting the standard role attribute will invoke this property setter,\n // which will allow us to update our state.\n get role() {\n return super.role;\n }\n set role(role) {\n super.role = role;\n if (!this[rendering]) {\n this[setState]({ role });\n }\n }\n }\n\n return AriaList;\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { defaultState, stateEffects } from \"./internal.js\";\n\n/**\n * Keeps the current item and selected item in sync.\n *\n * This can be used to connect [ItemsCursorMixin](ItemsCursorMixin) with\n * [SingleSelectAPIMixin](SingleSelectAPIMixin).\n *\n * @module CursorSelectMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function CursorSelectMixin(Base) {\n // The class prototype added by the mixin.\n return class CursorSelect extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n selectedIndex: -1,\n selectedItem: null,\n });\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects]\n ? super[stateEffects](state, changed)\n : {};\n\n if (changed.currentIndex) {\n // Priority one: selected index tracks current index.\n Object.assign(effects, {\n selectedIndex: state.currentIndex,\n });\n } else if (changed.selectedIndex) {\n // Priority two: current index tracks selected index.\n // These priorities ensure that, both current index and selected index\n // are changed, current index wins.\n Object.assign(effects, {\n currentIndex: state.selectedIndex,\n });\n }\n\n // Same priorities as above.\n if (changed.currentItem) {\n Object.assign(effects, {\n selectedItem: state.currentItem,\n });\n } else if (changed.selectedItem) {\n Object.assign(effects, {\n currentItem: state.selectedItem,\n });\n }\n\n return effects;\n }\n };\n}\n","import { indexOfItemContainingTarget } from \"../core/dom.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n keydown,\n raiseChangeEvents,\n render,\n rendered,\n setState,\n state,\n stateEffects,\n} from \"./internal.js\";\n\nconst documentMousemoveListenerKey = Symbol(\"documentMousemoveListener\");\n\n/**\n * Syncs the cursor a popup source and a list-like element inside the popup.\n *\n * This includes support for drag-select operations: the user can mouse down on\n * the source to produce the popup, drag into the popup to highlight an item,\n * then release the mouse to select that item.\n *\n * @module PopupListMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function PopupListMixin(Base) {\n // The class prototype added by the mixin.\n class PopupList extends Base {\n connectedCallback() {\n super.connectedCallback();\n // Handle edge case where component is opened, removed, then added back.\n listenIfOpenAndConnected(this);\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n currentIndex: -1,\n hasHoveredOverItemSinceOpened: false,\n popupList: null,\n });\n }\n\n disconnectedCallback() {\n if (super.disconnectedCallback) {\n super.disconnectedCallback();\n }\n listenIfOpenAndConnected(this);\n }\n\n [keydown](/** @type {KeyboardEvent} */ event) {\n let handled = false;\n\n switch (event.key) {\n // Enter closes popup.\n case \"Enter\":\n if (this.opened) {\n selectCurrentItemAndClose(this);\n handled = true;\n }\n }\n\n // Prefer our result if it's defined, otherwise use base result.\n return handled || (super[keydown] && super[keydown](event)) || false;\n }\n\n [render](changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n if (changed.popupList) {\n const { popupList } = this[state];\n if (popupList) {\n // If the user mouses up on a list item, close the list with that item as\n // the close result.\n popupList.addEventListener(\"mouseup\", async (event) => {\n // If we're doing a drag-select (user moused down on button, dragged\n // mouse into list, and released), we close. If we're not doing a\n // drag-select (the user opened the list with a complete click), and\n // there's a selection, they clicked on an item, so also close.\n // Otherwise, the user clicked the list open, then clicked on a list\n // separator or list padding; stay open.\n const currentIndex = this[state].currentIndex;\n if (this[state].dragSelect || currentIndex >= 0) {\n // We don't want the document mouseup handler in\n // PopupDragSelectMixin to close the popup before we've asked the\n // list to highlight the selection. We stop event propagation\n // here, before we enter any async code, to actually stop\n // propagation.\n event.stopPropagation();\n this[raiseChangeEvents] = true;\n await selectCurrentItemAndClose(this);\n this[raiseChangeEvents] = false;\n } else {\n event.stopPropagation();\n }\n });\n\n // Track changes in the list's cursor.\n popupList.addEventListener(\"currentindexchange\", (event) => {\n this[raiseChangeEvents] = true;\n /** @type {any} */\n const cast = event;\n this[setState]({\n currentIndex: cast.detail.currentIndex,\n });\n this[raiseChangeEvents] = false;\n });\n }\n }\n\n // The popup's current item is represented in the visible list.\n if (changed.currentIndex || changed.popupList) {\n const { currentIndex, popupList } = this[state];\n if (popupList && \"currentIndex\" in popupList) {\n popupList.currentIndex = currentIndex;\n }\n }\n }\n\n [rendered](changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n if (changed.opened) {\n if (this[state].opened) {\n // Ensure the list's cursor is visible. If the cursor moved while the\n // list was closed, the cursor may not be in view yet.\n const { popupList } = this[state];\n if (popupList.scrollCurrentItemIntoView) {\n // Give popup time to render.\n setTimeout(() => {\n popupList.scrollCurrentItemIntoView();\n });\n }\n }\n listenIfOpenAndConnected(this);\n }\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects]\n ? super[stateEffects](state, changed)\n : {};\n\n // When opening, reset out notion of whether the user has hovered over an\n // item since the list was opened.\n if (changed.opened && state.opened) {\n Object.assign(effects, {\n hasHoveredOverItemSinceOpened: false,\n });\n }\n\n return effects;\n }\n }\n\n return PopupList;\n}\n\n// Handle a mouse hover select operation.\nfunction handleMousemove(/** @type {MouseEvent} */ event) {\n // @ts-ignore\n const element = this;\n const { hasHoveredOverItemSinceOpened, opened } = element[state];\n if (opened) {\n // Treat the deepest element in the composed event path as the target.\n const target = event.composedPath ? event.composedPath()[0] : event.target;\n const items = element.items;\n\n if (target && target instanceof Node && items) {\n const hoverIndex = indexOfItemContainingTarget(items, target);\n const item = items[hoverIndex];\n\n // If the user is hovering over an enabled item, make it current.\n // If the user is not hovering over an enabled item, but has\n // hovered over such an item at least once since the list was\n // opened, then clear cursor.\n const currentIndex = item && !item.disabled ? hoverIndex : -1;\n\n if (\n (hasHoveredOverItemSinceOpened || currentIndex >= 0) &&\n currentIndex !== element[state].currentIndex\n ) {\n element[raiseChangeEvents] = true;\n element[setState]({ currentIndex });\n if (currentIndex >= 0 && !hasHoveredOverItemSinceOpened) {\n element[setState]({ hasHoveredOverItemSinceOpened: true });\n }\n element[raiseChangeEvents] = false;\n }\n }\n }\n}\n\nfunction listenIfOpenAndConnected(element) {\n if (element[state].opened && element.isConnected) {\n if (!element[documentMousemoveListenerKey]) {\n // Not listening yet; start.\n element[documentMousemoveListenerKey] = handleMousemove.bind(element);\n document.addEventListener(\n \"mousemove\",\n element[documentMousemoveListenerKey]\n );\n }\n } else if (element[documentMousemoveListenerKey]) {\n // Currently listening; stop.\n document.removeEventListener(\n \"mousemove\",\n element[documentMousemoveListenerKey]\n );\n element[documentMousemoveListenerKey] = null;\n }\n}\n\n/**\n * Highlight the current item (if one exists), then close the menu.\n */\nasync function selectCurrentItemAndClose(element) {\n const originalRaiseChangeEvents = element[raiseChangeEvents];\n const cursorDefined = element[state].currentIndex >= 0;\n const items = element.items;\n if (items) {\n const closeResult = cursorDefined\n ? items[element[state].currentIndex]\n : undefined;\n\n const list = element[state].popupList;\n if (cursorDefined && \"flashCurrentItem\" in list) {\n await list.flashCurrentItem();\n }\n const saveRaiseChangeEvents = element[raiseChangeEvents];\n element[raiseChangeEvents] = originalRaiseChangeEvents;\n await element.close(closeResult);\n element[raiseChangeEvents] = saveRaiseChangeEvents;\n }\n}\n","import { forwardFocus } from \"../core/dom.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport { transmute } from \"../core/template.js\";\nimport ComboBox from \"./ComboBox.js\";\nimport { getDefaultText } from \"./content.js\";\nimport CursorAPIMixin from \"./CursorAPIMixin.js\";\nimport DelegateCursorMixin from \"./DelegateCursorMixin.js\";\nimport DelegateItemsMixin from \"./DelegateItemsMixin.js\";\nimport {\n defaultState,\n getItemText,\n goFirst,\n goLast,\n goNext,\n goPrevious,\n ids,\n itemsDelegate,\n keydown,\n render,\n rendered,\n setState,\n shadowRoot,\n state,\n stateEffects,\n template,\n} from \"./internal.js\";\nimport ListBox from \"./ListBox.js\";\nimport PopupListMixin from \"./PopupListMixin.js\";\nimport SingleSelectAPIMixin from \"./SingleSelectAPIMixin.js\";\n\nconst Base = CursorAPIMixin(\n DelegateCursorMixin(\n DelegateItemsMixin(PopupListMixin(SingleSelectAPIMixin(ComboBox)))\n )\n);\n\n/**\n * A combo box whose popup presents a list of choices\n *\n * @inherits ComboBox\n * @mixes CursorAPIMixin\n * @mixes DelegateCursorMixin\n * @mixes DelegateItemsMixin\n * @mixes PopupListMixin\n * @mixes SingleSelectAPIMixin\n * @part {ListBox} list - the list of choices\n */\nclass ListComboBox extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n currentIndex: -1,\n listPartType: ListBox,\n popupAlign: \"stretch\",\n selectedIndex: -1,\n selectedItem: null,\n });\n }\n\n /**\n * Extract the text from the given item.\n *\n * The default implementation returns an item's `aria-label`, `alt` attribute,\n * `innerText`, or `textContent`, in that order. You can override this to\n * return the text that should be used.\n *\n * @param {ListItemElement} item\n * @returns {string}\n */\n [getItemText](item) {\n return getDefaultText(item);\n }\n\n // We do our own handling of the Up and Down arrow keys, rather than relying\n // on KeyboardDirectionMixin. The latter supports Home and End, and we don't\n // want to handle those -- we want to let the text input handle them.\n // We also need to forward PageDown/PageUp to the list element.\n [keydown](/** @type {KeyboardEvent} */ event) {\n let handled;\n /** @type {any} */\n const list = this[ids].list;\n\n switch (event.key) {\n case \"ArrowDown\":\n if (this.opened) {\n handled = event.altKey ? this[goLast]() : this[goNext]();\n }\n break;\n\n case \"ArrowUp\":\n if (this.opened) {\n handled = event.altKey ? this[goFirst]() : this[goPrevious]();\n }\n break;\n\n case \"PageDown\":\n if (this.opened) {\n handled = list.pageDown && list.pageDown();\n }\n break;\n\n case \"PageUp\":\n if (this.opened) {\n handled = list.pageUp && list.pageUp();\n }\n break;\n }\n\n // If the list's current index changed as a result of a keyboard operation,\n // update the selected index. We distinguish between keyboard operations\n // (which update both cursor and selection) and mouse hover operations\n // (which update the cursor, but not the selection).\n if (handled) {\n const { selectedIndex } = this[state];\n if (selectedIndex !== list.currentIndex) {\n this[setState]({\n selectedIndex: list.currentIndex,\n });\n }\n }\n\n // Prefer mixin result if it's defined, otherwise use base result.\n return handled || (super[keydown] && super[keydown](event));\n }\n\n /**\n * The class or tag used to create the `list` part - the list of\n * available choices shown in the popup.\n *\n * @type {PartDescriptor}\n * @default ListBox\n */\n get listPartType() {\n return this[state].listPartType;\n }\n set listPartType(listPartType) {\n this[setState]({ listPartType });\n }\n\n get [itemsDelegate]() {\n return this[ids].list;\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (changed.listPartType && this[ids].list) {\n // Turn off focus handling for old list.\n /** @type {any} */\n const cast = this[ids].list;\n forwardFocus(cast, null);\n }\n\n super[render](changed);\n\n renderParts(this[shadowRoot], this[state], changed);\n\n if (changed.listPartType) {\n // Keep focus off of the list and on the top level combo box (which should\n // delegate focus to the input).\n const list = this[ids].list;\n if (list instanceof HTMLElement) {\n forwardFocus(list, this);\n }\n }\n }\n\n [rendered](changed) {\n super[rendered](changed);\n\n // Indicate which component is the popup's list.\n if (changed.listPartType) {\n this[setState]({\n popupList: this[ids].list,\n });\n }\n }\n\n /**\n * The `value` attribute of the selected item. If no item is selected, this\n * returns the empty string.\n *\n * You can set this property to select the item with a matching `value`\n * attribute.\n *\n * @type {string}\n */\n get selectedItemValue() {\n const { items, selectedIndex } = this[state];\n const selectedItem = items ? items[selectedIndex] : null;\n return selectedItem ? selectedItem.getAttribute(\"value\") : \"\";\n }\n set selectedItemValue(selectedItemValue) {\n const { items } = this[state];\n const s = String(selectedItemValue);\n const selectedIndex = items.findIndex(\n (item) => item.getAttribute(\"value\") === s\n );\n this[setState]({ selectedIndex });\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects](state, changed);\n\n // We want the cursor to track the selection, but we don't always want the\n // selection to track the cursor. (A mouse hover operation on the list will\n // update the cursor, but shouldn't update the selection.) For that reason,\n // we can't use the CursorSelectMixin, which updates in both directions.\n if (changed.selectedIndex) {\n Object.assign(effects, {\n currentIndex: state.selectedIndex,\n });\n }\n if (changed.selectedItem) {\n Object.assign(effects, {\n currentItem: state.selectedItem,\n });\n }\n\n // If value was changed directly or typed, or items have updated, select the\n // corresponding item in list.\n if (changed.items || changed.value) {\n const { value } = state;\n /** @type {ListItemElement[]} */ const items = state.items;\n if (items && value != null) {\n const searchText = value.toLowerCase();\n const currentIndex = items.findIndex((item) => {\n const itemText = this[getItemText](item);\n return itemText.toLowerCase() === searchText;\n });\n Object.assign(effects, {\n currentIndex,\n });\n }\n }\n\n // If closing normally (not canceled), make current item the selected item,\n // and make its text the value. Leave the text selected.\n const { closeResult, opened } = state;\n const closing = changed.opened && !opened;\n const canceled = closeResult && closeResult.canceled;\n const closingNormally = closing && !canceled;\n if (closingNormally) {\n const { currentIndex, items } = state;\n const currentItem = items ? items[currentIndex] : null;\n const currentItemText = currentItem ? this[getItemText](currentItem) : \"\";\n // See notes on mobile at ComboBox.defaultState.\n const probablyMobile = matchMedia(\"(pointer: coarse)\").matches;\n const selectText = !probablyMobile;\n Object.assign(effects, {\n selectText,\n selectedIndex: currentIndex,\n });\n if (currentItemText !== \"\") {\n Object.assign(effects, {\n value: currentItemText,\n });\n }\n }\n\n // If the selected index is updated while the combo box is closed (i.e., the\n // value was not changed by the user), then update the text value to match.\n if (changed.selectedIndex && !state.opened) {\n const { items, selectedIndex } = state;\n const selectedItem = items ? items[selectedIndex] : null;\n if (selectedItem) {\n Object.assign(effects, {\n value: this[getItemText](selectedItem),\n });\n }\n }\n\n // When items change, we need to recalculate popup size.\n if (changed.items) {\n Object.assign(effects, {\n popupMeasured: false,\n });\n }\n\n return effects;\n }\n\n get [template]() {\n const result = super[template];\n\n // Wrap default slot with a list.\n const defaultSlot = result.content.querySelector(\"slot:not([name])\");\n if (defaultSlot) {\n defaultSlot.replaceWith(fragmentFrom.html`\n <div id=\"list\" part=\"list\" tabindex=\"-1\">\n <slot></slot>\n </div>\n `);\n }\n\n result.content.append(fragmentFrom.html`\n <style>\n [part~=\"list\"] {\n border: none;\n flex: 1;\n height: 100%;\n max-height: 100%;\n overscroll-behavior: contain;\n width: 100%;\n }\n </style>\n `);\n\n renderParts(result.content, this[state]);\n\n return result;\n }\n}\n\n/**\n * Render parts for the template or an instance.\n *\n * @private\n * @param {DocumentFragment} root\n * @param {PlainObject} state\n * @param {ChangedFlags} [changed]\n */\nfunction renderParts(root, state, changed) {\n if (!changed || changed.listPartType) {\n const { listPartType } = state;\n const list = root.getElementById(\"list\");\n if (list) {\n transmute(list, listPartType);\n }\n }\n}\n\nexport default ListComboBox;\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n firstRender,\n raiseChangeEvents,\n render,\n rendered,\n setState,\n} from \"./internal.js\";\n\n/**\n * Track the selection state of an inner input-like element\n *\n * This mixin is an adjunct to [WrappedStandardElement](WrappedStandardElement),\n * intended to be used with a wrapped input or textarea. The inner input or\n * textarea will have selection properties `selectionStart` and `selectionEnd`\n * that we would like to track as state members. Doing so is challenging,\n * because the browser provides no standard event for tracking a change in\n * selection.\n *\n * To compensate, this mixin listens to keyboard or mouse activity within the\n * inner element that might affect selection, then refreshes the host\n * component's selection state as appropriate.\n *\n * @module TrackTextSelectionMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function TrackTextSelectionMixin(Base) {\n // The class prototype added by the mixin.\n class TrackTextSelection extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n selectionEnd: 0,\n selectionStart: 0,\n });\n }\n\n [render](changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n if (this[firstRender]) {\n // The user can manually update the selection with the keyboard or\n // mouse. We listen to keydown and mousedown events, wait for the\n // browser to perform its default action, and then refresh the selection\n // state in case it changed.\n const refreshListener = (() => {\n // HACK: If we check too quickly, the default action won't have\n // happened. We wait for an arbitrary amount of time that seems to\n // work, although this feels gross.\n const delay = 10; // milliseconds\n setTimeout(() => {\n this[raiseChangeEvents] = true;\n refreshSelectionState(this);\n this[raiseChangeEvents] = false;\n }, delay);\n }).bind(this);\n this.addEventListener(\"keydown\", refreshListener);\n this.addEventListener(\"mousedown\", refreshListener);\n this.addEventListener(\"touchend\", refreshListener);\n }\n }\n\n [rendered](changed) {\n super[rendered](changed);\n\n // Setting value implies updating selection state as well.\n if (changed.value) {\n refreshSelectionState(this);\n }\n }\n }\n\n return TrackTextSelection;\n}\n\n// Refresh our selection state values from the inner component's current\n// selection properties.\nfunction refreshSelectionState(element) {\n const inner = element.inner;\n const { selectionEnd, selectionStart } = inner;\n element[setState]({\n selectionEnd,\n selectionStart,\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","import { standardBooleanAttributes } from \"../core/AttributeMarshallingMixin.js\";\nimport { setInternalState } from \"../core/dom.js\";\nimport { templateFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\";\nimport DelegateFocusMixin from \"./DelegateFocusMixin.js\";\nimport {\n defaultState,\n defaultTabIndex,\n firstRender,\n ids,\n nativeInternals,\n render,\n rendered,\n setState,\n shadowRoot,\n state,\n template,\n} from \"./internal.js\";\n\nconst extendsKey = Symbol(\"extends\");\n\nconst delegatedPropertySettersKey = Symbol(\"delegatedPropertySetters\");\n\n/* True if a standard element is focusable by default. */\n/** @type {IndexedObject<boolean>} */\nconst focusableByDefault = {\n a: true,\n area: true,\n button: true,\n details: true,\n iframe: true,\n input: true,\n select: true,\n textarea: true,\n};\n\n/*\n * A set of events which, if fired by the inner standard element, should be\n * re-raised by the custom element.\n *\n * These are events which are spec'ed to NOT get retargetted across a Shadow DOM\n * boundary, organized by which element(s) raise the events. To properly\n * simulate these, we will need to listen for the real events, then re-raise a\n * simulation of the original event. For more information, see\n * https://www.w3.org/TR/shadow-dom/#h-events-that-are-not-leaked-into-ancestor-trees.\n *\n * It appears that we do *not* need to re-raise the non-bubbling \"focus\" and\n * \"blur\" events. These appear to be automatically re-raised as expected -- but\n * it's not clear why that happens.\n *\n * The list below is reasonably complete. It omits elements that cannot be\n * wrapped (see class notes above). Also, we haven't actually tried wrapping\n * every element in this list; some of the more obscure ones might not actually\n * work as expected, but it was easier to include them for completeness than\n * to actually verify whether or not the element can be wrapped.\n */\n/** @type {IndexedObject<string[]>} */\nconst reraiseEvents = {\n address: [\"scroll\"],\n blockquote: [\"scroll\"],\n caption: [\"scroll\"],\n center: [\"scroll\"],\n dd: [\"scroll\"],\n dir: [\"scroll\"],\n div: [\"scroll\"],\n dl: [\"scroll\"],\n dt: [\"scroll\"],\n fieldset: [\"scroll\"],\n form: [\"reset\", \"scroll\"],\n frame: [\"load\"],\n h1: [\"scroll\"],\n h2: [\"scroll\"],\n h3: [\"scroll\"],\n h4: [\"scroll\"],\n h5: [\"scroll\"],\n h6: [\"scroll\"],\n iframe: [\"load\"],\n img: [\"abort\", \"error\", \"load\"],\n input: [\"abort\", \"change\", \"error\", \"select\", \"load\"],\n li: [\"scroll\"],\n link: [\"load\"],\n menu: [\"scroll\"],\n object: [\"error\", \"scroll\"],\n ol: [\"scroll\"],\n p: [\"scroll\"],\n script: [\"error\", \"load\"],\n select: [\"change\", \"scroll\"],\n tbody: [\"scroll\"],\n tfoot: [\"scroll\"],\n thead: [\"scroll\"],\n textarea: [\"change\", \"select\", \"scroll\"],\n};\n\n/*\n * Mouse events that should be disabled if the inner component is disabled.\n */\nconst mouseEventNames = [\n \"click\",\n \"dblclick\",\n \"mousedown\",\n \"mouseenter\",\n \"mouseleave\",\n \"mousemove\",\n \"mouseout\",\n \"mouseover\",\n \"mouseup\",\n \"wheel\",\n];\n\n// Keep track of which re-raised events should bubble.\n/** @type {IndexedObject<boolean>} */\nconst eventBubbles = {\n abort: true,\n change: true,\n reset: true,\n};\n\n// Elements which are display: block by default.\n// Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements\nconst blockElements = [\n \"address\",\n \"article\",\n \"aside\",\n \"blockquote\",\n \"canvas\",\n \"dd\",\n \"div\",\n \"dl\",\n \"fieldset\",\n \"figcaption\",\n \"figure\",\n \"footer\",\n \"form\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"header\",\n \"hgroup\",\n \"hr\",\n \"li\",\n \"main\",\n \"nav\",\n \"noscript\",\n \"ol\",\n \"output\",\n \"p\",\n \"pre\",\n \"section\",\n \"table\",\n \"tfoot\",\n \"ul\",\n \"video\",\n];\n\n// Standard attributes that don't have corresponding properties.\n// These need to be delegated from the wrapper to the inner element.\nconst attributesWithoutProperties = [\n \"accept-charset\",\n \"autoplay\",\n \"buffered\",\n \"challenge\",\n \"codebase\",\n \"colspan\",\n \"contenteditable\",\n \"controls\",\n \"crossorigin\",\n \"datetime\",\n \"dirname\",\n \"for\",\n \"formaction\",\n \"http-equiv\",\n \"icon\",\n \"ismap\",\n \"itemprop\",\n \"keytype\",\n \"language\",\n \"loop\",\n \"manifest\",\n \"maxlength\",\n \"minlength\",\n \"muted\",\n \"novalidate\",\n \"preload\",\n \"radiogroup\",\n \"readonly\",\n \"referrerpolicy\",\n \"rowspan\",\n \"scoped\",\n \"usemap\",\n];\n\nconst Base = DelegateFocusMixin(ReactiveElement);\n\n/**\n * Wraps a standard HTML element so it can be extended\n *\n * The typical way to use this class is via its static `wrap` method.\n *\n * @inherits ReactiveElement\n * @mixes DelegateFocusMixin\n * @part inner - the inner standard HTML element\n */\nclass WrappedStandardElement extends Base {\n constructor() {\n super();\n /** @type {any} */ const cast = this;\n if (!this[nativeInternals] && cast.attachInternals) {\n this[nativeInternals] = cast.attachInternals();\n }\n }\n\n /**\n *\n * Wrapped standard elements need to forward some attributes to the inner\n * element in cases where the attribute does not have a corresponding\n * property. These attributes include those prefixed with \"aria-\", and some\n * unusual standard attributes like contenteditable. To handle those, this\n * class defines its own attributeChangedCallback.\n *\n * @ignore\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n */\n attributeChangedCallback(name, oldValue, newValue) {\n const forwardAttribute = attributesWithoutProperties.indexOf(name) >= 0;\n if (forwardAttribute) {\n const innerAttributes = Object.assign({}, this[state].innerAttributes, {\n [name]: newValue,\n });\n this[setState]({ innerAttributes });\n } else {\n // Rely on the base attributeChangedCallback provided by\n // AttributeMarshallingMixin.\n super.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n // Delegate method defined by HTMLElement.\n blur() {\n this.inner.blur();\n }\n\n // One HTMLElement we *don't* delegate is `click`. Generally speaking, a click\n // on the outer wrapper should behave the same as a click on the inner\n // element. Also, we want to ensure outside event listeners get a click event\n // when the click method is invoked. But a click on the inner element will\n // raise a click event that won't be re-raised by default across the shadow\n // boundary. The precise behavior seems to be slightly different in Safari\n // than other browsers, but it seems safer to not delegate click.\n //\n // click() {}\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n innerAttributes: {},\n });\n }\n\n get [defaultTabIndex]() {\n return focusableByDefault[this.extends] ? 0 : -1;\n }\n\n /**\n * The tag name of the standard HTML element extended by this class.\n *\n * @returns {string}\n */\n get extends() {\n return this.constructor[extendsKey];\n }\n\n /**\n * Returns a reference to the inner standard HTML element.\n *\n * @type {HTMLElement}\n */\n get inner() {\n /** @type {any} */\n const result = this[ids] && this[ids].inner;\n if (!result) {\n /* eslint-disable no-console */\n console.warn(\n \"Attempted to get an inner standard element before it was instantiated.\"\n );\n }\n return result;\n }\n\n static get observedAttributes() {\n // For our custom attributeChangedCallback to work, we need to observe\n // the attributes we want to forward.\n // @ts-ignore\n return [...super.observedAttributes, ...attributesWithoutProperties];\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n\n const inner = this.inner;\n if (this[firstRender]) {\n // Listen for any events raised by the inner element which will not\n // automatically be retargetted across the Shadow DOM boundary, and\n // re-raise those events when they happen.\n const eventNames = reraiseEvents[this.extends] || [];\n eventNames.forEach((eventName) => {\n inner.addEventListener(eventName, () => {\n const event = new Event(eventName, {\n bubbles: eventBubbles[eventName] || false,\n });\n this.dispatchEvent(event);\n });\n });\n\n // If inner element can be disabled, then listen to mouse events on the\n // *outer* element and absorb them if the inner element is disabled.\n // Without this, a mouse event like a click on the inner disabled element\n // would be treated as a click on the outer element. Someone listening to\n // clicks on the outer element would get a click event, even though the\n // overall element is supposed to be disabled.\n if (\"disabled\" in inner) {\n mouseEventNames.forEach((eventName) => {\n this.addEventListener(eventName, (event) => {\n if (/** @type {any} */ (inner).disabled) {\n event.stopImmediatePropagation();\n }\n });\n });\n }\n }\n\n if (changed.tabIndex) {\n inner.tabIndex = this[state].tabIndex;\n }\n\n if (changed.innerAttributes) {\n // Forward attributes to the inner element.\n // See notes at attributeChangedCallback.\n const { innerAttributes } = this[state];\n for (const name in innerAttributes) {\n applyAttribute(inner, name, innerAttributes[name]);\n }\n }\n\n // Forward delegated properties to the inner element.\n this.constructor[delegatedPropertySettersKey].forEach((property) => {\n if (changed[property]) {\n const value = this[state][property];\n\n // Inner selection properties needed to be handled specially.\n // See TrackTextSelectionMixin.\n const specialCase =\n (property === \"selectionEnd\" || property === \"selectionStart\") &&\n value === null;\n if (!specialCase) {\n inner[property] = value;\n }\n }\n });\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n super[rendered](changed);\n\n // Apply disabled state.\n if (changed.disabled) {\n const { disabled } = this[state];\n if (disabled !== undefined) {\n setInternalState(this, \"disabled\", disabled);\n }\n }\n }\n\n /**\n * The template copied into the shadow tree of new instances of this element.\n *\n * The default value of this property is a template that includes an instance\n * the standard element being wrapped, with a `<slot>` element inside that\n * to pick up the element's light DOM content. For example, if you wrap an\n * `<a>` element, then the default template will look like:\n *\n * <template>\n * <style>\n * :host {\n * display: inline-block;\n * }\n * </style>\n * <a id=\"inner\">\n * <slot></slot>\n * </a>\n * </template>\n *\n * The `display` styling applied to the host will be `block` for elements that\n * are block elements by default, and `inline-block` (not `inline`) for other\n * elements.\n *\n * If you'd like the template to include other elements, then override this\n * property and return a template of your own. The template should include an\n * instance of the standard HTML element you are wrapping, and the ID of that\n * element should be \"inner\".\n *\n * @type {(string|HTMLTemplateElement)}\n */\n get [template]() {\n const display = blockElements.includes(this.extends)\n ? \"block\"\n : \"inline-block\";\n const tag = this.extends;\n return templateFrom.html`\n <style>\n :host {\n display: ${display}\n }\n \n [part~=\"inner\"] {\n box-sizing: border-box;\n height: 100%;\n width: 100%;\n }\n </style>\n <${tag} id=\"inner\" part=\"inner ${tag}\">\n <slot></slot>\n </${tag}>\n `;\n }\n\n /**\n * Creates a class that wraps a standard HTML element.\n *\n * Note that the resulting class is a subclass of WrappedStandardElement, not\n * the standard class being wrapped. E.g., if you call\n * `WrappedStandardElement.wrap('a')`, you will get a class whose shadow tree\n * will include an anchor element, but the class will *not* inherit from\n * HTMLAnchorElement.\n *\n * @static\n * @param {string} extendsTag - the standard HTML element tag to extend\n */\n static wrap(extendsTag) {\n // Create the new class.\n /** @type {Constructor<WrappedStandardElement>} */\n class Wrapped extends WrappedStandardElement {}\n\n // Indicate which tag it wraps.\n /** @type {any} */ (Wrapped)[extendsKey] = extendsTag;\n\n // Create getter/setters that delegate to the wrapped element.\n const element = document.createElement(extendsTag);\n defineDelegates(Wrapped, Object.getPrototypeOf(element));\n\n return Wrapped;\n }\n}\n\n/**\n * Update the given attribute on an element.\n *\n * Passing a non-null `value` acts like a call to `setAttribute(name, value)`.\n * If the supplied `value` is nullish, this acts like a call to\n * `removeAttribute(name)`.\n *\n * @private\n * @param {HTMLElement} element\n * @param {string} name\n * @param {string} value\n */\nexport function applyAttribute(element, name, value) {\n if (standardBooleanAttributes[name]) {\n // Boolean attribute\n if (typeof value === \"string\") {\n element.setAttribute(name, \"\");\n } else if (value === null) {\n element.removeAttribute(name);\n }\n } else {\n // Regular string-valued attribute\n if (value != null) {\n element.setAttribute(name, value.toString());\n } else {\n element.removeAttribute(name);\n }\n }\n}\n\n/**\n * Create a delegate for the method or property identified by the descriptor.\n *\n * @private\n * @param {string} name\n * @param {PropertyDescriptor} descriptor\n */\nfunction createDelegate(name, descriptor) {\n if (typeof descriptor.value === \"function\") {\n if (name !== \"constructor\") {\n return createMethodDelegate(name, descriptor);\n }\n } else if (\n typeof descriptor.get === \"function\" ||\n typeof descriptor.set === \"function\"\n ) {\n return createPropertyDelegate(name, descriptor);\n }\n return null;\n}\n\n/**\n * Create a delegate for the method identified by the descriptor.\n *\n * @private\n * @param {string} name\n * @param {PropertyDescriptor} descriptor\n */\nfunction createMethodDelegate(name, descriptor) {\n const value = function (/** @type {any[]} */ ...args) {\n // @ts-ignore\n this.inner[name](...args);\n };\n const delegate = {\n configurable: descriptor.configurable,\n enumerable: descriptor.enumerable,\n value,\n writable: descriptor.writable,\n };\n return delegate;\n}\n\n/**\n * Create a delegate for the property identified by the descriptor.\n *\n * @private\n * @param {string} name\n * @param {PropertyDescriptor} descriptor\n */\nfunction createPropertyDelegate(name, descriptor) {\n /** @type {PlainObject} */\n const delegate = {\n configurable: descriptor.configurable,\n enumerable: descriptor.enumerable,\n };\n if (descriptor.get) {\n delegate.get = function () {\n return getInnerProperty(/** @type {any} */ (this), name);\n };\n }\n if (descriptor.set) {\n delegate.set = function (/** @type {any} */ value) {\n setInnerProperty(/** @type {any} */ (this), name, value);\n };\n }\n if (descriptor.writable) {\n delegate.writable = descriptor.writable;\n }\n return delegate;\n}\n\n/**\n * Define delegates for the given class for each property/method on the\n * indicated prototype.\n *\n * @private\n * @param {Constructor<Object>} cls\n * @param {Object} prototype\n */\nfunction defineDelegates(cls, prototype) {\n const names = Object.getOwnPropertyNames(prototype);\n cls[delegatedPropertySettersKey] = [];\n names.forEach((name) => {\n const descriptor = Object.getOwnPropertyDescriptor(prototype, name);\n if (!descriptor) {\n return;\n }\n const delegate = createDelegate(name, descriptor);\n if (delegate) {\n Object.defineProperty(cls.prototype, name, delegate);\n if (delegate.set) {\n cls[delegatedPropertySettersKey].push(name);\n }\n }\n });\n}\n\n/**\n * Return the value of the named property on the inner standard element.\n *\n * @private\n * @param {ReactiveElement} element\n * @param {string} name\n */\nfunction getInnerProperty(element, name) {\n // If we haven't rendered yet, use internal state value. Once we've\n // rendered, we get the value from the wrapped element itself. Return our\n // concept of the current property value from state. If the property hasn't\n // been defined, however, get the current value of the property from the\n // inner element.\n //\n // This is intended to support cases like an anchor element. If someone sets\n // `href` on a wrapped anchor, we'll know the value of `href` from state,\n // but we won't know the value of href-dependent calculated properties like\n // `protocol`. Using two sources of truth (state and the inner element)\n // seems fragile, but it's unclear how else to handle this without\n // reimplementing all HTML property interactions ourselves.\n //\n // This arrangement also means that, if an inner element property can change\n // in response to user interaction (e.g., an input element's value changes\n // as the user types), the component must listen to suitable events on the\n // inner element and update its state accordingly.\n const value = element[state][name];\n return value || (element[shadowRoot] && element.inner[name]);\n}\n\n/**\n * Set the named property on the inner standard element.\n *\n * @private\n * @param {ReactiveElement} element\n * @param {string} name\n * @param {any} value\n */\nfunction setInnerProperty(element, name, value) {\n // We normally don't check an existing state value before calling[setState],\n // relying instead on[setState] to do that check for us. However, we have\n // dangers in this particular component of creating infinite loops.\n //\n // E.g., setting the tabindex attibute will call attributeChangedCallback,\n // which will set the tabIndex property, which will want to set state, which\n // will cause a render, which will try to reflect the current value of the\n // tabIndex property to the tabindex attribute, causing a loop.\n //\n // To avoid this, we check the existing value before updating our state.\n if (element[state][name] !== value) {\n element[setState]({ [name]: value });\n }\n}\n\nexport default WrappedStandardElement;\n","import { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport DelegateInputLabelMixin from \"./DelegateInputLabelMixin.js\";\nimport FocusVisibleMixin from \"./FocusVisibleMixin.js\";\nimport FormElementMixin from \"./FormElementMixin.js\";\nimport {\n defaultState,\n firstRender,\n ids,\n inputDelegate,\n raiseChangeEvents,\n render,\n setState,\n state,\n template,\n} from \"./internal.js\";\nimport TrackTextSelectionMixin from \"./TrackTextSelectionMixin.js\";\nimport WrappedStandardElement from \"./WrappedStandardElement.js\";\n\nconst Base = DelegateInputLabelMixin(\n FocusVisibleMixin(\n FormElementMixin(\n TrackTextSelectionMixin(WrappedStandardElement.wrap(\"input\"))\n )\n )\n);\n\n/**\n * Base class for custom input elements\n *\n * `Input` wraps a standard HTML `input` element, allowing for custom styling\n * and behavior while ensuring standard keyboard and focus behavior.\n *\n * @inherits WrappedStandardElement\n * @mixes DelegateInputLabelMixin\n * @mixes FocusVisibleMixin\n * @mixes FormElementMixin\n * @mixes TrackTextSelectionMixin\n * @part input - the inner standard HTML input\n */\nclass Input extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n value: \"\",\n });\n }\n\n get [inputDelegate]() {\n return this.inner;\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n if (this[firstRender]) {\n // The following jsDoc comment doesn't directly apply to the statement which\n // follows, but is placed there because the comment has to go somewhere to\n // be visible to jsDoc, and the statement is at tangentially related.\n /**\n * Raised when the user changes the element's text content.\n *\n * This is the standard `input` event; the component does not do any work to\n * raise it. It is documented here to let people know it is available to\n * detect when the user edits the content.\n *\n * @event input\n */\n this[ids].inner.addEventListener(\"input\", () => {\n this[raiseChangeEvents] = true;\n /** @type {any} */\n const inner = this[ids].inner;\n this[setState]({ value: inner.value });\n this[raiseChangeEvents] = false;\n });\n }\n }\n\n get [template]() {\n const result = super[template];\n result.content.append(fragmentFrom.html`\n <style>\n [part~=\"input\"] {\n font: inherit;\n outline: none;\n text-align: inherit;\n }\n </style>\n `);\n return result;\n }\n\n get value() {\n return this[state].value;\n }\n set value(value) {\n this[setState]({\n value: String(value),\n });\n }\n}\n\nexport default Input;\n","import { template } from \"../base/internal.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\n\n/**\n * Input styles in the Plain reference design system\n *\n * @module PlainInputMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function PlainInputMixin(Base) {\n return class PlainInput extends Base {\n get [template]() {\n const result = super[template];\n result.content.append(fragmentFrom.html`\n <style>\n :host {\n background: white;\n border: 1px solid gray;\n box-sizing: border-box;\n }\n\n [part~=\"input\"] {\n background: transparent;\n border-color: transparent;\n }\n </style>\n `);\n return result;\n }\n };\n}\n","import Input from \"../base/Input.js\";\nimport PlainInputMixin from \"./PlainInputMixin.js\";\n\n/**\n * ListBox component in the Plain reference design system\n *\n * @inherits Input\n * @mixes PlainInputMixin\n */\nclass PlainInput extends PlainInputMixin(Input) {}\n\nexport default PlainInput;\n","import { template } from \"../base/internal.js\";\nimport UpDownToggle from \"../base/UpDownToggle.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport { replace } from \"../core/template.js\";\n\n/**\n * OpenCloseToggle component in the Plain reference design system\n *\n * @inherits OpenCloseToggle\n */\nclass PlainOpenCloseToggle extends UpDownToggle {\n get [template]() {\n const result = super[template];\n\n // Replace the icons with our up/down glyphs.\n const downIcon = result.content.getElementById(\"downIcon\");\n const downIconGlyph = fragmentFrom.html`\n <svg\n id=\"downIcon\"\n part=\"toggle-icon down-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 10 5\"\n >\n <path d=\"M 0 0 l5 5 5 -5 z\" />\n </svg>\n `.firstElementChild;\n if (downIcon && downIconGlyph) {\n replace(downIcon, downIconGlyph);\n }\n const upIcon = result.content.getElementById(\"upIcon\");\n const upIconGlyph = fragmentFrom.html`\n <svg\n id=\"upIcon\"\n part=\"toggle-icon up-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 10 5\"\n >\n <path d=\"M 0 5 l5 -5 5 5 z\" />\n </svg>\n `.firstElementChild;\n if (upIcon && upIconGlyph) {\n replace(upIcon, upIconGlyph);\n }\n\n result.content.append(\n fragmentFrom.html`\n <style>\n :host {\n align-items: center;\n display: inline-flex;\n padding: 2px;\n }\n\n :host(:not([disabled])):hover {\n background: #eee;\n }\n\n [part~=\"toggle-icon\"] {\n fill: currentColor;\n height: 10px;\n margin: 0.25em;\n width: 10px;\n }\n </style>\n `\n );\n return result;\n }\n}\n\nexport default PlainOpenCloseToggle;\n","import Backdrop from \"../base/Backdrop.js\";\n\n/**\n * Backdrop component in the Plain reference design system\n *\n * @inherits Backdrop\n */\nclass PlainBackdrop extends Backdrop {}\n\nexport default PlainBackdrop;\n","import { template } from \"../base/internal.js\";\nimport OverlayFrame from \"../base/OverlayFrame.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\n\n/**\n * OverlayFrame component in the Plain reference design system\n *\n * The default appearance of `OverlayFrame` uses a simple drop-shadow to let the\n * user see the framed content as being on top of the background page content.\n *\n * @inherits OverlayFrame\n */\nclass PlainOverlayFrame extends OverlayFrame {\n get [template]() {\n const result = super[template];\n result.content.append(\n fragmentFrom.html`\n <style>\n :host {\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.2);\n box-shadow: 0 0px 10px rgba(0, 0, 0, 0.5);\n box-sizing: border-box;\n }\n </style>\n `\n );\n return result;\n }\n}\n\nexport default PlainOverlayFrame;\n","import { defaultState } from \"../base/internal.js\";\nimport Popup from \"../base/Popup.js\";\nimport PlainBackdrop from \"./PlainBackdrop.js\";\nimport PlainOverlayFrame from \"./PlainOverlayFrame.js\";\n\n/**\n * Popup component in the Plain reference design system\n *\n * @inherits Popup\n * @part {PlainBackdrop} backdrop\n * @part {PlainOverlayFrame} frame\n */\nclass PlainPopup extends Popup {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n backdropPartType: PlainBackdrop,\n framePartType: PlainOverlayFrame,\n });\n }\n}\n\nexport default PlainPopup;\n","import {\n defaultState,\n ids,\n render,\n state,\n template,\n} from \"../base/internal.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport PlainInput from \"./PlainInput.js\";\nimport PlainOpenCloseToggle from \"./PlainOpenCloseToggle.js\";\nimport PlainPopup from \"./PlainPopup.js\";\n\n/**\n * ComboBox styles for the Plain reference design system\n *\n * @module PlainComboBoxMixin\n * @part {PlainPopup} popup\n * @part {PlainOpenCloseToggle} popup-toggle\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function PlainComboBoxMixin(Base) {\n return class PlainComboBox extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n inputPartType: PlainInput,\n popupPartType: PlainPopup,\n popupTogglePartType: PlainOpenCloseToggle,\n });\n }\n\n [render](changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n // Style the inner input.\n if (changed.inputPartType) {\n // We want to style the inner input if it's been created with\n // WrappedStandardElement, otherwise style the input directly.\n const cast = /** @type {any} */ (this[ids].input);\n const input = \"inner\" in cast ? cast.inner : cast;\n Object.assign(input.style, {\n outline: \"none\",\n });\n }\n\n // We don't want the box-shadow on the popup to appear over the input. To\n // avoid this, we create a clip-path on the popup. This clip path has the\n // shape of a rectangle 10px bigger than the popup frame (to account for\n // the box-shadow) with a cut-out piece. If the popup is positioned below\n // the input, the top of the shape will be cut out to avoid rendering over\n // the input. The resulting shape looks like this Unicode character: 凹.\n //\n // Likewise, if the popup is positioned below the input, a piece will be\n // cut out of the bottom of the shape to avoid rendering over the input.\n //\n // TODO: The cut-out arrangement is optimized for combo boxes with a\n // horizontal alignment of \"stretch\". For combo boxes with start/end or\n // left/right, we should adjust the position and width of the cut-out to\n // match the input.\n if (changed.opened || changed.popupLayout) {\n const { opened, popupLayout } = this[state];\n const direction = popupLayout ? popupLayout.direction : null;\n const w = `10px`; // Width of box shadow\n const popupBelow = direction === \"column\" || direction === \"below\";\n const popupAbove =\n direction === \"column-reverse\" || direction === \"above\";\n const clipPath = popupBelow\n ? `polygon(0px 0px, 100% 0px, 100% -${w}, calc(100% + ${w}) -${w}, calc(100% + ${w}) calc(100% + ${w}), -${w} calc(100% + ${w}), -${w} -${w}, 0px -${w})`\n : popupAbove\n ? `polygon(-${w} -${w}, calc(100% + ${w}) -${w}, calc(100% + ${w}) calc(100% + ${w}), 100% calc(100% + ${w}), 100% 100%, 0px 100%, 0px calc(100% + ${w}), -${w} calc(100% + ${w}))`\n : \"\";\n this[ids].popup.style.clipPath = opened ? clipPath : \"\";\n }\n }\n\n get [template]() {\n const result = super[template];\n result.content.append(fragmentFrom.html`\n <style>\n :host {\n background: white;\n border: 1px solid gray;\n box-sizing: border-box;\n }\n\n [part~=\"input\"] {\n background: transparent;\n border: none;\n }\n </style>\n `);\n return result;\n }\n };\n}\n","import { template } from \"../base/internal.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\n\n/**\n * ListBox styles in the Plain reference design system\n *\n * @module PlainListBoxMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function PlainListBoxMixin(Base) {\n return class PlainListBox extends Base {\n get [template]() {\n const result = super[template];\n result.content.append(\n fragmentFrom.html`\n <style>\n :host {\n border: 1px solid gray;\n box-sizing: border-box;\n }\n\n ::slotted(*),\n #slot > * {\n padding: 0.25em;\n }\n\n ::slotted([selected]),\n #slot > [selected] {\n background: highlight;\n color: highlighttext;\n }\n\n @media (pointer: coarse) {\n ::slotted(*),\n #slot > * {\n padding: 1em;\n }\n }\n </style>\n `\n );\n return result;\n }\n };\n}\n","import ListBox from \"../base/ListBox.js\";\nimport PlainListBoxMixin from \"./PlainListBoxMixin.js\";\n\n/**\n * ListBox component in the Plain reference design system\n *\n * @inherits ListBox\n */\nclass PlainListBox extends PlainListBoxMixin(ListBox) {}\n\nexport default PlainListBox;\n","import { defaultState } from \"../base/internal.js\";\nimport ListComboBox from \"../base/ListComboBox.js\";\nimport PlainComboBoxMixin from \"./PlainComboBoxMixin.js\";\nimport PlainListBox from \"./PlainListBox.js\";\n\n/**\n * ListComboBox component in the Plain reference design system\n *\n * @inherits ListComboBox\n * @part {PlainListBox} list\n */\nclass PlainListComboBox extends PlainComboBoxMixin(ListComboBox) {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n listPartType: PlainListBox,\n });\n }\n}\n\nexport default PlainListComboBox;\n","import PlainListComboBox from \"../src/plain/PlainListComboBox.js\";\nexport default class ElixListComboBox extends PlainListComboBox {}\ncustomElements.define(\"elix-list-combo-box\", ElixListComboBox);\n","import { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ComposedFocusMixin from \"./ComposedFocusMixin.js\";\nimport DelegateInputLabelMixin from \"./DelegateInputLabelMixin.js\";\nimport FocusVisibleMixin from \"./FocusVisibleMixin.js\";\nimport { defaultState, ids, inputDelegate, tap, template } from \"./internal.js\";\nimport WrappedStandardElement from \"./WrappedStandardElement.js\";\n\nconst Base = ComposedFocusMixin(\n DelegateInputLabelMixin(\n FocusVisibleMixin(WrappedStandardElement.wrap(\"button\"))\n )\n);\n\n/**\n * Base class for custom buttons.\n *\n * `Button` wraps a standard HTML `button` element, allowing for custom styling\n * and behavior while ensuring standard keyboard and focus behavior.\n *\n * @inherits WrappedStandardElement\n * @mixes ComposedFocusMixin\n * @mixes DelegateInputLabelMixin\n * @mixes KeyboardMixin\n * @part button - the inner standard HTML button\n */\nclass Button extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n role: \"button\",\n });\n }\n\n get [inputDelegate]() {\n return this[ids].inner;\n }\n\n // Respond to a simulated click.\n [tap]() {\n const clickEvent = new MouseEvent(\"click\", {\n bubbles: true,\n cancelable: true,\n });\n this.dispatchEvent(clickEvent);\n }\n\n get [template]() {\n const result = super[template];\n result.content.append(\n fragmentFrom.html`\n <style>\n :host {\n display: inline-flex;\n outline: none;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n }\n\n [part~=\"button\"] {\n align-items: center;\n background: none;\n border: none;\n color: inherit;\n flex: 1;\n font: inherit;\n outline: none;\n padding: 0;\n }\n </style>\n `\n );\n return result;\n }\n}\n\nexport default Button;\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n firstRender,\n raiseChangeEvents,\n render,\n setState,\n state,\n stateEffects,\n} from \"./internal.js\";\n\n// Used to distinguish our synthetic events from a real one.\nclass SyntheticMouseEvent extends MouseEvent {}\n\n/**\n * Generates mousedown events at intervals for as long as the mouse is down\n *\n * This is useful for buttons or other elements that should perform an\n * action repeatedly if the user holds down the mouse.\n *\n * @module RepeatMousedownMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function RepeatMousedownMixin(Base) {\n return class RepeatMousedown extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n repeatDelayDuration: 500, // In ms. Wait a bit before starting repeats.\n repeatInterval: null,\n repeatIntervalDuration: 50, // In ms. Once repeats start, they go fast.\n repeatTimeout: null,\n });\n }\n\n [render](changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n // Wire up event handlers.\n if (this[firstRender]) {\n // Only listen to mouse events with the primary (usually left) button.\n this.addEventListener(\"mousedown\", (event) => {\n if (!(event instanceof SyntheticMouseEvent) && event.button === 0) {\n this[raiseChangeEvents] = true;\n repeatStart(this);\n this[raiseChangeEvents] = false;\n }\n });\n this.addEventListener(\"mouseup\", (event) => {\n if (event.button === 0) {\n this[raiseChangeEvents] = true;\n repeatStop(this);\n this[raiseChangeEvents] = false;\n }\n });\n this.addEventListener(\"mouseleave\", (event) => {\n if (event.button === 0) {\n this[raiseChangeEvents] = true;\n repeatStop(this);\n this[raiseChangeEvents] = false;\n }\n });\n\n // Treat touch events like mouse events.\n this.addEventListener(\"touchstart\", () => {\n this[raiseChangeEvents] = true;\n repeatStart(this);\n this[raiseChangeEvents] = false;\n });\n this.addEventListener(\"touchend\", () => {\n this[raiseChangeEvents] = true;\n repeatStop(this);\n this[raiseChangeEvents] = false;\n });\n }\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects]\n ? super[stateEffects](state, changed)\n : {};\n\n if (changed.disabled) {\n if (state.disabled) {\n clearRepeat(this);\n Object.assign(effects, {\n repeatInterval: null,\n repeatTimeout: null,\n });\n }\n }\n\n return effects;\n }\n };\n}\n\nfunction clearRepeat(element) {\n if (element[state].repeatTimeout) {\n clearTimeout(element[state].repeatTimeout);\n }\n if (element[state].repeatInterval) {\n clearInterval(element[state].repeatInterval);\n }\n}\n\nfunction repeatStart(element) {\n // Start initial wait.\n const { repeatIntervalDuration, repeatDelayDuration } = element[state];\n const repeatTimeout = setTimeout(() => {\n // Initial wait complete; start repeat interval.\n const repeatInterval = setInterval(() => {\n // Repeat interval passed; raise a mousedown event.\n raiseMousedown(element);\n }, repeatIntervalDuration);\n element[setState]({ repeatInterval });\n }, repeatDelayDuration - repeatIntervalDuration);\n element[setState]({ repeatTimeout });\n}\n\n// Stop timeout and/or interval in progress.\nfunction repeatStop(element) {\n clearRepeat(element);\n element[setState]({\n repeatTimeout: null,\n repeatInterval: null,\n });\n}\n\n// Raise a synthetic mousedown event.\nfunction raiseMousedown(element) {\n const event = new SyntheticMouseEvent(\"mousedown\", {\n bubbles: true,\n button: 0,\n cancelable: true,\n clientX: 0,\n clientY: 0,\n });\n element.dispatchEvent(event);\n}\n","import Button from \"./Button.js\";\nimport RepeatMousedownMixin from \"./RepeatMousedownMixin.js\";\n\n/**\n * A button that raises mousedown events as long as the mouse is down\n *\n * @inherits Button\n * @mixes RepeatMousedownMixin\n */\nclass RepeatButton extends RepeatMousedownMixin(Button) {}\n\nexport default RepeatButton;\n","import { template } from \"../base/internal.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\n\n/**\n * Button styles in the Plain reference design system\n *\n * @module PlainButtonMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function PlainButtonMixin(Base) {\n return class PlainButton extends Base {\n get [template]() {\n const result = super[template];\n result.content.append(fragmentFrom.html`\n <style>\n :host([disabled]) ::slotted(*) {\n opacity: 0.5;\n }\n\n [part~=\"button\"] {\n display: inline-flex;\n justify-content: center;\n margin: 0;\n position: relative;\n }\n </style>\n `);\n return result;\n }\n };\n}\n","import RepeatButton from \"../base/RepeatButton.js\";\nimport PlainButtonMixin from \"./PlainButtonMixin.js\";\n\n/**\n * Button component in the Plain reference design system\n *\n * @inherits RepeatButton\n * @mixes PlainButtonMixin\n */\nclass PlainRepeatButton extends PlainButtonMixin(RepeatButton) {}\n\nexport default PlainRepeatButton;\n","import { defaultState, template } from \"../base/internal.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport PlainInput from \"./PlainInput.js\";\nimport PlainRepeatButton from \"./PlainRepeatButton.js\";\n\n/**\n * SpinBox design in the Plain reference design system\n *\n * @module PlainSpinBoxMixin\n * @param {Constructor<ReactiveElement>} Base\n * @part {PlainRepeatButton} button\n * @part {PlainInput} input\n */\nexport default function PlainSpinBoxMixin(Base) {\n return class PlainSpinBox extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n buttonPartType: PlainRepeatButton,\n inputPartType: PlainInput,\n });\n }\n\n get [template]() {\n const result = super[template];\n const upButton = result.content.getElementById(\"upButton\");\n upButton.textContent = \"▲\";\n const downButton = result.content.getElementById(\"downButton\");\n downButton.textContent = \"▼\";\n result.content.append(fragmentFrom.html`\n <style>\n :host {\n background: white;\n border: 1px solid gray;\n box-sizing: border-box;\n }\n\n [part~=\"input\"] {\n background: transparent;\n border: none;\n width: 4em;\n }\n\n [part~=\"spin-button\"] {\n background: transparent;\n border: 1px solid gray;\n box-sizing: border-box;\n font-size: 0.6em;\n padding: 2px;\n }\n\n [part~=\"up-button\"] {\n border-right: none;\n border-top: none;\n }\n\n [part~=\"down-button\"] {\n border-bottom: none;\n border-right: none;\n border-top: none;\n }\n </style>\n `);\n return result;\n }\n };\n}\n","var classof = require('../internals/classof-raw');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = function (value) {\n if (typeof value != 'number' && classof(value) != 'Number') {\n throw TypeError('Incorrect invocation');\n }\n return +value;\n};\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n var str = String(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar toInteger = require('../internals/to-integer');\nvar thisNumberValue = require('../internals/this-number-value');\nvar repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar nativeToFixed = 1.0.toFixed;\nvar floor = Math.floor;\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar multiply = function (data, n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function (data, n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\n\nvar dataToString = function (data) {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat.call('0', 7 - t.length) + t;\n }\n } return s;\n};\n\nvar FORCED = nativeToFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToFixed.call({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toInteger(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(data, 0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(data, 1e7, 0);\n j -= 7;\n }\n multiply(data, pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(data, 1 << 23);\n j -= 23;\n }\n divide(data, 1 << j);\n multiply(data, 1, 1);\n divide(data, 2);\n result = dataToString(data);\n } else {\n multiply(data, 0, z);\n multiply(data, 1 << -e, 0);\n result = dataToString(data) + repeat.call('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat.call('0', fractDigits - k) + result\n : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","import { forwardFocus } from \"../core/dom.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\";\nimport { transmute } from \"../core/template.js\";\nimport DelegateFocusMixin from \"./DelegateFocusMixin.js\";\nimport DelegateInputLabelMixin from \"./DelegateInputLabelMixin.js\";\nimport DelegateInputSelectionMixin from \"./DelegateInputSelectionMixin.js\";\nimport DisabledMixin from \"./DisabledMixin.js\";\nimport FocusVisibleMixin from \"./FocusVisibleMixin.js\";\nimport FormElementMixin from \"./FormElementMixin.js\";\nimport {\n defaultState,\n goDown,\n goUp,\n ids,\n inputDelegate,\n raiseChangeEvents,\n render,\n rendered,\n setState,\n shadowRoot,\n state,\n template,\n} from \"./internal.js\";\nimport KeyboardDirectionMixin from \"./KeyboardDirectionMixin.js\";\nimport KeyboardMixin from \"./KeyboardMixin.js\";\n\nconst Base = DelegateFocusMixin(\n DelegateInputLabelMixin(\n DelegateInputSelectionMixin(\n DisabledMixin(\n FocusVisibleMixin(\n FormElementMixin(\n KeyboardDirectionMixin(KeyboardMixin(ReactiveElement))\n )\n )\n )\n )\n )\n);\n\n/**\n * Input with buttons to increase or decrease a value\n *\n * @inherits ReactiveElement\n * @mixes DelegateFocusMixin\n * @mixes DelegateInputLabelMixin\n * @mixes DelegateInputSelectionMixin\n * @mixes DisabledMixin\n * @mixes FocusVisibleMixin\n * @mixes FormElementMixin\n * @mixes KeyboardDirectionMixin\n * @mixes KeyboardMixin\n * @part {input} input - the text input portion of the spin box\n * @part {button} button - the up and down buttons\n * @part up-button - the up button\n * @part down-button - the down button\n */\nexport class SpinBox extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n buttonPartType: \"button\",\n canGoDown: true,\n canGoUp: true,\n inputPartType: \"input\",\n orientation: \"vertical\",\n step: 1,\n stepSelect: false,\n value: \"\",\n });\n }\n\n [goDown]() {\n if (super[goDown]) {\n super[goDown]();\n }\n this.stepDown();\n return true; // Handled\n }\n\n [goUp]() {\n if (super[goUp]) {\n super[goUp]();\n }\n this.stepUp();\n return true; // Handled\n }\n\n get [inputDelegate]() {\n return this[ids].input;\n }\n\n [render](changed) {\n super[render](changed);\n\n renderParts(this[shadowRoot], this[state], changed);\n\n // Wire up handlers on new buttons.\n if (changed.buttonPartType) {\n this[ids].downButton.addEventListener(\"mousedown\", () => {\n this[raiseChangeEvents] = true;\n this.stepDown();\n this[raiseChangeEvents] = false;\n });\n this[ids].upButton.addEventListener(\"mousedown\", () => {\n this[raiseChangeEvents] = true;\n this.stepUp();\n this[raiseChangeEvents] = false;\n });\n }\n\n // Wire up event handler on new input.\n if (changed.inputPartType) {\n // Wire up handler on new input.\n this[ids].input.addEventListener(\"input\", () => {\n this.value = /** @type {any} */ (this[ids].input).value;\n });\n }\n\n // When buttons are clicked, keep focus on input.\n if (changed.buttonPartType || changed.inputPartType) {\n const input = this[ids].input;\n const downButton = this[ids].downButton;\n if (downButton instanceof HTMLElement && input instanceof HTMLElement) {\n forwardFocus(downButton, input);\n }\n const upButton = this[ids].upButton;\n if (upButton instanceof HTMLElement && input instanceof HTMLElement) {\n forwardFocus(upButton, input);\n }\n }\n\n const { disabled, value } = this[state];\n\n // When disabled, disable inner elements.\n // Also, disable up or down button if we're at max or min.\n if (changed.canGoUp || changed.canGoDown || changed.disabled) {\n const { canGoUp, canGoDown } = this[state];\n if (\"disabled\" in this[ids].input) {\n /** @type {any} */ (this[ids].input).disabled = disabled;\n }\n if (\"disabled\" in this[ids].downButton) {\n const upDisabled = disabled || !canGoUp;\n /** @type {any} */ (this[ids].upButton).disabled = upDisabled;\n }\n if (\"disabled\" in this[ids].upButton) {\n const downDisabled = disabled || !canGoDown;\n /** @type {any} */ (this[ids].downButton).disabled = downDisabled;\n }\n }\n\n // Render value state to input.\n if (changed.value) {\n /** @type {any} */ (this[ids].input).value = value;\n }\n }\n\n [rendered](changed) {\n super[rendered](changed);\n\n // If we changed the value as a result of stepDown/stepUp, put the cursor\n // at the end of the new text.\n const { stepSelect, value } = this[state];\n if (changed.value && stepSelect) {\n /** @type {any} */ const input = this[ids].input;\n const length = value.length;\n input.selectionStart = length;\n input.selectionEnd = length;\n this[setState]({ stepSelect: false });\n }\n }\n\n stepDown() {\n // Set selection after we've rendered.\n this[setState]({ stepSelect: true });\n }\n\n stepUp() {\n // Set selection after we've rendered.\n this[setState]({ stepSelect: true });\n }\n\n get [template]() {\n const result = super[template];\n result.content.append(fragmentFrom.html`\n <style>\n :host {\n display: inline-grid;\n }\n\n [part~=\"input\"] {\n grid-row-end: 3;\n grid-row-start: 1;\n outline: none;\n text-align: right;\n }\n\n [part~=\"spin-button\"] {\n grid-column: 2;\n user-select: none;\n }\n </style>\n <div id=\"input\" part=\"input\"></div>\n <div id=\"upButton\" part=\"spin-button up-button\" tabindex=\"-1\"></div>\n <div id=\"downButton\" part=\"spin-button down-button\" tabindex=\"-1\"></div>\n `);\n return result;\n }\n\n /**\n * The text entered in the spin box.\n *\n * @type {string}\n * @default \"\"\n */\n get value() {\n return this[state].value;\n }\n set value(value) {\n this[setState]({\n value: String(value),\n });\n }\n}\n\n/**\n * Render parts for the template or an instance.\n *\n * @private\n * @param {DocumentFragment} root\n * @param {PlainObject} state\n * @param {ChangedFlags} [changed]\n */\nfunction renderParts(root, state, changed) {\n if (!changed || changed.inputPartType) {\n const { buttonPartType } = state;\n const buttons = root.querySelectorAll('[part~=\"spin-button\"]');\n buttons.forEach((button) => {\n transmute(button, buttonPartType);\n });\n }\n if (!changed || changed.inputPartType) {\n const { inputPartType } = state;\n const input = root.getElementById(\"input\");\n if (input) {\n transmute(input, inputPartType);\n }\n }\n}\n\nexport default SpinBox;\n","/* eslint-disable class-methods-use-this */\nimport {\n defaultState,\n setState,\n state,\n stateEffects\n} from 'elix/src/base/internal.js';\nimport {\n SpinBox\n} from 'elix/src/base/SpinBox.js';\n\n/**\n * @class NumberSpinBox\n */\nclass NumberSpinBox extends SpinBox {\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (name === 'max') {\n this.max = parseFloat(newValue);\n } else if (name === 'min') {\n this.min = parseFloat(newValue);\n } else if (name === 'step') {\n this.step = parseFloat(newValue);\n } else {\n super.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n get [defaultState] () {\n return Object.assign(super[defaultState], {\n max: null,\n min: null,\n step: 1\n });\n }\n\n /**\n * @function formatValue\n * Format the numeric value as a string.\n *\n * This is used after incrementing/decrementing the value to reformat the\n * value as a string.\n *\n * @param {number} value\n * @param {number} precision\n * @returns {number}\n */\n formatValue (value, precision) {\n return Number(value).toFixed(precision);\n }\n\n /**\n * The maximum allowable value of the `value` property.\n *\n * @type {number|null}\n * @default 1\n */\n get max () {\n return this[state].max;\n }\n /**\n * The maximum allowable value of the `value` property.\n *\n * @type {number|null}\n * @default 1\n */\n set max (max) {\n this[setState]({\n max\n });\n }\n\n /**\n * The minimum allowable value of the `value` property.\n *\n * @type {number|null}\n * @default 1\n */\n get min () {\n return this[state].min;\n }\n /**\n * @function set\n * @returns {void}\n */\n set min (min) {\n this[setState]({\n min\n });\n }\n\n /**\n * @function parseValue\n * @param {number} value\n * @param {number} precision\n * @returns {int}\n */\n parseValue (value, precision) {\n const parsed = precision === 0 ? parseInt(value) : parseFloat(value);\n return isNaN(parsed) ? 0 : parsed;\n }\n /**\n * @function stateEffects\n * @param {any} state\n * @param {any} changed\n * @returns {any}\n */\n [stateEffects] (state, changed) {\n const effects = super[stateEffects];\n // If step changed, calculate its precision (number of digits after\n // the decimal).\n if (changed.step) {\n const {\n step\n } = state;\n const decimalRegex = /\\.(\\d)+$/;\n const match = decimalRegex.exec(String(step));\n const precision = match && match[1] ? match[1].length : 0;\n Object.assign(effects, {\n precision\n });\n }\n\n if (changed.max || changed.min || changed.value) {\n // The value is valid if it falls between the min and max.\n // TODO: We need a way to let other classes/mixins on the prototype chain\n // contribute to validity -- if someone else thinks the value is invalid,\n // we should respect that, even if the value falls within the min/max\n // bounds.\n const {\n max,\n min,\n precision,\n value\n } = state;\n const parsed = parseInt(value, precision);\n if (value !== '' && isNaN(parsed)) {\n Object.assign(effects, {\n valid: false,\n validationMessage: 'Value must be a number'\n });\n } else if (!(max === null || parsed <= max)) {\n Object.assign(effects, {\n valid: false,\n validationMessage: `Value must be less than or equal to ${max}.`\n });\n } else if (!(min === null || parsed >= min)) {\n Object.assign(effects, {\n valid: false,\n validationMessage: `Value must be greater than or equal to ${min}.`\n });\n } else {\n Object.assign(effects, {\n valid: true,\n validationMessage: ''\n });\n }\n // We can only go up if we're below max.\n Object.assign(effects, {\n canGoUp: isNaN(parsed) || state.max === null || parsed <= state.max\n });\n\n // We can only go down if we're above min.\n Object.assign(effects, {\n canGoDown: isNaN(parsed) || state.min === null || parsed >= state.min\n });\n }\n\n return effects;\n }\n\n /**\n * @function get\n * @returns {any}\n */\n get step () {\n return this[state].step;\n }\n /**\n * @function set\n * @returns {void}\n */\n set step (step) {\n if (!isNaN(step)) {\n this[setState]({\n step\n });\n }\n }\n\n /**\n * @function stepDown\n * @returns {void}\n */\n stepDown () {\n super.stepDown();\n const {\n max,\n precision,\n value\n } = this[state];\n let result = this.parseValue(value, precision) - this.step;\n if (max !== null) {\n result = Math.min(result, max);\n }\n const {\n min\n } = this[state];\n if (min === null || result >= min) {\n this.value = this.formatValue(result, precision);\n }\n }\n\n /**\n * @function stepUp\n * @returns {void}\n */\n stepUp () {\n super.stepUp();\n const {\n min,\n precision,\n value\n } = this[state];\n let result = this.parseValue(value, precision) + this.step;\n if (min !== null) {\n result = Math.max(result, min);\n }\n const {\n max\n } = this[state];\n if (max === null || result <= max) {\n this.value = this.formatValue(result, precision);\n }\n }\n}\n\nexport default NumberSpinBox;\n","import PlainSpinBoxMixin from 'elix/src/plain/PlainSpinBoxMixin.js';\nimport NumberSpinBox from '../base/NumberSpinBox.js';\n\n/**\n * @class PlainNumberSpinBox\n */\nclass PlainNumberSpinBox extends PlainSpinBoxMixin(NumberSpinBox) {}\n\nexport default PlainNumberSpinBox;\n","import PlainNumberSpinBox from '../src/plain/PlainNumberSpinBox.js';\n/**\n * @class ElixNumberSpinBox\n */\nexport default class ElixNumberSpinBox extends PlainNumberSpinBox {}\n\ncustomElements.define('elix-number-spin-box', ElixNumberSpinBox);\n","import ListComboBox from 'elix/define/ListComboBox.js';\nimport * as internal from 'elix/src/base/internal.js';\nimport {templateFrom, fragmentFrom} from 'elix/src/core/htmlLiterals.js';\nimport NumberSpinBox from '../dialogs/se-elix/define/NumberSpinBox.js';\n\n/**\n * @class Dropdown\n */\nclass Zoom extends ListComboBox {\n /**\n * @function get\n * @returns {PlainObject}\n */\n get [internal.defaultState] () {\n return Object.assign(super[internal.defaultState], {\n inputPartType: NumberSpinBox,\n src: './images/logo.svg',\n inputsize: '100%'\n });\n }\n /**\n * @function get\n * @returns {PlainObject}\n */\n get [internal.template] () {\n const result = super[internal.template];\n const source = result.content.getElementById('source');\n // add a icon before our dropdown\n source.prepend(fragmentFrom.html`\n <img src=\"./images/logo.svg\" alt=\"icon\" width=\"18\" height=\"18\"></img>\n `.cloneNode(true));\n // change the style so it fits in our toolbar\n result.content.append(\n templateFrom.html`\n <style>\n [part~=\"source\"] {\n grid-template-columns: 20px 1fr auto;\n }\n ::slotted(*) {\n padding: 4px;\n width: 100%;\n background-color: var(--icon-bg-color);\n color: #fff;\n }\n }\n [part~=\"popup\"] {\n width: 150%;\n }\n elix-number-spin-box {\n background-color: var(--input-color);\n border-radius: 3px;\n height: 20px !important;\n margin-top: 1px;\n }\n elix-number-spin-box::part(spin-button) {\n padding: 0px;\n }\n\n </style>\n `.content\n );\n return result;\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['title', 'src', 'inputsize', 'value'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'title':\n // this.$span.setAttribute('title', `${newValue} ${shortcut ? `[${shortcut}]` : ''}`);\n break;\n case 'src':\n this.src = newValue;\n break;\n case 'inputsize':\n this.inputsize = newValue;\n break;\n default:\n super.attributeChangedCallback(name, oldValue, newValue);\n break;\n }\n }\n /**\n * @function [internal.render]\n * @param {PlainObject} changed\n * @returns {void}\n */\n [internal.render] (changed) {\n super[internal.render](changed);\n if (this[internal.firstRender]) {\n this.$img = this.shadowRoot.querySelector('img');\n this.$input = this.shadowRoot.getElementById('input');\n }\n if (changed.src) {\n this.$img.setAttribute('src', this[internal.state].src);\n }\n if (changed.inputsize) {\n this.$input.shadowRoot.querySelector('[part~=\"input\"]').style.width = this[internal.state].inputsize;\n }\n if (changed.inputPartType) {\n // Wire up handler on new input.\n this.addEventListener('close', (e) => {\n e.preventDefault();\n const value = e.detail?.closeResult?.getAttribute('value');\n if (value) {\n const closeEvent = new CustomEvent('change', {detail: {value}});\n this.dispatchEvent(closeEvent);\n }\n });\n }\n }\n /**\n * @function src\n * @returns {string} src\n */\n get src () {\n return this[internal.state].src;\n }\n /**\n * @function src\n * @returns {void}\n */\n set src (src) {\n this[internal.setState]({src});\n }\n /**\n * @function inputsize\n * @returns {string} src\n */\n get inputsize () {\n return this[internal.state].inputsize;\n }\n /**\n * @function src\n * @returns {void}\n */\n set inputsize (inputsize) {\n this[internal.setState]({inputsize});\n }\n /**\n * @function value\n * @returns {string} src\n */\n get value () {\n return this[internal.state].value;\n }\n /**\n * @function value\n * @returns {void}\n */\n set value (value) {\n this[internal.setState]({value});\n }\n}\n\n// Register\ncustomElements.define('se-zoom', Zoom);\n\n/*\n{TODO\n min: 0.001, max: 10000, step: 50, stepfunc: stepZoom,\n function stepZoom (elem, step) {\n const origVal = Number(elem.value);\n if (origVal === 0) { return 100; }\n const sugVal = origVal + step;\n if (step === 0) { return origVal; }\n\n if (origVal >= 100) {\n return sugVal;\n }\n if (sugVal >= origVal) {\n return origVal * 2;\n }\n return origVal / 2;\n }\n*/\n","import PlainInput from \"../src/plain/PlainInput.js\";\nexport default class ElixInput extends PlainInput {}\ncustomElements.define(\"elix-input\", ElixInput);\n","import 'elix/define/Input.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n img {\n top: 2px;\n left: 4px;\n position: relative;\n }\n span {\n bottom: 1px;\n right: -4px;\n position: relative;\n margin-right: 4px;\n color: #fff;\n }\n elix-input {\n background-color: var(--input-color);\n border-radius: 3px;\n }\n </style>\n <img src=\"./images/logo.svg\" alt=\"icon\" width=\"12\" height=\"12\" />\n <span id=\"label\">label</span>\n <elix-input></elix-input>\n`;\n\n/**\n * @class SEInput\n */\nexport class SEInput extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n // locate the component\n this.$img = this._shadowRoot.querySelector('img');\n this.$label = this.shadowRoot.getElementById('label');\n this.$event = new CustomEvent('change');\n this.$input = this._shadowRoot.querySelector('elix-input');\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['value', 'label', 'src', 'size'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'src':\n this.$img.setAttribute('src', newValue);\n this.$label.remove();\n break;\n case 'size':\n this.$input.setAttribute('size', newValue);\n break;\n case 'label':\n this.$label.textContent = newValue;\n this.$img.remove();\n break;\n case 'value':\n this.$input.value = newValue;\n break;\n default:\n // eslint-disable-next-line no-console\n console.error(`unknown attribute: ${name}`);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get label () {\n return this.getAttribute('label');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set label (value) {\n this.setAttribute('label', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get value () {\n return this.$input.value;\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set value (value) {\n this.$input.value = value;\n }\n /**\n * @function get\n * @returns {any}\n */\n get src () {\n return this.getAttribute('src');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set src (value) {\n this.setAttribute('src', value);\n }\n\n /**\n * @function get\n * @returns {any}\n */\n get size () {\n return this.getAttribute('size');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set size (value) {\n this.setAttribute('size', value);\n }\n\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n this.addEventListener('change', (e) => {\n e.preventDefault();\n this.value = e.target.value;\n });\n this.dispatchEvent(this.$event);\n }\n}\n// Register\ncustomElements.define('se-input', SEInput);\n","import '../dialogs/se-elix/define/NumberSpinBox.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n img {\n position: relative;\n right: -4px;\n }\n span {\n bottom: -3px;\n right: -4px;\n position: relative;\n margin-left: 4px;\n margin-right: 4px;\n color: #fff;\n vertical-align: ;\n }\n elix-number-spin-box {\n background-color: var(--input-color);\n border-radius: 3px;\n height: 20px !important;\n margin-top: 1px;\n vertical-align: top;\n }\n elix-number-spin-box::part(spin-button) {\n padding: 0px;\n }\n elix-number-spin-box::part(input) {\n width: 3em;\n }\n elix-number-spin-box{\n width: 54px;\n height: 24px;\n }\n </style>\n <img src=\"./images/logo.svg\" alt=\"icon\" width=\"24\" height=\"24\" aria-labelledby=\"label\" />\n <span id=\"label\">label</span>\n <elix-number-spin-box min=\"1\" step=\"1\"></elix-number-spin-box>\n`;\n\n/**\n * @class SESpinInput\n */\nexport class SESpinInput extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n // locate the component\n this.$img = this._shadowRoot.querySelector('img');\n this.$label = this.shadowRoot.getElementById('label');\n this.$event = new CustomEvent('change');\n this.$input = this._shadowRoot.querySelector('elix-number-spin-box');\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['value', 'label', 'src', 'size', 'min', 'max', 'step'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'src':\n this.$img.setAttribute('src', newValue);\n this.$label.remove();\n break;\n case 'size':\n // access to the underlying input box\n this.$input.shadowRoot.getElementById('input').size = newValue;\n // below seems mandatory to override the default width style that takes precedence on size\n this.$input.shadowRoot.getElementById('input').style.width = 'unset';\n break;\n case 'step':\n this.$input.setAttribute('step', newValue);\n break;\n case 'min':\n this.$input.setAttribute('min', newValue);\n break;\n case 'max':\n this.$input.setAttribute('max', newValue);\n break;\n case 'label':\n this.$label.textContent = newValue;\n this.$img.remove();\n break;\n case 'value':\n this.$input.value = newValue;\n break;\n default:\n // eslint-disable-next-line no-console\n console.error(`unknown attribute: ${name}`);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get label () {\n return this.getAttribute('label');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set label (value) {\n this.setAttribute('label', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get value () {\n return this.$input.value;\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set value (value) {\n this.$input.value = value;\n }\n /**\n * @function get\n * @returns {any}\n */\n get src () {\n return this.getAttribute('src');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set src (value) {\n this.setAttribute('src', value);\n }\n\n /**\n * @function get\n * @returns {any}\n */\n get size () {\n return this.getAttribute('size');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set size (value) {\n this.setAttribute('size', value);\n }\n\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n this.$input.addEventListener('change', (e) => {\n e.preventDefault();\n this.value = e.target.value;\n this.dispatchEvent(this.$event);\n });\n this.$input.addEventListener('click', (e) => {\n e.preventDefault();\n this.value = e.target.value;\n this.dispatchEvent(this.$event);\n });\n }\n}\n\n// Register\ncustomElements.define('se-spin-input', SESpinInput);\n","/* eslint-disable max-len */\nconst palette = [\n // Todo: Make into configuration item?\n 'none', '#000000', '#3f3f3f', '#7f7f7f', '#bfbfbf', '#ffffff',\n '#ff0000', '#ff7f00', '#ffff00', '#7fff00',\n '#00ff00', '#00ff7f', '#00ffff', '#007fff',\n '#0000ff', '#7f00ff', '#ff00ff', '#ff007f',\n '#7f0000', '#7f3f00', '#7f7f00', '#3f7f00',\n '#007f00', '#007f3f', '#007f7f', '#003f7f',\n '#00007f', '#3f007f', '#7f007f', '#7f003f',\n '#ffaaaa', '#ffd4aa', '#ffffaa', '#d4ffaa',\n '#aaffaa', '#aaffd4', '#aaffff', '#aad4ff',\n '#aaaaff', '#d4aaff', '#ffaaff', '#ffaad4'\n];\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n .square {\n height: 15px;\n width: 15px;\n float: left;\n }\n #palette_holder {\n overflow: hidden;\n margin-top: 5px;\n padding: 5px;\n position: absolute;\n right: 15px;\n height: 16px;\n background: #f0f0f0;\n border-radius: 3px;\n z-index: 2;\n }\n \n #js-se-palette {\n float: left;\n width: 632px;\n height: 16px;\n }\n \n div.palette_item {\n height: 15px;\n width: 15px;\n float: left;\n }\n \n div.palette_item:first-child {\n background: white;\n }\n @media screen and (max-width:1100px) {\n #palette_holder {\n left: 410px;\n overflow-x: scroll;\n padding: 0 5px;\n margin-top: 2px;\n height: 30px;\n }\n } \n @media screen and (max-width:1250px) {\n #palette_holder {\n left: 560px;\n overflow-x: scroll;\n padding: 0 5px;\n margin-top: 2px;\n height: 30px;\n }\n }\n @media screen and (max-width:540px) {\n #palette_holder {\n left: 0px;\n overflow-x: scroll;\n padding: 0 5px;\n margin-top: 32px;\n height: 30px;\n }\n } \n </style>\n <div id=\"palette_holder\" title=\"Click to change fill color, shift-click to change stroke color\">\n <div id=\"js-se-palette\">\n </div>\n </div>\n`;\n\n/**\n * @class SEPalette\n */\nexport class SEPalette extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n this.$strip = this._shadowRoot.querySelector('#js-se-palette');\n palette.forEach((rgb) => {\n const newDiv = document.createElement('div');\n newDiv.classList.add('square');\n if(rgb === 'none') {\n var img = document.createElement('img'); \n img.src = `data:image/svg+xml;charset=utf-8;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgY2xhc3M9InN2Z19pY29uIj48c3ZnIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgICA8bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiNkNDAwMDAiIGlkPSJzdmdfOTAiIHkyPSIyNCIgeDI9IjI0IiB5MT0iMCIgeDE9IjAiLz4KICAgIDxsaW5lIGlkPSJzdmdfOTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2Q0MDAwMCIgeTI9IjI0IiB4Mj0iMCIgeTE9IjAiIHgxPSIyNCIvPgogIDwvc3ZnPjwvc3ZnPg==`;\n img.style.width = \"15px\";\n img.style.height = \"15px\";\n newDiv.append(img);\n } else {\n newDiv.style.backgroundColor = rgb;\n } \n newDiv.dataset.rgb = rgb;\n newDiv.addEventListener('click', (evt) => {\n evt.preventDefault();\n // shift key or right click for stroke\n const picker = evt.shiftKey || evt.button === 2 ? 'stroke' : 'fill';\n let color = newDiv.dataset.rgb;\n // Webkit-based browsers returned 'initial' here for no stroke\n if (color === 'none' || color === 'transparent' || color === 'initial') {\n color = 'none';\n }\n const paletteEvent = new CustomEvent('change', {detail: {picker, color}, bubbles: false});\n this.dispatchEvent(paletteEvent);\n });\n this.$strip.append(newDiv);\n });\n }\n\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n }\n}\n\n// Register\ncustomElements.define('se-palette', SEPalette);\n\n/* #palette_holder {\n overflow: hidden;\n margin-top: 5px;\n padding: 5px;\n position: absolute;\n right: 15px;\n height: 16px;\n background: #f0f0f0;\n border-radius: 3px;\n z-index: 2;\n\n #palette {\n float: left;\n width: 632px;\n height: 16px;\n}\n\n $('.palette_item').mousedown(function (evt) {\n // shift key or right click for stroke\n const picker = evt.shiftKey || evt.button === 2 ? 'stroke' : 'fill';\n let color = $(this).data('rgb');\n let paint;\n\n // Webkit-based browsers returned 'initial' here for no stroke\n if (color === 'none' || color === 'transparent' || color === 'initial') {\n color = 'none';\n paint = new $.jGraduate.Paint();\n } else {\n paint = new $.jGraduate.Paint({alpha: 100, solidColor: color.substr(1)});\n }\n\n paintBox[picker].setPaint(paint);\n svgCanvas.setColor(picker, color);\n\n if (color !== 'none' && svgCanvas.getPaintOpacity(picker) !== 1) {\n svgCanvas.setPaintOpacity(picker, 1.0);\n }\n updateToolButtonState();\n }).bind('contextmenu', function (e) { e.preventDefault(); });\n\n*/\n","import { booleanAttributeValue } from \"../core/AttributeMarshallingMixin.js\";\nimport { setInternalState } from \"../core/dom.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n nativeInternals,\n render,\n rendered,\n setState,\n state,\n} from \"./internal.js\";\n\n/**\n * Tracks whether an item is the current item.\n *\n * @module CurrentMixin\n * @state current\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function CurrentMixin(Base) {\n // The class prototype added by the mixin.\n return class Current extends Base {\n constructor() {\n super();\n /** @type {any} */ const cast = this;\n if (!this[nativeInternals] && cast.attachInternals) {\n this[nativeInternals] = cast.attachInternals();\n }\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === \"current\") {\n const value = booleanAttributeValue(name, newValue);\n if (this.current !== value) {\n this.current = value;\n }\n } else {\n super.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n current: false,\n });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n if (changed.current) {\n const { current } = this[state];\n setInternalState(this, \"current\", current);\n }\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n // TODO: How do we know whether to raise this if selection is set by Menu? */\n if (changed.current /* && this[raiseChangeEvents] */) {\n const { current } = this[state];\n /**\n * Raised when the `current` property changes.\n *\n * @event currentchange\n */\n const event = new CustomEvent(\"currentchange\", {\n bubbles: true,\n detail: { current },\n });\n this.dispatchEvent(event);\n }\n }\n\n /**\n * True if the element is currently current.\n *\n * @type {boolean}\n * @default false\n */\n get current() {\n return this[state].current;\n }\n set current(current) {\n // Note: AttributeMarshallingMixin will recognize `current` as the name of\n // attribute that should be parsed as a boolean attribute, and so will\n // handling parsing it for us.\n this[setState]({ current });\n }\n };\n}\n","import { setInternalState } from \"../core/dom.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n nativeInternals,\n render,\n rendered,\n setState,\n state,\n} from \"./internal.js\";\n\n/**\n * Tracks whether the element is currently selected.\n *\n * @module SelectableMixin\n * @state selected\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function SelectableMixin(Base) {\n // The class prototype added by the mixin.\n return class Selectable extends Base {\n constructor() {\n super();\n /** @type {any} */ const cast = this;\n if (!this[nativeInternals] && cast.attachInternals) {\n this[nativeInternals] = cast.attachInternals();\n }\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n selected: false,\n });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n if (changed.selected) {\n const { selected } = this[state];\n setInternalState(this, \"selected\", selected);\n }\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n if (super[rendered]) {\n super[rendered](changed);\n }\n\n // TODO: How do we know whether to raise this if selection is set by Menu? */\n if (changed.selected /* && this[raiseChangeEvents] */) {\n const { selected } = this[state];\n /**\n * Raised when the `selected` property changes.\n *\n * @event selectedchange\n */\n const event = new CustomEvent(\"selectedchange\", {\n bubbles: true,\n detail: { selected },\n });\n this.dispatchEvent(event);\n }\n }\n\n /**\n * True if the element is currently selected.\n *\n * @type {boolean}\n * @default false\n */\n get selected() {\n return this[state].selected;\n }\n set selected(selected) {\n // Note: AttributeMarshallingMixin will recognize `selected` as the name of\n // attribute that should be parsed as a boolean attribute, and so will\n // handling parsing it for us.\n this[setState]({ selected });\n }\n };\n}\n","import ReactiveElement from \"../core/ReactiveElement.js\";\nimport CurrentMixin from \"./CurrentMixin.js\";\nimport DisabledMixin from \"./DisabledMixin.js\";\nimport SelectableMixin from \"./SelectableMixin.js\";\n\n/**\n * A choice in a menu\n *\n * This class is a convenient way to popuplate a [Menu](Menu) with items that\n * exhibit an appearance roughly consistent with operating system menu items.\n * Use of this class is not required, however -- a `Menu` can contain any type\n * of item you want.\n *\n * @inherits ReactiveElement\n * @mixes CurrentMixin\n * @mixes DisabledMixin\n * @mixes SelectableMixin\n */\nclass MenuItem extends CurrentMixin(\n DisabledMixin(SelectableMixin(ReactiveElement))\n) {}\n\nexport default MenuItem;\n","import { template } from \"../base/internal.js\";\nimport MenuItem from \"../base/MenuItem.js\";\nimport { templateFrom } from \"../core/htmlLiterals.js\";\n\n/**\n * MenuItem component in the Plain reference design system\n *\n * @inherits MenuItem\n */\nclass PlainMenuItem extends MenuItem {\n get [template]() {\n // Apply variety of system fonts.\n // Checkmark icon from Material Design.\n return templateFrom.html`\n <style>\n :host {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n font-size: 10pt;\n white-space: nowrap;\n }\n\n :host([disabled]) {\n opacity: 0.5;\n }\n\n #checkmark {\n height: 1em;\n visibility: hidden;\n width: 1em;\n }\n\n :host([selected]) #checkmark {\n visibility: visible;\n }\n </style>\n <svg id=\"checkmark\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"4 6 18 12\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"/>\n </svg>\n <slot></slot>\n `;\n }\n}\n\nexport default PlainMenuItem;\n","import PlainMenuItem from \"../src/plain/PlainMenuItem.js\";\nexport default class ElixMenuItem extends PlainMenuItem {}\ncustomElements.define(\"elix-menu-item\", ElixMenuItem);\n","import { templateFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\";\nimport AriaMenuMixin from \"./AriaMenuMixin.js\";\nimport CursorAPIMixin from \"./CursorAPIMixin.js\";\nimport CursorInViewMixin from \"./CursorInViewMixin.js\";\nimport DelegateFocusMixin from \"./DelegateFocusMixin.js\";\nimport DirectionCursorMixin from \"./DirectionCursorMixin.js\";\nimport {\n defaultState,\n firstRender,\n ids,\n raiseChangeEvents,\n render,\n rendered,\n scrollTarget,\n setState,\n state,\n stateEffects,\n tap,\n template,\n} from \"./internal.js\";\nimport ItemsAPIMixin from \"./ItemsAPIMixin.js\";\nimport ItemsCursorMixin from \"./ItemsCursorMixin.js\";\nimport ItemsTextMixin from \"./ItemsTextMixin.js\";\nimport KeyboardDirectionMixin from \"./KeyboardDirectionMixin.js\";\nimport KeyboardMixin from \"./KeyboardMixin.js\";\nimport KeyboardPagedCursorMixin from \"./KeyboardPagedCursorMixin.js\";\nimport KeyboardPrefixCursorMixin from \"./KeyboardPrefixCursorMixin.js\";\nimport LanguageDirectionMixin from \"./LanguageDirectionMixin.js\";\nimport SlotItemsMixin from \"./SlotItemsMixin.js\";\nimport TapCursorMixin from \"./TapCursorMixin.js\";\n\nconst Base = AriaMenuMixin(\n CursorAPIMixin(\n CursorInViewMixin(\n DelegateFocusMixin(\n DirectionCursorMixin(\n ItemsAPIMixin(\n ItemsCursorMixin(\n ItemsTextMixin(\n KeyboardDirectionMixin(\n KeyboardMixin(\n KeyboardPagedCursorMixin(\n KeyboardPrefixCursorMixin(\n LanguageDirectionMixin(\n SlotItemsMixin(TapCursorMixin(ReactiveElement))\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n);\n\n/**\n * A menu of choices or commands\n *\n * This holds the contents of the menu, not the top-level UI element that invokes\n * a menu. For that, see [MenuButton](MenuButton) or [PopupSource](PopupSource).\n *\n * @inherits ReactiveElement\n * @mixes AriaMenuMixin\n * @mixes CursorInViewMixin\n * @mixes CursorAPIMixin\n * @mixes DelegateFocusMixin\n * @mixes DirectionCursorMixin\n * @mixes ItemsAPIMixin\n * @mixes ItemsCursorMixin\n * @mixes ItemsTextMixin\n * @mixes KeyboardDirectionMixin\n * @mixes KeyboardMixin\n * @mixes KeyboardPagedCursorMixin\n * @mixes KeyboardPrefixCursorMixin\n * @mixes LanguageDirectionMixin\n * @mixes SingleSelectAPIMixin\n * @mixes SlotItemsMixin\n * @mixes TapCursorMixin\n */\nclass Menu extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n availableItemFlags: null,\n handleBubblingDirectionKeys: true,\n highlightCurrentItem: true,\n orientation: \"vertical\",\n currentItemFocused: false,\n });\n }\n\n /**\n * Flash the current item.\n *\n * By default, this uses a heuristic to guess whether the menu was closed by a\n * keyboard or mouse (on desktop). If so, the menu flashes the current item\n * off then back on, emulating the menu item selection effect in macOS.\n * Otherwise, it does nothing.\n */\n async flashCurrentItem() {\n const keyboardActive = this[state].focusVisible;\n const probablyDesktop = matchMedia(\"(pointer: fine)\").matches;\n if (keyboardActive || probablyDesktop) {\n const flashDuration = 75; // milliseconds\n this[setState]({ highlightCurrentItem: false });\n await new Promise((resolve) => setTimeout(resolve, flashDuration));\n this[setState]({ highlightCurrentItem: true });\n await new Promise((resolve) => setTimeout(resolve, flashDuration));\n }\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n\n if (this[firstRender]) {\n // Listen to changes in disabled state.\n this.addEventListener(\"disabledchange\", (event) => {\n this[raiseChangeEvents] = true;\n /** @type {any} */ const target = event.target;\n const { items } = this[state];\n const index = items === null ? -1 : items.indexOf(target);\n if (index >= 0) {\n // Update item availability.\n const availableItemFlags = this[state].availableItemFlags.slice();\n availableItemFlags[index] = !target.disabled;\n this[setState]({ availableItemFlags });\n }\n this[raiseChangeEvents] = false;\n });\n\n // Treat a pointerdown event as a tap.\n if (\"PointerEvent\" in window) {\n // Prefer listening to standard pointer events.\n this.addEventListener(\"pointerdown\", (event) => this[tap](event));\n } else {\n this.addEventListener(\"touchstart\", (event) => this[tap](event));\n }\n\n this.removeAttribute(\"tabindex\");\n }\n\n const { currentIndex, items } = this[state];\n\n // Highlight the current item.\n if (\n (changed.items || changed.currentIndex || changed.highlightCurrentItem) &&\n items\n ) {\n const { highlightCurrentItem } = this[state];\n items.forEach((item, index) => {\n item.toggleAttribute(\n \"current\",\n highlightCurrentItem && index === currentIndex\n );\n });\n }\n\n if (\n (changed.items ||\n changed.currentIndex ||\n changed.currentItemFocused ||\n changed.focusVisible) &&\n items\n ) {\n // A menu has a complicated focus arrangement in which the current item has\n // focus, which means it needs a tabindex. However, we don't want any other\n // item in the menu to have a tabindex, so that if the user presses Tab or\n // Shift+Tab, they move away from the menu entirely (rather than just moving\n // to the next or previous item).\n //\n // That's already complex, but to make things worse, if we remove the\n // tabindex from an item that has the focus, the focus gets moved to the\n // document. In popup menus, the popup will conclude it's lost the focus,\n // and implicitly close. So we want to move the focus in two phases: 1)\n // set tabindex on a newly-current item so we can focus on it, 2) after\n // the new item has been focused, remove the tabindex from any\n // previous item.\n items.forEach((item, index) => {\n const current = index === currentIndex;\n const isDefaultFocusableItem = currentIndex < 0 && index === 0;\n if (!this[state].currentItemFocused) {\n // Phase 1: Add tabindex to newly-current item.\n if (current || isDefaultFocusableItem) {\n item.tabIndex = 0;\n }\n } else {\n // Phase 2: Remove tabindex from any previous item.\n if (!(current || isDefaultFocusableItem)) {\n item.removeAttribute(\"tabindex\");\n }\n }\n });\n }\n }\n\n [rendered](/** @type {ChangedFlags} */ changed) {\n super[rendered](changed);\n if (\n !this[firstRender] &&\n changed.currentIndex &&\n !this[state].currentItemFocused\n ) {\n // The current item needs the focus, but this is complicated. See notes\n // in render.\n const { currentItem } = this[state];\n const focusElement =\n currentItem instanceof HTMLElement ? currentItem : this;\n focusElement.focus();\n\n // Now that the current item has been focused, we can remove/reset the\n // tabindex on any item that had previously been current.\n this[setState]({\n currentItemFocused: true,\n });\n }\n }\n\n // @ts-ignore\n get [scrollTarget]() {\n return this[ids].content;\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects](state, changed);\n\n // When current item changes, we'll need to focus on it in rendered.\n if (changed.currentIndex) {\n Object.assign(effects, {\n currentItemFocused: false,\n });\n }\n\n // Mark disabled items as unavailable.\n if (changed.items) {\n const { items } = state;\n const availableItemFlags =\n items === null ? null : items.map((item) => !item.disabled);\n Object.assign(effects, { availableItemFlags });\n }\n\n return effects;\n }\n\n get [template]() {\n return templateFrom.html`\n <style>\n :host {\n box-sizing: border-box;\n cursor: default;\n display: inline-flex;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n }\n\n #content {\n display: flex;\n flex: 1;\n flex-direction: column;\n max-height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch; /* for momentum scrolling */\n }\n \n ::slotted(*) {\n flex-shrink: 0;\n outline: none;\n touch-action: manipulation;\n }\n\n ::slotted(option) {\n font: inherit;\n min-height: inherit;\n }\n </style>\n <div id=\"content\" role=\"none\">\n <slot></slot>\n </div>\n `;\n }\n}\n\nexport default Menu;\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { defaultAriaRole } from \"./accessibility.js\";\nimport {\n defaultState,\n render,\n rendering,\n setState,\n state,\n} from \"./internal.js\";\n\n/**\n * Tells assistive technologies to describe a list's items as a menu of choices.\n *\n * @module AriaMenuMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function AriaMenuMixin(Base) {\n // The class prototype added by the mixin.\n class AriaMenu extends Base {\n // @ts-ignore\n get [defaultState]() {\n const base = super[defaultState];\n return Object.assign(base, {\n itemRole: base.itemRole || \"menuitem\",\n role: base.role || \"menu\",\n });\n }\n\n get itemRole() {\n return this[state].itemRole;\n }\n set itemRole(itemRole) {\n this[setState]({ itemRole });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n\n /** @type {ListItemElement[]} */ const items = this[state].items;\n if ((changed.items || changed.itemRole) && items) {\n // Give each item a role.\n const { itemRole } = this[state];\n items.forEach((item) => {\n if (itemRole === defaultAriaRole[item.localName]) {\n item.removeAttribute(\"role\");\n } else {\n item.setAttribute(\"role\", itemRole);\n }\n });\n }\n\n if (changed.role) {\n // Apply top-level role.\n const { role } = this[state];\n this.setAttribute(\"role\", role);\n }\n }\n\n // Setting the standard role attribute will invoke this property setter,\n // which will allow us to update our state.\n get role() {\n return super.role;\n }\n set role(role) {\n super.role = role;\n if (!this[rendering]) {\n this[setState]({ role });\n }\n }\n }\n\n return AriaMenu;\n}\n","import { deepContains, ownEvent } from \"../core/dom.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport DelegateFocusMixin from \"./DelegateFocusMixin.js\";\nimport {\n defaultState,\n firstRender,\n ids,\n keydown,\n raiseChangeEvents,\n render,\n state,\n template,\n} from \"./internal.js\";\nimport KeyboardMixin from \"./KeyboardMixin.js\";\nimport PopupDragSelectMixin from \"./PopupDragSelectMixin.js\";\nimport PopupSource from \"./PopupSource.js\";\n\nconst elixdebugpopup =\n new URLSearchParams(location.search).get(\"elixdebugpopup\") === \"true\";\n\nconst Base = DelegateFocusMixin(\n KeyboardMixin(PopupDragSelectMixin(PopupSource))\n);\n\n/**\n * A button that invokes an attached popup\n *\n * @inherits PopupSource\n * @mixes DelegateFocusMixin\n * @mixes KeyboardMixin\n * @mixes PopupDragSelectMixin\n */\nclass PopupButton extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n sourcePartType: \"button\",\n });\n }\n\n [keydown](/** @type {KeyboardEvent} */ event) {\n let handled;\n\n switch (event.key) {\n // Space or Up/Down arrow keys open the popup.\n case \" \":\n case \"ArrowDown\":\n case \"ArrowUp\":\n if (this.closed) {\n this.open();\n handled = true;\n }\n break;\n\n // Enter opens popup.\n case \"Enter\":\n if (!this.opened) {\n this.open();\n handled = true;\n }\n break;\n\n // If popup is open, pressing Esc should close popup.\n // This code exists to handle cases where the popup does not take the\n // focus (autoFocus is false). In cases where the popup takes focus, it\n // will be up to the popup to handle closing when Esc is pressed.\n case \"Escape\":\n if (this.opened) {\n this.close({\n canceled: \"Escape\",\n });\n handled = true;\n }\n break;\n }\n\n // Give superclass a chance to handle.\n handled = super[keydown] && super[keydown](event);\n\n if (!handled && this.opened && !event.metaKey && !event.altKey) {\n // If they haven't already been handled, absorb keys that might cause the\n // page to scroll in the background, which would in turn cause the popup to\n // inadvertently close.\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowLeft\":\n case \"ArrowRight\":\n case \"ArrowUp\":\n case \"End\":\n case \"Home\":\n case \"PageDown\":\n case \"PageUp\":\n case \" \":\n handled = true;\n }\n }\n\n return handled;\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n\n if (this[firstRender]) {\n // Close the popup if we're opened and lose focus. A typical popup using\n // PopupModalityMixin will have its own logic to close on blur -- but in\n // cases where the popup itself doesn't get focus (e.g., TooltipButton),\n // that logic won't apply.\n // Don't close on blur if we're debugging popups.\n if (!elixdebugpopup) {\n this.addEventListener(\"blur\", blurHandler.bind(this));\n }\n\n // If the source element gets the focus while the popup is open, the\n // most likely expanation is that the user hit Shift+Tab to back up out of\n // the popup. In that case, we should close.\n this[ids].source.addEventListener(\"focus\", async (event) => {\n const popupFocused = ownEvent(this[ids].popup, event);\n // It's possible to get a focus event in the initial mousedown on the\n // source button before the popup is even rendered. We don't want to\n // close in that case, so we check to see if we've already measured the\n // popup dimensions (which will be true if the popup fully completed\n // rendering).\n const measured = this[state].popupHeight !== null;\n if (!popupFocused && this.opened && measured) {\n this[raiseChangeEvents] = true;\n await this.close();\n this[raiseChangeEvents] = false;\n }\n });\n }\n\n if (changed.opened) {\n // Reflect opened state to attribute for styling.\n const { opened } = this[state];\n this.toggleAttribute(\"opened\", opened);\n }\n\n if (changed.sourcePartType) {\n // Desktop popups generally open on mousedown, not click/mouseup. On mobile,\n // mousedown won't fire until the user releases their finger, so it behaves\n // like a click.\n const source = this[ids].source;\n source.addEventListener(\"mousedown\", (event) => {\n // mousedown events fire even if button is disabled, so we need\n // to explicitly ignore those.\n if (this.disabled) {\n event.preventDefault();\n return;\n }\n // Only handle primary button mouse down to avoid interfering with\n // right-click behavior.\n /** @type {any} */\n const cast = event;\n if (cast.button && cast.button !== 0) {\n return;\n }\n // We give the default focus behavior time to run before opening the\n // popup. See note below.\n setTimeout(() => {\n if (!this.opened) {\n this[raiseChangeEvents] = true;\n this.open();\n this[raiseChangeEvents] = false;\n }\n });\n event.stopPropagation();\n // We don't prevent the default behavior for mousedown. Among other\n // things, it sets the focus to the element the user moused down on.\n // That's important for us, because OverlayMixin will remember that\n // focused element (i.e., this element) when opening, and restore focus to\n // it when the popup closes.\n });\n }\n\n if (changed.popupPartType) {\n this[ids].popup.removeAttribute(\"tabindex\");\n }\n }\n\n get [template]() {\n const result = super[template];\n // When popup is open, it will have focus; don't show focus ring on host.\n result.content.append(\n fragmentFrom.html`\n <style>\n [part~=\"source\"] {\n cursor: default;\n outline: none;\n -webkit-tap-highlight-color: transparent;\n touch-action: manipulation;\n -moz-user-select: none;\n -ms-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n }\n\n :host([opened][focus-visible]) {\n outline: none;\n }\n </style>\n `\n );\n return result;\n }\n}\n\n// Note: This routine also exists in PopupModalityMixin, may want to eventually\n// share that. Note that PopupModalityMixin handles blur on the *popup*; here\n// we're dealing with the source button.\nasync function blurHandler(/** @type {Event} */ event) {\n // @ts-ignore\n /** @type {any} */ const element = this;\n // What has the focus now?\n const newFocusedElement =\n /** @type {any} */ (event).relatedTarget || document.activeElement;\n /** @type {any} */\n if (\n newFocusedElement instanceof Element &&\n !deepContains(element, newFocusedElement)\n ) {\n element[raiseChangeEvents] = true;\n await element.close({ canceled: \"blur\" });\n element[raiseChangeEvents] = false;\n }\n}\n\nexport default PopupButton;\n","import { deepContains } from \"../core/dom.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport { transmute } from \"../core/template.js\";\nimport {\n defaultState,\n ids,\n raiseChangeEvents,\n render,\n rendered,\n setState,\n shadowRoot,\n state,\n stateEffects,\n template,\n} from \"./internal.js\";\nimport Menu from \"./Menu.js\";\nimport PopupButton from \"./PopupButton.js\";\nimport PopupListMixin from \"./PopupListMixin.js\";\n\nconst Base = PopupListMixin(PopupButton);\n\n/**\n * A button that invokes a menu.\n *\n * @inherits PopupButton\n * @mixes PopupListMixin\n * @part {Menu} menu - the menu shown in the popup\n */\nclass MenuButton extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n menuPartType: Menu,\n });\n }\n\n get items() {\n /** @type {any} */\n const menu = this[ids] && this[ids].menu;\n return menu ? menu.items : null;\n }\n\n /**\n * The class or tag used to define the `menu` part the element\n * presenting the menu items and handling navigation between them.\n *\n * @type {PartDescriptor}\n * @default Menu\n */\n get menuPartType() {\n return this[state].menuPartType;\n }\n set menuPartType(menuPartType) {\n this[setState]({ menuPartType });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n\n renderParts(this[shadowRoot], this[state], changed);\n\n if (changed.menuPartType) {\n // Close the popup if menu loses focus.\n this[ids].menu.addEventListener(\"blur\", async (event) => {\n /** @type {any} */\n const cast = event;\n const newFocusedElement = cast.relatedTarget || document.activeElement;\n if (this.opened && !deepContains(this[ids].menu, newFocusedElement)) {\n this[raiseChangeEvents] = true;\n await this.close();\n this[raiseChangeEvents] = false;\n }\n });\n\n // mousedown events on the menu will propagate up to the top-level element,\n // which will then steal the focus. We want to keep the focus on the menu,\n // both to permit keyboard use, and to avoid closing the menu on blur (see\n // separate blur handler). To keep the focus on the menu, we prevent the\n // default event behavior.\n this[ids].menu.addEventListener(\"mousedown\", (event) => {\n // Only process events for the main (usually left) button.\n if (/** @type {MouseEvent} */ (event).button !== 0) {\n return;\n }\n if (this.opened) {\n event.stopPropagation();\n event.preventDefault();\n }\n });\n }\n\n if (changed.opened) {\n // Reflect opened state to source for ARIA.\n const { opened } = this[state];\n this[ids].source.setAttribute(\"aria-expanded\", opened.toString());\n }\n }\n\n [rendered](changed) {\n super[rendered](changed);\n\n if (changed.menuPartType) {\n this[setState]({\n popupList: this[ids].menu,\n });\n }\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects](state, changed);\n\n // When closing, clear menu selection.\n if (changed.opened && !state.opened) {\n Object.assign(effects, {\n currentIndex: -1,\n });\n }\n\n return effects;\n }\n\n get [template]() {\n const result = super[template];\n\n // Wrap default slot with a menu.\n const defaultSlot = result.content.querySelector(\"slot:not([name])\");\n if (defaultSlot) {\n defaultSlot.replaceWith(fragmentFrom.html`\n <div id=\"menu\" part=\"menu\">\n <slot></slot>\n </div>\n `);\n }\n\n renderParts(result.content, this[state]);\n\n result.content.append(fragmentFrom.html`\n <style>\n [part~=\"menu\"] {\n max-height: 100%;\n }\n </style>\n `);\n\n return result;\n }\n}\n\n/**\n * Render parts for the template or an instance.\n *\n * @private\n * @param {DocumentFragment} root\n * @param {PlainObject} state\n * @param {ChangedFlags} [changed]\n */\nfunction renderParts(root, state, changed) {\n if (!changed || changed.menuPartType) {\n const { menuPartType } = state;\n const menu = root.getElementById(\"menu\");\n if (menu) {\n transmute(menu, menuPartType);\n }\n }\n}\n\nexport default MenuButton;\n","import Button from \"../base/Button.js\";\nimport PlainButtonMixin from \"./PlainButtonMixin.js\";\n\n/**\n * Button component in the Plain reference design system\n *\n * @inherits Button\n */\nclass PlainButton extends PlainButtonMixin(Button) {}\n\nexport default PlainButton;\n","import { template } from \"../base/internal.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport PlainButton from \"./PlainButton.js\";\n\n/**\n * Button with a border in the Plain reference design system\n *\n * @inherits PlainButton\n */\nclass PlainBorderButton extends PlainButton {\n get [template]() {\n const result = super[template];\n result.content.append(\n fragmentFrom.html`\n <style>\n [part~=\"button\"] {\n background: #eee;\n border: 1px solid #ccc;\n padding: 0.25em 0.5em;\n }\n </style>\n `\n );\n return result;\n }\n}\n\nexport default PlainBorderButton;\n","import { template } from \"../base/internal.js\";\nimport Menu from \"../base/Menu.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\n\n/**\n * Menu component in the Plain reference design system\n *\n * @inherits Menu\n */\nclass PlainMenu extends Menu {\n get [template]() {\n const result = super[template];\n result.content.append(\n fragmentFrom.html`\n <style>\n :host ::slotted(*) {\n padding: 0.25em 1em;\n }\n \n :host ::slotted([current]) {\n background: highlight;\n color: highlighttext;\n }\n\n @media (pointer: coarse) {\n ::slotted(*) {\n padding: 1em;\n }\n }\n </style>\n `\n );\n return result;\n }\n}\n\nexport default PlainMenu;\n","import { defaultState, template } from \"../base/internal.js\";\nimport MenuButton from \"../base/MenuButton.js\";\nimport PopupToggleMixin from \"../base/PopupToggleMixin.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport PlainBorderButton from \"./PlainBorderButton.js\";\nimport PlainMenu from \"./PlainMenu.js\";\nimport PlainOpenCloseToggle from \"./PlainOpenCloseToggle.js\";\nimport PlainPopup from \"./PlainPopup.js\";\n\n/**\n * MenuButton component in the Plain reference design system\n *\n * @inherits MenuButton\n * @part {PlainMenu} menu\n * @part {PlainPopup} popup\n * @part {PlainOpenCloseToggle} popup-toggle\n * @part {PlainBorderButton} source\n * @mixes PopupToggleMixin\n */\nclass PlainMenuButton extends PopupToggleMixin(MenuButton) {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n menuPartType: PlainMenu,\n popupPartType: PlainPopup,\n popupTogglePartType: PlainOpenCloseToggle,\n sourcePartType: PlainBorderButton,\n });\n }\n\n get [template]() {\n const result = super[template];\n result.content.append(\n fragmentFrom.html`\n <style>\n [part~=\"menu\"] {\n background: window;\n border: none;\n padding: 0.5em 0;\n }\n </style>\n `\n );\n return result;\n }\n}\n\nexport default PlainMenuButton;\n","import {template} from 'elix/src/base/internal.js';\nimport {fragmentFrom} from 'elix/src/core/htmlLiterals.js';\nimport PlainButton from 'elix/src/plain/PlainButton.js';\n\n/**\n * @class SePlainBorderButton\n * Button with a border in the Plain reference design system\n *\n * @inherits PlainButton\n */\nclass SePlainBorderButton extends PlainButton {\n /**\n * @function get\n * @returns {PlainObject}\n */\n get [template] () {\n const result = super[template];\n result.content.append(\n fragmentFrom.html`\n <style>\n [part~=\"button\"] {\n background: #72797A;\n border: 1px solid #ccc;\n }\n </style>\n `\n );\n return result;\n }\n}\n\nexport default SePlainBorderButton;\n","import PlainMenuButton from 'elix/src/plain/PlainMenuButton.js';\nimport {defaultState} from 'elix/src/base/internal.js';\nimport sePlainBorderButton from './sePlainBorderButton.js';\n\n/**\n * @class ElixMenuButton\n */\nexport default class ElixMenuButton extends PlainMenuButton {\n /**\n * @function get\n * @returns {PlainObject}\n */\n get [defaultState] () {\n return Object.assign(super[defaultState], {\n sourcePartType: sePlainBorderButton\n });\n }\n}\n\ncustomElements.define('elix-menu-button', ElixMenuButton);\n","import 'elix/define/MenuItem.js';\nimport './sePlainMenuButton.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n :host {\n padding: 0px;\n }\n elix-menu-button::part(menu) {\n background-color: var(--icon-bg-color) !important;\n color: #fff;\n }\n elix-menu-button::part(popup-toggle) {\n padding: 0.25em 0.30em !important\n }\n :host ::slotted([current]){\n background-color: var(--icon-bg-color-hover) !important;\n color: #fff;\n }\n :host ::slotted(*){\n padding: 0.25em 1.25em 0.25em 0.25em !important;\n margin: 2px;\n }\n </style>\n\n <elix-menu-button id=\"MenuButton\" aria-label=\"Main Menu\">\n <slot></slot>\n </elix-menu-button>\n\n`;\n/**\n * @class SeMenu\n */\nexport class SeMenu extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n this.$menu = this._shadowRoot.querySelector('elix-menu-button');\n this.$label = this.$menu.shadowRoot.querySelector('#popupToggle').shadowRoot;\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['label', 'src'];\n }\n\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n const image = new Image();\n if (oldValue === newValue) return;\n switch (name) {\n case 'src':\n image.src = newValue;\n image.width = 24;\n image.height = 24;\n this.$label.prepend(image);\n break;\n case 'label':\n this.$label.prepend(newValue);\n break;\n default:\n // eslint-disable-next-line no-console\n console.error(`unknown attribute: ${name}`);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get label () {\n return this.getAttribute('label');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set label (value) {\n this.setAttribute('label', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get src () {\n return this.getAttribute('src');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set src (value) {\n this.setAttribute('src', value);\n }\n /**\n * @function connectedCallback\n * @returns {void}\n */\n /* connectedCallback () {\n this.$menu.addEventListener('openedchange', (e) => {\n e.preventDefault();\n const selectedItem = e?.detail?.closeResult;\n if (selectedItem !== undefined && selectedItem?.id !== undefined) {\n document.getElementById(selectedItem.id).click();\n }\n });\n } */\n}\n\n// Register\ncustomElements.define('se-menu', SeMenu);\n","import PlainMenu from \"../src/plain/PlainMenu.js\";\nexport default class ElixMenu extends PlainMenu {}\ncustomElements.define(\"elix-menu\", ElixMenu);\n","import 'elix/define/Menu.js';\nimport 'elix/define/MenuItem.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n </style>\n <elix-menu-item>\n <div style=\"display:flex; align-items: center;\">\n <img src=\"./images/logo.svg\" alt=\"icon\" style=\"display:none;\" width=\"24\"/>\n <span style=\"margin-left: 7px;\"></span>\n </div>\n </elix-menu-item>\n`;\n/**\n * @class SeMenuItem\n */\nexport class SeMenuItem extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n this.$img = this._shadowRoot.querySelector('img');\n this.$label = this._shadowRoot.querySelector('span');\n this.$menuitem = this._shadowRoot.querySelector('elix-menu-item');\n this.$svg = this.$menuitem.shadowRoot.querySelector('#checkmark');\n this.$svg.setAttribute('style', 'display: none;');\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['label', 'src'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n let shortcut = '';\n if (oldValue === newValue) return;\n switch (name) {\n case 'src':\n this.$img.setAttribute('src', newValue);\n this.$img.style.display = 'inline-block';\n break;\n case 'label':\n shortcut = this.getAttribute('shortcut');\n this.$label.textContent = `${newValue} ${shortcut ? `(${shortcut})` : ''}`;\n break;\n default:\n // eslint-disable-next-line no-console\n console.error(`unknown attribute: ${name}`);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get label () {\n return this.getAttribute('label');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set label (value) {\n this.setAttribute('label', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get src () {\n return this.getAttribute('src');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set src (value) {\n this.setAttribute('src', value);\n }\n\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n // capture shortcuts\n const shortcut = this.getAttribute('shortcut');\n if (shortcut) {\n // register the keydown event\n document.addEventListener('keydown', (e) => {\n // only track keyboard shortcuts for the body containing the SVG-Editor\n if (e.target.nodeName !== 'BODY') return;\n // normalize key\n const key = `${(e.metaKey) ? 'meta+' : ''}${(e.ctrlKey) ? 'ctrl+' : ''}${e.key.toUpperCase()}`;\n if (shortcut !== key) return;\n // launch the click event\n if (this.id) {\n document.getElementById(this.id).click();\n }\n e.preventDefault();\n });\n }\n }\n}\n\n// Register\ncustomElements.define('se-menu-item', SeMenuItem);\n","import { updateChildNodes } from \"../core/dom.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport { replace, transmute } from \"../core/template.js\";\nimport CursorAPIMixin from \"./CursorAPIMixin.js\";\nimport DelegateInputLabelMixin from \"./DelegateInputLabelMixin.js\";\nimport FormElementMixin from \"./FormElementMixin.js\";\nimport {\n applyElementData,\n defaultState,\n ids,\n render,\n rendered,\n setState,\n shadowRoot,\n state,\n stateEffects,\n template,\n} from \"./internal.js\";\nimport ItemsAPIMixin from \"./ItemsAPIMixin.js\";\nimport ItemsCursorMixin from \"./ItemsCursorMixin.js\";\nimport Menu from \"./Menu.js\";\nimport PopupButton from \"./PopupButton.js\";\nimport PopupListMixin from \"./PopupListMixin.js\";\nimport SelectedTextAPIMixin from \"./SelectedTextAPIMixin.js\";\nimport SelectedValueAPIMixin from \"./SelectedValueAPIMixin.js\";\nimport SingleSelectAPIMixin from \"./SingleSelectAPIMixin.js\";\nimport SlotItemsMixin from \"./SlotItemsMixin.js\";\n\nconst Base = CursorAPIMixin(\n DelegateInputLabelMixin(\n FormElementMixin(\n ItemsAPIMixin(\n ItemsCursorMixin(\n PopupListMixin(\n SelectedTextAPIMixin(\n SelectedValueAPIMixin(\n SingleSelectAPIMixin(SlotItemsMixin(PopupButton))\n )\n )\n )\n )\n )\n )\n )\n);\n\n/**\n * Shows a single choice made from a pop-up list of choices\n *\n * @inherits PopupButton\n * @mixes CursorAPIMixin\n * @mixes DelegateInputLabelMixin\n * @mixes FormElementMixin\n * @mixes ItemsAPIMixin\n * @mixes ItemsCursorMixin\n * @mixes PopupListMixin\n * @mixes SelectedTextAPIMixin\n * @mixes SelectedValueAPIMixin\n * @mixes SingleSelectAPIMixin\n * @mixes SlotItemsMixin\n *\n * @part {Menu} list - the list shown in the popup\n * @part down-icon - the icon shown in the toggle if the popup will open or close in the down direction\n * @part up-icon - the icon shown in the toggle if the popup will open or close in the up direction\n * @part {div} value - region inside the toggle button showing the value of the current selection\n */\nclass DropdownList extends Base {\n // Apply the data shown in the source element (an item in the list) to the\n // target element (the value part). The default implementation clones the\n // source's childNodes and sets those as as the child nodes of the target.\n [applyElementData](source, target) {\n const sourceChildNodes = source ? [...source.childNodes] : [];\n const clones = sourceChildNodes.map((node) => node.cloneNode(true));\n updateChildNodes(target, clones);\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n ariaHasPopup: \"listbox\",\n listPartType: Menu,\n selectedIndex: -1,\n selectedItem: null,\n valuePartType: \"div\",\n });\n }\n\n // @ts-ignore\n get items() {\n /** @type {any} */\n const list = this[ids] && this[ids].list;\n return list ? list.items : null;\n }\n\n /**\n * The class or tag used to define the `list` part the element\n * presenting the list items and handling navigation between them.\n *\n * @type {PartDescriptor}\n * @default List\n */\n get listPartType() {\n return this[state].listPartType;\n }\n set listPartType(listPartType) {\n this[setState]({ listPartType });\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n\n renderParts(this[shadowRoot], this[state], changed);\n\n // Update selection.\n if (changed.items || changed.selectedIndex) {\n const { items, selectedIndex } = this[state];\n const selectedItem = items ? items[selectedIndex] : null;\n\n // Apply the data from the selected item to the value part.\n this[applyElementData](selectedItem, this[ids].value);\n\n // Mark only the selected item as selected.\n if (items) {\n items.forEach((/** @type {any} */ item) => {\n if (\"selected\" in item) {\n item.selected = item === selectedItem;\n }\n });\n }\n }\n\n if (changed.opened) {\n // Reflect opened state to source for ARIA.\n const { opened } = this[state];\n this[ids].source.setAttribute(\"aria-expanded\", opened.toString());\n }\n\n if (changed.sourcePartType) {\n /** @type {any} */ const source = this[ids].source;\n // HACK — need better way to forward button role to inner button.\n if (source.inner) {\n source.inner.setAttribute(\"role\", \"none\");\n }\n }\n }\n\n [rendered](changed) {\n super[rendered](changed);\n\n // Indicate which component is the popup's list.\n if (changed.listPartType) {\n this[setState]({\n popupList: this[ids].list,\n });\n }\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects](state, changed);\n\n // When opening the popup, by default (re)select the current item.\n if (changed.opened && state.opened) {\n Object.assign(effects, {\n currentIndex: state.selectedIndex,\n });\n }\n\n // If closing, make current item the selected item.\n if (changed.opened) {\n const { closeResult, currentIndex, opened } = state;\n const closing = changed.opened && !opened;\n const canceled = closeResult && closeResult.canceled;\n if (closing && !canceled && currentIndex >= 0) {\n Object.assign(effects, {\n selectedIndex: currentIndex,\n });\n }\n }\n\n // If we get items while closed and don't have a selection, select the first\n // item.\n if (changed.items || changed.selectedIndex) {\n const { items, opened, selectedIndex } = state;\n if (!opened && selectedIndex < 0 && items && items.length > 0) {\n Object.assign(effects, {\n selectedIndex: 0,\n });\n }\n }\n\n return effects;\n }\n\n get [template]() {\n const result = super[template];\n\n // Replace the source slot with an element to show the value.\n const sourceSlot = result.content.querySelector('slot[name=\"source\"]');\n if (sourceSlot) {\n replace(\n sourceSlot,\n fragmentFrom.html` <div id=\"value\" part=\"value\"></div> `\n );\n }\n\n // Wrap default slot with a list.\n const defaultSlot = result.content.querySelector(\"slot:not([name])\");\n if (defaultSlot) {\n defaultSlot.replaceWith(fragmentFrom.html`\n <div id=\"list\" part=\"list\">\n <slot></slot>\n </div>\n `);\n }\n\n // Apply combobox semantics to the source button. Because focus moves to the\n // list itself when the popup opens, the aria-controls attribute has no\n // effect other than convincing the browser to announce the button as a\n // combobox.\n const source = result.content.querySelector('[part~=\"source\"]');\n if (source) {\n source.setAttribute(\"aria-activedescendant\", \"value\");\n source.setAttribute(\"aria-autocomplete\", \"none\");\n source.setAttribute(\"aria-controls\", \"list\");\n source.setAttribute(\"role\", \"combobox\");\n }\n\n renderParts(result.content, this[state]);\n\n result.content.append(fragmentFrom.html`\n <style>\n [part~=\"list\"] {\n max-height: 100%;\n }\n </style>\n `);\n\n return result;\n }\n\n /**\n * The class or tag used to create the `value` part - the region\n * showing the dropdown list's current value.\n *\n * @type {PartDescriptor}\n * @default 'div'\n */\n get valuePartType() {\n return this[state].valuePartType;\n }\n set valuePartType(valuePartType) {\n this[setState]({ valuePartType });\n }\n}\n\n/**\n * Render parts for the template or an instance.\n *\n * @private\n * @param {DocumentFragment} root\n * @param {PlainObject} state\n * @param {ChangedFlags} [changed]\n */\nfunction renderParts(root, state, changed) {\n if (!changed || changed.listPartType) {\n const { listPartType } = state;\n const list = root.getElementById(\"list\");\n if (list) {\n transmute(list, listPartType);\n }\n }\n if (!changed || changed.valuePartType) {\n const { valuePartType } = state;\n const value = root.getElementById(\"value\");\n if (value) {\n transmute(value, valuePartType);\n }\n }\n}\n\nexport default DropdownList;\n","import { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\";\nimport AriaRoleMixin from \"./AriaRoleMixin.js\";\nimport ComposedFocusMixin from \"./ComposedFocusMixin.js\";\nimport CursorAPIMixin from \"./CursorAPIMixin.js\";\nimport CursorInViewMixin from \"./CursorInViewMixin.js\";\nimport DirectionCursorMixin from \"./DirectionCursorMixin.js\";\nimport FocusVisibleMixin from \"./FocusVisibleMixin.js\";\nimport FormElementMixin from \"./FormElementMixin.js\";\nimport {\n defaultState,\n ids,\n render,\n scrollTarget,\n setState,\n state,\n template,\n} from \"./internal.js\";\nimport ItemsAPIMixin from \"./ItemsAPIMixin.js\";\nimport ItemsCursorMixin from \"./ItemsCursorMixin.js\";\nimport ItemsTextMixin from \"./ItemsTextMixin.js\";\nimport KeyboardDirectionMixin from \"./KeyboardDirectionMixin.js\";\nimport KeyboardMixin from \"./KeyboardMixin.js\";\nimport KeyboardPagedCursorMixin from \"./KeyboardPagedCursorMixin.js\";\nimport KeyboardPrefixCursorMixin from \"./KeyboardPrefixCursorMixin.js\";\nimport LanguageDirectionMixin from \"./LanguageDirectionMixin.js\";\nimport SelectedTextAPIMixin from \"./SelectedTextAPIMixin.js\";\nimport SelectedValueAPIMixin from \"./SelectedValueAPIMixin.js\";\nimport SingleSelectAPIMixin from \"./SingleSelectAPIMixin.js\";\nimport SlotItemsMixin from \"./SlotItemsMixin.js\";\nimport TapCursorMixin from \"./TapCursorMixin.js\";\n\nconst Base = AriaRoleMixin(\n ComposedFocusMixin(\n CursorAPIMixin(\n CursorInViewMixin(\n DirectionCursorMixin(\n FocusVisibleMixin(\n FormElementMixin(\n ItemsAPIMixin(\n ItemsCursorMixin(\n ItemsTextMixin(\n KeyboardDirectionMixin(\n KeyboardMixin(\n KeyboardPagedCursorMixin(\n KeyboardPrefixCursorMixin(\n LanguageDirectionMixin(\n SingleSelectAPIMixin(\n SelectedTextAPIMixin(\n SelectedValueAPIMixin(\n SlotItemsMixin(\n TapCursorMixin(ReactiveElement)\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n )\n);\n\n/**\n * A list of options.\n *\n * This is similar to [ListBox](ListBox) and [Menu](Menu), but designed for use\n * in [DropdownList](DropdownList) to present a menu of [Option](Option)\n * elements. Among other things, it does not assume that the selected item and\n * the current item are the same. It also avoids the special focus behavior of\n * `Menu`.\n *\n * @inherits ReactiveElement\n * @mixes AriaRoleMixin\n * @mixes ComposedFocusMixin\n * @mixes CursorInViewMixin\n * @mixes CursorAPIMixin\n * @mixes DirectionCursorMixin\n * @mixes FocusVisibleMixin\n * @mixes FormElementMixin\n * @mixes ItemsAPIMixin\n * @mixes ItemsCursorMixin\n * @mixes ItemsTextMixin\n * @mixes KeyboardDirectionMixin\n * @mixes KeyboardMixin\n * @mixes KeyboardPagedCursorMixin\n * @mixes KeyboardPrefixCursorMixin\n * @mixes LanguageDirectionMixin\n * @mixes SelectedTextAPIMixin\n * @mixes SelectedValueAPIMixin\n * @mixes SingleSelectAPIMixin\n * @mixes SlotItemsMixin\n * @mixes TapCursorMixin\n */\nclass OptionList extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n highlightCurrentItem: true,\n orientation: \"vertical\",\n role: \"listbox\",\n });\n }\n\n /**\n * Flash the current item.\n *\n * By default, this uses a heuristic to guess whether the menu was closed by a\n * keyboard or mouse (on desktop). If so, the menu flashes the current item\n * off then back on, emulating the menu item selection effect in macOS.\n * Otherwise, it does nothing.\n */\n async flashCurrentItem() {\n const keyboardActive = this[state].focusVisible;\n const probablyDesktop = matchMedia(\"(pointer: fine)\").matches;\n if (keyboardActive || probablyDesktop) {\n const flashDuration = 75; // milliseconds\n this[setState]({ highlightCurrentItem: false });\n await new Promise((resolve) => setTimeout(resolve, flashDuration));\n this[setState]({ highlightCurrentItem: true });\n await new Promise((resolve) => setTimeout(resolve, flashDuration));\n }\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n\n // Highlight the current item.\n if (changed.items || changed.currentIndex || changed.highlightCurrentItem) {\n const { currentIndex, items, highlightCurrentItem } = this[state];\n if (items) {\n items.forEach((item, index) => {\n const current = index === currentIndex;\n\n // Show visible highlight unless we're surpressing that.\n item.toggleAttribute(\"current\", highlightCurrentItem && current);\n\n // For ARIA purposes, we want to announce the current item as the\n // selected item.\n item.setAttribute(\"aria-selected\", String(current));\n });\n }\n }\n }\n\n // @ts-ignore\n get [scrollTarget]() {\n return this[ids].container;\n }\n\n get [template]() {\n const result = super[template];\n result.content.append(fragmentFrom.html`\n <style>\n :host {\n box-sizing: border-box;\n cursor: default;\n display: flex;\n overflow: hidden; /* Container element is responsible for scrolling */\n -webkit-tap-highlight-color: transparent;\n }\n\n #container {\n display: \"block\";\n flex: 1;\n -webkit-overflow-scrolling: touch; /* for momentum scrolling */\n overflow-x: \"hidden\";\n overflow-y: \"auto\";\n }\n </style>\n <div id=\"container\" role=\"none\">\n <slot id=\"slot\"></slot>\n </div>\n `);\n return result;\n }\n}\n\nexport default OptionList;\n","import { template } from \"../base/internal.js\";\nimport OptionList from \"../base/OptionList.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\n\n/**\n * OptionList component in the Plain reference design system\n *\n * @inherits OptionList\n */\nclass PlainOptionList extends OptionList {\n get [template]() {\n const result = super[template];\n\n result.content.append(fragmentFrom.html`\n <style>\n ::slotted(*),\n #slot > * {\n padding: 0.25em;\n }\n\n ::slotted([current]),\n #slot > [current] {\n background: highlight;\n color: highlighttext;\n }\n\n @media (pointer: coarse) {\n ::slotted(*),\n #slot > * {\n padding: 1em;\n }\n }\n </style>\n `);\n\n return result;\n }\n}\n\nexport default PlainOptionList;\n","import DropdownList from \"../base/DropdownList.js\";\nimport { defaultState } from \"../base/internal.js\";\nimport PopupToggleMixin from \"../base/PopupToggleMixin.js\";\nimport PlainBorderButton from \"./PlainBorderButton.js\";\nimport PlainOpenCloseToggle from \"./PlainOpenCloseToggle.js\";\nimport PlainOptionList from \"./PlainOptionList.js\";\nimport PlainPopup from \"./PlainPopup.js\";\n\n/**\n * DropdownList component in the Plain reference design system\n *\n * @inherits DropdownList\n * @part {PlainBorderButton} source\n * @part {PlainOptionList} list\n * @part {PlainOpenCloseToggle} popup-toggle\n * @part {PlainPopup} popup\n * @mixes PopupToggleMixin\n */\nclass PlainDropdownList extends PopupToggleMixin(DropdownList) {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n listPartType: PlainOptionList,\n popupPartType: PlainPopup,\n sourcePartType: PlainBorderButton,\n popupTogglePartType: PlainOpenCloseToggle,\n });\n }\n}\n\nexport default PlainDropdownList;\n","import PlainDropdownList from \"../src/plain/PlainDropdownList.js\";\nexport default class ElixDropdownList extends PlainDropdownList {}\ncustomElements.define(\"elix-dropdown-list\", ElixDropdownList);\n","import 'elix/define/DropdownList.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n<style>\nelix-dropdown-list {\n margin: 1px;\n}\n\nelix-dropdown-list:hover {\n background-color: var(--icon-bg-color-hover);\n}\n\n::part(popup-toggle) {\n display: none;\n}\n::slotted(*) {\n padding:0;\n width:100%;\n}\n</style>\n <label>Label</label>\n <elix-dropdown-list>\n <slot></slot>\n </elix-dropdown-list>\n\n`;\n/**\n * @class SeList\n */\nexport class SeList extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n this.$dropdown = this._shadowRoot.querySelector('elix-dropdown-list');\n this.$label = this._shadowRoot.querySelector('label');\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['label', 'width', 'height'];\n }\n\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'label':\n this.$label.textContent = newValue;\n break;\n case 'height':\n this.$dropdown.style.height = newValue;\n break;\n case 'width':\n this.$dropdown.style.width = newValue;\n break;\n default:\n // eslint-disable-next-line no-console\n console.error(`unknown attribute: ${name}`);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get label () {\n return this.getAttribute('label');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set label (value) {\n this.setAttribute('label', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get width () {\n return this.getAttribute('width');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set width (value) {\n this.setAttribute('width', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get height () {\n return this.getAttribute('height');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set height (value) {\n this.setAttribute('height', value);\n }\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n const currentObj = this;\n this.$dropdown.addEventListener('selectedindexchange', (e) => {\n e.preventDefault();\n if (e?.detail?.selectedIndex !== undefined) {\n const value = this.$dropdown.selectedItem.getAttribute('value');\n const closeEvent = new CustomEvent('change', {detail: {value}});\n currentObj.dispatchEvent(closeEvent);\n currentObj.value = value;\n }\n });\n }\n}\n\n// Register\ncustomElements.define('se-list', SeList);\n","import { templateFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\";\nimport AriaRoleMixin from \"./AriaRoleMixin.js\";\nimport CurrentMixin from \"./CurrentMixin.js\";\nimport DisabledMixin from \"./DisabledMixin.js\";\nimport { defaultState, template } from \"./internal.js\";\nimport SelectableMixin from \"./SelectableMixin.js\";\n\n/**\n * An option in a set of choices\n *\n * This is designed for use inside single-select components like\n * [DropdownList](DropdownList) that want to distinguish between an option being\n * the current item (the one the user is navigating with the keyboard, say) and\n * being the selected item (the one chosen by the user as the desired value for\n * a field).\n *\n * @inherits ReactiveElement\n * @mixes CurrentMixin\n * @mixes DisabledMixin\n * @mixes SelectableMixin\n */\nclass Option extends AriaRoleMixin(\n CurrentMixin(DisabledMixin(SelectableMixin(ReactiveElement)))\n) {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n role: \"option\",\n });\n }\n\n get [template]() {\n return templateFrom.html`\n <style>\n :host {\n display: block;\n }\n </style>\n <slot></slot>\n `;\n }\n}\n\nexport default Option;\n","import { template } from \"../base/internal.js\";\nimport Option from \"../base/Option.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\n\n/**\n * An option in a list in the Plain reference design system\n *\n * @inherits Option\n */\nclass PlainChoice extends Option {\n get [template]() {\n const result = super[template];\n\n // Replace default slot with icon + slot.\n const defaultSlot = result.content.querySelector(\"slot:not([name])\");\n if (defaultSlot) {\n defaultSlot.replaceWith(fragmentFrom.html`\n <svg id=\"checkmark\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"4 6 18 12\">\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"/>\n </svg>\n <slot></slot>\n `);\n }\n\n result.content.append(fragmentFrom.html`\n <style>\n :host {\n white-space: nowrap;\n }\n\n #checkmark {\n height: 1em;\n visibility: hidden;\n width: 1em;\n }\n\n :host([selected]) #checkmark {\n visibility: visible;\n }\n </style>\n\n `);\n\n return result;\n }\n}\n\nexport default PlainChoice;\n","import PlainOption from \"../src/plain/PlainOption.js\";\nexport default class ElixOption extends PlainOption {}\ncustomElements.define(\"elix-option\", ElixOption);\n","import 'elix/define/Option.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n elix-option{\n padding:0.25rem 0.125rem !important;\n background-color: var(--icon-bg-color);\n }\n elix-option:hover{\n background-color: var(--icon-bg-color-hover);\n }\n </style>\n <elix-option aria-label=\"option\">\n <slot></slot>\n </elix-option>\n`;\n/**\n * @class SeMenu\n */\nexport class SeListItem extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n this.$menuitem = this._shadowRoot.querySelector('elix-option');\n this.$svg = this.$menuitem.shadowRoot.querySelector('#checkmark');\n this.$svg.setAttribute('style', 'display: none;');\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['option'];\n }\n\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'option':\n this.$menuitem.setAttribute('option', newValue);\n break;\n default:\n // eslint-disable-next-line no-console\n console.error(`unknown attribute: ${name}`);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get option () {\n return this.getAttribute('option');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set option (value) {\n this.setAttribute('option', value);\n }\n}\n\n// Register\ncustomElements.define('se-list-item', SeListItem);\n","var isRegExp = require('../internals/is-regexp');\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~String(requireObjectCoercible(this))\n .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $ = require('../internals/export');\nvar parseInt = require('../internals/number-parse-int');\n\n// `Number.parseInt` method\n// https://tc39.es/ecma262/#sec-number.parseint\n$({ target: 'Number', stat: true, forced: Number.parseInt != parseInt }, {\n parseInt: parseInt\n});\n","var $ = require('../internals/export');\nvar parseFloat = require('../internals/number-parse-float');\n\n// `Number.parseFloat` method\n// https://tc39.es/ecma262/#sec-number.parseFloat\n$({ target: 'Number', stat: true, forced: Number.parseFloat != parseFloat }, {\n parseFloat: parseFloat\n});\n","/* eslint-disable max-len */\n/* eslint-disable no-bitwise */\n/**\n* @external Math\n*/\n/**\n* @memberof external:Math\n* @param {Float} value\n* @param {Float} precision\n* @returns {Float}\n*/\nfunction toFixedNumeric (value, precision) {\n if (precision === undefined) precision = 0;\n return Math.round(value * (10 ** precision)) / (10 ** precision);\n}\n/**\n * Whether a value is `null` or `undefined`.\n * @param {any} val\n * @returns {boolean}\n */\nconst isNullish = (val) => {\n return val === null || val === undefined;\n};\n/**\n * Controls for all the input elements for the typing in color values.\n */\nexport default class ColorValuePicker {\n /**\n * @param {external:jQuery} picker\n * @param {external:jQuery.jPicker.Color} color\n * @param {external:jQuery.fn.$.fn.jPicker} bindedHex\n * @param {Float} alphaPrecision\n */\n constructor (picker, color, bindedHex, alphaPrecision) {\n const that = this; // private properties and methods\n const inputs = picker.querySelectorAll('td.Text input');\n // input box key down - use arrows to alter color\n /**\n *\n * @param {Event} e\n * @returns {Event|false|void}\n */\n function keyDown (e) {\n if (e.target.value === '' && e.target !== hex && ((!isNullish(bindedHex) && e.target !== bindedHex) || isNullish(bindedHex))) return undefined;\n if (!validateKey(e)) return e;\n switch (e.target) {\n case red:\n switch (e.keyCode) {\n case 38:\n red.value = setValueInRange.call(that, (red.value << 0) + 1, 0, 255);\n color.val('r', red.value, e.target);\n return false;\n case 40:\n red.value = setValueInRange.call(that, (red.value << 0) - 1, 0, 255);\n color.val('r', red.value, e.target);\n return false;\n }\n break;\n case green:\n switch (e.keyCode) {\n case 38:\n green.value = setValueInRange.call(that, (green.value << 0) + 1, 0, 255);\n color.val('g', green.value, e.target);\n return false;\n case 40:\n green.value = setValueInRange.call(that, (green.value << 0) - 1, 0, 255);\n color.val('g', green.value, e.target);\n return false;\n }\n break;\n case blue:\n switch (e.keyCode) {\n case 38:\n blue.value = setValueInRange.call(that, (blue.value << 0) + 1, 0, 255);\n color.val('b', blue.value, e.target);\n return false;\n case 40:\n blue.value = setValueInRange.call(that, (blue.value << 0) - 1, 0, 255);\n color.val('b', blue.value, e.target);\n return false;\n }\n break;\n case alpha:\n switch (e.keyCode) {\n case 38:\n alpha.value = setValueInRange.call(that, Number.parseFloat(alpha.value) + 1, 0, 100);\n color.val('a', toFixedNumeric((alpha.value * 255) / 100, alphaPrecision), e.target);\n return false;\n case 40:\n alpha.value = setValueInRange.call(that, Number.parseFloat(alpha.value) - 1, 0, 100);\n color.val('a', toFixedNumeric((alpha.value * 255) / 100, alphaPrecision), e.target);\n return false;\n }\n break;\n case hue:\n switch (e.keyCode) {\n case 38:\n hue.value = setValueInRange.call(that, (hue.value << 0) + 1, 0, 360);\n color.val('h', hue.value, e.target);\n return false;\n case 40:\n hue.value =setValueInRange.call(that, (hue.value << 0) - 1, 0, 360);\n color.val('h', hue.value, e.target);\n return false;\n }\n break;\n case saturation:\n switch (e.keyCode) {\n case 38:\n saturation.value = setValueInRange.call(that, (saturation.value << 0) + 1, 0, 100);\n color.val('s', saturation.value, e.target);\n return false;\n case 40:\n saturation.value = setValueInRange.call(that, (saturation.value << 0) - 1, 0, 100);\n color.val('s', saturation.value, e.target);\n return false;\n }\n break;\n case value:\n switch (e.keyCode) {\n case 38:\n value.value = setValueInRange.call(that, (value.value << 0) + 1, 0, 100);\n color.val('v', value.value, e.target);\n return false;\n case 40:\n value.value = setValueInRange.call(that, (value.value << 0) - 1, 0, 100);\n color.val('v', value.value, e.target);\n return false;\n }\n break;\n }\n return undefined;\n }\n // input box key up - validate value and set color\n /**\n * @param {Event} e\n * @returns {Event|void}\n * @todo Why is this returning an event?\n */\n function keyUp (e) {\n if (e.target.value === '' && e.target !== hex &&\n ((!isNullish(bindedHex) && e.target !== bindedHex) ||\n isNullish(bindedHex))) return undefined;\n if (!validateKey(e)) return e;\n switch (e.target) {\n case red:\n red.value = setValueInRange.call(that, red.value, 0, 255);\n color.val('r', red.value, e.target);\n break;\n case green:\n green.value = setValueInRange.call(that, green.value, 0, 255);\n color.val('g', green.value, e.target);\n break;\n case blue:\n blue.value = setValueInRange.call(that, blue.value, 0, 255);\n color.val('b', blue.value, e.target);\n break;\n case alpha:\n alpha.value = setValueInRange.call(that, alpha.value, 0, 100);\n color.val('a', toFixedNumeric((alpha.value * 255) / 100, alphaPrecision), e.target);\n break;\n case hue:\n hue.value = setValueInRange.call(that, hue.value, 0, 360);\n color.val('h', hue.value, e.target);\n break;\n case saturation:\n saturation.value = setValueInRange.call(that, saturation.value, 0, 100);\n color.val('s', saturation.value, e.target);\n break;\n case value:\n value.value = setValueInRange.call(that, value.value, 0, 100);\n color.val('v', value.value, e.target);\n break;\n case hex:\n hex.value = hex.value.replace(/[^a-fA-F\\d]/g, '').toLowerCase().substring(0, 6);\n bindedHex && bindedHex.val(hex.value);\n color.val('hex', hex.value !== '' ? hex.value : null, e.target);\n break;\n case bindedHex:\n bindedHex.value = bindedHex.value.replace(/[^a-fA-F\\d]/g, '').toLowerCase().substring(0, 6);\n hex.val(bindedHex.value);\n color.val('hex', bindedHex.value !== '' ? bindedHex.value : null, e.target);\n break;\n case ahex:\n ahex.value = ahex.value.replace(/[^a-fA-F\\d]/g, '').toLowerCase().substring(0, 2);\n color.val('a', !isNullish(ahex.value) ? Number.parseInt(ahex.value, 16) : null, e.target);\n break;\n }\n return undefined;\n }\n // input box blur - reset to original if value empty\n /**\n * @param {Event} e\n * @returns {void}\n */\n function blur (e) {\n if (!isNullish(color.value)) {\n switch (e.target) {\n case red:\n color.value = 'r';\n red.value = color.value;\n break;\n case green:\n color.value = 'g';\n green.value = color.value;\n break;\n case blue:\n color.value = 'b';\n blue.value = color.value;\n break;\n case alpha:\n color.value = 'a';\n alpha.value = toFixedNumeric((color.value * 100) / 255, alphaPrecision);\n break;\n case hue:\n color.value = 'h';\n hue.value = color.value;\n break;\n case saturation:\n color.value = 's';\n saturation.value = color.value;\n break;\n case value:\n color.value = 'v';\n value.value = color.value;\n break;\n case hex:\n case bindedHex:\n color.value = 'hex';\n hex.value = color.value;\n bindedHex.value = color.value;\n break;\n case ahex:\n color.value = 'ahex';\n ahex.value = color.value.substring(6); \n break;\n }\n }\n }\n /**\n * @param {Event} e\n * @returns {boolean}\n */\n function validateKey (e) {\n switch (e.keyCode) {\n case 9:\n case 16:\n case 29:\n case 37:\n case 39:\n return false;\n case 'c'.charCodeAt():\n case 'v'.charCodeAt():\n if (e.ctrlKey) return false;\n }\n return true;\n }\n\n /**\n * Constrain value within range.\n * @param {Float|string} value\n * @param {Float} min\n * @param {Float} max\n * @returns {Float|string} Returns a number or numeric string\n */\n function setValueInRange (value, min, max) {\n if (value === '' || isNaN(value)) return min;\n if (value > max) return max;\n if (value < min) return min;\n return value;\n }\n /**\n * @param {external:jQuery} ui\n * @param {Element} context\n * @returns {void}\n */\n function colorChanged (ui, context) {\n const all = ui.val('all');\n if (context !== red) red.value = (!isNullish(all) ? all.r : '');\n if (context !== green) green.value = (!isNullish(all) ? all.g : '');\n if (context !== blue) blue.value = (!isNullish(all) ? all.b : '');\n if (alpha && context !== alpha) alpha.value = (!isNullish(all) ? toFixedNumeric((all.a * 100) / 255, alphaPrecision) : '');\n if (context !== hue) hue.value = (!isNullish(all) ? all.h : '');\n if (context !== saturation) saturation.value = (!isNullish(all) ? all.s : '');\n if (context !== value) value.value = (!isNullish(all) ? all.v : '');\n if (context !== hex && ((bindedHex && context !== bindedHex) || !bindedHex)) hex.value = (!isNullish(all) ? all.hex : '');\n if (bindedHex && context !== bindedHex && context !== hex) bindedHex.value = (!isNullish(all) ? all.hex : '');\n if (ahex && context !== ahex) ahex.value = (!isNullish(all) ? all.ahex.substring(6) : '');\n }\n /**\n * Unbind all events and null objects.\n * @returns {void}\n */\n function destroy () {\n red.removeEventListener('keyup', keyUp);\n green.removeEventListener('keyup', keyUp);\n blue.removeEventListener('keyup', keyUp);\n hue.removeEventListener('keyup', keyUp);\n saturation.removeEventListener('keyup', keyUp);\n value.removeEventListener('keyup', keyUp);\n hex.removeEventListener('keyup', keyUp);\n\n red.removeEventListener('blur', blur);\n green.removeEventListener('blur', blur);\n blue.removeEventListener('blur', blur);\n hue.removeEventListener('blur', blur);\n saturation.removeEventListener('blur', blur);\n value.removeEventListener('blur', blur);\n hex.removeEventListener('blur', blur);\n\n red.removeEventListener('keydown', keyDown);\n green.removeEventListener('keydown', keyDown);\n blue.removeEventListener('keydown', keyDown);\n hue.removeEventListener('keydown', keyDown);\n saturation.removeEventListener('keydown', keyDown);\n value.removeEventListener('keydown', keyDown);\n\n if (alpha !== null) {\n alpha.removeEventListener('keyup', keyUp);\n alpha.removeEventListener('blur', blur);\n alpha.removeEventListener('keydown', keyDown);\n }\n if (ahex !== null) {\n ahex.removeEventListener('keyup', keyUp);\n ahex.removeEventListener('blur', blur);\n }\n if (bindedHex !== null) {\n bindedHex.removeEventListener('keyup', keyUp);\n bindedHex.removeEventListener('blur', blur);\n }\n color.unbind(colorChanged);\n red = null;\n green = null;\n blue = null;\n alpha = null;\n hue = null;\n saturation = null;\n value = null;\n hex = null;\n ahex = null;\n }\n let\n red = inputs[3],\n green = inputs[4],\n blue = inputs[5],\n alpha = inputs.length > 7 ? inputs[6] : null,\n hue = inputs[0],\n saturation = inputs[1],\n value = inputs[2],\n hex = inputs[(inputs.length > 7) ? 7 : 6],\n ahex = inputs.length > 7 ? inputs[8] : null;\n Object.assign(that, {destroy});\n red.addEventListener('keyup', keyUp);\n green.addEventListener('keyup', keyUp);\n blue.addEventListener('keyup', keyUp);\n hue.addEventListener('keyup', keyUp);\n saturation.addEventListener('keyup', keyUp);\n value.addEventListener('keyup', keyUp);\n hex.addEventListener('keyup', keyUp);\n\n red.addEventListener('blur', blur);\n green.addEventListener('blur', blur);\n blue.addEventListener('blur', blur);\n hue.addEventListener('blur', blur);\n saturation.addEventListener('blur', blur);\n value.addEventListener('blur', blur);\n hex.addEventListener('blur', blur);\n\n red.addEventListener('keydown', keyDown);\n green.addEventListener('keydown', keyDown);\n blue.addEventListener('keydown', keyDown);\n hue.addEventListener('keydown', keyDown);\n saturation.addEventListener('keydown', keyDown);\n value.addEventListener('keydown', keyDown);\n\n if (alpha !== null) {\n alpha.addEventListener('keyup', keyUp);\n alpha.addEventListener('blur', blur);\n alpha.addEventListener('keydown', keyDown);\n }\n if (ahex !== null) {\n ahex.addEventListener('keyup', keyUp);\n ahex.addEventListener('blur', blur);\n }\n if (bindedHex !== null) {\n bindedHex.addEventListener('keyup', keyUp);\n bindedHex.addEventListener('blur', blur);\n }\n color.bind(colorChanged);\n }\n}\n","/**\n * @param {any} obj\n * @returns {any}\n */\nexport function findPos (obj) {\n let curleft = 0;\n let curtop = 0;\n if (obj.offsetParent) {\n do {\n curleft += obj.offsetLeft;\n curtop += obj.offsetTop;\n } while (obj = obj.offsetParent);\n return {left: curleft, top: curtop};\n }\n return {left: curleft, top: curtop};\n}\n\nexport function isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item));\n}\n\nexport function mergeDeep(target, source) {\n let output = Object.assign({}, target);\n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach(key => {\n if (isObject(source[key])) {\n if (!(key in target))\n Object.assign(output, { [key]: source[key] });\n else\n output[key] = mergeDeep(target[key], source[key]);\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n return output;\n}","/* eslint-disable no-bitwise */\nimport {findPos} from './Util.js';\n/**\n * Whether a value is `null` or `undefined`.\n * @param {any} val\n * @returns {boolean}\n */\nconst isNullish = (val) => {\n return val === null || val === undefined;\n};\n/**\n * Encapsulate slider functionality for the ColorMap and ColorBar -\n * could be useful to use a jQuery UI draggable for this with certain extensions.\n * @memberof module:jPicker\n */\nexport default class Slider {\n /**\n * @param {external:jQuery} bar\n * @param {module:jPicker.SliderOptions} options\n */\n constructor (bar, options) {\n const that = this;\n /**\n * Fire events on the supplied `context`\n * @param {module:jPicker.JPickerInit} context\n * @returns {void}\n */\n function fireChangeEvents (context) {\n changeEvents.forEach((changeEvent) => {\n changeEvent.call(that, that, context);\n });\n }\n\n /**\n * Bind the mousedown to the bar not the arrow for quick snapping to the clicked location.\n * @param {external:jQuery.Event} e\n * @returns {void}\n */\n function mouseDown (e) {\n const off = findPos(bar);\n offset = {l: off.left | 0, t: off.top | 0};\n clearTimeout(timeout);\n // using setTimeout for visual updates - once the style is updated the browser will re-render internally allowing the next Javascript to run\n timeout = setTimeout(function () {\n setValuesFromMousePosition.call(that, e);\n }, 0);\n // Bind mousemove and mouseup event to the document so it responds when dragged of of the bar - we will unbind these when on mouseup to save processing\n document.addEventListener('mousemove', mouseMove);\n document.addEventListener('mouseup', mouseUp);\n e.preventDefault(); // don't try to select anything or drag the image to the desktop\n }\n /**\n * Set the values as the mouse moves.\n * @param {external:jQuery.Event} e\n * @returns {false}\n */\n function mouseMove (e) {\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n setValuesFromMousePosition.call(that, e);\n }, 0);\n e.stopPropagation();\n e.preventDefault();\n return false;\n }\n /**\n * Unbind the document events - they aren't needed when not dragging.\n * @param {external:jQuery.Event} e\n * @returns {false}\n */\n function mouseUp (e) {\n document.removeEventListener('mousemove', mouseMove);\n document.removeEventListener('mouseup', mouseUp);\n e.stopPropagation();\n e.preventDefault();\n return false;\n }\n\n /**\n * Calculate mouse position and set value within the current range.\n * @param {Event} e\n * @returns {void}\n */\n function setValuesFromMousePosition (e) {\n const barW = bar.w, // local copies for YUI compressor\n barH = bar.h;\n let locX = e.pageX - offset.l,\n locY = e.pageY - offset.t;\n // keep the arrow within the bounds of the bar\n if (locX < 0) locX = 0;\n else if (locX > barW) locX = barW;\n if (locY < 0) locY = 0;\n else if (locY > barH) locY = barH;\n val.call(that, 'xy', {\n x: ((locX / barW) * rangeX) + minX,\n y: ((locY / barH) * rangeY) + minY\n });\n }\n /**\n *\n * @returns {void}\n */\n function draw () {\n const\n barW = bar.w,\n barH = bar.h,\n arrowW = arrow.w,\n arrowH = arrow.h;\n let arrowOffsetX = 0,\n arrowOffsetY = 0;\n setTimeout(function () {\n if (rangeX > 0) { // range is greater than zero\n // constrain to bounds\n if (x === maxX) arrowOffsetX = barW;\n else arrowOffsetX = ((x / rangeX) * barW) | 0;\n }\n if (rangeY > 0) { // range is greater than zero\n // constrain to bounds\n if (y === maxY) arrowOffsetY = barH;\n else arrowOffsetY = ((y / rangeY) * barH) | 0;\n }\n // if arrow width is greater than bar width, center arrow and prevent horizontal dragging\n if (arrowW >= barW) arrowOffsetX = (barW >> 1) - (arrowW >> 1); // number >> 1 - superfast bitwise divide by two and truncate (move bits over one bit discarding lowest)\n else arrowOffsetX -= arrowW >> 1;\n // if arrow height is greater than bar height, center arrow and prevent vertical dragging\n if (arrowH >= barH) arrowOffsetY = (barH >> 1) - (arrowH >> 1);\n else arrowOffsetY -= arrowH >> 1;\n // set the arrow position based on these offsets\n arrow.style.left = arrowOffsetX + 'px';\n arrow.style.top = arrowOffsetY + 'px';\n });\n }\n\n /**\n * Get or set a value.\n * @param {?(\"xy\"|\"x\"|\"y\")} name\n * @param {module:math.XYObject} value\n * @param {module:jPicker.Slider} context\n * @returns {module:math.XYObject|Float|void}\n */\n function val (name, value, context) {\n const set = value !== undefined;\n if (!set) {\n if (isNullish(name)) name = 'xy';\n switch (name.toLowerCase()) {\n case 'x': return x;\n case 'y': return y;\n case 'xy':\n default: return {x, y};\n }\n }\n if (!isNullish(context) && context === that) return undefined;\n let changed = false;\n\n let newX, newY;\n if (isNullish(name)) name = 'xy';\n switch (name.toLowerCase()) {\n case 'x':\n newX = (value && ((value.x && value.x | 0) || value | 0)) || 0;\n break;\n case 'y':\n newY = (value && ((value.y && value.y | 0) || value | 0)) || 0;\n break;\n case 'xy':\n default:\n newX = (value && value.x && value.x | 0) || 0;\n newY = (value && value.y && value.y | 0) || 0;\n break;\n }\n if (!isNullish(newX)) {\n if (newX < minX) newX = minX;\n else if (newX > maxX) newX = maxX;\n if (x !== newX) {\n x = newX;\n changed = true;\n }\n }\n if (!isNullish(newY)) {\n if (newY < minY) newY = minY;\n else if (newY > maxY) newY = maxY;\n if (y !== newY) {\n y = newY;\n changed = true;\n }\n }\n changed && fireChangeEvents.call(that, context || that);\n return undefined;\n }\n\n /**\n * @typedef {PlainObject} module:jPicker.MinMaxRangeX\n * @property {Float} minX\n * @property {Float} maxX\n * @property {Float} rangeX\n */\n /**\n * @typedef {PlainObject} module:jPicker.MinMaxRangeY\n * @property {Float} minY\n * @property {Float} maxY\n * @property {Float} rangeY\n */\n /**\n * @typedef {module:jPicker.MinMaxRangeY|module:jPicker.MinMaxRangeX} module:jPicker.MinMaxRangeXY\n */\n\n /**\n *\n * @param {\"minx\"|\"maxx\"|\"rangex\"|\"miny\"|\"maxy\"|\"rangey\"|\"all\"} name\n * @param {module:jPicker.MinMaxRangeXY} value\n * @returns {module:jPicker.MinMaxRangeXY|module:jPicker.MinMaxRangeX|module:jPicker.MinMaxRangeY|void}\n */\n function range (name, value) {\n const set = value !== undefined;\n if (!set) {\n if (isNullish(name)) name = 'all';\n switch (name.toLowerCase()) {\n case 'minx': return minX;\n case 'maxx': return maxX;\n case 'rangex': return {minX, maxX, rangeX};\n case 'miny': return minY;\n case 'maxy': return maxY;\n case 'rangey': return {minY, maxY, rangeY};\n case 'all':\n default: return {minX, maxX, rangeX, minY, maxY, rangeY};\n }\n }\n let // changed = false,\n newMinX,\n newMaxX,\n newMinY,\n newMaxY;\n if (isNullish(name)) name = 'all';\n switch (name.toLowerCase()) {\n case 'minx':\n newMinX = (value && ((value.minX && value.minX | 0) || value | 0)) || 0;\n break;\n case 'maxx':\n newMaxX = (value && ((value.maxX && value.maxX | 0) || value | 0)) || 0;\n break;\n case 'rangex':\n newMinX = (value && value.minX && value.minX | 0) || 0;\n newMaxX = (value && value.maxX && value.maxX | 0) || 0;\n break;\n case 'miny':\n newMinY = (value && ((value.minY && value.minY | 0) || value | 0)) || 0;\n break;\n case 'maxy':\n newMaxY = (value && ((value.maxY && value.maxY | 0) || value | 0)) || 0;\n break;\n case 'rangey':\n newMinY = (value && value.minY && value.minY | 0) || 0;\n newMaxY = (value && value.maxY && value.maxY | 0) || 0;\n break;\n case 'all':\n default:\n newMinX = (value && value.minX && value.minX | 0) || 0;\n newMaxX = (value && value.maxX && value.maxX | 0) || 0;\n newMinY = (value && value.minY && value.minY | 0) || 0;\n newMaxY = (value && value.maxY && value.maxY | 0) || 0;\n break;\n }\n\n if (!isNullish(newMinX) && minX !== newMinX) {\n minX = newMinX;\n rangeX = maxX - minX;\n }\n if (!isNullish(newMaxX) && maxX !== newMaxX) {\n maxX = newMaxX;\n rangeX = maxX - minX;\n }\n if (!isNullish(newMinY) && minY !== newMinY) {\n minY = newMinY;\n rangeY = maxY - minY;\n }\n if (!isNullish(newMaxY) && maxY !== newMaxY) {\n maxY = newMaxY;\n rangeY = maxY - minY;\n }\n return undefined;\n }\n /**\n * @param {GenericCallback} callback\n * @returns {void}\n */\n function bind (callback) { // eslint-disable-line promise/prefer-await-to-callbacks\n if (typeof callback === 'function') changeEvents.push(callback);\n }\n /**\n * @param {GenericCallback} callback\n * @returns {void}\n */\n function unbind (callback) { // eslint-disable-line promise/prefer-await-to-callbacks\n if (typeof callback !== 'function') return;\n let i;\n while ((i = changeEvents.includes(callback))) changeEvents.splice(i, 1);\n }\n /**\n *\n * @returns {void}\n */\n function destroy () {\n // unbind all possible events and null objects\n document.removeEventListener('mousemove', mouseMove);\n document.removeEventListener('mouseup', mouseUp);\n bar.removeEventListener('mousedown', mouseDown);\n bar = null;\n arrow = null;\n changeEvents = null;\n }\n let offset,\n timeout,\n x = 0,\n y = 0,\n minX = 0,\n maxX = 100,\n rangeX = 100,\n minY = 0,\n maxY = 100,\n rangeY = 100,\n arrow = bar.querySelector('img'), // the arrow image to drag\n changeEvents = [];\n Object.assign(that, {\n val,\n range,\n bind,\n unbind,\n destroy\n });\n // initialize this control\n arrow.src = options.arrow && options.arrow.image;\n arrow.w = (options.arrow && options.arrow.width) || arrow.width();\n arrow.h = (options.arrow && options.arrow.height) || arrow.height();\n bar.w = (options.map && options.map.width) || bar.width();\n bar.h = (options.map && options.map.height) || bar.height();\n bar.addEventListener('mousedown', mouseDown);\n bind.call(that, draw);\n }\n}\n","/* eslint-disable no-unsanitized/property */\n/**\n * @file jPicker (Adapted from version 1.1.6)\n *\n * jQuery Plugin for Photoshop style color picker\n *\n * @module jPicker\n * @copyright (c) 2010 Christopher T. Tillman\n * Digital Magic Productions, Inc. ({@link http://www.digitalmagicpro.com/})\n * FREE to use, alter, copy, sell, and especially ENHANCE\n * @license MIT\n *\n * Painstakingly ported from John Dyers' excellent work on his own color picker based on the Prototype framework.\n *\n * John Dyers' website: {@link http://johndyer.name}\n * Color Picker page: {@link http://johndyer.name/photoshop-like-javascript-color-picker/}\n */\n/* eslint-disable no-bitwise */\n/* eslint-disable max-len */\nimport ColorValuePicker from './ColorValuePicker.js';\nimport Slider from './Slider.js';\nimport {findPos,mergeDeep} from './Util.js';\n\n/**\n* @external Math\n*/\n/**\n* @memberof external:Math\n* @param {Float} value\n* @param {Float} precision\n* @returns {Float}\n*/\nfunction toFixedNumeric (value, precision) {\n if (precision === undefined) precision = 0;\n return Math.round(value * (10 ** precision)) / (10 ** precision);\n}\n\n/**\n * Whether a value is `null` or `undefined`.\n * @param {any} val\n * @returns {boolean}\n */\nconst isNullish = (val) => {\n return val === null || val === undefined;\n};\n\n/**\n* @function module:jPicker.jPicker\n* @param {external:jQuery} $ The jQuery object, {@link external:jQuery.fn.$.fn.jPicker}, {@link external:jQuery.fn.$.fn.jPicker.defaults})\n* @returns {external:jQuery}\n*/\n// const jPicker = function ($) {\n/**\n* @typedef {PlainObject} module:jPicker.SliderOptions\n* @property {external:jQuery|PlainObject} arrow\n* @property {string} arrow.image Not in use?\n* @property {Float} arrow.width\n* @property {Float} arrow.height\n* @property {PlainObject} map\n* @property {Float} map.width\n* @property {Float} map.height\n*/\n\n/**\n* @typedef {PlainObject} module:jPicker.JPickerInit\n* @property {Integer} [a]\n* @property {Integer} [b]\n* @property {Integer} [g]\n* @property {Integer} [h]\n* @property {Integer} [r]\n* @property {Integer} [s]\n* @property {Integer} [v]\n* @property {string} [hex]\n* @property {string} [ahex]\n*/\n/**\n* @namespace {PlainObject} jPicker\n* @memberof external:jQuery\n*/\nexport const jPicker = /** @lends external:jQuery.jPicker */ {\n /**\n * Array holding references to each active instance of the jPicker control.\n * @type {external:jQuery.fn.$.fn.jPicker[]}\n */\n List: [],\n /**\n * Color object - we will be able to assign by any color space type or\n * retrieve any color space info.\n * We want this public so we can optionally assign new color objects to\n * initial values using inputs other than a string hex value (also supported)\n * Note: JSDoc didn't document when expressed here as an ES6 Class.\n * @namespace\n * @class\n * @memberof external:jQuery.jPicker\n * @param {module:jPicker.JPickerInit} init\n * @returns {external:jQuery.jPicker.Color}\n */\n Color: function (init) { // eslint-disable-line object-shorthand\n const that = this;\n /**\n *\n * @param {module:jPicker.Slider} context\n * @returns {void}\n */\n function fireChangeEvents (context) {\n for (let i = 0; i < changeEvents.length; i++) changeEvents[i].call(that, that, context);\n }\n\n /**\n * @param {string|\"ahex\"|\"hex\"|\"all\"|\"\"|null|void} name String composed of letters \"r\", \"g\", \"b\", \"a\", \"h\", \"s\", and/or \"v\"\n * @param {module:jPicker.RGBA|module:jPicker.JPickerInit|string} [value]\n * @param {external:jQuery.jPicker.Color} context\n * @returns {module:jPicker.JPickerInit|string|null|void}\n */\n function val (name, value, context) {\n // Kind of ugly\n const set = Boolean(value);\n if (set && value.ahex === '') value.ahex = '00000000';\n if (!set) {\n let ret;\n if (isNullish(name) || name === '') name = 'all';\n if (isNullish(r)) return null;\n switch (name.toLowerCase()) {\n case 'ahex': return ColorMethods.rgbaToHex({r, g, b, a});\n case 'hex': return val('ahex').substring(0, 6);\n case 'all': return {\n r, g, b, a, h, s, v,\n hex: val.call(that, 'hex'),\n ahex: val.call(that, 'ahex')\n };\n default: {\n ret = {};\n const nameLength = name.length;\n [...name].forEach((ch) => {\n switch (ch) {\n case 'r':\n if (nameLength === 1) ret = r;\n else ret.r = r;\n break;\n case 'g':\n if (nameLength === 1) ret = g;\n else ret.g = g;\n break;\n case 'b':\n if (nameLength === 1) ret = b;\n else ret.b = b;\n break;\n case 'a':\n if (nameLength === 1) ret = a;\n else ret.a = a;\n break;\n case 'h':\n if (nameLength === 1) ret = h;\n else ret.h = h;\n break;\n case 's':\n if (nameLength === 1) ret = s;\n else ret.s = s;\n break;\n case 'v':\n if (nameLength === 1) ret = v;\n else ret.v = v;\n break;\n }\n });\n }\n }\n return typeof ret === 'object' && !Object.keys(ret).length\n ? val.call(that, 'all')\n : ret;\n }\n if (!isNullish(context) && context === that) return undefined;\n if (isNullish(name)) name = '';\n\n let changed = false;\n if (isNullish(value)) {\n if (!isNullish(r)) {\n r = null;\n changed = true;\n }\n if (!isNullish(g)) {\n g = null;\n changed = true;\n }\n if (!isNullish(b)) {\n b = null;\n changed = true;\n }\n if (!isNullish(a)) {\n a = null;\n changed = true;\n }\n if (!isNullish(h)) {\n h = null;\n changed = true;\n }\n if (!isNullish(s)) {\n s = null;\n changed = true;\n }\n if (!isNullish(v)) {\n v = null;\n changed = true;\n }\n changed && fireChangeEvents.call(that, context || that);\n return undefined;\n }\n switch (name.toLowerCase()) {\n case 'ahex':\n case 'hex': {\n const ret = ColorMethods.hexToRgba((value && (value.ahex || value.hex)) || value || 'none');\n val.call(that, 'rgba', {\n r: ret.r,\n g: ret.g,\n b: ret.b,\n a: name === 'ahex'\n ? ret.a\n : !isNullish(a)\n ? a\n : 255\n }, context);\n break;\n } default: {\n if (value && (!isNullish(value.ahex) || !isNullish(value.hex))) {\n val.call(that, 'ahex', value.ahex || value.hex || '00000000', context);\n return undefined;\n }\n const newV = {};\n let rgb = false, hsv = false;\n if (value.r !== undefined && !name.includes('r')) name += 'r';\n if (value.g !== undefined && !name.includes('g')) name += 'g';\n if (value.b !== undefined && !name.includes('b')) name += 'b';\n if (value.a !== undefined && !name.includes('a')) name += 'a';\n if (value.h !== undefined && !name.includes('h')) name += 'h';\n if (value.s !== undefined && !name.includes('s')) name += 's';\n if (value.v !== undefined && !name.includes('v')) name += 'v';\n [...name].forEach((ch) => {\n switch (ch) {\n case 'r':\n if (hsv) return;\n rgb = true;\n newV.r = (value.r && value.r | 0) || (value | 0) || 0;\n if (newV.r < 0) newV.r = 0;\n else if (newV.r > 255) newV.r = 255;\n if (r !== newV.r) {\n ({r} = newV);\n changed = true;\n }\n break;\n case 'g':\n if (hsv) return;\n rgb = true;\n newV.g = (value && value.g && value.g | 0) || (value && value | 0) || 0;\n if (newV.g < 0) newV.g = 0;\n else if (newV.g > 255) newV.g = 255;\n if (g !== newV.g) {\n ({g} = newV);\n changed = true;\n }\n break;\n case 'b':\n if (hsv) return;\n rgb = true;\n newV.b = (value && value.b && value.b | 0) || (value && value | 0) || 0;\n if (newV.b < 0) newV.b = 0;\n else if (newV.b > 255) newV.b = 255;\n if (b !== newV.b) {\n ({b} = newV);\n changed = true;\n }\n break;\n case 'a':\n newV.a = value && !isNullish(value.a) ? value.a | 0 : value | 0;\n if (newV.a < 0) newV.a = 0;\n else if (newV.a > 255) newV.a = 255;\n if (a !== newV.a) {\n ({a} = newV);\n changed = true;\n }\n break;\n case 'h':\n if (rgb) return;\n hsv = true;\n newV.h = (value && value.h && value.h | 0) || (value && value | 0) || 0;\n if (newV.h < 0) newV.h = 0;\n else if (newV.h > 360) newV.h = 360;\n if (h !== newV.h) {\n ({h} = newV);\n changed = true;\n }\n break;\n case 's':\n if (rgb) return;\n hsv = true;\n newV.s = !isNullish(value.s) ? value.s | 0 : value | 0;\n if (newV.s < 0) newV.s = 0;\n else if (newV.s > 100) newV.s = 100;\n if (s !== newV.s) {\n ({s} = newV);\n changed = true;\n }\n break;\n case 'v':\n if (rgb) return;\n hsv = true;\n newV.v = !isNullish(value.v) ? value.v | 0 : value | 0;\n if (newV.v < 0) newV.v = 0;\n else if (newV.v > 100) newV.v = 100;\n if (v !== newV.v) {\n ({v} = newV);\n changed = true;\n }\n break;\n }\n });\n if (changed) {\n if (rgb) {\n r = r || 0;\n g = g || 0;\n b = b || 0;\n const ret = ColorMethods.rgbToHsv({r, g, b});\n ({h, s, v} = ret);\n } else if (hsv) {\n h = h || 0;\n s = !isNullish(s) ? s : 100;\n v = !isNullish(v) ? v : 100;\n const ret = ColorMethods.hsvToRgb({h, s, v});\n ({r, g, b} = ret);\n }\n a = !isNullish(a) ? a : 255;\n fireChangeEvents.call(that, context || that);\n }\n break;\n }\n }\n return undefined;\n }\n /**\n * @param {GenericCallback} callback\n * @returns {void}\n */\n function bind (callback) {\n if (typeof callback === 'function') changeEvents.push(callback);\n }\n /**\n * @param {GenericCallback} callback\n * @returns {void}\n */\n function unbind (callback) {\n if (typeof callback !== 'function') return;\n let i;\n while ((i = changeEvents.includes(callback))) {\n changeEvents.splice(i, 1);\n }\n }\n /**\n * Unset `changeEvents`\n * @returns {void}\n */\n function destroy () {\n changeEvents = null;\n }\n let r, g, b, a, h, s, v, changeEvents = [];\n Object.assign(that, {\n // public properties and methods\n val,\n bind,\n unbind,\n destroy\n });\n if (init) {\n if (!isNullish(init.ahex)) {\n val('ahex', init);\n } else if (!isNullish(init.hex)) {\n val(\n (!isNullish(init.a) ? 'a' : '') + 'hex',\n !isNullish(init.a)\n ? {ahex: init.hex + ColorMethods.intToHex(init.a)}\n : init\n );\n } else if (!isNullish(init.r) && !isNullish(init.g) && !isNullish(init.b)) {\n val('rgb' + (!isNullish(init.a) ? 'a' : ''), init);\n } else if (!isNullish(init.h) && !isNullish(init.s) && !isNullish(init.v)) {\n val('hsv' + (!isNullish(init.a) ? 'a' : ''), init);\n }\n }\n },\n /**\n * Color conversion methods - make public to give use to external scripts.\n * @namespace\n */\n ColorMethods: {\n /**\n * @typedef {PlainObject} module:jPicker.RGBA\n * @property {Integer} r\n * @property {Integer} g\n * @property {Integer} b\n * @property {Integer} a\n */\n /**\n * @typedef {PlainObject} module:jPicker.RGB\n * @property {Integer} r\n * @property {Integer} g\n * @property {Integer} b\n */\n /**\n * @param {string} hex\n * @returns {module:jPicker.RGBA}\n */\n hexToRgba (hex) {\n if (hex === '' || hex === 'none') return {r: null, g: null, b: null, a: null};\n hex = this.validateHex(hex);\n let r = '00', g = '00', b = '00', a = '255';\n if (hex.length === 6) hex += 'ff';\n if (hex.length > 6) {\n r = hex.substring(0, 2);\n g = hex.substring(2, 4);\n b = hex.substring(4, 6);\n a = hex.substring(6, hex.length);\n } else {\n if (hex.length > 4) {\n r = hex.substring(4, hex.length);\n hex = hex.substring(0, 4);\n }\n if (hex.length > 2) {\n g = hex.substring(2, hex.length);\n hex = hex.substring(0, 2);\n }\n if (hex.length > 0) b = hex.substring(0, hex.length);\n }\n return {\n r: this.hexToInt(r), g: this.hexToInt(g), b: this.hexToInt(b), a: this.hexToInt(a)\n };\n },\n /**\n * @param {string} hex\n * @returns {string}\n */\n validateHex (hex) {\n // if (typeof hex === 'object') return '';\n hex = hex.toLowerCase().replace(/[^a-f\\d]/g, '');\n if (hex.length > 8) hex = hex.substring(0, 8);\n return hex;\n },\n /**\n * @param {module:jPicker.RGBA} rgba\n * @returns {string}\n */\n rgbaToHex (rgba) {\n return this.intToHex(rgba.r) + this.intToHex(rgba.g) + this.intToHex(rgba.b) + this.intToHex(rgba.a);\n },\n /**\n * @param {Integer} dec\n * @returns {string}\n */\n intToHex (dec) {\n let result = (dec | 0).toString(16);\n if (result.length === 1) result = ('0' + result);\n return result.toLowerCase();\n },\n /**\n * @param {string} hex\n * @returns {Integer}\n */\n hexToInt (hex) {\n return Number.parseInt(hex, 16);\n },\n /**\n * @typedef {PlainObject} module:jPicker.HSV\n * @property {Integer} h\n * @property {Integer} s\n * @property {Integer} v\n */\n /**\n * @param {module:jPicker.RGB} rgb\n * @returns {module:jPicker.HSV}\n */\n rgbToHsv (rgb) {\n const r = rgb.r / 255, g = rgb.g / 255, b = rgb.b / 255, hsv = {h: 0, s: 0, v: 0};\n let min = 0, max = 0;\n if (r >= g && r >= b) {\n max = r;\n min = g > b ? b : g;\n } else if (g >= b && g >= r) {\n max = g;\n min = r > b ? b : r;\n } else {\n max = b;\n min = g > r ? r : g;\n }\n hsv.v = max;\n hsv.s = max ? (max - min) / max : 0;\n let delta;\n if (!hsv.s) hsv.h = 0;\n else {\n delta = max - min;\n if (r === max) hsv.h = (g - b) / delta;\n else if (g === max) hsv.h = 2 + (b - r) / delta;\n else hsv.h = 4 + (r - g) / delta;\n hsv.h = Number.parseInt(hsv.h * 60);\n if (hsv.h < 0) hsv.h += 360;\n }\n hsv.s = (hsv.s * 100) | 0;\n hsv.v = (hsv.v * 100) | 0;\n return hsv;\n },\n /**\n * @param {module:jPicker.HSV} hsv\n * @returns {module:jPicker.RGB}\n */\n hsvToRgb (hsv) {\n const rgb = {r: 0, g: 0, b: 0, a: 100};\n let {h, s, v} = hsv;\n if (s === 0) {\n if (v === 0) rgb.r = rgb.g = rgb.b = 0;\n else rgb.r = rgb.g = rgb.b = (v * 255 / 100) | 0;\n } else {\n if (h === 360) h = 0;\n h /= 60;\n s /= 100;\n v /= 100;\n const i = h | 0,\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - (s * f)),\n t = v * (1 - (s * (1 - f)));\n switch (i) {\n case 0:\n rgb.r = v;\n rgb.g = t;\n rgb.b = p;\n break;\n case 1:\n rgb.r = q;\n rgb.g = v;\n rgb.b = p;\n break;\n case 2:\n rgb.r = p;\n rgb.g = v;\n rgb.b = t;\n break;\n case 3:\n rgb.r = p;\n rgb.g = q;\n rgb.b = v;\n break;\n case 4:\n rgb.r = t;\n rgb.g = p;\n rgb.b = v;\n break;\n case 5:\n rgb.r = v;\n rgb.g = p;\n rgb.b = q;\n break;\n }\n rgb.r = (rgb.r * 255) | 0;\n rgb.g = (rgb.g * 255) | 0;\n rgb.b = (rgb.b * 255) | 0;\n }\n return rgb;\n }\n }\n};\nconst {Color, List, ColorMethods} = jPicker; // local copies for YUI compressor\n/**\n * @function external:jQuery.fn.jPicker\n * @see {@link external:jQuery.fn.$.fn.jPicker}\n */\n\n/**\n* Will be bound to active {@link jQuery.jPicker.Color}.\n* @callback module:jPicker.LiveCallback\n* @param {external:jQuery} ui\n* @param {Element} context\n* @returns {void}\n*/\n/**\n* @callback module:jPicker.CommitCallback\n* @param {external:jQuery.jPicker.Color} activeColor\n* @param {external:jQuery} okButton\n* @returns {void} Return value not used.\n*/\n/**\n * @callback module:jPicker.CancelCallback\n * @param {external:jQuery.jPicker.Color} activeColor\n * @param {external:jQuery} cancelButton\n * @returns {void} Return value not used.\n */\n/**\n* While it would seem this should specify the name `jPicker` for JSDoc, that doesn't\n* get us treated as a function as well as a namespace (even with `@function name`),\n* so we use an approach to add a redundant `$.fn.` in the name.\n* @namespace\n* @memberof external:jQuery.fn\n* @param {any} elem\n* @param {external:jQuery.fn.jPickerOptions} options\n* @param {module:jPicker.CommitCallback} [commitCallback]\n* @param {module:jPicker.LiveCallback} [liveCallback]\n* @param {module:jPicker.CancelCallback} [cancelCallback]\n* @returns {void}\n*/\nexport function jPickerMethod (elem, options, commitCallback, liveCallback, cancelCallback) {\n let sets = mergeDeep({}, jPickerDefaults); // local copies for YUI compressor\n sets = mergeDeep(sets, options);\n\n const that = elem,\n settings = sets;\n if (that.nodeName.toLowerCase() === 'input') { // Add color picker icon if binding to an input element and bind the events to the input\n Object.assign(settings, {\n window: {\n bindToInput: true,\n expandable: true,\n input: that\n }\n });\n if (that.value === '') {\n settings.color.active = new Color({hex: null});\n settings.color.current = new Color({hex: null});\n } else if (ColorMethods.validateHex(that.value)) {\n settings.color.active = new Color({hex: that.value, a: settings.color.active.val('a')});\n settings.color.current = new Color({hex: that.value, a: settings.color.active.val('a')});\n }\n }\n if (settings.window.expandable) {\n const content = document.createElement('span');\n content.classList.add('jPicker');\n content.innerHTML = `<span class=\"Icon\" id=\"jq-ae-Icon\">\n <span class=\"Color\" id=\"jq-ae-Color\">&nbsp;</span>\n <span class=\"Alpha\" id=\"jq-ae-Alpha\">&nbsp;</span>\n <span class=\"Image\" id=\"jq-ae-Image\" title=\"Click To Open Color Picker\">&nbsp;</span>\n <span class=\"Container\" id=\"Container\">&nbsp;</span>\n </span>`;\n that.insertAdjacentElement('afterend', content);\n } else {\n settings.window.liveUpdate = false; // Basic control binding for inline use - You will need to override the liveCallback or commitCallback function to retrieve results\n }\n const isLessThanIE7 = Number.parseFloat(navigator.appVersion.split('MSIE')[1]) < 7 && document.body.filters; // needed to run the AlphaImageLoader function for IE6\n // set color mode and update visuals for the new color mode\n /**\n *\n * @param {\"h\"|\"s\"|\"v\"|\"r\"|\"g\"|\"b\"|\"a\"} colorMode\n * @throws {Error} Invalid mode\n * @returns {void}\n */\n function setColorMode (colorMode) {\n const {active} = color, // local copies for YUI compressor\n // {clientPath} = images,\n hex = active.val('hex');\n let rgbMap, rgbBar;\n settings.color.mode = colorMode;\n switch (colorMode) {\n case 'h':\n setTimeout(function () {\n setBG.call(that, colorMapDiv, 'transparent');\n setImgLoc.call(that, colorMapL1, 0);\n setAlpha.call(that, colorMapL1, 100);\n setImgLoc.call(that, colorMapL2, 260);\n setAlpha.call(that, colorMapL2, 100);\n setBG.call(that, colorBarDiv, 'transparent');\n setImgLoc.call(that, colorBarL1, 0);\n setAlpha.call(that, colorBarL1, 100);\n setImgLoc.call(that, colorBarL2, 260);\n setAlpha.call(that, colorBarL2, 100);\n setImgLoc.call(that, colorBarL3, 260);\n setAlpha.call(that, colorBarL3, 100);\n setImgLoc.call(that, colorBarL4, 260);\n setAlpha.call(that, colorBarL4, 100);\n setImgLoc.call(that, colorBarL6, 260);\n setAlpha.call(that, colorBarL6, 100);\n }, 0);\n colorMap.range('all', {minX: 0, maxX: 100, minY: 0, maxY: 100});\n colorBar.range('rangeY', {minY: 0, maxY: 360});\n if (isNullish(active.val('ahex'))) break;\n colorMap.val('xy', {x: active.val('s'), y: 100 - active.val('v')}, colorMap);\n colorBar.val('y', 360 - active.val('h'), colorBar);\n break;\n case 's':\n setTimeout(function () {\n setBG.call(that, colorMapDiv, 'transparent');\n setImgLoc.call(that, colorMapL1, -260);\n setImgLoc.call(that, colorMapL2, -520);\n setImgLoc.call(that, colorBarL1, -260);\n setImgLoc.call(that, colorBarL2, -520);\n setImgLoc.call(that, colorBarL6, 260);\n setAlpha.call(that, colorBarL6, 100);\n }, 0);\n colorMap.range('all', {minX: 0, maxX: 360, minY: 0, maxY: 100});\n colorBar.range('rangeY', {minY: 0, maxY: 100});\n if (isNullish(active.val('ahex'))) break;\n colorMap.val('xy', {x: active.val('h'), y: 100 - active.val('v')}, colorMap);\n colorBar.val('y', 100 - active.val('s'), colorBar);\n break;\n case 'v':\n setTimeout(function () {\n setBG.call(that, colorMapDiv, '000000');\n setImgLoc.call(that, colorMapL1, -780);\n setImgLoc.call(that, colorMapL2, 260);\n setBG.call(that, colorBarDiv, hex);\n setImgLoc.call(that, colorBarL1, -520);\n setImgLoc.call(that, colorBarL2, 260);\n setAlpha.call(that, colorBarL2, 100);\n setImgLoc.call(that, colorBarL6, 260);\n setAlpha.call(that, colorBarL6, 100);\n }, 0);\n colorMap.range('all', {minX: 0, maxX: 360, minY: 0, maxY: 100});\n colorBar.range('rangeY', {minY: 0, maxY: 100});\n if (isNullish(active.val('ahex'))) break;\n colorMap.val('xy', {x: active.val('h'), y: 100 - active.val('s')}, colorMap);\n colorBar.val('y', 100 - active.val('v'), colorBar);\n break;\n case 'r':\n rgbMap = -1040;\n rgbBar = -780;\n colorMap.range('all', {minX: 0, maxX: 255, minY: 0, maxY: 255});\n colorBar.range('rangeY', {minY: 0, maxY: 255});\n if (isNullish(active.val('ahex'))) break;\n colorMap.val('xy', {x: active.val('b'), y: 255 - active.val('g')}, colorMap);\n colorBar.val('y', 255 - active.val('r'), colorBar);\n break;\n case 'g':\n rgbMap = -1560;\n rgbBar = -1820;\n colorMap.range('all', {minX: 0, maxX: 255, minY: 0, maxY: 255});\n colorBar.range('rangeY', {minY: 0, maxY: 255});\n if (isNullish(active.val('ahex'))) break;\n colorMap.val('xy', {x: active.val('b'), y: 255 - active.val('r')}, colorMap);\n colorBar.val('y', 255 - active.val('g'), colorBar);\n break;\n case 'b':\n rgbMap = -2080;\n rgbBar = -2860;\n colorMap.range('all', {minX: 0, maxX: 255, minY: 0, maxY: 255});\n colorBar.range('rangeY', {minY: 0, maxY: 255});\n if (isNullish(active.val('ahex'))) break;\n colorMap.val('xy', {x: active.val('r'), y: 255 - active.val('g')}, colorMap);\n colorBar.val('y', 255 - active.val('b'), colorBar);\n break;\n case 'a':\n setTimeout(function () {\n setBG.call(that, colorMapDiv, 'transparent');\n setImgLoc.call(that, colorMapL1, -260);\n setImgLoc.call(that, colorMapL2, -520);\n setImgLoc.call(that, colorBarL1, 260);\n setImgLoc.call(that, colorBarL2, 260);\n setAlpha.call(that, colorBarL2, 100);\n setImgLoc.call(that, colorBarL6, 0);\n setAlpha.call(that, colorBarL6, 100);\n }, 0);\n colorMap.range('all', {minX: 0, maxX: 360, minY: 0, maxY: 100});\n colorBar.range('rangeY', {minY: 0, maxY: 255});\n if (isNullish(active.val('ahex'))) break;\n colorMap.val('xy', {x: active.val('h'), y: 100 - active.val('v')}, colorMap);\n colorBar.val('y', 255 - active.val('a'), colorBar);\n break;\n default:\n throw new Error('Invalid Mode');\n }\n switch (colorMode) {\n case 'h':\n break;\n case 's':\n case 'v':\n case 'a':\n setTimeout(function () {\n setAlpha.call(that, colorMapL1, 100);\n setAlpha.call(that, colorBarL1, 100);\n setImgLoc.call(that, colorBarL3, 260);\n setAlpha.call(that, colorBarL3, 100);\n setImgLoc.call(that, colorBarL4, 260);\n setAlpha.call(that, colorBarL4, 100);\n }, 0);\n break;\n case 'r':\n case 'g':\n case 'b':\n setTimeout(function () {\n setBG.call(that, colorMapDiv, 'transparent');\n setBG.call(that, colorBarDiv, 'transparent');\n setAlpha.call(that, colorBarL1, 100);\n setAlpha.call(that, colorMapL1, 100);\n setImgLoc.call(that, colorMapL1, rgbMap);\n setImgLoc.call(that, colorMapL2, rgbMap - 260);\n setImgLoc.call(that, colorBarL1, rgbBar - 780);\n setImgLoc.call(that, colorBarL2, rgbBar - 520);\n setImgLoc.call(that, colorBarL3, rgbBar);\n setImgLoc.call(that, colorBarL4, rgbBar - 260);\n setImgLoc.call(that, colorBarL6, 260);\n setAlpha.call(that, colorBarL6, 100);\n }, 0);\n break;\n }\n if (isNullish(active.val('ahex'))) return;\n activeColorChanged.call(that, active);\n }\n /**\n * Update color when user changes text values.\n * @param {external:jQuery} ui\n * @param {?module:jPicker.Slider} context\n * @returns {void}\n */\n function activeColorChanged (ui, context) {\n if (isNullish(context) || (context !== colorBar && context !== colorMap)) positionMapAndBarArrows.call(that, ui, context);\n setTimeout(function () {\n updatePreview.call(that, ui);\n updateMapVisuals.call(that, ui);\n updateBarVisuals.call(that, ui);\n }, 0);\n }\n\n /**\n * User has dragged the ColorMap pointer.\n * @param {external:jQuery} ui\n * @param {?module:jPicker.Slider} context\n * @returns {void}\n */\n function mapValueChanged (ui, context) {\n const {active} = color;\n if (context !== colorMap && isNullish(active.val())) return;\n const xy = ui.val('all');\n switch (settings.color.mode) {\n case 'h':\n active.val('sv', {s: xy.x, v: 100 - xy.y}, context);\n break;\n case 's':\n case 'a':\n active.val('hv', {h: xy.x, v: 100 - xy.y}, context);\n break;\n case 'v':\n active.val('hs', {h: xy.x, s: 100 - xy.y}, context);\n break;\n case 'r':\n active.val('gb', {g: 255 - xy.y, b: xy.x}, context);\n break;\n case 'g':\n active.val('rb', {r: 255 - xy.y, b: xy.x}, context);\n break;\n case 'b':\n active.val('rg', {r: xy.x, g: 255 - xy.y}, context);\n break;\n }\n }\n\n /**\n * User has dragged the ColorBar slider.\n * @param {external:jQuery} ui\n * @param {?module:jPicker.Slider} context\n * @returns {void}\n */\n function colorBarValueChanged (ui, context) {\n const {active} = color;\n if (context !== colorBar && isNullish(active.val())) return;\n switch (settings.color.mode) {\n case 'h':\n active.val('h', {h: 360 - ui.val('y')}, context);\n break;\n case 's':\n active.val('s', {s: 100 - ui.val('y')}, context);\n break;\n case 'v':\n active.val('v', {v: 100 - ui.val('y')}, context);\n break;\n case 'r':\n active.val('r', {r: 255 - ui.val('y')}, context);\n break;\n case 'g':\n active.val('g', {g: 255 - ui.val('y')}, context);\n break;\n case 'b':\n active.val('b', {b: 255 - ui.val('y')}, context);\n break;\n case 'a':\n active.val('a', 255 - ui.val('y'), context);\n break;\n }\n }\n\n /**\n * Position map and bar arrows to match current color.\n * @param {external:jQuery} ui\n * @param {?module:jPicker.Slider} context\n * @returns {void}\n */\n function positionMapAndBarArrows (ui, context) {\n if (context !== colorMap) {\n switch (settings.color.mode) {\n case 'h': {\n const sv = ui.val('sv');\n colorMap.val('xy', {x: !isNullish(sv) ? sv.s : 100, y: 100 - (!isNullish(sv) ? sv.v : 100)}, context);\n break;\n } case 's':\n // Fall through\n case 'a': {\n const hv = ui.val('hv');\n colorMap.val('xy', {x: (hv && hv.h) || 0, y: 100 - (!isNullish(hv) ? hv.v : 100)}, context);\n break;\n } case 'v': {\n const hs = ui.val('hs');\n colorMap.val('xy', {x: (hs && hs.h) || 0, y: 100 - (!isNullish(hs) ? hs.s : 100)}, context);\n break;\n } case 'r': {\n const bg = ui.val('bg');\n colorMap.val('xy', {x: (bg && bg.b) || 0, y: 255 - ((bg && bg.g) || 0)}, context);\n break;\n } case 'g': {\n const br = ui.val('br');\n colorMap.val('xy', {x: (br && br.b) || 0, y: 255 - ((br && br.r) || 0)}, context);\n break;\n } case 'b': {\n const rg = ui.val('rg');\n colorMap.val('xy', {x: (rg && rg.r) || 0, y: 255 - ((rg && rg.g) || 0)}, context);\n break;\n }\n }\n }\n if (context !== colorBar) {\n switch (settings.color.mode) {\n case 'h':\n colorBar.val('y', 360 - (ui.val('h') || 0), context);\n break;\n case 's': {\n const s = ui.val('s');\n colorBar.val('y', 100 - (!isNullish(s) ? s : 100), context);\n break;\n } case 'v': {\n const v = ui.val('v');\n colorBar.val('y', 100 - (!isNullish(v) ? v : 100), context);\n break;\n } case 'r':\n colorBar.val('y', 255 - (ui.val('r') || 0), context);\n break;\n case 'g':\n colorBar.val('y', 255 - (ui.val('g') || 0), context);\n break;\n case 'b':\n colorBar.val('y', 255 - (ui.val('b') || 0), context);\n break;\n case 'a': {\n const a = ui.val('a');\n colorBar.val('y', 255 - (!isNullish(a) ? a : 255), context);\n break;\n }\n }\n }\n }\n /**\n * @param {external:jQuery} ui\n * @returns {void}\n */\n function updatePreview (ui) {\n try {\n const all = ui.val('all');\n activePreview.style.backgroundColor = (all && '#' + all.hex) || 'transparent';\n setAlpha.call(that, activePreview, (all && toFixedNumeric((all.a * 100) / 255, 4)) || 0);\n } catch (e) {/* empty fn */}\n }\n /**\n * @param {external:jQuery} ui\n * @returns {void}\n */\n function updateMapVisuals (ui) {\n switch (settings.color.mode) {\n case 'h':\n setBG.call(that, colorMapDiv, new Color({h: ui.val('h') || 0, s: 100, v: 100}).val('hex'));\n break;\n case 's':\n case 'a': {\n const s = ui.val('s');\n setAlpha.call(that, colorMapL2, 100 - (!isNullish(s) ? s : 100));\n break;\n } case 'v': {\n const v = ui.val('v');\n setAlpha.call(that, colorMapL1, !isNullish(v) ? v : 100);\n break;\n } case 'r':\n setAlpha.call(that, colorMapL2, toFixedNumeric((ui.val('r') || 0) / 255 * 100, 4));\n break;\n case 'g':\n setAlpha.call(that, colorMapL2, toFixedNumeric((ui.val('g') || 0) / 255 * 100, 4));\n break;\n case 'b':\n setAlpha.call(that, colorMapL2, toFixedNumeric((ui.val('b') || 0) / 255 * 100));\n break;\n }\n const a = ui.val('a');\n setAlpha.call(that, colorMapL3, toFixedNumeric(((255 - (a || 0)) * 100) / 255, 4));\n }\n /**\n * @param {external:jQuery} ui\n * @returns {void}\n */\n function updateBarVisuals (ui) {\n switch (settings.color.mode) {\n case 'h': {\n const a = ui.val('a');\n setAlpha.call(that, colorBarL5, toFixedNumeric(((255 - (a || 0)) * 100) / 255, 4));\n break;\n } case 's': {\n const hva = ui.val('hva'),\n saturatedColor = new Color({h: (hva && hva.h) || 0, s: 100, v: !isNullish(hva) ? hva.v : 100});\n setBG.call(that, colorBarDiv, saturatedColor.val('hex'));\n setAlpha.call(that, colorBarL2, 100 - (!isNullish(hva) ? hva.v : 100));\n setAlpha.call(that, colorBarL5, toFixedNumeric(((255 - ((hva && hva.a) || 0)) * 100) / 255, 4));\n break;\n } case 'v': {\n const hsa = ui.val('hsa'),\n valueColor = new Color({h: (hsa && hsa.h) || 0, s: !isNullish(hsa) ? hsa.s : 100, v: 100});\n setBG.call(that, colorBarDiv, valueColor.val('hex'));\n setAlpha.call(that, colorBarL5, toFixedNumeric(((255 - ((hsa && hsa.a) || 0)) * 100) / 255, 4));\n break;\n } case 'r':\n case 'g':\n case 'b': {\n const rgba = ui.val('rgba');\n let hValue = 0, vValue = 0;\n if (settings.color.mode === 'r') {\n hValue = (rgba && rgba.b) || 0;\n vValue = (rgba && rgba.g) || 0;\n } else if (settings.color.mode === 'g') {\n hValue = (rgba && rgba.b) || 0;\n vValue = (rgba && rgba.r) || 0;\n } else if (settings.color.mode === 'b') {\n hValue = (rgba && rgba.r) || 0;\n vValue = (rgba && rgba.g) || 0;\n }\n const middle = vValue > hValue ? hValue : vValue;\n setAlpha.call(that, colorBarL2, hValue > vValue ? toFixedNumeric(((hValue - vValue) / (255 - vValue)) * 100, 4) : 0);\n setAlpha.call(that, colorBarL3, vValue > hValue ? toFixedNumeric(((vValue - hValue) / (255 - hValue)) * 100, 4) : 0);\n setAlpha.call(that, colorBarL4, toFixedNumeric((middle / 255) * 100, 4));\n setAlpha.call(that, colorBarL5, toFixedNumeric(((255 - ((rgba && rgba.a) || 0)) * 100) / 255, 4));\n break;\n } case 'a': {\n const a = ui.val('a');\n setBG.call(that, colorBarDiv, ui.val('hex') || '000000');\n setAlpha.call(that, colorBarL5, !isNullish(a) ? 0 : 100);\n setAlpha.call(that, colorBarL6, !isNullish(a) ? 100 : 0);\n break;\n }\n }\n }\n /**\n * @param {external:jQuery} el\n * @param {string} [c=\"transparent\"]\n * @returns {void}\n */\n function setBG (el, c) {\n el.style.backgroundColor = (c && c.length === 6 && '#' + c) || 'transparent';\n }\n\n /**\n * @param {external:jQuery} img\n * @param {string} src The image source\n * @returns {void}\n */\n function setImg (img, src) {\n if (isLessThanIE7 && (src.includes('AlphaBar.png') || src.includes('Bars.png') || src.includes('Maps.png'))) {\n img.setAttribute('pngSrc', src);\n img.style.backgroundImage = 'none';\n img.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\\'' + src + '\\', sizingMethod=\\'scale\\')';\n } else img.style.backgroundImage = 'url(\\'' + src + '\\')';\n }\n /**\n * @param {external:jQuery} img\n * @param {Float} y\n * @returns {void}\n */\n function setImgLoc (img, y) {\n img.style.top = y + 'px';\n }\n /**\n * @param {external:jQuery} obj\n * @param {Float} alpha\n * @returns {void}\n */\n function setAlpha (obj, alpha) {\n obj.style.visibility = (alpha > 0) ? 'visible' : 'hidden';\n if (alpha > 0 && alpha < 100) {\n if (isLessThanIE7) {\n const src = obj.getAttribute('pngSrc');\n if (!isNullish(src) && (\n src.includes('AlphaBar.png') || src.includes('Bars.png') || src.includes('Maps.png')\n )) {\n obj.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\\'' + src +\n '\\', sizingMethod=\\'scale\\') progid:DXImageTransform.Microsoft.Alpha(opacity=' + alpha + ')';\n } else obj.style.opacity = toFixedNumeric(alpha / 100, 4);\n } else obj.style.opacity = toFixedNumeric(alpha / 100, 4);\n } else if (alpha === 0 || alpha === 100) {\n if (isLessThanIE7) {\n const src = obj.getAttribute('pngSrc');\n if (!isNullish(src) && (\n src.includes('AlphaBar.png') || src.includes('Bars.png') || src.includes('Maps.png')\n )) {\n obj.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\\'' + src +\n '\\', sizingMethod=\\'scale\\')';\n } else obj.style.opacity = '';\n } else obj.style.opacity = '';\n }\n }\n\n /**\n * Revert color to original color when opened.\n * @returns {void}\n */\n function revertColor () {\n color.active.val('ahex', color.current.val('ahex'));\n }\n /**\n * Commit the color changes.\n * @returns {void}\n */\n function commitColor () {\n color.current.val('ahex', color.active.val('ahex'));\n }\n /**\n * @param {Event} e\n * @returns {void}\n */\n function radioClicked (e) {\n const rChecks = that.querySelectorAll('input[type=\"radio\"]:checked');\n for (const rCheck of rChecks) {\n if (rCheck.value !== e.target.value) {\n rCheck.checked = false;\n }\n }\n setColorMode.call(that, e.target.value);\n }\n /**\n *\n * @returns {void}\n */\n function currentClicked () {\n revertColor.call(that);\n }\n /**\n *\n * @returns {void}\n */\n function cancelClicked () {\n revertColor.call(that);\n settings.window.expandable && hide.call(that);\n typeof cancelCallback === 'function' && cancelCallback.call(that, color.active, cancelButton);\n }\n /**\n *\n * @returns {void}\n */\n function okClicked () {\n commitColor.call(that);\n settings.window.expandable && hide.call(that);\n typeof commitCallback === 'function' && commitCallback.call(that, color.active, okButton);\n }\n /**\n *\n * @returns {void}\n */\n function iconImageClicked () {\n show.call(that);\n }\n /**\n * @param {external:jQuery} ui\n * @returns {void}\n */\n function currentColorChanged (ui) {\n const hex = ui.val('hex');\n currentPreview.style.backgroundColor = (hex && '#' + hex) || 'transparent';\n setAlpha.call(that, currentPreview, toFixedNumeric(((ui.val('a') || 0) * 100) / 255, 4));\n }\n /**\n * @param {external:jQuery} ui\n * @returns {void}\n */\n function expandableColorChanged (ui) {\n const hex = ui.val('hex');\n const va = ui.val('va');\n iconColor.style.backgroundColor = (hex && '#' + hex) || 'transparent';\n setAlpha.call(that, iconAlpha, toFixedNumeric(((255 - ((va && va.a) || 0)) * 100) / 255, 4));\n if (settings.window.bindToInput && settings.window.updateInputColor) {\n settings.window.input.style.backgroundColor = (hex && '#' + hex) || 'transparent';\n settings.window.input.style.color = isNullish(va) || va.v > 75 ? '#000000' : '#ffffff';\n }\n }\n /**\n * @param {Event} e\n * @returns {void}\n */\n function moveBarMouseDown (e) {\n elementStartX = Number.parseInt(container.style.left);\n elementStartY = Number.parseInt(container.style.top);\n pageStartX = e.pageX;\n pageStartY = e.pageY;\n // bind events to document to move window - we will unbind these on mouseup\n document.addEventListener('mousemove', documentMouseMove);\n document.addEventListener('mouseup', documentMouseUp);\n e.preventDefault(); // prevent attempted dragging of the column\n }\n /**\n * @param {Event} e\n * @returns {false}\n */\n function documentMouseMove (e) {\n container.style.left = elementStartX - (pageStartX - e.pageX) + 'px';\n container.style.top = elementStartY - (pageStartY - e.pageY) + 'px';\n if (settings.window.expandable) {\n const prev = container.previousElementSibling;\n prev.style.left = container.style.left;\n prev.style.top = container.style.top;\n }\n e.stopPropagation();\n e.preventDefault();\n return false;\n }\n /**\n * @param {Event} e\n * @returns {false}\n */\n function documentMouseUp (e) {\n document.removeEventListener('mousemove', documentMouseMove);\n document.removeEventListener('mouseup', documentMouseUp);\n e.stopPropagation();\n e.preventDefault();\n return false;\n }\n /**\n * @param {Event} e\n * @returns {false}\n */\n function quickPickClicked (e) {\n e.preventDefault();\n e.stopPropagation();\n color.active.val('ahex', e.target.getAttribute('title') || null, e.target);\n return false;\n }\n /**\n *\n * @returns {void}\n */\n function show () {\n color.current.val('ahex', color.active.val('ahex'));\n /**\n *\n * @returns {void}\n */\n function attachIFrame () {\n if (!settings.window.expandable) return;\n const table = container.querySelector('#jPicker-table');\n container.insertAdjacentElement('beforebegin', document.createElement('iframe'));\n const pELem = container.previousElementSibling;\n pELem.style.width = parseFloat(getComputedStyle(table, null).width.replace('px', ''));\n pELem.style.height = parseFloat(getComputedStyle(container, null).height.replace('px', ''));\n pELem.style.opacity = 0;\n pELem.style.position = 'absolute';\n pELem.style.left = getComputedStyle(container, null).getPropertyValue('left');\n pELem.style.top = getComputedStyle(container, null).getPropertyValue('top');\n }\n if (settings.window.expandable) {\n container.style.zIndex = 20;\n }\n container.style.display = 'block';\n attachIFrame();\n /* switch (settings.window.effects.type) {\n case 'fade':\n container.fadeIn(settings.window.effects.speed.show, attachIFrame);\n break;\n case 'slide':\n container.slideDown(settings.window.effects.speed.show, attachIFrame);\n break;\n case 'show':\n default:\n container.show(settings.window.effects.speed.show, attachIFrame);\n break;\n } */\n }\n /**\n *\n * @returns {void}\n */\n function hide () {\n /**\n *\n * @returns {void}\n */\n function removeIFrame () {\n if (settings.window.expandable) container.style.zIndex = 10;\n if (!settings.window.expandable) return;\n container.prev().remove();\n }\n container.style.display = 'none';\n removeIFrame();\n /* switch (settings.window.effects.type) {\n case 'fade':\n container.fadeOut(settings.window.effects.speed.hide, removeIFrame);\n break;\n case 'slide':\n container.slideUp(settings.window.effects.speed.hide, removeIFrame);\n break;\n case 'show':\n default:\n container.hide(settings.window.effects.speed.hide, removeIFrame);\n break;\n } */\n }\n /**\n *\n * @returns {void}\n */\n function initialize () {\n const nexts = that.nextElementSibling;\n const win = settings.window,\n popup = win.expandable ? nexts.querySelector('#Container') : null;\n container = win.expandable ? document.createElement('div') : that;\n // container.addClass('jPicker Container');\n container.classList.add('jPicker');\n container.classList.add('Container');\n if (win.expandable) container.style.display = 'none';\n container.onselectstart = function (e) {\n if (e.target.nodeName.toLowerCase() !== 'input') return false;\n return true;\n };\n // inject html source code - we are using a single table for this control - I know tables are considered bad, but it takes care of equal height columns and\n // this control really is tabular data, so I believe it is the right move\n const all = color.active.val('all');\n if (win.alphaPrecision < 0) win.alphaPrecision = 0;\n else if (win.alphaPrecision > 2) win.alphaPrecision = 2;\n const controlHtml = `<table class=\"jPicker\" id=\"jPicker-table\" cellpadding=\"0\" cellspacing=\"0\">\n <tbody>\n ${win.expandable ? '<tr><td class=\"Move\" colspan=\"5\">&nbsp;</td></tr>' : ''}\n <tr>\n <td rowspan=\"9\"><h2 class=\"Title\">${win.title || localization.text.title}</h2><div class=\"Map\" id=\"Map\"><span class=\"Map1\" id=\"MMap1\">&nbsp;</span><span class=\"Map2\" id=\"MMap2\">&nbsp;</span><span class=\"Map3\" id=\"MMap3\">&nbsp;</span><img src=\"${images.clientPath + images.colorMap.arrow.file}\" class=\"Arrow\"/></div></td>\n <td rowspan=\"9\"><div class=\"Bar\" id=\"Bar\"><span class=\"Map1\" id=\"Map1\">&nbsp;</span><span class=\"Map2\" id=\"Map2\">&nbsp;</span><span class=\"Map3\" id=\"Map3\">&nbsp;</span><span class=\"Map4\" id=\"Map4\">&nbsp;</span><span class=\"Map5\" id=\"Map5\">&nbsp;</span><span class=\"Map6\" id=\"Map6\">&nbsp;</span><img src=\"${images.clientPath + images.colorBar.arrow.file}\" class=\"Arrow\"/></div></td>\n <td colspan=\"2\" class=\"Preview\" id=\"Preview\">${localization.text.newColor}<div id=\"preview-div\"><span class=\"Active\" id=\"Active\" title=\"${localization.tooltips.colors.newColor}\">&nbsp;</span><span class=\"Current\" id=\"Current\" title=\"${localization.tooltips.colors.currentColor}\">&nbsp;</span></div>${localization.text.currentColor}</td>\n <td rowspan=\"9\" class=\"Button\" id=\"Button\"><input type=\"button\" class=\"Ok\" id=\"Ok\" value=\"${localization.text.ok}\" title=\"${localization.tooltips.buttons.ok}\"/><input type=\"button\" class=\"Cancel\" id=\"Cancel\" value=\"${localization.text.cancel}\" title=\"${localization.tooltips.buttons.cancel}\"/><hr/><div class=\"Grid\" id=\"Grid\"></div></td>\n </tr>\n <tr class=\"Hue\">\n <td class=\"Radio\"><label title=\"${localization.tooltips.hue.radio}\"><input type=\"radio\" value=\"h\"${settings.color.mode === 'h' ? ' checked=\"checked\"' : ''}/>H:</label></td>\n <td class=\"Text\"><input type=\"text\" maxlength=\"3\" value=\"${!isNullish(all) ? all.h : ''}\" title=\"${localization.tooltips.hue.textbox}\"/>&nbsp;&deg;</td>\n </tr>\n <tr class=\"Saturation\">\n <td class=\"Radio\"><label title=\"${localization.tooltips.saturation.radio}\"><input type=\"radio\" value=\"s\"${settings.color.mode === 's' ? ' checked=\"checked\"' : ''}/>S:</label></td>\n <td class=\"Text\"><input type=\"text\" maxlength=\"3\" value=\"${!isNullish(all) ? all.s : ''}\" title=\"${localization.tooltips.saturation.textbox}\"/>&nbsp;%</td>\n </tr>\n <tr class=\"Value\">\n <td class=\"Radio\"><label title=\"${localization.tooltips.value.radio}\"><input type=\"radio\" value=\"v\"${settings.color.mode === 'v' ? ' checked=\"checked\"' : ''}/>V:</label><br/><br/></td>\n <td class=\"Text\"><input type=\"text\" maxlength=\"3\" value=\"${!isNullish(all) ? all.v : ''}\" title=\"${localization.tooltips.value.textbox}\"/>&nbsp;%<br/><br/></td>\n </tr>\n <tr class=\"Red\">\n <td class=\"Radio\"><label title=\"${localization.tooltips.red.radio}\"><input type=\"radio\" value=\"r\"${settings.color.mode === 'r' ? ' checked=\"checked\"' : ''}/>R:</label></td>\n <td class=\"Text\"><input type=\"text\" maxlength=\"3\" value=\"${!isNullish(all) ? all.r : ''}\" title=\"${localization.tooltips.red.textbox}\"/></td>\n </tr>\n <tr class=\"Green\">\n <td class=\"Radio\"><label title=\"${localization.tooltips.green.radio}\"><input type=\"radio\" value=\"g\"${settings.color.mode === 'g' ? ' checked=\"checked\"' : ''}/>G:</label></td>\n <td class=\"Text\"><input type=\"text\" maxlength=\"3\" value=\"${!isNullish(all) ? all.g : ''}\" title=\"${localization.tooltips.green.textbox}\"/></td>\n </tr>\n <tr class=\"Blue\">\n <td class=\"Radio\"><label title=\"${localization.tooltips.blue.radio}\"><input type=\"radio\" value=\"b\"${settings.color.mode === 'b' ? ' checked=\"checked\"' : ''}/>B:</label></td>\n <td class=\"Text\"><input type=\"text\" maxlength=\"3\" value=\"${!isNullish(all) ? all.b : ''}\" title=\"${localization.tooltips.blue.textbox}\"/></td>\n </tr>\n <tr class=\"Alpha\">\n <td class=\"Radio\">${win.alphaSupport ? `<label title=\"${localization.tooltips.alpha.radio}\"><input type=\"radio\" value=\"a\"${settings.color.mode === 'a' ? ' checked=\"checked\"' : ''}/>A:</label>` : '&nbsp;'}</td>\n <td class=\"Text\">${win.alphaSupport ? `<input type=\"text\" maxlength=\"${3 + win.alphaPrecision}\" value=\"${!isNullish(all) ? toFixedNumeric((all.a * 100) / 255, win.alphaPrecision) : ''}\" title=\"${localization.tooltips.alpha.textbox}\"/>&nbsp;%` : '&nbsp;'}</td>\n </tr>\n <tr class=\"Hex\">\n <td colspan=\"2\" class=\"Text\"><label title=\"${localization.tooltips.hex.textbox}\">#:<input type=\"text\" maxlength=\"6\" class=\"Hex\" value=\"${!isNullish(all) ? all.hex : ''}\"/></label>${win.alphaSupport ? `<input type=\"text\" maxlength=\"2\" class=\"AHex\" value=\"${!isNullish(all) ? all.ahex.substring(6) : ''}\" title=\"${localization.tooltips.hex.alpha}\"/></td>` : '&nbsp;'}\n </tr>\n </tbody></table>`;\n if (win.expandable) {\n container.innerHTML = controlHtml;\n if (!that.querySelectorAll('div.jPicker.Container').length) {\n document.body.insertBefore(container, document.body.firstChild);\n } else {\n that.querySelector('div.jPicker.Container:last').insertAdjacentElement('afterend', container)\n }\n container.addEventListener('mousedown', function () {\n container.style.zIndex = 20;\n });\n const poslt = findPos(popup);\n container.style.position = 'absolute';\n container.style.left =\n win.position.x === 'left'\n ? (poslt.left - 530 - (win.position.y === 'center' ? 25 : 0)) + 'px'\n : win.position.x === 'center'\n ? (poslt.left - 260) + 'px'\n : win.position.x === 'right'\n ? (poslt.left - 10 + (win.position.y === 'center' ? 25 : 0)) + 'px'\n : win.position.x === 'screenCenter'\n ? ((document.width >> 1) - 260) + 'px'\n : (poslt.left + Number.parseInt(win.position.x)) + 'px';\n container.style.top =\n win.position.y === 'top'\n ? (poslt.top - 312) + 'px'\n : win.position.y === 'center'\n ? (poslt.top - 156) + 'px'\n : win.position.y === 'bottom'\n ? (poslt.top + 25) + 'px'\n : (poslt.top + Number.parseInt(win.position.y)) + 'px';\n } else {\n container = that;\n const newDiv = document.createElement('div');\n newDiv.innerHTML = controlHtml;\n while (newDiv.children.length > 0) {\n container.appendChild(newDiv.children[0]);\n }\n }\n // initialize the objects to the source code just injected\n const tbody = container.querySelector('tbody');\n colorMapDiv = tbody.querySelector('#Map');\n colorBarDiv = tbody.querySelector('#Bar');\n colorMapL1 = colorMapDiv.querySelector('#MMap1');\n colorMapL2 = colorMapDiv.querySelector('#MMap2');\n colorMapL3 = colorMapDiv.querySelector('#MMap3');\n colorBarL1 = colorBarDiv.querySelector('#Map1');\n colorBarL2 = colorBarDiv.querySelector('#Map2');\n colorBarL3 = colorBarDiv.querySelector('#Map3');\n colorBarL4 = colorBarDiv.querySelector('#Map4');\n colorBarL5 = colorBarDiv.querySelector('#Map5');\n colorBarL6 = colorBarDiv.querySelector('#Map6');\n // create color pickers and maps\n colorMap = new Slider(\n colorMapDiv,\n {\n map: {\n width: images.colorMap.width,\n height: images.colorMap.height\n },\n arrow: {\n image: images.clientPath + images.colorMap.arrow.file,\n width: images.colorMap.arrow.width,\n height: images.colorMap.arrow.height\n }\n }\n );\n colorMap.bind(mapValueChanged);\n colorBar = new Slider(\n colorBarDiv,\n {\n map: {\n width: images.colorBar.width,\n height: images.colorBar.height\n },\n arrow: {\n image: images.clientPath + images.colorBar.arrow.file,\n width: images.colorBar.arrow.width,\n height: images.colorBar.arrow.height\n }\n }\n );\n colorBar.bind(colorBarValueChanged);\n colorPicker = new ColorValuePicker(\n tbody,\n color.active,\n win.expandable && win.bindToInput ? win.input : null,\n win.alphaPrecision\n );\n const hex = !isNullish(all) ? all.hex : null,\n preview = tbody.querySelector('#Preview'),\n button = tbody.querySelector('#Button');\n activePreview = preview.querySelector('#Active');\n activePreview.style.backgroundColor = (hex) ? '#' + hex : 'transparent';\n currentPreview = preview.querySelector('#Current');\n currentPreview.style.backgroundColor = (hex) ? '#' + hex : 'transparent';\n currentPreview.addEventListener('click', currentClicked);\n setAlpha.call(that, currentPreview, toFixedNumeric((color.current.val('a') * 100) / 255, 4));\n okButton = button.querySelector('#Ok');\n okButton.addEventListener('click', okClicked);\n cancelButton = button.querySelector('#Cancel');\n cancelButton.addEventListener('click', cancelClicked);\n grid = button.querySelector('#Grid');\n setTimeout(function () {\n setImg.call(that, colorMapL1, images.clientPath + 'Maps.png');\n setImg.call(that, colorMapL2, images.clientPath + 'Maps.png');\n setImg.call(that, colorMapL3, images.clientPath + 'map-opacity.png');\n setImg.call(that, colorBarL1, images.clientPath + 'Bars.png');\n setImg.call(that, colorBarL2, images.clientPath + 'Bars.png');\n setImg.call(that, colorBarL3, images.clientPath + 'Bars.png');\n setImg.call(that, colorBarL4, images.clientPath + 'Bars.png');\n setImg.call(that, colorBarL5, images.clientPath + 'bar-opacity.png');\n setImg.call(that, colorBarL6, images.clientPath + 'AlphaBar.png');\n setImg.call(that, preview.querySelector('#preview-div'), images.clientPath + 'preview-opacity.png');\n }, 0);\n const radioInputs = tbody.querySelectorAll('td.Radio input');\n for (const radioInput of radioInputs) {\n radioInput.addEventListener('click', radioClicked);\n }\n // initialize quick list\n if (color.quickList && color.quickList.length > 0) {\n let html = '';\n for (let i = 0; i < color.quickList.length; i++) {\n /* if default colors are hex strings, change them to color objects */\n if ((typeof (color.quickList[i])).toString().toLowerCase() === 'string') {\n color.quickList[i] = new Color({hex: color.quickList[i]});\n }\n const alpha = color.quickList[i].val('a');\n let ahex = color.quickList[i].val('ahex');\n if (!win.alphaSupport && ahex) ahex = ahex.substring(0, 6) + 'ff';\n const quickHex = color.quickList[i].val('hex');\n if (!ahex) ahex = '00000000';\n html += '<span class=\"QuickColor\"' + (' title=\"#' + ahex + '\"') + ' style=\"background-color:' + ((quickHex && '#' + quickHex) || '') + ';' + (quickHex ? '' : 'background-image:url(' + images.clientPath + 'NoColor.png)') + (win.alphaSupport && alpha && alpha < 255 ? ';opacity:' + toFixedNumeric(alpha / 255, 4) + ';filter:Alpha(opacity=' + toFixedNumeric(alpha / 2.55, 4) + ')' : '') + '\">&nbsp;</span>';\n }\n setImg.call(that, grid, images.clientPath + 'bar-opacity.png');\n const div = document.createElement('div');\n div.innerHTML = html;\n while (div.children.length > 0) {\n grid.appendChild(div.children[0]);\n }\n // grid.html(html);\n const QuickColorSels = grid.querySelectorAll('.QuickColor');\n for (const QuickColorSel of QuickColorSels) {\n QuickColorSel.addEventListener('click', quickPickClicked);\n }\n }\n setColorMode.call(that, settings.color.mode);\n color.active.bind(activeColorChanged);\n typeof liveCallback === 'function' && color.active.bind(liveCallback);\n color.current.bind(currentColorChanged);\n // bind to input\n if (win.expandable) {\n that.icon = popup.parentNode;\n iconColor = that.icon.querySelector('.Color');\n iconColor.style.backgroundColor = (hex && '#' + hex) || 'transparent';\n iconAlpha = that.icon.querySelector('.Alpha');\n setImg.call(that, iconAlpha, images.clientPath + 'bar-opacity.png');\n setAlpha.call(that, iconAlpha, toFixedNumeric(((255 - (!isNullish(all) ? all.a : 0)) * 100) / 255, 4));\n iconImage = that.icon.querySelector('.Image')\n iconImage.style.backgroundImage = 'url(\\'' + images.clientPath + images.picker.file + '\\')';\n iconImage.addEventListener('click', iconImageClicked);\n if (win.bindToInput && win.updateInputColor) {\n win.input.style.backgroundColor = (hex && '#' + hex) || 'transparent';\n win.input.style.color = isNullish(all) || all.v > 75 ? '#000000' : '#ffffff';\n }\n const moveBar = tbody.querySelector('.Move');\n moveBar.addEventListener('mousedown', moveBarMouseDown);\n color.active.bind(expandableColorChanged);\n } else {\n show.call(that);\n }\n }\n /**\n *\n * @returns {void}\n */\n function destroy () {\n const radioInputs = container.querySelectorAll('td.Radio input');\n for (const radioInput of radioInputs) {\n radioInput.removeEventListener('click', radioClicked);\n }\n currentPreview.removeEventListener('click', currentClicked);\n cancelButton.removeEventListener('click', cancelClicked);\n okButton.removeEventListener('click', okClicked);\n if (settings.window.expandable) {\n iconImage.removeEventListener('click', iconImageClicked);\n moveBar.removeEventListener('mousedown', moveBarMouseDown);\n that.icon = null;\n }\n const jqQuickColors = container.querySelectorAll('.QuickColor');\n for (const jqQuickColor of jqQuickColors) {\n jqQuickColor.removeEventListener('click', quickPickClicked);\n }\n colorMapDiv = null;\n colorBarDiv = null;\n colorMapL1 = null;\n colorMapL2 = null;\n colorMapL3 = null;\n colorBarL1 = null;\n colorBarL2 = null;\n colorBarL3 = null;\n colorBarL4 = null;\n colorBarL5 = null;\n colorBarL6 = null;\n colorMap.destroy();\n colorMap = null;\n colorBar.destroy();\n colorBar = null;\n colorPicker.destroy();\n colorPicker = null;\n activePreview = null;\n currentPreview = null;\n okButton = null;\n cancelButton = null;\n grid = null;\n commitCallback = null;\n cancelCallback = null;\n liveCallback = null;\n container.html('');\n for (let i = 0; i < List.length; i++) {\n if (List[i] === that) {\n List.splice(i, 1);\n i--; // Decrement to ensure we don't miss next item (lgtm warning)\n }\n }\n }\n const {images, localization} = settings; // local copies for YUI compressor\n const color = {\n active: (typeof settings.color.active).toString().toLowerCase() === 'string'\n ? new Color({ahex: !settings.window.alphaSupport && settings.color.active\n ? settings.color.active.substring(0, 6) + 'ff'\n : settings.color.active\n })\n : new Color({ahex: !settings.window.alphaSupport &&\n settings.color.active.val('ahex')\n ? settings.color.active.val('ahex').substring(0, 6) + 'ff'\n : settings.color.active.val('ahex')\n }),\n current: (typeof settings.color.active).toString().toLowerCase() === 'string'\n ? new Color({ahex: !settings.window.alphaSupport && settings.color.active\n ? settings.color.active.substring(0, 6) + 'ff'\n : settings.color.active})\n : new Color({ahex: !settings.window.alphaSupport &&\n settings.color.active.val('ahex')\n ? settings.color.active.val('ahex').substring(0, 6) + 'ff'\n : settings.color.active.val('ahex')\n }),\n quickList: settings.color.quickList\n };\n\n if (typeof commitCallback !== 'function') {\n commitCallback = null;\n }\n if (typeof liveCallback !== 'function') {\n liveCallback = null;\n }\n if (typeof cancelCallback !== 'function') {\n cancelCallback = null;\n }\n\n let elementStartX = null, // Used to record the starting css positions for dragging the control\n elementStartY = null,\n pageStartX = null, // Used to record the mousedown coordinates for dragging the control\n pageStartY = null,\n container = null,\n colorMapDiv = null,\n colorBarDiv = null,\n colorMapL1 = null, // different layers of colorMap and colorBar\n colorMapL2 = null,\n colorMapL3 = null,\n colorBarL1 = null,\n colorBarL2 = null,\n colorBarL3 = null,\n colorBarL4 = null,\n colorBarL5 = null,\n colorBarL6 = null,\n colorMap = null, // color maps\n colorBar = null,\n colorPicker = null,\n activePreview = null, // color boxes above the radio buttons\n currentPreview = null,\n okButton = null,\n cancelButton = null,\n grid = null, // preset colors grid\n iconColor = null, // iconColor for popup icon\n iconAlpha = null, // iconAlpha for popup icon\n iconImage = null, // iconImage popup icon\n moveBar = null; // drag bar\n Object.assign(that, {\n // public properties, methods, and callbacks\n commitCallback, // commitCallback function can be overridden to return the selected color to a method you specify when the user clicks \"OK\"\n liveCallback, // liveCallback function can be overridden to return the selected color to a method you specify in live mode (continuous update)\n cancelCallback, // cancelCallback function can be overridden to a method you specify when the user clicks \"Cancel\"\n color,\n show,\n hide,\n destroy // destroys this control entirely, removing all events and objects, and removing itself from the List\n });\n List.push(that);\n setTimeout(function () {\n initialize.call(that);\n }, 0);\n}\n/**\n* @typedef {PlainObject} external:jQuery.fn.jPickerOptionsIconInfo\n* @property {string} file Color Map/Color Bar/Color Picker arrow icon\n* @property {Float} width\n* @property {Float} height\n*/\n/**\n* @typedef {PlainObject} external:jQuery.fn.jPickerOptionsImagesDimensionsArrow\n* @property {Float} width\n* @property {Float} height\n* @property {external:jQuery.fn.jPickerOptionsIconInfo} arrow\n*/\n/**\n* @typedef {PlainObject} external:jQuery.fn.jPickerOptionsRadioTextboxLocale\n* @property {string} radio\n* @property {string} textbox\n*/\n/**\n* @typedef {PlainObject} external:jQuery.fn.jPickerOptions\n* @property {PlainObject} window\n* @property {string|null} window.title Any title for the jPicker window itself - displays\n* \"Drag Markers To Pick A Color\" if left null\n* @property {PlainObject} window.effects\n* @property {\"slide\"|\"show\"|\"fade\"} window.effects.type Effect used to show/hide an expandable picker\n* @property {PlainObject} window.effects.speed\n* @property {\"fast\"|\"slow\"|Float} window.effects.speed.show Duration of \"show\" effect. Time in milliseconds.\n* @property {\"fast\"|\"slow\"|Float} window.effects.speed.hide Duration of \"hide\" effect. Time in milliseconds\n* @property {PlainObject} window.position\n* @property {\"left\"|\"center\"|\"right\"|\"screenCenter\"|Float} window.position.x Relative px value\n* @property {\"top\"|\"bottom\"|\"center\"|Float} window.position.y Relative px value\n* @property {boolean} window.expandable Defaults to large static picker - set to `true` to make an expandable\n* picker (small icon with popup) - set automatically when binded to input element; added by `$.fn.jPicker`\n* @property {boolean} window.liveUpdate Set `false` if you want the user to have to click \"OK\" before the\n* binded input box updates values (always `true` for expandable picker)\n* @property {boolean} window.alphaSupport Set to `true` to enable alpha picking\n* @property {Float} window.alphaPrecision Set decimal precision for alpha percentage display - hex codes do\n* not map directly to percentage integers - range 0-2\n* @property {boolean} window.updateInputColor Set to `false` to prevent binded input colors from changing\n* @property {boolean} [window.bindToInput] Added by `$.fn.jPicker`\n* @property {external:jQuery} [window.input] Added by `$.fn.jPicker`\n* @property {PlainObject} color\n* @property {\"h\"|\"s\"|\"v\"|\"r\"|\"g\"|\"b\"|\"a\"} color.mode Symbols stand for \"h\" (hue), \"s\" (saturation), \"v\" (value), \"r\" (red), \"g\" (green), \"b\" (blue), \"a\" (alpha)\n* @property {Color|string} color.active Strings are HEX values (e.g. #ffc000) WITH OR WITHOUT the \"#\" prefix\n* @property {Color[]|string[]} color.quickList The quick pick color list\n* Strings are HEX values (e.g. #ffc000) WITH OR WITHOUT the \"#\" prefix\n* @property {PlainObject} images\n* @property {string} images.clientPath Path to image files\n* @property {external:jQuery.fn.jPickerOptionsImagesDimensionsArrow} images.colorMap\n* @property {external:jQuery.fn.jPickerOptionsImagesDimensionsArrow} images.colorBar\n* @property {external:jQuery.fn.jPickerOptionsIconInfo} images.picker\n* @property {PlainObject} localization alter these to change the text presented by the picker (e.g. different language)\n* @property {PlainObject} localization.text\n* @property {string} localization.text.title\n* @property {string} localization.text.newColor\n* @property {string} localization.text.currentColor\n* @property {string} localization.text.ok\n* @property {string} localization.text.cancel\n* @property {PlainObject} localization.tooltips\n* @property {PlainObject} localization.tooltips.colors\n* @property {string} localization.tooltips.colors.newColor\n* @property {string} localization.tooltips.colors.currentColor\n* @property {PlainObject} localization.tooltips.buttons\n* @property {string} localization.tooltips.buttons.ok\n* @property {string} localization.tooltips.buttons.cancel\n* @property {external:jQuery.fn.jPickerOptionsRadioTextboxLocale} localization.tooltips.hue\n* @property {external:jQuery.fn.jPickerOptionsRadioTextboxLocale} localization.tooltips.saturation\n* @property {external:jQuery.fn.jPickerOptionsRadioTextboxLocale} localization.tooltips.value\n* @property {external:jQuery.fn.jPickerOptionsRadioTextboxLocale} localization.tooltips.red\n* @property {external:jQuery.fn.jPickerOptionsRadioTextboxLocale} localization.tooltips.green\n* @property {external:jQuery.fn.jPickerOptionsRadioTextboxLocale} localization.tooltips.blue\n* @property {external:jQuery.fn.jPickerOptionsRadioTextboxLocale} localization.tooltips.alpha\n* @property {PlainObject} localization.tooltips.hex\n* @property {string} localization.tooltips.hex.textbox\n* @property {string} localization.tooltips.hex.alpha\n*/\n/**\n* The jPicker defaults - you can change anything in this section (such as the\n* clientPath to your images) without fear of breaking the program.\n* @namespace {external:jQuery.fn.jPickerOptions} defaults\n* @memberof external:jQuery.fn.$.fn.jPicker\n* @borrows external:jQuery.fn.jPickerOptions as external:jQuery.fn.jPicker.defaults\n* @see Source for all of the values\n*/\nexport const jPickerDefaults = {\n window: {\n title: null,\n effects: {\n type: 'slide',\n speed: {\n show: 'slow',\n hide: 'fast'\n }\n },\n position: {\n x: 'screenCenter',\n y: 'top'\n },\n expandable: false,\n liveUpdate: true,\n alphaSupport: false,\n alphaPrecision: 0,\n updateInputColor: true\n },\n color: {\n mode: 'h',\n active: new Color({ahex: '#ffcc00ff'}),\n quickList: [\n new Color({h: 360, s: 33, v: 100}),\n new Color({h: 360, s: 66, v: 100}),\n new Color({h: 360, s: 100, v: 100}),\n new Color({h: 360, s: 100, v: 75}),\n new Color({h: 360, s: 100, v: 50}),\n new Color({h: 180, s: 0, v: 100}),\n new Color({h: 30, s: 33, v: 100}),\n new Color({h: 30, s: 66, v: 100}),\n new Color({h: 30, s: 100, v: 100}),\n new Color({h: 30, s: 100, v: 75}),\n new Color({h: 30, s: 100, v: 50}),\n new Color({h: 180, s: 0, v: 90}),\n new Color({h: 60, s: 33, v: 100}),\n new Color({h: 60, s: 66, v: 100}),\n new Color({h: 60, s: 100, v: 100}),\n new Color({h: 60, s: 100, v: 75}),\n new Color({h: 60, s: 100, v: 50}),\n new Color({h: 180, s: 0, v: 80}),\n new Color({h: 90, s: 33, v: 100}),\n new Color({h: 90, s: 66, v: 100}),\n new Color({h: 90, s: 100, v: 100}),\n new Color({h: 90, s: 100, v: 75}),\n new Color({h: 90, s: 100, v: 50}),\n new Color({h: 180, s: 0, v: 70}),\n new Color({h: 120, s: 33, v: 100}),\n new Color({h: 120, s: 66, v: 100}),\n new Color({h: 120, s: 100, v: 100}),\n new Color({h: 120, s: 100, v: 75}),\n new Color({h: 120, s: 100, v: 50}),\n new Color({h: 180, s: 0, v: 60}),\n new Color({h: 150, s: 33, v: 100}),\n new Color({h: 150, s: 66, v: 100}),\n new Color({h: 150, s: 100, v: 100}),\n new Color({h: 150, s: 100, v: 75}),\n new Color({h: 150, s: 100, v: 50}),\n new Color({h: 180, s: 0, v: 50}),\n new Color({h: 180, s: 33, v: 100}),\n new Color({h: 180, s: 66, v: 100}),\n new Color({h: 180, s: 100, v: 100}),\n new Color({h: 180, s: 100, v: 75}),\n new Color({h: 180, s: 100, v: 50}),\n new Color({h: 180, s: 0, v: 40}),\n new Color({h: 210, s: 33, v: 100}),\n new Color({h: 210, s: 66, v: 100}),\n new Color({h: 210, s: 100, v: 100}),\n new Color({h: 210, s: 100, v: 75}),\n new Color({h: 210, s: 100, v: 50}),\n new Color({h: 180, s: 0, v: 30}),\n new Color({h: 240, s: 33, v: 100}),\n new Color({h: 240, s: 66, v: 100}),\n new Color({h: 240, s: 100, v: 100}),\n new Color({h: 240, s: 100, v: 75}),\n new Color({h: 240, s: 100, v: 50}),\n new Color({h: 180, s: 0, v: 20}),\n new Color({h: 270, s: 33, v: 100}),\n new Color({h: 270, s: 66, v: 100}),\n new Color({h: 270, s: 100, v: 100}),\n new Color({h: 270, s: 100, v: 75}),\n new Color({h: 270, s: 100, v: 50}),\n new Color({h: 180, s: 0, v: 10}),\n new Color({h: 300, s: 33, v: 100}),\n new Color({h: 300, s: 66, v: 100}),\n new Color({h: 300, s: 100, v: 100}),\n new Color({h: 300, s: 100, v: 75}),\n new Color({h: 300, s: 100, v: 50}),\n new Color({h: 180, s: 0, v: 0}),\n new Color({h: 330, s: 33, v: 100}),\n new Color({h: 330, s: 66, v: 100}),\n new Color({h: 330, s: 100, v: 100}),\n new Color({h: 330, s: 100, v: 75}),\n new Color({h: 330, s: 100, v: 50}),\n new Color()\n ]\n },\n images: {\n clientPath: '/jPicker/images/',\n colorMap: {\n width: 256,\n height: 256,\n arrow: {\n file: 'mappoint.gif',\n width: 15,\n height: 15\n }\n },\n colorBar: {\n width: 20,\n height: 256,\n arrow: {\n file: 'rangearrows.gif',\n width: 20,\n height: 7\n }\n },\n picker: {\n file: 'picker.gif',\n width: 25,\n height: 24\n }\n },\n localization: {\n text: {\n title: 'Drag Markers To Pick A Color',\n newColor: 'new',\n currentColor: 'current',\n ok: 'OK',\n cancel: 'Cancel'\n },\n tooltips: {\n colors: {\n newColor: 'New Color - Press &ldquo;OK&rdquo; To Commit',\n currentColor: 'Click To Revert To Original Color'\n },\n buttons: {\n ok: 'Commit To This Color Selection',\n cancel: 'Cancel And Revert To Original Color'\n },\n hue: {\n radio: 'Set To &ldquo;Hue&rdquo; Color Mode',\n textbox: 'Enter A &ldquo;Hue&rdquo; Value (0-360&deg;)'\n },\n saturation: {\n radio: 'Set To &ldquo;Saturation&rdquo; Color Mode',\n textbox: 'Enter A &ldquo;Saturation&rdquo; Value (0-100%)'\n },\n value: {\n radio: 'Set To &ldquo;Value&rdquo; Color Mode',\n textbox: 'Enter A &ldquo;Value&rdquo; Value (0-100%)'\n },\n red: {\n radio: 'Set To &ldquo;Red&rdquo; Color Mode',\n textbox: 'Enter A &ldquo;Red&rdquo; Value (0-255)'\n },\n green: {\n radio: 'Set To &ldquo;Green&rdquo; Color Mode',\n textbox: 'Enter A &ldquo;Green&rdquo; Value (0-255)'\n },\n blue: {\n radio: 'Set To &ldquo;Blue&rdquo; Color Mode',\n textbox: 'Enter A &ldquo;Blue&rdquo; Value (0-255)'\n },\n alpha: {\n radio: 'Set To &ldquo;Alpha&rdquo; Color Mode',\n textbox: 'Enter A &ldquo;Alpha&rdquo; Value (0-100)'\n },\n hex: {\n textbox: 'Enter A &ldquo;Hex&rdquo; Color Value (#000000-#ffffff)',\n alpha: 'Enter A &ldquo;Alpha&rdquo; Value (#00-#ff)'\n }\n }\n }\n};\n","/* eslint-disable no-loop-func */\n/* eslint-disable prefer-destructuring */\n/* eslint-disable no-unsanitized/property */\n/**\n * @file jGraduate 0.4\n *\n * jQuery Plugin for a gradient picker\n *\n * @module jGraduate\n * @copyright 2010 Jeff Schiller {@link http://blog.codedread.com/}, 2010 Alexis Deveria {@link http://a.deveria.com/}\n *\n * @license Apache-2.0\n * @example\n * // The Paint object is described below.\n * $.jGraduate.Paint(); // constructs a 'none' color\n * @example $.jGraduate.Paint({copy: o}); // creates a copy of the paint o\n * @example $.jGraduate.Paint({hex: '#rrggbb'}); // creates a solid color paint with hex = \"#rrggbb\"\n * @example $.jGraduate.Paint({linearGradient: o, a: 50}); // creates a linear gradient paint with opacity=0.5\n * @example $.jGraduate.Paint({radialGradient: o, a: 7}); // creates a radial gradient paint with opacity=0.07\n * @example $.jGraduate.Paint({hex: '#rrggbb', linearGradient: o}); // throws an exception?\n*/\nimport Paint from './paint.js';\nimport {jPickerDefaults, jPickerMethod} from './jQuery.jPicker.js';\nimport {findPos} from './Util.js';\n\n/**\n * @todo JFH: This jQuery plugin was adapted to work within a Web Component.\n * We have to rewrite it as a pure webcomponent.\n*/\n\n/**\n * The jQuery namespace.\n * @external jQuery\n*/\n/**\n * The jQuery plugin namespace.\n * @namespace {PlainObject} fn\n * @memberof external:jQuery\n * @see {@link http://learn.jquery.com/plugins/|jQuery Plugins}\n */\n\nconst ns = {\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink'\n};\n\nif (!window.console) {\n window.console = {\n log (str) { /* empty fn */ },\n dir (str) { /* empty fn */ }\n };\n}\n\n/**\n* Adds {@link external:jQuery.jGraduate.Paint},\n* {@link external:jQuery.fn.jGraduateDefaults},\n* {@link external:jQuery.fn.jGraduate}.\n* @function module:jGraduate.jGraduate\n* @param {external:jQuery} $ The jQuery instance to wrap\n* @returns {external:jQuery}\n*/\n// export default function jQueryPluginJGraduate ($) {\n/* eslint-disable jsdoc/require-property */\n/**\n* @namespace {PlainObject} jGraduate\n* @memberof external:jQuery\n*/\nexport const jGraduate = /** @lends external:jQuery.jGraduate */ {\n /* eslint-enable jsdoc/require-property */\n /**\n * @class external:jQuery.jGraduate.Paint\n * @see module:jGraduate~Paint\n */\n Paint\n};\n\n// JSDoc doesn't show this as belonging to our `module:jGraduate.Options` type,\n// so we use `@see`\n/**\n* @namespace {module:jGraduate.Options} jGraduateDefaults\n* @memberof external:jQuery.fn\n*/\nexport const jGraduateDefaults = /** @lends external:jQuery.fn.jGraduateDefaults */ {\n /**\n * Creates an object with a 'none' color.\n * @type {external:jQuery.jGraduate.Paint}\n * @see module:jGraduate.Options\n */\n paint: new jGraduate.Paint(),\n /**\n * @namespace\n */\n window: {\n /**\n * @type {string}\n * @see module:jGraduate.Options\n */\n pickerTitle: 'Drag markers to pick a paint'\n },\n /**\n * @namespace\n */\n images: {\n /**\n * @type {string}\n * @see module:jGraduate.Options\n */\n clientPath: 'images/'\n },\n /**\n * @type {string}\n * @see module:jGraduate.Options\n */\n newstop: 'inverse' // same, inverse, black, white\n};\n\nconst isGecko = navigator.userAgent.includes('Gecko/');\n\n/**\n* @typedef {PlainObject<string, string>} module:jGraduate.Attrs\n*/\n/**\n* @param {SVGElement} elem\n* @param {module:jGraduate.Attrs} attrs\n* @returns {void}\n*/\nfunction setAttrs (elem, attrs) {\n if (isGecko) {\n Object.entries(attrs).forEach(([aname, val]) => {\n elem.setAttribute(aname, val);\n });\n } else {\n Object.entries(attrs).forEach(([aname, val]) => {\n const prop = elem[aname];\n if (prop && prop.constructor === 'SVGLength') {\n prop.baseVal.value = val;\n } else {\n elem.setAttribute(aname, val);\n }\n });\n }\n}\n\n/**\n* @param {string} name\n* @param {module:jGraduate.Attrs} attrs\n* @param {Element} newparent\n* @returns {SVGElement}\n*/\nfunction mkElem (name, attrs, newparent) {\n const elem = document.createElementNS(ns.svg, name);\n setAttrs(elem, attrs);\n if (newparent) {\n newparent.append(elem);\n }\n return elem;\n}\n\nfunction deepExtend(out) {\n out = out || {};\n\n for (let i = 1, len = arguments.length; i < len; ++i) {\n let obj = arguments[i];\n\n if (!obj) {\n continue;\n }\n\n for (const key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n\n // based on https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n if (Object.prototype.toString.call(obj[key]) === '[object Object]') {\n out[key] = deepExtend(out[key], obj[key]);\n continue;\n }\n\n out[key] = obj[key];\n }\n }\n\n return out;\n}\n\n/**\n* @typedef {PlainObject} module:jGraduate.ColorOpac Object may have one or both values\n* @property {string} [color] #Hex color\n* @property {Float} [opac] 0-1\n*/\n/**\n* @typedef {PlainObject} module:jGraduate.Options\n* @property {module:jGraduate~Paint} [paint] A Paint object object describing the paint to display initially; defaults to a new instance without options (defaults to opaque white)\n* @property {external:Window} [window]\n* @property {string} [window.pickerTitle=\"Drag markers to pick a paint\"]\n* @property {PlainObject} [images]\n* @property {string} [images.clientPath=\"images/\"]\n* @property {\"same\"|\"inverse\"|\"black\"|\"white\"|module:jGraduate.ColorOpac} [newstop=\"inverse\"]\n*/\n\n/**\n* @callback external:jQuery.fn.jGraduate.OkCallback\n* @param {external:jQuery.jGraduate.Paint} paint\n* @returns {void}\n*/\n/**\n* @callback external:jQuery.fn.jGraduate.CancelCallback\n* @returns {void}\n*/\n\n/**\n* @function external:jQuery.fn.jGraduate\n* @param {module:jGraduate.Options} [options]\n* @param {external:jQuery.fn.jGraduate.OkCallback} [okCallback] Called with a Paint object when Ok is pressed\n* @param {external:jQuery.fn.jGraduate.CancelCallback} [cancelCallback] Called with no arguments when Cancel is pressed\n* @returns {external:jQuery}\n*/\nexport function jGraduateMethod (elem, options, okCallback, cancelCallback) {\n const $this = elem,\n $settings = Object.assign({}, jGraduateDefaults, options || {}),\n id = $this.getAttribute('id'),\n idref = '#' + $this.getAttribute('id') + ' ';\n // JFH !!!!!\n const $shadowRoot = elem.parentNode;\n // const $wc = (selector) => $($shadowRoot.querySelectorAll(selector));\n\n if (!idref) {\n // eslint-disable-next-line no-alert\n alert('Container element must have an id attribute to maintain unique id strings for sub-elements.');\n return;\n }\n\n const okClicked = function () {\n switch ($this.paint.type) {\n case 'radialGradient':\n $this.paint.linearGradient = null;\n break;\n case 'linearGradient':\n $this.paint.radialGradient = null;\n break;\n case 'solidColor':\n $this.paint.radialGradient = $this.paint.linearGradient = null;\n break;\n }\n typeof $this.okCallback === 'function' && $this.okCallback($this.paint);\n $this.style.display = 'none';\n };\n const cancelClicked = function () {\n typeof $this.cancelCallback === 'function' && $this.cancelCallback();\n $this.style.display = 'none';\n };\n Object.assign($this, {\n // make a copy of the incoming paint\n paint: new jGraduate.Paint({copy: $settings.paint}),\n okCallback: typeof okCallback === 'function' ? okCallback : null,\n cancelCallback: typeof cancelCallback === 'function' ? cancelCallback : null\n });\n\n let // pos = $this.position(),\n color = null;\n const $win = window;\n\n if ($this.paint.type === 'none') {\n $this.paint = new jGraduate.Paint({solidColor: 'ffffff'});\n }\n $this.classList.add('jGraduate_Picker');\n /* eslint-disable max-len */\n $this.innerHTML = '<ul class=\"jGraduate_tabs\">' +\n '<li class=\"jGraduate_tab_color jGraduate_tab_current\" id=\"jGraduate_tab_color\" data-type=\"col\">Solid Color</li>' +\n '<li class=\"jGraduate_tab_lingrad\" id=\"jGraduate_tab_lingrad\" data-type=\"lg\">Linear Gradient</li>' +\n '<li class=\"jGraduate_tab_radgrad\" id=\"jGraduate_tab_radgrad\" data-type=\"rg\">Radial Gradient</li>' +\n '</ul>' +\n '<div class=\"jGraduate_colPick\" id=\"jGraduate_colPick\"></div>' +\n '<div class=\"jGraduate_gradPick\" id=\"jGraduate_gradPick\"></div>' +\n '<div class=\"jGraduate_LightBox\" id=\"jGraduate_LightBox\"></div>' +\n '<div id=\"' + id + '_jGraduate_stopPicker\" class=\"jGraduate_stopPicker\"></div>';\n /* JFH !!!! */\n const colPicker = $this.querySelector('#jGraduate_colPick');\n const gradPicker = $this.querySelector('#jGraduate_gradPick');\n const html = '<div id=\"' + id + '_jGraduate_Swatch\" class=\"jGraduate_Swatch\">' +\n '<h2 class=\"jGraduate_Title\">' + $settings.window.pickerTitle + '</h2>' +\n '<div id=\"' + id + '_jGraduate_GradContainer\" class=\"jGraduate_GradContainer\"></div>' +\n '<div id=\"' + id + '_jGraduate_StopSlider\" class=\"jGraduate_StopSlider\"></div>' +\n '</div>' +\n '<div class=\"jGraduate_Form jGraduate_Points jGraduate_lg_field\">' +\n '<div class=\"jGraduate_StopSection\">' +\n '<label class=\"jGraduate_Form_Heading\">Begin Point</label>' +\n '<div class=\"jGraduate_Form_Section\">' +\n '<label>x:</label>' +\n '<input type=\"text\" id=\"' + id + '_jGraduate_x1\" size=\"3\" title=\"Enter starting x value between 0.0 and 1.0\"/>' +\n '<label>y:</label>' +\n '<input type=\"text\" id=\"' + id + '_jGraduate_y1\" size=\"3\" title=\"Enter starting y value between 0.0 and 1.0\"/>' +\n '</div>' +\n '</div>' +\n '<div class=\"jGraduate_StopSection\">' +\n '<label class=\"jGraduate_Form_Heading\">End Point</label>' +\n '<div class=\"jGraduate_Form_Section\">' +\n '<label>x:</label>' +\n '<input type=\"text\" id=\"' + id + '_jGraduate_x2\" size=\"3\" title=\"Enter ending x value between 0.0 and 1.0\"/>' +\n '<label>y:</label>' +\n '<input type=\"text\" id=\"' + id + '_jGraduate_y2\" size=\"3\" title=\"Enter ending y value between 0.0 and 1.0\"/>' +\n '</div>' +\n '</div>' +\n '</div>' +\n '<div class=\"jGraduate_Form jGraduate_Points jGraduate_rg_field\">' +\n '<div class=\"jGraduate_StopSection\">' +\n '<label class=\"jGraduate_Form_Heading\">Center Point</label>' +\n '<div class=\"jGraduate_Form_Section\">' +\n '<label>x:</label>' +\n '<input type=\"text\" id=\"' + id + '_jGraduate_cx\" size=\"3\" title=\"Enter x value between 0.0 and 1.0\"/>' +\n '<label>y:</label>' +\n '<input type=\"text\" id=\"' + id + '_jGraduate_cy\" size=\"3\" title=\"Enter y value between 0.0 and 1.0\"/>' +\n '</div>' +\n '</div>' +\n '<div class=\"jGraduate_StopSection\">' +\n '<label class=\"jGraduate_Form_Heading\">Focal Point</label>' +\n '<div class=\"jGraduate_Form_Section\">' +\n '<label>Match center: <input type=\"checkbox\" checked=\"checked\" id=\"' + id + '_jGraduate_match_ctr\"/></label><br/>' +\n '<label>x:</label>' +\n '<input type=\"text\" id=\"' + id + '_jGraduate_fx\" size=\"3\" title=\"Enter x value between 0.0 and 1.0\"/>' +\n '<label>y:</label>' +\n '<input type=\"text\" id=\"' + id + '_jGraduate_fy\" size=\"3\" title=\"Enter y value between 0.0 and 1.0\"/>' +\n '</div>' +\n '</div>' +\n '</div>' +\n '<div class=\"jGraduate_StopSection jGraduate_SpreadMethod\">' +\n '<label class=\"jGraduate_Form_Heading\">Spread method</label>' +\n '<div class=\"jGraduate_Form_Section\">' +\n '<select class=\"jGraduate_spreadMethod\" id=\"jGraduate_spreadMethod\">' +\n '<option value=pad selected>Pad</option>' +\n '<option value=reflect>Reflect</option>' +\n '<option value=repeat>Repeat</option>' +\n '</select>' +\n '</div>' +\n '</div>' +\n '<div class=\"jGraduate_Form\">' +\n '<div class=\"jGraduate_Slider jGraduate_RadiusField jGraduate_rg_field\">' +\n '<label class=\"prelabel\">Radius:</label>' +\n '<div id=\"' + id + '_jGraduate_Radius\" class=\"jGraduate_SliderBar jGraduate_Radius\" title=\"Click to set radius\">' +\n '<img id=\"' + id + '_jGraduate_RadiusArrows\" class=\"jGraduate_RadiusArrows\" src=\"' + $settings.images.clientPath + 'rangearrows2.gif\">' +\n '</div>' +\n '<label><input type=\"text\" id=\"' + id + '_jGraduate_RadiusInput\" size=\"3\" value=\"100\"/>%</label>' +\n '</div>' +\n '<div class=\"jGraduate_Slider jGraduate_EllipField jGraduate_rg_field\">' +\n '<label class=\"prelabel\">Ellip:</label>' +\n '<div id=\"' + id + '_jGraduate_Ellip\" class=\"jGraduate_SliderBar jGraduate_Ellip\" title=\"Click to set Ellip\">' +\n '<img id=\"' + id + '_jGraduate_EllipArrows\" class=\"jGraduate_EllipArrows\" src=\"' + $settings.images.clientPath + 'rangearrows2.gif\">' +\n '</div>' +\n '<label><input type=\"text\" id=\"' + id + '_jGraduate_EllipInput\" size=\"3\" value=\"0\"/>%</label>' +\n '</div>' +\n '<div class=\"jGraduate_Slider jGraduate_AngleField jGraduate_rg_field\">' +\n '<label class=\"prelabel\">Angle:</label>' +\n '<div id=\"' + id + '_jGraduate_Angle\" class=\"jGraduate_SliderBar jGraduate_Angle\" title=\"Click to set Angle\">' +\n '<img id=\"' + id + '_jGraduate_AngleArrows\" class=\"jGraduate_AngleArrows\" src=\"' + $settings.images.clientPath + 'rangearrows2.gif\">' +\n '</div>' +\n '<label><input type=\"text\" id=\"' + id + '_jGraduate_AngleInput\" size=\"3\" value=\"0\"/>deg</label>' +\n '</div>' +\n '<div class=\"jGraduate_Slider jGraduate_OpacField\">' +\n '<label class=\"prelabel\">Opac:</label>' +\n '<div id=\"' + id + '_jGraduate_Opac\" class=\"jGraduate_SliderBar jGraduate_Opac\" title=\"Click to set Opac\">' +\n '<img id=\"' + id + '_jGraduate_OpacArrows\" class=\"jGraduate_OpacArrows\" src=\"' + $settings.images.clientPath + 'rangearrows2.gif\">' +\n '</div>' +\n '<label><input type=\"text\" id=\"' + id + '_jGraduate_OpacInput\" size=\"3\" value=\"100\"/>%</label>' +\n '</div>' +\n '</div>' +\n '<div class=\"jGraduate_OkCancel\">' +\n '<input type=\"button\" id=\"' + id + '_jGraduate_Ok\" class=\"jGraduate_Ok\" value=\"OK\"/>' +\n '<input type=\"button\" id=\"' + id + '_jGraduate_Cancel\" class=\"jGraduate_Cancel\" value=\"Cancel\"/>' +\n '</div>';\n const div = document.createElement('div');\n div.innerHTML = html;\n while (div.children.length > 0) {\n gradPicker.appendChild(div.children[0]);\n }\n /* eslint-enable max-len */\n // --------------\n // Set up all the SVG elements (the gradient, stops and rectangle)\n const MAX = 256,\n MARGINX = 0,\n MARGINY = 0,\n // STOP_RADIUS = 15 / 2,\n SIZEX = MAX - 2 * MARGINX,\n SIZEY = MAX - 2 * MARGINY;\n\n const attrInput = {};\n\n const SLIDERW = 145;\n const JQSliderBars = $this.querySelectorAll('.jGraduate_SliderBar');\n for (const JQSliderBar of JQSliderBars) {\n JQSliderBar.style.width = SLIDERW + 'px';\n }\n // JFH !!!!!!\n const container = $this.querySelector('#' + id + '_jGraduate_GradContainer');\n\n const svg = mkElem('svg', {\n id: id + '_jgraduate_svg',\n width: MAX,\n height: MAX,\n xmlns: ns.svg\n }, container);\n\n // This wasn't working as designed\n // let curType;\n // curType = curType || $this.paint.type;\n\n // if we are sent a gradient, import it\n let curType = $this.paint.type;\n\n let grad = $this.paint[curType];\n let curGradient = grad;\n\n const gradalpha = $this.paint.alpha;\n\n const isSolid = curType === 'solidColor';\n\n // Make any missing gradients\n switch (curType) {\n case 'solidColor':\n // fall through\n case 'linearGradient':\n if (!isSolid) {\n curGradient.id = id + '_lg_jgraduate_grad';\n grad = curGradient = svg.appendChild(curGradient);\n }\n mkElem('radialGradient', {\n id: id + '_rg_jgraduate_grad'\n }, svg);\n if (curType === 'linearGradient') { break; }\n // fall through\n case 'radialGradient':\n if (!isSolid) {\n curGradient.id = id + '_rg_jgraduate_grad';\n grad = curGradient = svg.appendChild(curGradient);\n }\n mkElem('linearGradient', {\n id: id + '_lg_jgraduate_grad'\n }, svg);\n }\n\n let stopGroup; // eslint-disable-line prefer-const\n if (isSolid) {\n // JFH !!!!!!!!\n grad = curGradient = $this.querySelector('#' + id + '_lg_jgraduate_grad');\n color = $this.paint[curType];\n mkStop(0, '#' + color, 1);\n\n const type = typeof $settings.newstop;\n\n if (type === 'string') {\n switch ($settings.newstop) {\n case 'same':\n mkStop(1, '#' + color, 1);\n break;\n\n case 'inverse': {\n // Invert current color for second stop\n let inverted = '';\n for (let i = 0; i < 6; i += 2) {\n // const ch = color.substr(i, 2);\n let inv = (255 - Number.parseInt(color.substr(i, 2), 16)).toString(16);\n if (inv.length < 2) inv = 0 + inv;\n inverted += inv;\n }\n mkStop(1, '#' + inverted, 1);\n break;\n } case 'white':\n mkStop(1, '#ffffff', 1);\n break;\n\n case 'black':\n mkStop(1, '#000000', 1);\n break;\n }\n } else if (type === 'object') {\n const opac = ('opac' in $settings.newstop) ? $settings.newstop.opac : 1;\n mkStop(1, ($settings.newstop.color || '#' + color), opac);\n }\n }\n\n const x1 = Number.parseFloat(grad.getAttribute('x1') || 0.0),\n y1 = Number.parseFloat(grad.getAttribute('y1') || 0.0),\n x2 = Number.parseFloat(grad.getAttribute('x2') || 1.0),\n y2 = Number.parseFloat(grad.getAttribute('y2') || 0.0);\n\n const cx = Number.parseFloat(grad.getAttribute('cx') || 0.5),\n cy = Number.parseFloat(grad.getAttribute('cy') || 0.5),\n fx = Number.parseFloat(grad.getAttribute('fx') || cx),\n fy = Number.parseFloat(grad.getAttribute('fy') || cy);\n\n const previewRect = mkElem('rect', {\n id: id + '_jgraduate_rect',\n x: MARGINX,\n y: MARGINY,\n width: SIZEX,\n height: SIZEY,\n fill: 'url(#' + id + '_jgraduate_grad)',\n 'fill-opacity': gradalpha / 100\n }, svg);\n\n // stop visuals created here\n const beginCoord = document.createElement('div');\n beginCoord.setAttribute('class', 'grad_coord jGraduate_lg_field');\n beginCoord.setAttribute('title', 'Begin Stop');\n beginCoord.textContent = 1;\n beginCoord.style.top = y1 * MAX;\n beginCoord.style.left = x1 * MAX;\n beginCoord.dataset.coord = 'start';\n container.appendChild(beginCoord);\n\n const endCoord = document.createElement('div');\n endCoord.setAttribute('class', 'grad_coord jGraduate_lg_field');\n endCoord.setAttribute('title', 'End stop');\n endCoord.textContent = 2;\n endCoord.style.top = y2 * MAX;\n endCoord.style.left = x2 * MAX;\n endCoord.dataset.coord = 'end';\n container.appendChild(endCoord);\n\n const centerCoord = document.createElement('div');\n centerCoord.setAttribute('class', 'grad_coord jGraduate_rg_field');\n centerCoord.setAttribute('title', 'Center stop');\n centerCoord.textContent = 'C';\n centerCoord.style.top = cy * MAX;\n centerCoord.style.left = cx * MAX;\n centerCoord.dataset.coord = 'center';\n container.appendChild(centerCoord);\n\n const focusCoord = document.createElement('div');\n focusCoord.setAttribute('class', 'grad_coord jGraduate_rg_field');\n focusCoord.setAttribute('title', 'Focus point');\n focusCoord.textContent = 'F';\n focusCoord.style.top = fy * MAX;\n focusCoord.style.left = fx * MAX;\n focusCoord.style.display = 'none';\n focusCoord.dataset.coord = 'focus';\n focusCoord.setAttribute('id', id + '_jGraduate_focusCoord');\n container.appendChild(focusCoord);\n\n let showFocus;\n const onAttrChangeHandler = (e, attr, isRadial) => {\n // TODO: Support values < 0 and > 1 (zoomable preview?)\n if (isNaN(Number.parseFloat(e.target.value)) || e.target.value < 0) {\n e.target.value = 0.0;\n } else if (e.target.value > 1) {\n e.target.value = 1.0;\n }\n\n if (!(attr[0] === 'f' &&\n !showFocus) &&\n ((isRadial && curType === 'radialGradient') || (!isRadial && curType === 'linearGradient'))) {\n curGradient.setAttribute(attr, e.target.value);\n }\n\n const $elem = isRadial\n ? attr[0] === 'c' ? centerCoord : focusCoord\n : attr[1] === '1' ? beginCoord : endCoord;\n\n if (attr.includes('x') === 'left') {\n $elem.style.left = e.target.value * MAX;\n } else if (attr.includes('x') === 'top') {\n $elem.style.top = e.target.value * MAX;\n }\n };\n for (const [i, attr] of ['x1', 'y1', 'x2', 'y2', 'cx', 'cy', 'fx', 'fy'].entries()) {\n const isRadial = isNaN(attr[1]);\n\n let attrval = curGradient.getAttribute(attr);\n if (!attrval) {\n // Set defaults\n if (isRadial) {\n // For radial points\n attrval = '0.5';\n } else {\n // Only x2 is 1\n attrval = attr === 'x2' ? '1.0' : '0.0';\n }\n }\n\n attrInput[attr] = $this.querySelector('#' + id + '_jGraduate_' + attr);\n attrInput[attr].value = attrval;\n attrInput[attr].addEventListener('change', (evt) => onAttrChangeHandler(evt, attr, isRadial));\n attrInput[attr].dispatchEvent(new Event('change'));\n }\n\n /**\n *\n * @param {Float} n\n * @param {Float|string} colr\n * @param {Float} opac\n * @param {boolean} [sel]\n * @param {SVGStopElement} [stopElem]\n * @returns {SVGStopElement}\n */\n function mkStop (n, colr, opac, sel, stopElem) {\n const stop = stopElem || mkElem('stop', {\n id: 'jq_stop_' + Math.floor((Math.random() * 10000) + 1),\n 'stop-color': colr,\n 'stop-opacity': opac,\n offset: n\n }, curGradient);\n if (stopElem) {\n colr = stopElem.getAttribute('stop-color');\n opac = stopElem.getAttribute('stop-opacity');\n n = stopElem.getAttribute('offset');\n } else {\n curGradient.appendChild(stop);\n }\n if (opac === null) opac = 1;\n\n const pickerD = 'M-6.2,0.9c3.6-4,6.7-4.3,6.7-12.4c-0.2,7.9,' +\n '3.1,8.8,6.5,12.4c3.5,3.8,2.9,9.6,0,12.3c-3.1,2.8-10.4,' +\n '2.7-13.2,0C-9.6,9.9-9.4,4.4-6.2,0.9z';\n\n const pathbg = mkElem('path', {\n id: 'jq_pathbg_' + Math.floor((Math.random() * 10000) + 1),\n d: pickerD,\n fill: 'url(#jGraduate_trans)',\n transform: 'translate(' + (10 + n * MAX) + ', 26)'\n }, stopGroup);\n\n const path = mkElem('path', {\n d: pickerD,\n fill: colr,\n 'fill-opacity': opac,\n transform: 'translate(' + (10 + n * MAX) + ', 26)',\n stroke: '#000',\n 'stroke-width': 1.5\n }, stopGroup);\n\n path.addEventListener('mousedown', function (e) {\n selectStop(this);\n drag = curStop;\n $win.addEventListener('mousemove', dragColor);\n $win.addEventListener('mouseup', remDrags);\n stopOffset = findPos(stopMakerDiv);\n e.preventDefault();\n return false;\n });\n path.dataset.stop = stop.getAttribute('id');\n path.dataset.bg = pathbg.getAttribute('id');\n path.addEventListener('dblclick', function () {\n $this.querySelector('#jGraduate_LightBox').style.display = 'block';\n const colorhandle = this;\n let stopOpacity = Number(stop.getAttribute('stop-opacity')) || 1;\n let stopColor = stop.getAttribute('stop-color') || 1;\n let thisAlpha = (Number.parseFloat(stopOpacity) * 255).toString(16);\n while (thisAlpha.length < 2) { thisAlpha = '0' + thisAlpha; }\n colr = stopColor.substr(1) + thisAlpha;\n const jqPickerElem = $this.querySelector('#' + id + '_jGraduate_stopPicker');\n jqPickerElem.style.left = '100px';\n jqPickerElem.style.bottom = '15px';\n jPickerMethod(jqPickerElem, {\n window: {title: 'Pick the start color and opacity for the gradient'},\n images: {clientPath: $settings.images.clientPath},\n color: {active: colr, alphaSupport: true}\n }, function (clr, arg2) {\n stopColor = clr.val('hex') ? ('#' + clr.val('hex')) : 'none';\n stopOpacity = clr.val('a') !== null ? clr.val('a') / 256 : 1;\n colorhandle.setAttribute('fill', stopColor);\n colorhandle.setAttribute('fill-opacity', stopOpacity);\n stop.setAttribute('stop-color', stopColor);\n stop.setAttribute('stop-opacity', stopOpacity);\n $this.querySelector('#jGraduate_LightBox').style.display = 'none';\n $this.querySelector('#' + id + '_jGraduate_stopPicker').style.display = 'none';\n }, null, function () {\n $this.querySelector('#jGraduate_LightBox').style.display = 'none';\n $this.querySelector('#' + id + '_jGraduate_stopPicker').style.display = 'none';\n });\n });\n const jqStopEls = curGradient.querySelectorAll('stop');\n for (const jqStopEl of jqStopEls) {\n const curS = jqStopEl;\n if (Number(jqStopEl.getAttribute('offset')) > n) {\n if (!colr) {\n const newcolor = jqStopEl.getAttribute('stop-color');\n const newopac = jqStopEl.getAttribute('stop-opacity');\n stop.setAttribute('stop-color', newcolor);\n path.setAttribute('fill', newcolor);\n stop.setAttribute('stop-opacity', newopac === null ? 1 : newopac);\n path.setAttribute('fill-opacity', newopac === null ? 1 : newopac);\n }\n curS.insertAdjacentElement('beforebegin', stop);\n // curS.before(stop);\n // return false;\n }\n // return true;\n }\n if (sel) selectStop(path);\n return stop;\n }\n\n /**\n *\n * @returns {void}\n */\n function remStop () {\n delStop.setAttribute('display', 'none');\n const path = curStop;\n delete path.dataset.stop;\n delete path.dataset.bg;\n curStop.parentNode.removeChild(curStop);\n }\n\n const stopMakerDiv = $this.querySelector('#' + id + '_jGraduate_StopSlider');\n\n let stops, curStop, drag;\n\n const delStop = mkElem('path', {\n d: 'm9.75,-6l-19.5,19.5m0,-19.5l19.5,19.5',\n fill: 'none',\n stroke: '#D00',\n 'stroke-width': 5,\n display: 'none'\n }, undefined); // stopMakerSVG);\n\n /**\n * @param {Element} item\n * @returns {void}\n */\n function selectStop (item) {\n if (curStop) curStop.setAttribute('stroke', '#000');\n item.setAttribute('stroke', 'blue');\n curStop = item;\n }\n\n let stopOffset;\n\n /**\n *\n * @returns {void}\n */\n function remDrags () {\n $win.removeEventListener('mousemove', dragColor);\n if (delStop.getAttribute('display') !== 'none') {\n remStop();\n }\n drag = null;\n }\n\n let scaleX = 1, scaleY = 1, angle = 0;\n\n let cX = cx;\n let cY = cy;\n /**\n *\n * @returns {void}\n */\n function xform () {\n const rot = angle ? 'rotate(' + angle + ',' + cX + ',' + cY + ') ' : '';\n if (scaleX === 1 && scaleY === 1) {\n curGradient.removeAttribute('gradientTransform');\n // $wc('#ang').addClass('dis');\n } else {\n const x = -cX * (scaleX - 1);\n const y = -cY * (scaleY - 1);\n curGradient.setAttribute(\n 'gradientTransform',\n rot + 'translate(' + x + ',' + y + ') scale(' +\n scaleX + ',' + scaleY + ')'\n );\n // $wc('#ang').removeClass('dis');\n }\n }\n\n /**\n * @param {Event} evt\n * @returns {void}\n */\n function dragColor (evt) {\n let x = evt.pageX - stopOffset.left;\n const y = evt.pageY - stopOffset.top;\n x = x < 10\n ? 10\n : x > MAX + 10\n ? MAX + 10\n : x;\n\n const xfStr = 'translate(' + x + ', 26)';\n if (y < -60 || y > 130) {\n delStop.setAttribute('display', 'block');\n delStop.setAttribute('transform', xfStr);\n } else {\n delStop.setAttribute('display', 'none');\n }\n\n drag.setAttribute('transform', xfStr);\n const jqpgpath = $this.querySelector('#'+drag.dataset.bg); \n jqpgpath.setAttribute('transform', xfStr);\n const stop = $this.querySelector('#'+drag.dataset.stop); \n const sX = (x - 10) / MAX;\n\n stop.setAttribute('offset', sX);\n\n let last = 0;\n const jqStopElems = curGradient.querySelectorAll('stop');\n [].forEach.call(jqStopElems, function (jqStopElem) {\n const cur = jqStopElem.getAttribute('offset');\n const t = jqStopElem;\n if (cur < last) {\n t.previousElementSibling.insertAdjacentElement('beforebegin', t);\n stops = curGradient.querySelectorAll('stop');\n }\n last = cur;\n });\n }\n\n const stopMakerSVG = mkElem('svg', {\n width: '100%',\n height: 45\n }, stopMakerDiv);\n\n const transPattern = mkElem('pattern', {\n width: 16,\n height: 16,\n patternUnits: 'userSpaceOnUse',\n id: 'jGraduate_trans'\n }, stopMakerSVG);\n\n const transImg = mkElem('image', {\n width: 16,\n height: 16\n }, transPattern);\n\n const bgImage = $settings.images.clientPath + 'map-opacity.png';\n\n transImg.setAttributeNS(ns.xlink, 'xlink:href', bgImage);\n\n stopMakerSVG.addEventListener('click', function (evt) {\n stopOffset = findPos(stopMakerDiv);\n const {target} = evt;\n if (target.tagName === 'path') return;\n let x = evt.pageX - stopOffset.left - 8;\n x = x < 10 ? 10 : x > MAX + 10 ? MAX + 10 : x;\n mkStop(x / MAX, 0, 0, true);\n evt.stopPropagation();\n });\n\n stopMakerSVG.addEventListener('mouseover', function () {\n stopMakerSVG.append(delStop);\n });\n\n stopGroup = mkElem('g', {}, stopMakerSVG);\n\n mkElem('line', {\n x1: 10,\n y1: 15,\n x2: MAX + 10,\n y2: 15,\n 'stroke-width': 2,\n stroke: '#000'\n }, stopMakerSVG);\n const spreadMethodOpt = gradPicker.querySelector('#jGraduate_spreadMethod');\n spreadMethodOpt.addEventListener('change', function () {\n curGradient.setAttribute('spreadMethod', this.value);\n });\n\n // handle dragging the stop around the swatch\n let draggingCoord = null;\n\n const onCoordDrag = function (evt) {\n let x = evt.pageX - offset.left;\n let y = evt.pageY - offset.top;\n\n // clamp stop to the swatch\n x = x < 0 ? 0 : x > MAX ? MAX : x;\n y = y < 0 ? 0 : y > MAX ? MAX : y;\n\n draggingCoord.style.left = x + 'px';\n draggingCoord.style.top = y + 'px';\n\n // calculate stop offset\n const fracx = x / SIZEX;\n const fracy = y / SIZEY;\n\n const type = draggingCoord.dataset.coord;\n const grd = curGradient;\n\n switch (type) {\n case 'start':\n attrInput.x1.value = fracx;\n attrInput.y1.value = fracy;\n grd.setAttribute('x1', fracx);\n grd.setAttribute('y1', fracy);\n break;\n case 'end':\n attrInput.x2.value = fracx;\n attrInput.y2.value = fracy;\n grd.setAttribute('x2', fracx);\n grd.setAttribute('y2', fracy);\n break;\n case 'center':\n attrInput.cx.value = fracx;\n attrInput.cy.value = fracy;\n grd.setAttribute('cx', fracx);\n grd.setAttribute('cy', fracy);\n cX = fracx;\n cY = fracy;\n xform();\n break;\n case 'focus':\n attrInput.fx.value = fracx;\n attrInput.fy.value = fracy;\n grd.setAttribute('fx', fracx);\n grd.setAttribute('fy', fracy);\n xform();\n }\n\n evt.preventDefault();\n };\n\n const onCoordUp = function () {\n draggingCoord = null;\n $win.removeEventListener('mousemove', onCoordDrag);\n $win.removeEventListener('mouseup', onCoordUp);\n };\n\n // Linear gradient\n // (function () {\n\n stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');\n\n let numstops = stops.length;\n // if there are not at least two stops, then\n if (numstops < 2) {\n while (numstops < 2) {\n curGradient.append(document.createElementNS(ns.svg, 'stop'));\n ++numstops;\n }\n stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');\n }\n\n for (let i = 0; i < numstops; i++) {\n mkStop(0, 0, 0, 0, stops[i]);\n }\n\n spreadMethodOpt.setAttribute('value', curGradient.getAttribute('spreadMethod') || 'pad');\n\n let offset;\n\n // No match, so show focus point\n showFocus = false;\n\n previewRect.setAttribute('fill-opacity', gradalpha / 100);\n\n const JQGradCoords = $this.querySelectorAll('#' + id + ' div.grad_coord');\n const onMouseDownGradCoords = (e) => {\n e.preventDefault();\n draggingCoord = e.target;\n offset = findPos(draggingCoord.parentNode);\n $win.addEventListener('mousemove', onCoordDrag);\n $win.addEventListener('mouseup', onCoordUp);\n };\n for (const JQGradCoord of JQGradCoords) {\n JQGradCoord.addEventListener('mousedown', onMouseDownGradCoords);\n }\n\n // bind GUI elements\n $this.querySelector('#' + id + '_jGraduate_Ok').addEventListener('click', function () {\n $this.paint.type = curType;\n $this.paint[curType] = curGradient.cloneNode(true);\n $this.paint.solidColor = null;\n okClicked();\n });\n $this.querySelector('#' + id + '_jGraduate_Cancel').addEventListener('click', cancelClicked);\n\n if (curType === 'radialGradient') {\n if (showFocus) {\n focusCoord.style.display = 'block';\n } else {\n focusCoord.style.display = 'none';\n attrInput.fx.value = '';\n attrInput.fy.value = '';\n }\n }\n\n $this.querySelector('#' + id + '_jGraduate_match_ctr').checked = !showFocus;\n\n let lastfx, lastfy;\n const onMatchCtrHandler = (e) => {\n showFocus = !e.target.checked;\n if (showFocus) {\n focusCoord.style.display = 'block';\n } else {\n focusCoord.style.display = 'none';\n }\n attrInput.fx.value = '';\n attrInput.fy.value = '';\n const grd = curGradient;\n if (!showFocus) {\n lastfx = grd.getAttribute('fx');\n lastfy = grd.getAttribute('fy');\n grd.removeAttribute('fx');\n grd.removeAttribute('fy');\n } else {\n const fX = lastfx || 0.5;\n const fY = lastfy || 0.5;\n grd.setAttribute('fx', fX);\n grd.setAttribute('fy', fY);\n attrInput.fx.value = fX;\n attrInput.fy.value = fY;\n }\n };\n $this.querySelector('#' + id + '_jGraduate_match_ctr').addEventListener('change', onMatchCtrHandler);\n stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');\n numstops = stops.length;\n // if there are not at least two stops, then\n if (numstops < 2) {\n while (numstops < 2) {\n curGradient.append(document.createElementNS(ns.svg, 'stop'));\n ++numstops;\n }\n stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');\n }\n\n let slider;\n\n const setSlider = function (e) {\n const {offset: {left}} = slider;\n const divi = slider.parent;\n let x = (e.pageX - left - Number.parseInt(getComputedStyle(divi, null).getPropertyValue('border-left-width')));\n if (x > SLIDERW) x = SLIDERW;\n if (x <= 0) x = 0;\n const posx = x - 5;\n x /= SLIDERW;\n\n switch (slider.type) {\n case 'radius':\n x = (x * 2) ** 2.5;\n if (x > 0.98 && x < 1.02) x = 1;\n if (x <= 0.01) x = 0.01;\n curGradient.setAttribute('r', x);\n break;\n case 'opacity':\n $this.paint.alpha = Number.parseInt(x * 100);\n previewRect.setAttribute('fill-opacity', x);\n break;\n case 'ellip':\n scaleX = 1;\n scaleY = 1;\n if (x < 0.5) {\n x /= 0.5; // 0.001\n scaleX = x <= 0 ? 0.01 : x;\n } else if (x > 0.5) {\n x /= 0.5; // 2\n x = 2 - x;\n scaleY = x <= 0 ? 0.01 : x;\n }\n xform();\n x -= 1;\n if (scaleY === x + 1) {\n x = Math.abs(x);\n }\n break;\n case 'angle':\n x -= 0.5;\n angle = x *= 180;\n xform();\n x /= 100;\n break;\n }\n slider.elem.style.marginLeft = posx + 'px';\n x = Math.round(x * 100);\n slider.input.value = x;\n };\n\n let ellipVal = 0, angleVal = 0;\n\n if (curType === 'radialGradient') {\n const tlist = curGradient.gradientTransform.baseVal;\n if (tlist.numberOfItems === 2) {\n const t = tlist.getItem(0);\n const s = tlist.getItem(1);\n if (t.type === 2 && s.type === 3) {\n const m = s.matrix;\n if (m.a !== 1) {\n ellipVal = Math.round(-(1 - m.a) * 100);\n } else if (m.d !== 1) {\n ellipVal = Math.round((1 - m.d) * 100);\n }\n }\n } else if (tlist.numberOfItems === 3) {\n // Assume [R][T][S]\n const r = tlist.getItem(0);\n const t = tlist.getItem(1);\n const s = tlist.getItem(2);\n\n if (r.type === 4 &&\n t.type === 2 &&\n s.type === 3\n ) {\n angleVal = Math.round(r.angle);\n const m = s.matrix;\n if (m.a !== 1) {\n ellipVal = Math.round(-(1 - m.a) * 100);\n } else if (m.d !== 1) {\n ellipVal = Math.round((1 - m.d) * 100);\n }\n }\n }\n }\n const sliders = {\n radius: {\n handle: '#' + id + '_jGraduate_RadiusArrows',\n input: '#' + id + '_jGraduate_RadiusInput',\n val: (curGradient.getAttribute('r') || 0.5) * 100\n },\n opacity: {\n handle: '#' + id + '_jGraduate_OpacArrows',\n input: '#' + id + '_jGraduate_OpacInput',\n val: $this.paint.alpha || 100\n },\n ellip: {\n handle: '#' + id + '_jGraduate_EllipArrows',\n input: '#' + id + '_jGraduate_EllipInput',\n val: ellipVal\n },\n angle: {\n handle: '#' + id + '_jGraduate_AngleArrows',\n input: '#' + id + '_jGraduate_AngleInput',\n val: angleVal\n }\n };\n for (const [index, [type, data]] of Object.entries(Object.entries(sliders))) {\n const handle = $this.querySelector(data.handle);\n const sInput = $this.querySelector(data.input);\n handle.addEventListener('mousedown', function (evt) {\n const parent = handle.parentNode;\n slider = {\n type,\n elem: handle,\n input: sInput,\n parent,\n offset: findPos(parent)\n };\n $win.addEventListener('mousemove', dragSlider);\n $win.addEventListener('mouseup', stopSlider);\n evt.preventDefault();\n });\n sInput.value = data.val;\n sInput.addEventListener('change', function () {\n const isRad = curType === 'radialGradient';\n let val = Number(this.value);\n let xpos = 0;\n switch (type) {\n case 'radius':\n if (isRad) curGradient.setAttribute('r', val / 100);\n xpos = (((val / 100) ** (1 / 2.5)) / 2) * SLIDERW;\n break;\n\n case 'opacity':\n $this.paint.alpha = val;\n previewRect.setAttribute('fill-opacity', val / 100);\n xpos = val * (SLIDERW / 100);\n break;\n\n case 'ellip':\n scaleX = scaleY = 1;\n if (val === 0) {\n xpos = SLIDERW * 0.5;\n break;\n }\n if (val > 99.5) val = 99.5;\n if (val > 0) {\n scaleY = 1 - (val / 100);\n } else {\n scaleX = -(val / 100) - 1;\n }\n\n xpos = SLIDERW * ((val + 100) / 2) / 100;\n if (isRad) xform();\n break;\n\n case 'angle':\n angle = val;\n xpos = angle / 180;\n xpos += 0.5;\n xpos *= SLIDERW;\n if (isRad) xform();\n }\n if (xpos > SLIDERW) {\n xpos = SLIDERW;\n } else if (xpos < 0) {\n xpos = 0;\n }\n handle.style.marginLeft = (xpos - 5) + 'px';\n });\n sInput.dispatchEvent(new Event('change'));\n }\n\n const dragSlider = function (evt) {\n setSlider(evt);\n evt.preventDefault();\n };\n\n const stopSlider = function (evt) {\n $win.removeEventListener('mousemove', dragSlider);\n $win.removeEventListener('mouseup', stopSlider);\n slider = null;\n };\n\n // --------------\n let thisAlpha = ($this.paint.alpha * 255 / 100).toString(16);\n while (thisAlpha.length < 2) { thisAlpha = '0' + thisAlpha; }\n thisAlpha = thisAlpha.split('.')[0];\n color = $this.paint.solidColor === 'none' ? '' : $this.paint.solidColor + thisAlpha;\n\n if (!isSolid) {\n color = stops[0].getAttribute('stop-color');\n }\n // This should be done somewhere else, probably\n Object.assign(jPickerDefaults.window, {\n alphaSupport: true, effects: {type: 'show', speed: 0}\n });\n\n jPickerMethod(\n colPicker,\n {\n window: {title: $settings.window.pickerTitle},\n images: {clientPath: $settings.images.clientPath},\n color: {active: color, alphaSupport: true}\n },\n function (clr) {\n $this.paint.type = 'solidColor';\n $this.paint.alpha = clr.val('ahex') ? Math.round((clr.val('a') / 255) * 100) : 100;\n $this.paint.solidColor = clr.val('hex') ? clr.val('hex') : 'none';\n $this.paint.radialGradient = null;\n okClicked();\n },\n null,\n function () { cancelClicked(); }\n );\n\n // JFH !!!!\n const tabs = $this.querySelectorAll('.jGraduate_tabs li');\n const onTabsClickHandler = (e) => {\n for (const tab of tabs) {\n tab.classList.remove('jGraduate_tab_current');\n }\n e.target.classList.add('jGraduate_tab_current');\n const innerDivs = $this.querySelectorAll(idref + ' > div');\n [].forEach.call(innerDivs, function (innerDiv) {\n innerDiv.style.display = 'none';\n });\n const type = e.target.dataset.type;\n gradPicker.style.display = 'block';\n if (type === 'rg' || type === 'lg') {\n const tFileds = $this.querySelectorAll('.jGraduate_' + type + '_field');\n [].forEach.call(tFileds, function (tFiled) {\n tFiled.style.display = 'block';\n });\n const t1Fileds = $this.querySelectorAll('.jGraduate_' + (type === 'lg' ? 'rg' : 'lg') + '_field');\n [].forEach.call(t1Fileds, function (tFiled) {\n tFiled.style.display = 'none';\n });\n $this.querySelectorAll('#' + id + '_jgraduate_rect')[0]\n .setAttribute('fill', 'url(#' + id + '_' + type + '_jgraduate_grad)');\n curType = type === 'lg' ? 'linearGradient' : 'radialGradient';\n const jOpacInput = $this.querySelector('#' + id + '_jGraduate_OpacInput');\n jOpacInput.value = $this.paint.alpha;\n jOpacInput.dispatchEvent(new Event('change'));\n const newGrad = $this.querySelectorAll('#' + id + '_' + type + '_jgraduate_grad')[0];\n if (curGradient !== newGrad) {\n const curStops = curGradient.querySelectorAll('stop');\n while (newGrad.firstChild) {\n newGrad.removeChild(newGrad.firstChild);\n }\n [].forEach.call(curStops, function (curS) {\n newGrad.appendChild(curS);\n });\n curGradient = newGrad;\n const sm = spreadMethodOpt.getAttribute('value');\n curGradient.setAttribute('spreadMethod', sm);\n }\n showFocus = type === 'rg' && curGradient.getAttribute('fx') !== null && !(cx === fx && cy === fy);\n const jQfocusCoord = $this.querySelectorAll('#' + id + '_jGraduate_focusCoord');\n if (jQfocusCoord[0].style.display === 'none') {\n jQfocusCoord[0].style.display = 'block';\n } else {\n jQfocusCoord[0].style.display = 'none';\n }\n if (showFocus) {\n $this.querySelectorAll('#' + id + '_jGraduate_match_ctr')[0].checked = false;\n }\n } else {\n gradPicker.style.display = 'none';\n colPicker.style.display = 'block';\n }\n };\n for (const tab of tabs) {\n tab.addEventListener('click', onTabsClickHandler);\n }\n const innerDivs = $this.querySelectorAll(idref + ' > div');\n [].forEach.call(innerDivs, function (innerDiv) {\n innerDiv.style.display = 'none';\n });\n for (const tab of tabs) {\n tab.classList.remove('jGraduate_tab_current');\n }\n let tab;\n switch ($this.paint.type) {\n case 'linearGradient':\n tab = $this.querySelector(idref + ' .jGraduate_tab_lingrad');\n break;\n case 'radialGradient':\n tab = $this.querySelector(idref + ' .jGraduate_tab_radgrad');\n break;\n default:\n tab = $this.querySelector(idref + ' .jGraduate_tab_color');\n break;\n }\n $this.style.display = 'block';\n\n // jPicker will try to show after a 0ms timeout, so need to fire this after that\n setTimeout(() => {\n tab.classList.add('jGraduate_tab_current');\n tab.dispatchEvent(new Event('click'));\n }, 10);\n}\n","/**\n *\n */\nexport default class Paint {\n /**\n * @param {module:jGraduate.jGraduatePaintOptions} [opt]\n */\n constructor (opt) {\n const options = opt || {};\n this.alpha = isNaN(options.alpha) ? 100 : options.alpha;\n // copy paint object\n if (options.copy) {\n /**\n * @name module:jGraduate~Paint#type\n * @type {\"none\"|\"solidColor\"|\"linearGradient\"|\"radialGradient\"}\n */\n this.type = options.copy.type;\n /**\n * Represents opacity (0-100).\n * @name module:jGraduate~Paint#alpha\n * @type {Float}\n */\n this.alpha = options.copy.alpha;\n /**\n * Represents #RRGGBB hex of color.\n * @name module:jGraduate~Paint#solidColor\n * @type {string}\n */\n this.solidColor = null;\n /**\n * @name module:jGraduate~Paint#linearGradient\n * @type {SVGLinearGradientElement}\n */\n this.linearGradient = null;\n /**\n * @name module:jGraduate~Paint#radialGradient\n * @type {SVGRadialGradientElement}\n */\n this.radialGradient = null;\n\n switch (this.type) {\n case 'none':\n break;\n case 'solidColor':\n this.solidColor = options.copy.solidColor;\n break;\n case 'linearGradient':\n this.linearGradient = options.copy.linearGradient.cloneNode(true);\n break;\n case 'radialGradient':\n this.radialGradient = options.copy.radialGradient.cloneNode(true);\n break;\n }\n // create linear gradient paint\n } else if (options.linearGradient) {\n this.type = 'linearGradient';\n this.solidColor = null;\n this.radialGradient = null;\n this.linearGradient = options.linearGradient.cloneNode(true);\n // create linear gradient paint\n } else if (options.radialGradient) {\n this.type = 'radialGradient';\n this.solidColor = null;\n this.linearGradient = null;\n this.radialGradient = options.radialGradient.cloneNode(true);\n // create solid color paint\n } else if (options.solidColor) {\n this.type = 'solidColor';\n this.solidColor = options.solidColor;\n // create empty paint\n } else {\n this.type = 'none';\n this.solidColor = null;\n this.linearGradient = null;\n this.radialGradient = null;\n }\n }\n}\n","var isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `Number.isInteger` method implementation\n// https://tc39.es/ecma262/#sec-number.isinteger\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","var $ = require('../internals/export');\nvar isInteger = require('../internals/is-integer');\n\nvar abs = Math.abs;\n\n// `Number.isSafeInteger` method\n// https://tc39.es/ecma262/#sec-number.issafeinteger\n$({ target: 'Number', stat: true }, {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1FFFFFFFFFFFFF;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar nativeStartsWith = ''.startsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = String(requireObjectCoercible(this));\n notARegExp(searchString);\n var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return nativeStartsWith\n ? nativeStartsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","import {jGraduate} from './jgraduate/jQuery.jGraduate.js';\n/**\n *\n */\nclass PaintBox {\n /**\n * @param {string|Element|external:jQuery} container\n * @param {\"fill\"} type\n */\n constructor (container, type) {\n // set up gradients to be used for the buttons\n const svgdocbox = new DOMParser().parseFromString(\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\">\n <rect\n fill=\"#000000\" opacity=\"1\" width=\"14\" height=\"14\"/>\n <defs><linearGradient id=\"gradbox_${PaintBox.ctr++}\"/></defs>\n </svg>`,\n 'text/xml'\n );\n\n let docElem = svgdocbox.documentElement;\n docElem = document.importNode(docElem, true);\n container.appendChild(docElem);\n\n this.rect = docElem.firstElementChild;\n this.defs = docElem.getElementsByTagName('defs')[0];\n this.grad = this.defs.firstElementChild;\n // this.paint = new $.jGraduate.Paint({solidColor: color});\n this.type = type;\n }\n\n /**\n * @param {module:jGraduate~Paint} paint\n * @returns {void}\n */\n setPaint (paint) {\n this.paint = paint;\n\n const ptype = paint.type;\n const opac = paint.alpha / 100;\n\n let fillAttr = 'none';\n switch (ptype) {\n case 'solidColor':\n fillAttr = (paint[ptype] !== 'none') ? '#' + paint[ptype] : paint[ptype];\n break;\n case 'linearGradient':\n case 'radialGradient': {\n this.grad.remove();\n this.grad = paint[ptype];\n this.defs.appendChild(this.grad);\n const id = this.grad.id = 'gradbox_' + this.type;\n fillAttr = 'url(#' + id + ')';\n break;\n }\n }\n\n this.rect.setAttribute('fill', fillAttr);\n this.rect.setAttribute('opacity', opac);\n }\n /**\n * @param {PlainObject} svgCanvas\n * @param {string} color\n * @param {Float} opac\n * @param {string} type\n * @returns {module:jGraduate~Paint}\n */\n static getPaint (svgCanvas, color, opac, type) {\n // update the editor's fill paint\n const opts = {alpha: opac};\n if (color.startsWith('url(#')) {\n let refElem = svgCanvas.getRefElem(color);\n refElem = (refElem) ? refElem.cloneNode(true) : document.querySelectorAll('#' + type + '_color defs *')[0];\n opts[refElem.tagName] = refElem;\n } else if (color.startsWith('#')) {\n opts.solidColor = color.substr(1);\n } else {\n opts.solidColor = 'none';\n }\n return new jGraduate.Paint(opts);\n }\n\n /**\n * @param {PlainObject} svgcanvas\n * @param {PlainObject} selectedElement\n * @returns {any}\n */\n update (svgcanvas, selectedElement) {\n if (!selectedElement) { return null; }\n\n const {type} = this;\n switch (selectedElement.tagName) {\n case 'use':\n case 'image':\n case 'foreignObject':\n // These elements don't have fill or stroke, so don't change\n // the current value\n return null;\n case 'g':\n case 'a': {\n const childs = selectedElement.getElementsByTagName('*');\n\n let gPaint = null;\n for (let i = 0, len = childs.length; i < len; i++) {\n const elem = childs[i];\n const p = elem.getAttribute(type);\n if (i === 0) {\n gPaint = p;\n } else if (gPaint !== p) {\n gPaint = null;\n break;\n }\n }\n\n if (gPaint === null) {\n // No common color, don't update anything\n this._paintColor = null;\n return null;\n }\n this._paintColor = gPaint;\n this._paintOpacity = 1;\n break;\n } default: {\n this._paintOpacity = Number.parseFloat(selectedElement.getAttribute(type + '-opacity'));\n if (Number.isNaN(this._paintOpacity)) {\n this._paintOpacity = 1.0;\n }\n\n const defColor = type === 'fill' ? 'black' : 'none';\n this._paintColor = selectedElement.getAttribute(type) || defColor;\n }\n }\n\n this._paintOpacity *= 100;\n\n const paint = PaintBox.getPaint(svgcanvas, this._paintColor, this._paintOpacity, type);\n // update the rect inside #fill_color/#stroke_color\n this.setPaint(paint);\n return (paint);\n }\n}\nPaintBox.ctr = 0;\n\nexport default PaintBox;\n","import {jGraduate, jGraduateMethod} from './jgraduate/jQuery.jGraduate.js';\nimport PaintBox from './PaintBox.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n .jPicker .Icon {\n display: inline-block;\n height: 24px;\n position: relative;\n text-align: left;\n width: 25px\n}\n\n.jPicker .Icon span.Color, .jPicker .Icon span.Alpha {\n background-position: 2px 2px;\n display: block;\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%\n}\n\n.jPicker .Icon span.Image {\n background-repeat: no-repeat;\n cursor: pointer;\n display: block;\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%\n}\n\n.jPicker.Container {\n z-index: 10\n}\n\ntable.jPicker {\n background-color: #efefef;\n border: 1px outset #666;\n font-family: Arial, Helvetica, Sans-Serif;\n font-size: 12px!important;\n margin: 0;\n padding: 5px;\n width: 545px;\n z-index: 20\n}\n\n.jPicker .Move {\n background-color: #ddd;\n border-color: #fff #666 #666 #fff;\n border-style: solid;\n border-width: 1px;\n cursor: move;\n height: 12px;\n padding: 0\n}\n\n.jPicker .Title {\n font-size: 11px!important;\n font-weight: bold;\n margin: -2px 0 0 0;\n padding: 0;\n text-align: center;\n width: 100%\n}\n\n.jPicker div.Map {\n border-bottom: 2px solid #fff;\n border-left: 2px solid #9a9a9a;\n border-right: 2px solid #fff;\n border-top: 2px solid #9a9a9a;\n cursor: crosshair;\n height: 260px;\n margin: 0 5px 0 5px;\n overflow: hidden;\n padding: 0;\n position: relative;\n width: 260px\n}\n\n.jPicker div[class=\"Map\"] {\n height: 256px;\n width: 256px\n}\n\n.jPicker div.Bar {\n border-bottom: 2px solid #fff;\n border-left: 2px solid #9a9a9a;\n border-right: 2px solid #fff;\n border-top: 2px solid #9a9a9a;\n cursor: n-resize;\n height: 260px;\n margin: 12px 10px 0 5px;\n overflow: hidden;\n padding: 0;\n position: relative;\n width: 24px\n}\n\n.jPicker div[class=\"Bar\"] {\n height: 256px;\n width: 20px\n}\n\n.jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Map .Map3, .jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4, .jPicker .Bar .Map5, .jPicker .Bar .Map6 {\n background-color: transparent;\n background-image: none;\n display: block;\n left: 0;\n position: absolute;\n top: 0\n}\n\n.jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Map .Map3 {\n height: 2596px;\n width: 256px\n}\n\n.jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4 {\n height: 3896px;\n width: 20px\n}\n\n.jPicker .Bar .Map5, .jPicker .Bar .Map6 {\n height: 256px;\n width: 20px\n}\n\n.jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Bar .Map6 {\n background-repeat: no-repeat\n}\n\n.jPicker .Map .Map3, .jPicker .Bar .Map5 {\n background-repeat: repeat\n}\n\n.jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4 {\n background-repeat: repeat-x\n}\n\n.jPicker .Map .Arrow {\n display: block;\n position: absolute\n}\n\n.jPicker .Bar .Arrow {\n display: block;\n left: 0;\n position: absolute\n}\n\n.jPicker .Preview {\n font-size: 9px;\n text-align: center\n}\n\n.jPicker .Preview div {\n border: 2px inset #eee;\n height: 62px;\n margin: 0 auto;\n padding: 0;\n width: 62px\n}\n\n.jPicker .Preview div span {\n border: 1px solid #000;\n display: block;\n height: 30px;\n margin: 0 auto;\n padding: 0;\n width: 60px\n}\n\n.jPicker .Preview .Active {\n border-bottom-width: 0\n}\n\n.jPicker .Preview .Current {\n border-top-width: 0;\n cursor: pointer\n}\n\n.jPicker .Button {\n text-align: center;\n width: 115px\n}\n\n.jPicker .Button input {\n width: 100px\n}\n\n.jPicker .Button .Ok {\n margin: 12px 0 5px 0\n}\n\n.jPicker td.Radio {\n margin: 0;\n padding: 0;\n width: 31px\n}\n\n.jPicker td.Radio input {\n margin: 0 5px 0 0;\n padding: 0\n}\n\n.jPicker td.Text {\n font-size: 12px!important;\n height: 22px;\n margin: 0;\n padding: 0;\n text-align: left;\n width: 70px\n}\n\n.jPicker tr.Hex td.Text {\n width: 100px\n}\n\n.jPicker td.Text input {\n background-color: #fff;\n border: 1px inset #aaa;\n height: 19px;\n margin: 0 0 0 5px;\n text-align: left;\n width: 30px\n}\n\n.jPicker td[class=\"Text\"] input {\n height: 15px\n}\n\n.jPicker tr.Hex td.Text input.Hex {\n width: 50px\n}\n\n.jPicker tr.Hex td.Text input.AHex {\n width: 20px\n}\n\n.jPicker .Grid {\n text-align: center;\n width: 114px\n}\n\n.jPicker .Grid span.QuickColor {\n border: 1px inset #aaa;\n cursor: pointer;\n display: inline-block;\n height: 15px;\n line-height: 15px;\n margin: 0;\n padding: 0;\n width: 19px\n}\n\n.jPicker .Grid span[class=\"QuickColor\"] {\n width: 17px\n}\n /*\n * jGraduate Default CSS\n *\n * Copyright (c) 2010 Jeff Schiller\n * http://blog.codedread.com/\n *\n * Copyright (c) 2010 Alexis Deveria\n * http://a.deveria.com/\n *\n * Licensed under the MIT License\n */\n\nh2.jGraduate_Title {\n font-family: Arial, Helvetica, Sans-Serif;\n font-size: 11px !important;\n font-weight: bold;\n margin: -13px 0px 0px 0px;\n padding: 0px;\n text-align: center;\n}\n\n.jGraduate_Picker {\n font-family: Arial, Helvetica, Sans-Serif;\n font-size: 12px;\n border-style: solid;\n border-color: lightgrey black black lightgrey;\n border-width: 1px;\n background-color: #EFEFEF;\n position: absolute;\n padding: 10px;\n}\n\n.jGraduate_tabs li {\n background-color: #ccc;\n display: inline;\n border: solid 1px grey;\n padding: 3px;\n margin: 2px;\n cursor: pointer;\n}\n\nli.jGraduate_tab_current {\n background-color: #EFEFEF;\n display: inline;\n padding: 3px;\n margin: 2px;\n border: solid 1px black;\n cursor: pointer;\n}\n\n.jGraduate_colPick {\n display: none;\n}\n\n.jGraduate_gradPick {\n display: none;\n border: outset 1px #666;\n padding: 10px 7px 5px 5px;\n overflow: auto;\n}\n\n.jGraduate_gradPick {\n display: none;\n border: outset 1px #666;\n padding: 10px 7px 5px 5px;\n overflow: auto;\n/* position: relative;*/\n}\n\n.jGraduate_tabs {\n position: relative;\n background-color: #EFEFEF;\n padding: 0px;\n margin: 0px;\n margin-bottom: 5px;\n}\n\ndiv.jGraduate_Swatch {\n float: left;\n margin: 8px;\n}\ndiv.jGraduate_GradContainer {\n border: 2px inset #EEE;\n background-image: url(../images/map-opacity.png);\n background-position: 0px 0px;\n height: 256px;\n width: 256px;\n position: relative;\n}\n\ndiv.jGraduate_GradContainer div.grad_coord {\n background: #000;\n border: 1px solid #fff;\n border-radius: 5px;\n -moz-border-radius: 5px;\n width: 10px;\n height: 10px;\n position: absolute;\n margin: -5px -5px;\n top: 0;\n left: 0;\n text-align: center;\n font-size: xx-small;\n line-height: 10px;\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n -moz-user-select: none;\n -webkit-user-select: none;\n}\n\n.jGraduate_AlphaArrows {\n position: absolute;\n margin-top: -10px;\n margin-left: 250.5px;\n}\n\ndiv.jGraduate_Opacity {\n border: 2px inset #eee;\n margin-top: 14px;\n background-color: black;\n background-image: url(../images/Maps.png);\n background-position: 0px -2816px;\n height: 20px;\n cursor: ew-resize;\n}\n\ndiv.jGraduate_StopSlider {\n/* border: 2px inset #eee;*/\n margin: 0 0 0 -10px;\n width: 276px;\n overflow: visible;\n background: #efefef;\n height: 45px;\n cursor: pointer;\n}\n\ndiv.jGraduate_StopSection {\n width: 120px;\n text-align: center;\n}\n\n\n\n\ninput.jGraduate_Ok, input.jGraduate_Cancel {\n display: block;\n width: 100px;\n margin-left: -4px;\n margin-right: -4px;\n}\ninput.jGraduate_Ok {\n margin: 9px -4px 5px -4px;\n}\n\n.colorBox {\n float: left;\n height: 16px;\n width: 16px;\n border: 1px solid #808080;\n cursor: pointer;\n margin: 4px 4px 4px 30px;\n}\n\n.colorBox + label {\n float: left;\n margin-top: 7px;\n}\n\nlabel.jGraduate_Form_Heading {\n position: relative;\n top: 10px;\n background-color: #EFEFEF;\n padding: 2px;\n font-weight: bold;\n font-size: 13px;\n}\n\ndiv.jGraduate_Form_Section {\n border-style: solid;\n border-width: 1px;\n border-color: grey;\n -moz-border-radius: 5px;\n -webkit-border-radius: 5px;\n padding: 15px 5px 5px 5px;\n margin: 5px 2px;\n width: 110px;\n text-align: center;\n overflow: auto;\n}\n\ndiv.jGraduate_Form_Section label {\n padding: 0 2px;\n}\n\ndiv.jGraduate_StopSection input[type=text],\ndiv.jGraduate_Slider input[type=text] {\n width: 33px;\n}\n\ndiv.jGraduate_LightBox {\n position: fixed;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n background-color: #000;\n opacity: 0.5;\n display: none;\n}\n\ndiv.jGraduate_stopPicker {\n position: absolute;\n display: none;\n background: #E8E8E8;\n}\n\n\n.jGraduate_gradPick {\n width: 535px;\n}\n\n.jGraduate_gradPick div.jGraduate_OpacField {\n\n position: absolute;\n left: 0;\n bottom: 5px;\n/*\n width: 270px;\n\n left: 284px;\n width: 266px;\n height: 200px;\n top: 167px;\n margin: -3px 3px 0px 4px;\n*/\n}\n\n.jGraduate_gradPick .jGraduate_Form {\n float: left;\n width: 270px;\n position: absolute;\n left: 284px;\n width: 266px;\n height: 200px;\n top: 167px;\n margin: -3px 3px 0px 10px;\n}\n\n.jGraduate_gradPick .jGraduate_Points {\n position: static;\n width: 150px;\n margin-left: 0;\n}\n\n.jGraduate_SpreadMethod {\n position: absolute;\n right: 8px;\n top: 100px;\n}\n\n.jGraduate_Colorblocks {\n display: table;\n border-spacing: 0 5px;\n}\n\n.jGraduate_colorblock {\n display: table-row;\n}\n\n.jGraduate_Colorblocks .jGraduate_colorblock > * {\n display: table-cell;\n vertical-align: middle;\n margin: 0;\n float: none;\n}\n\n.jGraduate_gradPick div.jGraduate_StopSection {\n float: left;\n width: 133px;\n margin-top: -8px;\n}\n\n\n.jGraduate_gradPick .jGraduate_Form_Section {\n padding-top: 9px;\n}\n\n\n.jGraduate_Slider {\n text-align: center;\n float: left;\n width: 100%;\n}\n\n.jGraduate_Slider .jGraduate_Form_Section {\n border: none;\n width: 250px;\n padding: 0 2px;\n overflow: visible;\n}\n\n.jGraduate_Slider label {\n display: inline-block;\n float: left;\n line-height: 50px;\n padding: 0;\n}\n\n.jGraduate_Slider label.prelabel {\n width: 40px;\n text-align: left;\n}\n\n.jGraduate_SliderBar {\n width: 140px;\n float: left;\n margin-right: 5px;\n border:1px solid #BBB;\n height:20px;\n margin-top:14px;\n margin-left:5px;\n position: relative;\n}\n\ndiv.jGraduate_Slider input {\n margin-top: 5px;\n}\n\ndiv.jGraduate_Slider img {\n top: 0;\n left: 0;\n position: absolute;\n margin-top: -10px;\n cursor:ew-resize;\n}\n\n\n.jGraduate_gradPick .jGraduate_OkCancel {\n position: absolute;\n top: 39px;\n right: 10px;\n width: 113px;\n\n}\n\n.jGraduate_OpacField {\n position: absolute;\n right: -10px;\n bottom: 0;\n}\n #logo {\n height: 18px;\n width: 18px;\n }\n #block {\n height: 13px;\n width: 14px;\n float: right;\n background-color: darkgrey;\n }\n #picker {\n background: var(--input-color);\n height: 19px;\n line-height: 19px;\n border-radius: 3px;\n width: 52px;\n display: flex;\n align-items: center;\n margin-right: 4px;\n margin-top: 1px;\n justify-content: space-evenly;\n }\n #color_picker {\n z-index: 1000;\n top: -350px;\n }\n </style>\n <div id=\"picker\">\n <img src=\"./images/logo.svg\" alt=\"icon\" id=\"logo\">\n <label for=\"color\" title=\"Change xxx color\" id=\"label\"></label>\n <div id=\"block\">\n </div>\n </div>\n <!-- hidden div -->\n <div id=\"color_picker\"></div>\n`;\n/**\n * @class SeColorPicker\n */\nexport class SeColorPicker extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n this.$logo = this._shadowRoot.getElementById('logo');\n this.$label = this._shadowRoot.getElementById('label');\n this.$block = this._shadowRoot.getElementById('block');\n this.paintBox = null;\n this.$picker = this._shadowRoot.getElementById('picker');\n this.$color_picker = this._shadowRoot.getElementById('color_picker');\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['label', 'src', 'type'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'src':\n this.$logo.setAttribute('src', newValue);\n break;\n case 'label':\n this.setAttribute('title', newValue);\n break;\n case 'type':\n this.$label.setAttribute('title', `Pick a ${newValue} Paint and Opacity`);\n break;\n default:\n // eslint-disable-next-line no-console\n console.error(`unknown attribute: ${name}`);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get label () {\n return this.$label.getAttribute('title');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set label (value) {\n this.setAttribute('label', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get type () {\n return this.getAttribute('type');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set type (value) {\n this.setAttribute('type', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get src () {\n return this.getAttribute('src');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set src (value) {\n this.setAttribute('src', value);\n }\n\n /**\n * @param {PlainObject} svgCanvas\n * @param {PlainObject} selectedElement\n * @param {bool} apply\n * @returns {void}\n */\n update (svgCanvas, selectedElement, apply) {\n const paint = this.paintBox.update(svgCanvas, selectedElement);\n if (paint && apply) {\n const changeEvent = new CustomEvent('change', {detail: {\n paint\n }});\n this.dispatchEvent(changeEvent);\n }\n }\n /**\n * @param {PlainObject} paint\n * @returns {void}\n */\n setPaint (paint) {\n this.paintBox.setPaint(paint);\n }\n\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n this.paintBox = new PaintBox(this.$block, this.type);\n this.$picker.addEventListener('click', () => {\n let {paint} = this.paintBox;\n jGraduateMethod(\n this.$color_picker,\n {\n images: {clientPath: './components/jgraduate/images/'},\n paint,\n window: {pickerTitle: this.label},\n newstop: 'inverse'\n },\n (p) => {\n paint = new jGraduate.Paint(p);\n this.setPaint(paint);\n const changeEvent = new CustomEvent('change', {detail: {\n paint\n }});\n this.dispatchEvent(changeEvent);\n this.$color_picker.style.display = 'none';\n },\n () => {\n this.$color_picker.style.display = 'none';\n }\n );\n });\n }\n}\n\n// Register\ncustomElements.define('se-colorpicker', SeColorPicker);\n","import ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport {\n defaultState,\n keydown,\n render,\n rendering,\n setState,\n state,\n} from \"./internal.js\";\n\n// Symbols for private data members.\n/** @type {any} */\nconst previousBodyOverflowKey = Symbol(\"previousBodyStyleOverflow\");\n/** @type {any} */\nconst previousDocumentMarginRightKey = Symbol(\"previousDocumentMarginRight\");\n\n/**\n * Gives an overlay modal behavior.\n *\n * This blocks various user interactions to make an overlay behave like a modal\n * dialog:\n *\n * * Disables scrolling on the background document. **This is a global\n * side-effect of opening the component.**\n * * A default ARIA role of `dialog`.\n * * Closes the element if user presses the Esc key.\n *\n * For modeless overlays, see `PopupModalityMixin` instead.\n *\n * @module DialogModalityMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function DialogModalityMixin(Base) {\n return class DialogModality extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n role: \"dialog\",\n });\n }\n\n [keydown](/** @type {KeyboardEvent} */ event) {\n let handled = false;\n\n switch (event.key) {\n case \"Escape\":\n // Close on Esc key.\n this.close({\n canceled: \"Escape\",\n });\n handled = true;\n break;\n }\n\n // Prefer mixin result if it's defined, otherwise use base result.\n return handled || (super[keydown] && super[keydown](event)) || false;\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n if (changed.opened) {\n if (this[state].opened && document.documentElement) {\n // Disable body scrolling to absorb space bar keypresses and other\n // means of scrolling the top-level document.\n const documentWidth = document.documentElement.clientWidth;\n const scrollBarWidth = window.innerWidth - documentWidth;\n this[previousBodyOverflowKey] = document.body.style.overflow;\n this[previousDocumentMarginRightKey] =\n scrollBarWidth > 0\n ? document.documentElement.style.marginRight\n : null;\n document.body.style.overflow = \"hidden\";\n if (scrollBarWidth > 0) {\n document.documentElement.style.marginRight = `${scrollBarWidth}px`;\n }\n } else {\n // Reenable body scrolling.\n if (this[previousBodyOverflowKey] != null) {\n document.body.style.overflow = this[previousBodyOverflowKey];\n this[previousBodyOverflowKey] = null;\n }\n if (this[previousDocumentMarginRightKey] != null) {\n document.documentElement.style.marginRight = this[\n previousDocumentMarginRightKey\n ];\n this[previousDocumentMarginRightKey] = null;\n }\n }\n }\n if (changed.role) {\n // Apply top-level role.\n const { role } = this[state];\n this.setAttribute(\"role\", role);\n }\n }\n\n // Setting the standard role attribute will invoke this property setter,\n // which will allow us to update our state.\n get role() {\n return super.role;\n }\n set role(role) {\n super.role = role;\n if (!this[rendering]) {\n this[setState]({ role });\n }\n }\n };\n}\n","import { deepContains, firstFocusableElement } from \"../core/dom.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport { firstRender, ids, keydown, render, shadowRoot } from \"./internal.js\";\n\n// Symbols for private data members on an element.\nconst wrap = Symbol(\"wrap\");\n/** @type {any} */\nconst wrappingFocusKey = Symbol(\"wrappingFocus\");\n\n/**\n * Allows Tab and Shift+Tab operations to cycle the focus within the component.\n *\n * This mixin expects the component to provide:\n *\n * * A template-stamping mechanism compatible with `ShadowTemplateMixin`.\n *\n * The mixin provides these features to the component:\n *\n * * Template elements and event handlers that will cause the keyboard focus to wrap.\n *\n * This mixin [contributes to a component's template](mixins#mixins-that-contribute-to-a-component-s-template).\n * See that discussion for details on how to use such a mixin.\n *\n * @module FocusCaptureMixin\n * @param {Constructor<ReactiveElement>} Base\n */\nfunction FocusCaptureMixin(Base) {\n class FocusCapture extends Base {\n [keydown](/** @type {KeyboardEvent} */ event) {\n const firstElement = firstFocusableElement(this[shadowRoot]);\n // We need to check both the document active element (to handle case where\n // the user is tabbing through light DOM nodes assigned to a slot) and the\n // shadow active element (to handle case where the user is tabbing through\n // shadow nodes).\n if (firstElement) {\n const firstElementIsDocumentActive =\n document.activeElement &&\n (document.activeElement === firstElement ||\n document.activeElement.contains(firstElement));\n const shadowActiveElement = this[shadowRoot].activeElement;\n const firstElementIsShadowActive =\n shadowActiveElement &&\n (shadowActiveElement === firstElement ||\n deepContains(shadowActiveElement, firstElement));\n const firstElementIsActive =\n firstElementIsDocumentActive || firstElementIsShadowActive;\n if (firstElementIsActive && event.key === \"Tab\" && event.shiftKey) {\n // Set focus to focus catcher.\n // The Shift+Tab keydown event should continue bubbling, and the default\n // behavior should cause it to end up on the last focusable element.\n this[wrappingFocusKey] = true;\n this[ids].focusCatcher.focus();\n this[wrappingFocusKey] = false;\n // Don't mark the event as handled, since we want it to keep bubbling up.\n }\n }\n\n // Prefer mixin result if it's defined, otherwise use base result.\n return (super[keydown] && super[keydown](event)) || false;\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n if (super[render]) {\n super[render](changed);\n }\n if (this[firstRender]) {\n this[ids].focusCatcher.addEventListener(\"focus\", () => {\n if (!this[wrappingFocusKey]) {\n // Wrap focus back to the first focusable element.\n const focusElement = firstFocusableElement(this[shadowRoot]);\n if (focusElement) {\n focusElement.focus();\n }\n }\n });\n }\n }\n\n /**\n * Destructively wrap a node with elements necessary to capture focus.\n *\n * Call this method in a components `internal.template` property.\n * Invoke this method as `this[FocusCaptureMixin.wrap](element)`.\n *\n * @param {Element} target - the element within which focus should wrap\n */\n [wrap](target) {\n const focusCapture = fragmentFrom.html`\n <style>\n #focusCapture {\n display: flex;\n height: 100%;\n overflow: hidden;\n width: 100%;\n }\n\n #focusCaptureContainer {\n align-items: center;\n display: flex;\n flex: 1;\n flex-direction: column;\n justify-content: center;\n position: relative;\n }\n </style>\n <div id=\"focusCapture\">\n <div id=\"focusCaptureContainer\"></div>\n <div id=\"focusCatcher\" tabindex=\"0\"></div>\n </div>\n `;\n\n // Wrap the target with the focus capture elements.\n const container = focusCapture.getElementById(\"focusCaptureContainer\");\n if (container) {\n target.replaceWith(focusCapture);\n container.append(target);\n }\n }\n }\n\n return FocusCapture;\n}\n\nFocusCaptureMixin.wrap = wrap;\n\nexport default FocusCaptureMixin;\n","import Backdrop from \"./Backdrop.js\";\n\n/**\n * Semi-transparent backdrop for a modal overlay\n *\n * This type of backdrop is used by [Dialog](Dialog) and [Drawer](Drawer). The\n * backdrop slightly obscures the background elements, focusing the user's\n * attention on the overlay.\n *\n * @inherits Backdrop\n */\nclass ModalBackdrop extends Backdrop {\n constructor() {\n super();\n\n // As of Sep 2018, Mobile Safari allows the user to drag on the backdrop to\n // scroll the page behind it, which violates the modality. To correct this,\n // we prevent touchmove events with one touch from performing the default\n // page scrolling.\n //\n // Android Chrome already correctly prevents drags from reaching the page,\n // so we only engage this workaround if we don't see support for pointer\n // events -- in which case we assume we're in Safari.\n if (!(\"PointerEvent\" in window)) {\n this.addEventListener(\"touchmove\", (event) => {\n if (event.touches.length === 1) {\n event.preventDefault();\n }\n });\n }\n }\n}\n\nexport default ModalBackdrop;\n","import { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport DialogModalityMixin from \"./DialogModalityMixin.js\";\nimport FocusCaptureMixin from \"./FocusCaptureMixin.js\";\nimport { defaultState, template } from \"./internal.js\";\nimport KeyboardMixin from \"./KeyboardMixin.js\";\nimport ModalBackdrop from \"./ModalBackdrop.js\";\nimport Overlay from \"./Overlay.js\";\n\nconst Base = DialogModalityMixin(FocusCaptureMixin(KeyboardMixin(Overlay)));\n\n/**\n * Basic modal overlay that the user typically dismisses with an explicit action.\n *\n * This component presents its children as a basic modal dialog which appears on\n * top of the main page content and which the user must interact with before\n * they can return to the page.\n *\n * @inherits Overlay\n * @mixes DialogModalityMixin\n * @mixes FocusCaptureMixin\n * @mixes KeyboardMixin\n * @part {ModalBackdrop} backdrop\n */\nclass Dialog extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n backdropPartType: ModalBackdrop,\n tabIndex: -1,\n });\n }\n\n get [template]() {\n const result = super[template];\n\n const frame = result.content.querySelector(\"#frame\");\n /** @type {any} */ const cast = this;\n cast[FocusCaptureMixin.wrap](frame);\n\n // We'd prefer to use inline-grid instead of inline-flex, but for grid\n // styling we'd want the row to be 1fr tall. Unfortunately, as of\n // 2021-02-11, Safari doesn't seem to handle that basic need correctly.\n // May be caused by https://bugs.webkit.org/show_bug.cgi?id=202051.\n result.content.append(\n fragmentFrom.html`\n <style>\n :host {\n display: inline-flex;\n flex-direction: column;\n height: 100%;\n left: 0;\n pointer-events: initial;\n top: 0;\n width: 100%;\n }\n </style>\n `\n );\n\n return result;\n }\n}\n\nexport default Dialog;\n","import { template } from \"../base/internal.js\";\nimport ModalBackdrop from \"../base/ModalBackdrop.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\n\n/**\n * ModalBackdrop component in the Plain reference design system\n *\n * @inherits ModalBackdrop\n */\nclass PlainModalBackdrop extends ModalBackdrop {\n get [template]() {\n const result = super[template];\n result.content.append(\n fragmentFrom.html`\n <style>\n :host {\n background: rgba(0, 0, 0, 0.2);\n }\n </style>\n `\n );\n return result;\n }\n}\n\nexport default PlainModalBackdrop;\n","import { defaultState } from \"../base/internal.js\";\nimport ReactiveElement from \"../core/ReactiveElement.js\"; // eslint-disable-line no-unused-vars\nimport PlainModalBackdrop from \"./PlainModalBackdrop.js\";\nimport PlainOverlayFrame from \"./PlainOverlayFrame.js\";\n\n/**\n * Modal overlay styles for the Plain reference design system\n *\n * @module PlainModalOverlayMixin\n * @part {PlainModalBackdrop} backdrop\n * @part {PlainOverlayFrame} frame\n * @param {Constructor<ReactiveElement>} Base\n */\nexport default function PlainModalOverlayMixin(Base) {\n return class PlainModalOverlay extends Base {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState] || {}, {\n backdropPartType: PlainModalBackdrop,\n framePartType: PlainOverlayFrame,\n });\n }\n };\n}\n","import Dialog from \"../base/Dialog.js\";\nimport PlainModalOverlayMixin from \"./PlainModalOverlayMixin.js\";\n\n/**\n * Dialog component in the Plain reference design system\n *\n * @inherits Dialog\n * @mixes PlainModalOverlayMixin\n */\nclass PlainDialog extends PlainModalOverlayMixin(Dialog) {}\n\nexport default PlainDialog;\n","import PlainDialog from \"../src/plain/PlainDialog.js\";\nexport default class ElixDialog extends PlainDialog {}\ncustomElements.define(\"elix-dialog\", ElixDialog);\n","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/array-iteration').some;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\n\n// `Array.prototype.some` method\n// https://tc39.es/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","/**\n * Namespaces or tools therefor.\n * @module namespaces\n * @license MIT\n*/\n\n/**\n* Common namepaces constants in alpha order.\n* @enum {string}\n* @type {PlainObject}\n* @memberof module:namespaces\n*/\nexport const NS = {\n HTML: 'http://www.w3.org/1999/xhtml',\n MATH: 'http://www.w3.org/1998/Math/MathML',\n SE: 'http://svg-edit.googlecode.com',\n SVG: 'http://www.w3.org/2000/svg',\n XLINK: 'http://www.w3.org/1999/xlink',\n XML: 'http://www.w3.org/XML/1998/namespace',\n XMLNS: 'http://www.w3.org/2000/xmlns/' // see http://www.w3.org/TR/REC-xml-names/#xmlReserved\n};\n\n/**\n* @function module:namespaces.getReverseNS\n* @returns {string} The NS with key values switched and lowercase\n*/\nexport const getReverseNS = function () {\n const reverseNS = {};\n Object.entries(NS).forEach(([name, URI]) => {\n reverseNS[URI] = name.toLowerCase();\n });\n return reverseNS;\n};\n","/**\n * Tools for working with units.\n * @module units\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria, 2010 Jeff Schiller\n */\n\nimport {NS} from './namespaces.js';\n\nconst wAttrs = ['x', 'x1', 'cx', 'rx', 'width'];\nconst hAttrs = ['y', 'y1', 'cy', 'ry', 'height'];\nconst unitAttrs = ['r', 'radius', ...wAttrs, ...hAttrs];\n// unused\n/*\nconst unitNumMap = {\n '%': 2,\n em: 3,\n ex: 4,\n px: 5,\n cm: 6,\n mm: 7,\n in: 8,\n pt: 9,\n pc: 10\n};\n*/\n// Container of elements.\nlet elementContainer_;\n\n// Stores mapping of unit type to user coordinates.\nlet typeMap_ = {};\n\n/**\n * @interface module:units.ElementContainer\n */\n/**\n * @function module:units.ElementContainer#getBaseUnit\n * @returns {string} The base unit type of the container ('em')\n */\n/**\n * @function module:units.ElementContainer#getElement\n * @returns {?Element} An element in the container given an id\n */\n/**\n * @function module:units.ElementContainer#getHeight\n * @returns {Float} The container's height\n */\n/**\n * @function module:units.ElementContainer#getWidth\n * @returns {Float} The container's width\n */\n/**\n * @function module:units.ElementContainer#getRoundDigits\n * @returns {Integer} The number of digits number should be rounded to\n */\n\n/**\n * @typedef {PlainObject} module:units.TypeMap\n * @property {Float} em\n * @property {Float} ex\n * @property {Float} in\n * @property {Float} cm\n * @property {Float} mm\n * @property {Float} pt\n * @property {Float} pc\n * @property {Integer} px\n * @property {0} %\n */\n\n/**\n * Initializes this module.\n *\n * @function module:units.init\n * @param {module:units.ElementContainer} elementContainer - An object implementing the ElementContainer interface.\n * @returns {void}\n */\nexport const init = function (elementContainer) {\n elementContainer_ = elementContainer;\n\n // Get correct em/ex values by creating a temporary SVG.\n const svg = document.createElementNS(NS.SVG, 'svg');\n document.body.append(svg);\n const rect = document.createElementNS(NS.SVG, 'rect');\n rect.setAttribute('width', '1em');\n rect.setAttribute('height', '1ex');\n rect.setAttribute('x', '1in');\n svg.append(rect);\n const bb = rect.getBBox();\n svg.remove();\n\n const inch = bb.x;\n typeMap_ = {\n em: bb.width,\n ex: bb.height,\n in: inch,\n cm: inch / 2.54,\n mm: inch / 25.4,\n pt: inch / 72,\n pc: inch / 6,\n px: 1,\n '%': 0\n };\n};\n\n/**\n* Group: Unit conversion functions.\n*/\n\n/**\n * @function module:units.getTypeMap\n * @returns {module:units.TypeMap} The unit object with values for each unit\n*/\nexport const getTypeMap = function () {\n return typeMap_;\n};\n\n/**\n* @typedef {GenericArray} module:units.CompareNumbers\n* @property {Integer} length 2\n* @property {Float} 0\n* @property {Float} 1\n*/\n\n/**\n* Rounds a given value to a float with number of digits defined in\n* `round_digits` of `saveOptions`\n*\n* @function module:units.shortFloat\n* @param {string|Float|module:units.CompareNumbers} val - The value (or Array of two numbers) to be rounded\n* @returns {Float|string} If a string/number was given, returns a Float. If an array, return a string\n* with comma-separated floats\n*/\nexport const shortFloat = function (val) {\n const digits = elementContainer_.getRoundDigits();\n if (!isNaN(val)) {\n return Number(Number(val).toFixed(digits));\n }\n if (Array.isArray(val)) {\n return shortFloat(val[0]) + ',' + shortFloat(val[1]);\n }\n return Number.parseFloat(val).toFixed(digits) - 0;\n};\n\n/**\n* Converts the number to given unit or baseUnit.\n* @function module:units.convertUnit\n* @param {string|Float} val\n* @param {\"em\"|\"ex\"|\"in\"|\"cm\"|\"mm\"|\"pt\"|\"pc\"|\"px\"|\"%\"} [unit]\n* @returns {Float}\n*/\nexport const convertUnit = function (val, unit) {\n unit = unit || elementContainer_.getBaseUnit();\n // baseVal.convertToSpecifiedUnits(unitNumMap[unit]);\n // const val = baseVal.valueInSpecifiedUnits;\n // baseVal.convertToSpecifiedUnits(1);\n return shortFloat(val / typeMap_[unit]);\n};\n\n/**\n* Sets an element's attribute based on the unit in its current value.\n*\n* @function module:units.setUnitAttr\n* @param {Element} elem - DOM element to be changed\n* @param {string} attr - Name of the attribute associated with the value\n* @param {string} val - Attribute value to convert\n* @returns {void}\n*/\nexport const setUnitAttr = function (elem, attr, val) {\n // if (!isNaN(val)) {\n // New value is a number, so check currently used unit\n // const oldVal = elem.getAttribute(attr);\n\n // Enable this for alternate mode\n // if (oldVal !== null && (isNaN(oldVal) || elementContainer_.getBaseUnit() !== 'px')) {\n // // Old value was a number, so get unit, then convert\n // let unit;\n // if (oldVal.substr(-1) === '%') {\n // const res = getResolution();\n // unit = '%';\n // val *= 100;\n // if (wAttrs.includes(attr)) {\n // val = val / res.w;\n // } else if (hAttrs.includes(attr)) {\n // val = val / res.h;\n // } else {\n // return val / Math.sqrt((res.w*res.w) + (res.h*res.h))/Math.sqrt(2);\n // }\n // } else {\n // if (elementContainer_.getBaseUnit() !== 'px') {\n // unit = elementContainer_.getBaseUnit();\n // } else {\n // unit = oldVal.substr(-2);\n // }\n // val = val / typeMap_[unit];\n // }\n //\n // val += unit;\n // }\n // }\n elem.setAttribute(attr, val);\n};\n\nconst attrsToConvert = {\n line: ['x1', 'x2', 'y1', 'y2'],\n circle: ['cx', 'cy', 'r'],\n ellipse: ['cx', 'cy', 'rx', 'ry'],\n foreignObject: ['x', 'y', 'width', 'height'],\n rect: ['x', 'y', 'width', 'height'],\n image: ['x', 'y', 'width', 'height'],\n use: ['x', 'y', 'width', 'height'],\n text: ['x', 'y']\n};\n\n/**\n* Converts all applicable attributes to the configured baseUnit.\n* @function module:units.convertAttrs\n* @param {Element} element - A DOM element whose attributes should be converted\n* @returns {void}\n*/\nexport const convertAttrs = function (element) {\n const elName = element.tagName;\n const unit = elementContainer_.getBaseUnit();\n const attrs = attrsToConvert[elName];\n if (!attrs) { return; }\n\n const len = attrs.length;\n for (let i = 0; i < len; i++) {\n const attr = attrs[i];\n const cur = element.getAttribute(attr);\n if (cur && !isNaN(cur)) {\n element.setAttribute(attr, (cur / typeMap_[unit]) + unit);\n }\n }\n};\n\n/**\n* Converts given values to numbers. Attributes must be supplied in\n* case a percentage is given.\n*\n* @function module:units.convertToNum\n* @param {string} attr - Name of the attribute associated with the value\n* @param {string} val - Attribute value to convert\n* @returns {Float} The converted number\n*/\nexport const convertToNum = function (attr, val) {\n // Return a number if that's what it already is\n if (!isNaN(val)) { return val - 0; }\n if (val.substr(-1) === '%') {\n // Deal with percentage, depends on attribute\n const num = val.substr(0, val.length - 1) / 100;\n const width = elementContainer_.getWidth();\n const height = elementContainer_.getHeight();\n\n if (wAttrs.includes(attr)) {\n return num * width;\n }\n if (hAttrs.includes(attr)) {\n return num * height;\n }\n return num * Math.sqrt((width * width) + (height * height)) / Math.sqrt(2);\n }\n const unit = val.substr(-2);\n const num = val.substr(0, val.length - 2);\n // Note that this multiplication turns the string into a number\n return num * typeMap_[unit];\n};\n\n/**\n* Check if an attribute's value is in a valid format.\n* @function module:units.isValidUnit\n* @param {string} attr - The name of the attribute associated with the value\n* @param {string} val - The attribute value to check\n* @param {Element} selectedElement\n* @returns {boolean} Whether the unit is valid\n*/\nexport const isValidUnit = function (attr, val, selectedElement) {\n if (unitAttrs.includes(attr)) {\n // True if it's just a number\n if (!isNaN(val)) {\n return true;\n }\n // Not a number, check if it has a valid unit\n val = val.toLowerCase();\n return Object.keys(typeMap_).some((unit) => {\n const re = new RegExp('^-?[\\\\d\\\\.]+' + unit + '$');\n return re.test(val);\n });\n }\n if (attr === 'id') {\n // if we're trying to change the id, make sure it's not already present in the doc\n // and the id value is valid.\n\n let result = false;\n // because getElem() can throw an exception in the case of an invalid id\n // (according to https://www.w3.org/TR/xml-id/ IDs must be a NCName)\n // we wrap it in an exception and only return true if the ID was valid and\n // not already present\n try {\n const elem = elementContainer_.getElement(val);\n result = (!elem || elem === selectedElement);\n } catch (e) {/* empty fn */}\n return result;\n }\n return true;\n};\n","import 'elix/define/Dialog.js';\nimport {isValidUnit} from '../../common/units.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n :not(:defined) {\n display: none;\n }\n\n /* Force the scroll bar to appear so we see it hide when overlay opens. */\n body::-webkit-scrollbar {\n background: lightgray;\n }\n body::-webkit-scrollbar-thumb {\n background: darkgray;\n }\n #svg_docprops #svg_docprops_container {\n padding: 10px;\n background-color: #B0B0B0;\n border: 1px outset #777;\n opacity: 1.0;\n font-family: Verdana, Helvetica, sans-serif;\n font-size: .8em;\n z-index: 20001;\n }\n \n #svg_docprops .error {\n border: 1px solid red;\n padding: 3px;\n }\n \n #svg_docprops #resolution {\n max-width: 14em;\n }\n \n #tool_docprops_back {\n margin-left: 1em;\n overflow: auto;\n }\n \n #svg_docprops_container #svg_docprops_docprops {\n float: left;\n width: 221px;\n margin: 5px .7em;\n overflow: hidden;\n }\n \n #svg_docprops legend {\n max-width: 195px;\n }\n \n #svg_docprops_docprops > legend {\n font-weight: bold;\n font-size: 1.1em;\n }\n \n #svg_docprops_container fieldset {\n padding: 5px;\n margin: 5px;\n border: 1px solid #DDD;\n }\n \n #svg_docprops_container label {\n display: block;\n margin: .5em;\n }\n </style>\n <elix-dialog id=\"svg_docprops\" aria-label=\"Sample dialog\" closed>\n <div id=\"svg_docprops_container\">\n <div id=\"tool_docprops_back\" class=\"toolbar_button\">\n <button id=\"tool_docprops_save\">OK</button>\n <button id=\"tool_docprops_cancel\">Cancel</button>\n </div>\n <fieldset id=\"svg_docprops_docprops\">\n <legend id=\"svginfo_image_props\">Image Properties</legend>\n <label>\n <span id=\"svginfo_title\">Title:</span>\n <input type=\"text\" id=\"canvas_title\" />\n </label>\n <fieldset id=\"change_resolution\">\n <legend id=\"svginfo_dim\">Canvas Dimensions</legend>\n <label>\n <span id=\"svginfo_width\">width:</span>\n <input type=\"text\" id=\"canvas_width\" size=\"6\" />\n </label>\n <label>\n <span id=\"svginfo_height\">height:</span>\n <input type=\"text\" id=\"canvas_height\" size=\"6\" />\n </label>\n <label>\n <select id=\"resolution\">\n <option id=\"selectedPredefined\" selected=\"selected\">Select predefined:</option>\n <option>640x480</option>\n <option>800x600</option>\n <option>1024x768</option>\n <option>1280x960</option>\n <option>1600x1200</option>\n <option id=\"fitToContent\" value=\"content\">Fit to Content</option>\n </select>\n </label>\n </fieldset>\n <fieldset id=\"image_save_opts\">\n <legend id=\"includedImages\">Included Images</legend>\n <label>\n <input type=\"radio\" id=\"image_embed\" name=\"image_opt\" value=\"embed\" checked=\"checked\" />\n <span id=\"image_opt_embed\">Embed data (local files)</span>\n </label>\n <label>\n <input type=\"radio\" id=\"image_ref\" name=\"image_opt\" value=\"ref\" />\n <span id=\"image_opt_ref\">Use file reference</span>\n </label>\n </fieldset>\n </fieldset>\n </div>\n </elix-dialog>\n \n`;\n/**\n * @class SeImgPropDialog\n */\nexport class SeImgPropDialog extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this.eventlisten = false;\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n this.$saveBtn = this._shadowRoot.querySelector('#tool_docprops_save');\n this.$cancelBtn = this._shadowRoot.querySelector('#tool_docprops_cancel');\n this.$resolution = this._shadowRoot.querySelector('#resolution');\n this.$canvasTitle = this._shadowRoot.querySelector('#canvas_title');\n this.$canvasWidth = this._shadowRoot.querySelector('#canvas_width');\n this.$canvasHeight = this._shadowRoot.querySelector('#canvas_height');\n this.$imageOptEmbed = this._shadowRoot.querySelector('#image_embed');\n this.$imageOptRef = this._shadowRoot.querySelector('#image_ref');\n this.$dialog = this._shadowRoot.querySelector('#svg_docprops');\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['title', 'width', 'height', 'save', 'dialog', 'embed'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'title':\n this.$canvasTitle.value = newValue;\n break;\n case 'width':\n if (newValue === 'fit') {\n this.$canvasWidth.removeAttribute('disabled');\n this.$canvasWidth.value = 100;\n this.$canvasHeight.removeAttribute('disabled');\n this.$canvasHeight.value = 100;\n } else {\n this.$canvasWidth.value = newValue;\n }\n break;\n case 'height':\n if (newValue === 'fit') {\n this.$canvasWidth.removeAttribute('disabled');\n this.$canvasWidth.value = 100;\n this.$canvasHeight.removeAttribute('disabled');\n this.$canvasHeight.value = 100;\n } else {\n this.$canvasHeight.value = newValue;\n }\n break;\n case 'dialog':\n if (this.eventlisten) {\n if (newValue === 'open') {\n this.$dialog.open();\n } else {\n this.$dialog.close();\n }\n }\n break;\n case 'save':\n if (newValue === 'ref') {\n this.$imageOptEmbed.setAttribute('checked', false);\n this.$imageOptRef.setAttribute('checked', true);\n } else {\n this.$imageOptEmbed.setAttribute('checked', true);\n this.$imageOptRef.setAttribute('checked', false);\n }\n break;\n case 'embed':\n if (newValue.includes('one')) {\n const data = newValue.split('|');\n if (data.length > 1) {\n this._shadowRoot.querySelector('#image_opt_embed').setAttribute('title', data[1]);\n this._shadowRoot.querySelector('#image_opt_embed').setAttribute('disabled', 'disabled');\n this._shadowRoot.querySelector('#image_opt_embed').style.color = '#666';\n }\n }\n break;\n default:\n super.attributeChangedCallback(name, oldValue, newValue);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get title () {\n return this.getAttribute('title');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set title (value) {\n this.setAttribute('title', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get width () {\n return this.getAttribute('width');\n }\n /**\n * @function set\n * @returns {void}\n */\n set width (value) {\n this.setAttribute('width', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get height () {\n return this.getAttribute('height');\n }\n /**\n * @function set\n * @returns {void}\n */\n set height (value) {\n this.setAttribute('height', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get save () {\n return this.getAttribute('save');\n }\n /**\n * @function set\n * @returns {void}\n */\n set save (value) {\n this.setAttribute('save', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get dialog () {\n return this.getAttribute('dialog');\n }\n /**\n * @function set\n * @returns {void}\n */\n set dialog (value) {\n this.setAttribute('dialog', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get embed () {\n return this.getAttribute('embed');\n }\n /**\n * @function set\n * @returns {void}\n */\n set embed (value) {\n this.setAttribute('embed', value);\n }\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n const onChangeHandler = (ev) => {\n if (!ev.target.selectedIndex) {\n if (this.$canvasWidth.getAttribute('value') === 'fit') {\n this.$canvasWidth.removeAttribute('disabled');\n this.$canvasWidth.value = 100;\n this.$canvasHeight.removeAttribute('disabled');\n this.$canvasHeight.value = 100;\n }\n } else if (ev.target.value === 'content') {\n this.$canvasWidth.setAttribute('disabled', 'disabled');\n this.$canvasWidth.value = 'fit';\n this.$canvasHeight.setAttribute('disabled', 'disabled');\n this.$canvasHeight.value = 'fit';\n } else {\n const dims = ev.target.value.split('x');\n this.$canvasWidth.value = dims[0];\n this.$canvasWidth.removeAttribute('disabled');\n this.$canvasHeight.value = dims[1];\n this.$canvasHeight.removeAttribute('disabled');\n }\n };\n const onSaveHandler = (ev) => {\n let saveOpt = '';\n const w = this.$canvasWidth.value;\n const h = this.$canvasHeight.value;\n if (w !== 'fit' && !isValidUnit('width', w)) {\n this.$canvasWidth.parentElement.classList.add('error');\n } else {\n this.$canvasWidth.parentElement.classList.remove('error');\n }\n if (h !== 'fit' && !isValidUnit('height', w)) {\n this.$canvasHeight.parentElement.classList.add('error');\n } else {\n this.$canvasHeight.parentElement.classList.remove('error');\n }\n if (this.$imageOptEmbed.getAttribute('checked') === 'true') {\n saveOpt = 'embed';\n }\n if (this.$imageOptRef.getAttribute('checked') === 'true') {\n saveOpt = 'ref';\n }\n const closeEvent = new CustomEvent('change', {detail: {\n title: this.$canvasTitle.value,\n w: this.$canvasWidth.value,\n h: this.$canvasHeight.value,\n save: saveOpt,\n dialog: 'close'\n }});\n this.$canvasWidth.removeAttribute('disabled');\n this.$canvasHeight.removeAttribute('disabled');\n this.$resolution.selectedIndex = 0;\n this.dispatchEvent(closeEvent);\n };\n const onCancelHandler = (ev) => {\n const closeEvent = new CustomEvent('change', {detail: {\n dialog: 'closed'\n }});\n this.$canvasWidth.removeAttribute('disabled');\n this.$canvasHeight.removeAttribute('disabled');\n this.$resolution.selectedIndex = 0;\n this.dispatchEvent(closeEvent);\n };\n this.$resolution.addEventListener('change', onChangeHandler);\n this.$saveBtn.addEventListener('click', onSaveHandler);\n this.$cancelBtn.addEventListener('click', onCancelHandler);\n this.$dialog.addEventListener('close', onCancelHandler);\n this.eventlisten = true;\n }\n}\n\n// Register\ncustomElements.define('se-img-prop-dialog', SeImgPropDialog);\n","import 'elix/define/Dialog.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n :not(:defined) {\n display: none;\n }\n\n /* Force the scroll bar to appear so we see it hide when overlay opens. */\n body::-webkit-scrollbar {\n background: lightgray;\n }\n body::-webkit-scrollbar-thumb {\n background: darkgray;\n }\n .toolbar_button button {\n border:1px solid #dedede;\n line-height:130%;\n float: left;\n background: #E8E8E8 none;\n padding:5px 10px 5px 7px; /* Firefox */\n line-height:17px; /* Safari */\n margin: 5px 20px 0 0;\n border: 1px #808080 solid;\n border-top-color: #FFF;\n border-left-color: #FFF;\n border-radius: 5px;\n -moz-border-radius: 5px;\n -webkit-border-radius: 5px;\n cursor: pointer;\n }\n \n .toolbar_button button:hover {\n border: 1px #e0a874 solid;\n border-top-color: #fcd9ba;\n border-left-color: #fcd9ba;\n background-color: #FFC;\n }\n .toolbar_button button:active {\n background-color: #F4E284;\n border-left: 1px solid #663300;\n border-top: 1px solid #663300;\n }\n \n .toolbar_button button .svg_icon {\n margin: 0 3px -3px 0 !important;\n padding: 0;\n border: none;\n width: 16px;\n height: 16px;\n }\n .color_block {\n top: 0;\n left: 0;\n } \n .color_block svg {\n display: block;\n }\n #bg_blocks {\n overflow: auto;\n margin-left: 30px;\n } \n #bg_blocks .color_block {\n position: static;\n }\n #svginfo_bg_note {\n font-size: .9em;\n font-style: italic;\n color: #444;\n }\n #svg_prefs #svg_prefs_container {\n padding: 10px;\n background-color: #B0B0B0;\n border: 1px outset #777;\n opacity: 1.0;\n font-family: Verdana, Helvetica, sans-serif;\n font-size: .8em;\n z-index: 20001;\n }\n \n #tool_prefs_back {\n margin-left: 1em;\n overflow: auto;\n }\n \n #svg_prefs #svg_docprops_prefs {\n float: left;\n width: 221px;\n margin: 5px .7em;\n overflow: hidden;\n }\n \n #svg_prefs_container fieldset + fieldset {\n float: right;\n }\n \n #svg_prefs legend {\n max-width: 195px;\n }\n \n #svg_prefs_container > fieldset > legend {\n font-weight: bold;\n font-size: 1.1em;\n }\n \n #svg_prefs fieldset {\n padding: 5px;\n margin: 5px;\n border: 1px solid #DDD;\n }\n \n #svg_prefs_container label {\n display: block;\n margin: .5em;\n }\n #svg_prefs_container div.color_block {\n float: left;\n margin: 2px;\n padding: 20px;\n border: 1px solid #6f6f6f;\n }\n \n #change_background div.cur_background {\n border: 2px solid blue;\n padding: 19px;\n }\n #canvas_bg_url {\n display: block;\n width: 96%;\n }\n #svg_prefs button {\n margin-top: 0;\n margin-bottom: 5px;\n }\n </style>\n <elix-dialog id=\"svg_prefs\" aria-label=\"Editor Preferences\" closed>\n <div id=\"svg_prefs_container\">\n <div id=\"tool_prefs_back\" class=\"toolbar_button\">\n <button id=\"tool_prefs_save\">\n <img class=\"svg_icon\" src=\"./images/ok.svg\" alt=\"icon\" width=\"16\" height=\"16\" />\n OK\n </button>\n <button id=\"tool_prefs_cancel\">\n <img class=\"svg_icon\" src=\"./images/cancel.svg\" alt=\"icon\" width=\"16\" height=\"16\" />\n Cancel\n </button>\n </div>\n <fieldset>\n <legend id=\"svginfo_editor_prefs\">Editor Preferences</legend>\n <label>\n <span id=\"svginfo_lang\">Language:</span>\n <!-- Source: https://en.wikipedia.org/wiki/Language_names -->\n <select id=\"lang_select\">\n <option id=\"lang_ar\" value=\"ar\">العربية</option>\n <option id=\"lang_cs\" value=\"cs\">Čeština</option>\n <option id=\"lang_de\" value=\"de\">Deutsch</option>\n <option id=\"lang_en\" value=\"en\" selected=\"selected\">English</option>\n <option id=\"lang_es\" value=\"es\">Español</option>\n <option id=\"lang_fa\" value=\"fa\">فارسی</option>\n <option id=\"lang_fr\" value=\"fr\">Français</option>\n <option id=\"lang_fy\" value=\"fy\">Frysk</option>\n <option id=\"lang_hi\" value=\"hi\">हिन्दी, हिंदी</option>\n <option id=\"lang_it\" value=\"it\">Italiano</option>\n <option id=\"lang_ja\" value=\"ja\">日本語</option>\n <option id=\"lang_nl\" value=\"nl\">Nederlands</option>\n <option id=\"lang_pl\" value=\"pl\">Polski</option>\n <option id=\"lang_pt-BR\" value=\"pt-BR\">Português (BR)</option>\n <option id=\"lang_ro\" value=\"ro\">Română</option>\n <option id=\"lang_ru\" value=\"ru\">Русский</option>\n <option id=\"lang_sk\" value=\"sk\">Slovenčina</option>\n <option id=\"lang_sl\" value=\"sl\">Slovenščina</option>\n <option id=\"lang_zh-CN\" value=\"zh-CN\">简体中文</option>\n <option id=\"lang_zh-TW\" value=\"zh-TW\">繁體中文</option>\n </select>\n </label>\n <label>\n <span id=\"svginfo_icons\">Icon size:</span>\n <select id=\"iconsize\">\n <option id=\"icon_small\" value=\"s\">Small</option>\n <option id=\"icon_medium\" value=\"m\" selected=\"selected\">Medium</option>\n <option id=\"icon_large\" value=\"l\">Large</option>\n <option id=\"icon_xlarge\" value=\"xl\">Extra Large</option>\n </select>\n </label>\n <fieldset id=\"change_background\">\n <legend id=\"svginfo_change_background\">Editor Background</legend>\n <div id=\"bg_blocks\"></div>\n <label>\n <span id=\"svginfo_bg_url\">URL:</span>\n <input type=\"text\" id=\"canvas_bg_url\" />\n </label>\n <p id=\"svginfo_bg_note\">Note: Background will not be saved with image.</p>\n </fieldset>\n <fieldset id=\"change_grid\">\n <legend id=\"svginfo_grid_settings\">Grid</legend>\n <label for=\"svginfo_snap_onoff\">\n <span id=\"svginfo_snap_onoff\">Snapping on/off</span>\n <input type=\"checkbox\" value=\"snapping_on\" id=\"grid_snapping_on\" />\n </label>\n <label for=\"grid_snapping_step\">\n <span id=\"svginfo_snap_step\">Snapping Step-Size:</span>\n <input type=\"text\" id=\"grid_snapping_step\" size=\"3\" value=\"10\" />\n </label>\n <label>\n <span id=\"svginfo_grid_color\">Grid color:</span>\n <input type=\"text\" id=\"grid_color\" size=\"3\" value=\"#000\" />\n </label>\n </fieldset>\n <fieldset id=\"units_rulers\">\n <legend id=\"svginfo_units_rulers\">Units &amp; Rulers</legend>\n <label>\n <span id=\"svginfo_rulers_onoff\">Show rulers</span>\n <input id=\"show_rulers\" type=\"checkbox\" value=\"show_rulers\" checked=\"checked\" />\n </label>\n <label>\n <span id=\"svginfo_unit\">Base Unit:</span>\n <select id=\"base_unit\">\n <option value=\"px\">Pixels</option>\n <option value=\"cm\">Centimeters</option>\n <option value=\"mm\">Millimeters</option>\n <option value=\"in\">Inches</option>\n <option value=\"pt\">Points</option>\n <option value=\"pc\">Picas</option>\n <option value=\"em\">Ems</option>\n <option value=\"ex\">Exs</option>\n </select>\n </label>\n </fieldset>\n </fieldset>\n </div>\n </elix-dialog> \n`;\n/**\n * @class SeEditPrefsDialog\n */\nexport class SeEditPrefsDialog extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this.colorBlocks = ['#FFF', '#888', '#000', 'chessboard'];\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n this.$dialog = this._shadowRoot.querySelector('#svg_prefs');\n this.$saveBtn = this._shadowRoot.querySelector('#tool_prefs_save');\n this.$cancelBtn = this._shadowRoot.querySelector('#tool_prefs_cancel');\n this.$langSelect = this._shadowRoot.querySelector('#lang_select');\n this.$iconSize = this._shadowRoot.querySelector('#iconsize');\n this.$bgBlocks = this._shadowRoot.querySelector('#bg_blocks');\n this.$bgURL = this._shadowRoot.querySelector('#canvas_bg_url');\n this.$gridSnappingOn = this._shadowRoot.querySelector('#grid_snapping_on');\n this.$gridSnappingStep = this._shadowRoot.querySelector('#grid_snapping_step');\n this.$gridColor = this._shadowRoot.querySelector('#grid_color');\n this.$showRulers = this._shadowRoot.querySelector('#show_rulers');\n this.$baseUnit = this._shadowRoot.querySelector('#base_unit');\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n // eslint-disable-next-line max-len\n return ['dialog', 'lang', 'iconsize', 'canvasbg', 'bgurl', 'gridsnappingon', 'gridsnappingstep', 'gridcolor', 'showrulers', 'baseunit'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n const blocks = this.$bgBlocks.querySelectorAll('div');\n const curBg = 'cur_background';\n switch (name) {\n case 'dialog':\n if (newValue === 'open') {\n this.$dialog.open();\n } else {\n this.$dialog.close();\n }\n break;\n case 'lang':\n this.$langSelect.value = newValue;\n break;\n case 'iconsize':\n this.$iconSize.value = newValue;\n break;\n case 'canvasbg':\n if (!newValue) {\n if (blocks.length > 0) {\n blocks[0].classList.add(curBg);\n }\n } else {\n blocks.forEach(function (blk) {\n const isBg = blk.dataset.bgColor === newValue;\n if (isBg) {\n blk.classList.add(curBg);\n } else {\n blk.classList.remove(curBg);\n }\n });\n }\n break;\n case 'bgurl':\n this.$bgURL.value = newValue;\n break;\n case 'gridsnappingon':\n if (newValue === 'true') {\n this.$gridSnappingOn.checked = true;\n } else if (newValue === 'false') {\n this.$gridSnappingOn.checked = false;\n }\n break;\n case 'gridsnappingstep':\n this.$gridSnappingStep.value = newValue;\n break;\n case 'gridcolor':\n this.$gridColor.value = newValue;\n break;\n case 'showrulers':\n if (newValue === 'true') {\n this.$showRulers.checked = true;\n } else if (newValue === 'false') {\n this.$showRulers.checked = false;\n }\n break;\n case 'baseunit':\n this.$baseUnit.value = newValue;\n break;\n default:\n super.attributeChangedCallback(name, oldValue, newValue);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get lang () {\n return this.getAttribute('lang');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set lang (value) {\n this.setAttribute('lang', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get iconsize () {\n return this.getAttribute('iconsize');\n }\n /**\n * @function set\n * @returns {void}\n */\n set iconsize (value) {\n this.setAttribute('iconsize', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get canvasbg () {\n return this.getAttribute('canvasbg');\n }\n /**\n * @function set\n * @returns {void}\n */\n set canvasbg (value) {\n this.setAttribute('canvasbg', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get bgurl () {\n return this.getAttribute('bgurl');\n }\n /**\n * @function set\n * @returns {void}\n */\n set bgurl (value) {\n this.setAttribute('bgurl', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get dialog () {\n return this.getAttribute('dialog');\n }\n /**\n * @function set\n * @returns {void}\n */\n set dialog (value) {\n this.setAttribute('dialog', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get gridsnappingon () {\n return this.getAttribute('gridsnappingon');\n }\n /**\n * @function set\n * @returns {void}\n */\n set gridsnappingon (value) {\n this.setAttribute('gridsnappingon', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get gridsnappingstep () {\n return this.getAttribute('gridsnappingstep');\n }\n /**\n * @function set\n * @returns {void}\n */\n set gridsnappingstep (value) {\n this.setAttribute('gridsnappingstep', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get gridcolor () {\n return this.getAttribute('gridcolor');\n }\n /**\n * @function set\n * @returns {void}\n */\n set gridcolor (value) {\n this.setAttribute('gridcolor', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get showrulers () {\n return this.getAttribute('showrulers');\n }\n /**\n * @function set\n * @returns {void}\n */\n set showrulers (value) {\n this.setAttribute('showrulers', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get baseunit () {\n return this.getAttribute('baseunit');\n }\n /**\n * @function set\n * @returns {void}\n */\n set baseunit (value) {\n this.setAttribute('baseunit', value);\n }\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n const onCancelHandler = (ev) => {\n const closeEvent = new CustomEvent('change', {detail: {\n dialog: 'closed'\n }});\n this.dispatchEvent(closeEvent);\n };\n const onSaveHandler = (ev) => {\n const color = this.$bgBlocks.querySelector('.cur_background').dataset.bgColor || '#FFF';\n const closeEvent = new CustomEvent('change', {detail: {\n lang: this.$langSelect.value,\n dialog: 'close',\n iconsize: this.$iconSize.value,\n bgcolor: color,\n bgurl: this.$bgURL.value,\n gridsnappingon: this.$gridSnappingOn.checked,\n gridsnappingstep: this.$gridSnappingStep.value,\n showrulers: this.$showRulers.checked,\n baseunit: this.$baseUnit.value\n }});\n this.dispatchEvent(closeEvent);\n };\n // Set up editor background functionality\n const currentObj = this;\n this.colorBlocks.forEach(function (e, i) {\n const newdiv = document.createElement('div');\n if (e === 'chessboard') {\n newdiv.dataset.bgColor = e;\n // eslint-disable-next-line max-len\n newdiv.style.backgroundImage = 'url(data:image/gif;base64,R0lGODlhEAAQAIAAAP///9bW1iH5BAAAAAAALAAAAAAQABAAAAIfjG+gq4jM3IFLJgpswNly/XkcBpIiVaInlLJr9FZWAQA7)';\n newdiv.classList.add('color_block');\n } else {\n newdiv.dataset.bgColor = e; // setAttribute('data-bgcolor', e);\n newdiv.style.backgroundColor = e;\n newdiv.classList.add('color_block');\n }\n currentObj.$bgBlocks.append(newdiv);\n });\n const blocks = this.$bgBlocks.querySelectorAll('div');\n const curBg = 'cur_background';\n blocks.forEach(function (blk) {\n blk.addEventListener('click', function () {\n blocks.forEach((el) => el.classList.remove(curBg));\n blk.classList.add(curBg);\n });\n });\n this.$saveBtn.addEventListener('click', onSaveHandler);\n this.$cancelBtn.addEventListener('click', onCancelHandler);\n this.$dialog.addEventListener('close', onCancelHandler);\n }\n}\n\n// Register\ncustomElements.define('se-edit-prefs-dialog', SeEditPrefsDialog);\n","import 'elix/define/Dialog.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n :not(:defined) {\n display: none;\n }\n\n /* Force the scroll bar to appear so we see it hide when overlay opens. */\n body::-webkit-scrollbar {\n background: lightgray;\n }\n body::-webkit-scrollbar-thumb {\n background: darkgray;\n }\n \n #svg_source_editor #svg_source_container {\n background-color: #B0B0B0;\n opacity: 1.0;\n text-align: center;\n border: 1px outset #777;\n z-index: 6;\n }\n \n #save_output_btns {\n display: none;\n text-align: left;\n } \n #save_output_btns p {\n margin: .5em 1.5em;\n display: inline-block;\n }\n #svg_source_editor form {\n width: 100%;\n } \n #svg_source_editor #svg_source_textarea {\n padding: 5px;\n font-size: 12px;\n min-height: 200px;\n width: 95%;\n height: 95%;\n }\n \n #svg_source_editor #tool_source_back {\n text-align: left;\n margin: 5px 10px;\n } \n </style>\n <elix-dialog id=\"svg_source_editor\" aria-label=\"SVG Source Editor\" closed>\n <div id=\"svg_source_container\">\n <div id=\"tool_source_back\" class=\"toolbar_button\">\n <button id=\"tool_source_save\">\n <img class=\"svg_icon\" src=\"./images/ok.svg\" alt=\"icon\" width=\"16\" height=\"16\" />\n Apply Changes\n </button>\n <button id=\"tool_source_cancel\">\n <img class=\"svg_icon\" src=\"./images/cancel.svg\" alt=\"icon\" width=\"16\" height=\"16\" />\n Cancel\n </button>\n </div>\n <div id=\"save_output_btns\">\n <p id=\"copy_save_note\">\n Copy the contents of this box into a text editor,\n then save the file with a .svg extension.</p>\n <button id=\"copy_save_done\">Done</button>\n </div>\n <form>\n <textarea id=\"svg_source_textarea\" spellcheck=\"false\" rows=\"5\" cols=\"80\"></textarea>\n </form>\n </div> \n </elix-dialog> \n`;\n/**\n * @class SeSvgSourceEditorDialog\n */\nexport class SeSvgSourceEditorDialog extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n this.$dialog = this._shadowRoot.querySelector('#svg_source_editor');\n this.$copyBtn = this._shadowRoot.querySelector('#copy_save_done');\n this.$saveBtn = this._shadowRoot.querySelector('#tool_source_save');\n this.$cancelBtn = this._shadowRoot.querySelector('#tool_source_cancel');\n this.$sourceTxt = this._shadowRoot.querySelector('#svg_source_textarea');\n this.$copySec = this._shadowRoot.querySelector('#save_output_btns');\n this.$applySec = this._shadowRoot.querySelector('#tool_source_back');\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['dialog', 'value', 'applysec', 'copysec'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'dialog':\n if (newValue === 'open') {\n this.$sourceTxt.focus();\n this.$dialog.open();\n } else {\n this.$dialog.close();\n this.$sourceTxt.blur();\n }\n break;\n case 'applysec':\n if (newValue === 'false') {\n this.$applySec.style.display = 'none';\n } else {\n this.$applySec.style.display = 'block';\n }\n break;\n case 'copysec':\n if (newValue === 'false') {\n this.$copySec.style.display = 'none';\n } else {\n this.$copySec.style.display = 'block';\n }\n break;\n case 'value':\n this.$sourceTxt.value = newValue;\n break;\n default:\n super.attributeChangedCallback(name, oldValue, newValue);\n break;\n }\n }\n\n /**\n * @function get\n * @returns {any}\n */\n get dialog () {\n return this.getAttribute('dialog');\n }\n /**\n * @function set\n * @returns {void}\n */\n set dialog (value) {\n this.setAttribute('dialog', value);\n }\n\n /**\n * @function get\n * @returns {any}\n */\n get value () {\n return this.getAttribute('value');\n }\n /**\n * @function set\n * @returns {void}\n */\n set value (value) {\n this.setAttribute('value', value);\n }\n\n /**\n * @function get\n * @returns {any}\n */\n get applysec () {\n return this.getAttribute('applysec');\n }\n /**\n * @function set\n * @returns {void}\n */\n set applysec (value) {\n this.setAttribute('applysec', value);\n }\n\n /**\n * @function get\n * @returns {any}\n */\n get copysec () {\n return this.getAttribute('copysec');\n }\n /**\n * @function set\n * @returns {void}\n */\n set copysec (value) {\n this.setAttribute('copysec', value);\n }\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n const onCancelHandler = (ev) => {\n const closeEvent = new CustomEvent('change', {detail: {\n dialog: 'closed'\n }});\n this.dispatchEvent(closeEvent);\n };\n const onCopyHandler = (ev) => {\n const closeEvent = new CustomEvent('change', {\n detail: {\n copy: 'click',\n value: this.$sourceTxt.value\n }\n });\n this.dispatchEvent(closeEvent);\n };\n const onSaveHandler = (ev) => {\n const closeEvent = new CustomEvent('change', {detail: {\n value: this.$sourceTxt.value,\n dialog: 'close'\n }});\n this.dispatchEvent(closeEvent);\n };\n this.$copyBtn.addEventListener('click', onCopyHandler);\n this.$saveBtn.addEventListener('click', onSaveHandler);\n this.$cancelBtn.addEventListener('click', onCancelHandler);\n this.$dialog.addEventListener('close', onCancelHandler);\n }\n}\n\n// Register\ncustomElements.define('se-svg-source-editor-dialog', SeSvgSourceEditorDialog);\n","const template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n .contextMenu {\n position: absolute;\n z-index: 99999;\n border: solid 1px rgba(0,0,0,.33);\n background: rgba(255,255,255,.95);\n padding: 5px 0;\n margin: 0px;\n display: none;\n font: 12px/15px Lucida Sans, Helvetica, Verdana, sans-serif;\n border-radius: 5px;\n -moz-border-radius: 5px;\n -moz-box-shadow: 2px 5px 10px rgba(0,0,0,.3);\n -webkit-box-shadow: 2px 5px 10px rgba(0,0,0,.3);\n box-shadow: 2px 5px 10px rgba(0,0,0,.3);\n }\n \n .contextMenu li {\n list-style: none;\n padding: 0px;\n margin: 0px;\n }\n \n .contextMenu .shortcut {\n width: 115px;\n text-align:right;\n float:right;\n }\n \n .contextMenu a {\n -moz-user-select: none;\n -webkit-user-select: none;\n color: #222;\n text-decoration: none;\n display: block;\n line-height: 20px;\n height: 20px;\n background-position: 6px center;\n background-repeat: no-repeat;\n outline: none;\n padding: 0px 15px 1px 20px;\n }\n \n .contextMenu li.hover a {\n background-color: #2e5dea;\n color: white;\n cursor: default;\n }\n \n .contextMenu li.disabled a {\n color: #999;\n }\n \n .contextMenu li.hover.disabled a {\n background-color: transparent;\n }\n \n .contextMenu li.separator {\n border-top: solid 1px #E3E3E3;\n padding-top: 5px;\n margin-top: 5px;\n } \n </style>\n <ul id=\"cmenu_canvas\" class=\"contextMenu\">\n <li>\n <a href=\"#cut\" id=\"se-cut\">\n Cut<span class=\"shortcut\">META+X</span>\n </a>\n </li>\n <li>\n <a href=\"#copy\" id=\"se-copy\">\n Copy<span class=\"shortcut\">META+C</span>\n </a>\n </li>\n <li>\n <a href=\"#paste\" id=\"se-paste\">Paste</a>\n </li>\n <li>\n <a href=\"#paste_in_place\" id=\"se-paste-in-place\">Paste in Place</a>\n </li>\n <li class=\"separator\">\n <a href=\"#delete\" id=\"se-delete\">\n Delete<span class=\"shortcut\">BACKSPACE</span>\n </a>\n </li>\n <li class=\"separator\">\n <a href=\"#group\" id=\"se-group\">\n Group<span class=\"shortcut\">G</span>\n </a>\n </li>\n <li>\n <a href=\"#ungroup\" id=\"se-ungroup\">\n Ungroup<span class=\"shortcut\">G</span>\n </a>\n </li>\n <li class=\"separator\">\n <a href=\"#move_front\" id=\"se-move-front\">\n Bring to Front<span class=\"shortcut\">CTRL+SHFT+]</span>\n </a>\n </li>\n <li>\n <a href=\"#move_up\" id=\"se-move-up\">\n Bring Forward<span class=\"shortcut\">CTRL+]</span>\n </a>\n </li>\n <li>\n <a href=\"#move_down\" id=\"se-move-down\">\n Send Backward<span class=\"shortcut\">CTRL+[</span>\n </a>\n </li>\n <li>\n <a href=\"#move_back\" id=\"se-move-back\">\n Send to Back<span class=\"shortcut\">CTRL+SHFT+[</span>\n </a>\n </li> \n </ul>\n`;\n/**\n * @class SeCMenuDialog\n */\nexport class SeCMenuDialog extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n this._workarea = document.getElementById('workarea');\n this.$dialog = this._shadowRoot.querySelector('#cmenu_canvas');\n this.$copyLink = this._shadowRoot.querySelector('#se-copy');\n this.$cutLink = this._shadowRoot.querySelector('#se-cut');\n this.$pasteLink = this._shadowRoot.querySelector('#se-paste');\n this.$pasteInPlaceLink = this._shadowRoot.querySelector('#se-paste-in-place');\n this.$deleteLink = this._shadowRoot.querySelector('#se-delete');\n this.$groupLink = this._shadowRoot.querySelector('#se-group');\n this.$ungroupLink = this._shadowRoot.querySelector('#se-ungroup');\n this.$moveFrontLink = this._shadowRoot.querySelector('#se-move-front');\n this.$moveUpLink = this._shadowRoot.querySelector('#se-move-up');\n this.$moveDownLink = this._shadowRoot.querySelector('#se-move-down');\n this.$moveBackLink = this._shadowRoot.querySelector('#se-move-back');\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['disableallmenu', 'enablemenuitems', 'disablemenuitems'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n let eles = [];\n const sdowRoot = this._shadowRoot;\n switch (name) {\n case 'disableallmenu':\n if (newValue === 'true') {\n const elesli = sdowRoot.querySelectorAll('li');\n elesli.forEach(function (eleli) {\n eleli.classList.add('disabled');\n });\n }\n break;\n case 'enablemenuitems':\n eles = newValue.split(',');\n eles.forEach(function (ele) {\n const selEle = sdowRoot.querySelector('a[href*=\"' + ele + '\"]');\n selEle.parentElement.classList.remove('disabled');\n });\n break;\n case 'disablemenuitems':\n eles = newValue.split(',');\n eles.forEach(function (ele) {\n const selEle = sdowRoot.querySelector('a[href*=\"' + ele + '\"]');\n selEle.parentElement.classList.add('disabled');\n });\n break;\n default:\n // super.attributeChangedCallback(name, oldValue, newValue);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get disableallmenu () {\n return this.getAttribute('disableallmenu');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set disableallmenu (value) {\n this.setAttribute('disableallmenu', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get enablemenuitems () {\n return this.getAttribute('enablemenuitems');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set enablemenuitems (value) {\n this.setAttribute('enablemenuitems', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get disablemenuitems () {\n return this.getAttribute('disablemenuitems');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set disablemenuitems (value) {\n this.setAttribute('disablemenuitems', value);\n }\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n const current = this;\n const onMenuOpenHandler = (e) => {\n e.preventDefault();\n current.$dialog.style.top = e.pageY + 'px';\n current.$dialog.style.left = e.pageX + 'px';\n current.$dialog.style.display = 'block';\n };\n const onMenuCloseHandler = (e) => {\n if (e.button !== 2) {\n current.$dialog.style.display = 'none';\n }\n };\n const onMenuClickHandler = (e, action) => {\n const triggerEvent = new CustomEvent('change', {detail: {\n trigger: action\n }});\n this.dispatchEvent(triggerEvent);\n };\n this._workarea.addEventListener('contextmenu', onMenuOpenHandler);\n this._workarea.addEventListener('mousedown', onMenuCloseHandler);\n this.$cutLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'cut'));\n this.$copyLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'copy'));\n this.$pasteLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'paste'));\n this.$pasteInPlaceLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'paste_in_place'));\n this.$deleteLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'delete'));\n this.$groupLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'group'));\n this.$ungroupLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'ungroup'));\n this.$moveFrontLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'move_front'));\n this.$moveUpLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'move_up'));\n this.$moveDownLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'move_down'));\n this.$moveBackLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'move_back'));\n }\n}\n\n// Register\ncustomElements.define('se-cmenu_canvas-dialog', SeCMenuDialog);\n","const template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n .contextMenu {\n position: absolute;\n z-index: 99999;\n border: solid 1px rgba(0,0,0,.33);\n background: rgba(255,255,255,.95);\n padding: 5px 0;\n margin: 0px;\n display: none;\n font: 12px/15px Lucida Sans, Helvetica, Verdana, sans-serif;\n border-radius: 5px;\n -moz-border-radius: 5px;\n -moz-box-shadow: 2px 5px 10px rgba(0,0,0,.3);\n -webkit-box-shadow: 2px 5px 10px rgba(0,0,0,.3);\n box-shadow: 2px 5px 10px rgba(0,0,0,.3);\n }\n \n .contextMenu li {\n list-style: none;\n padding: 0px;\n margin: 0px;\n }\n \n .contextMenu .shortcut {\n width: 115px;\n text-align:right;\n float:right;\n }\n \n .contextMenu a {\n -moz-user-select: none;\n -webkit-user-select: none;\n color: #222;\n text-decoration: none;\n display: block;\n line-height: 20px;\n height: 20px;\n background-position: 6px center;\n background-repeat: no-repeat;\n outline: none;\n padding: 0px 15px 1px 20px;\n }\n \n .contextMenu li.hover a {\n background-color: #2e5dea;\n color: white;\n cursor: default;\n }\n \n .contextMenu li.disabled a {\n color: #999;\n }\n \n .contextMenu li.hover.disabled a {\n background-color: transparent;\n }\n \n .contextMenu li.separator {\n border-top: solid 1px #E3E3E3;\n padding-top: 5px;\n margin-top: 5px;\n } \n </style>\n <ul id=\"cmenu_layers\" class=\"contextMenu\">\n <li><a href=\"#dupe\" id=\"se-dupe\">Duplicate Layer...</a></li>\n <li><a href=\"#delete\" id=\"se-layer-delete\">Delete Layer</a></li>\n <li><a href=\"#merge_down\" id=\"se-merge-down\">Merge Down</a></li>\n <li><a href=\"#merge_all\" id=\"se-merge-all\">Merge All</a></li>\n </ul>\n`;\n/**\n * @class SeCMenuLayerDialog\n */\nexport class SeCMenuLayerDialog extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n this.source = '';\n this._workarea = undefined;\n this.$sidePanels = document.getElementById('sidepanels');\n this.$dialog = this._shadowRoot.querySelector('#cmenu_layers');\n this.$duplicateLink = this._shadowRoot.querySelector('#se-dupe');\n this.$deleteLink = this._shadowRoot.querySelector('#se-layer-delete');\n this.$mergeDownLink = this._shadowRoot.querySelector('#se-merge-down');\n this.$mergeAllLink = this._shadowRoot.querySelector('#se-merge-all');\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['value', 'leftclick'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (name) {\n case 'value':\n this.source = newValue;\n if (newValue !== '' && newValue !== undefined) {\n this._workarea = document.getElementById(this.source);\n }\n break;\n default:\n // super.attributeChangedCallback(name, oldValue, newValue);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get value () {\n return this.getAttribute('value');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set value (value) {\n this.setAttribute('value', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get leftclick () {\n return this.getAttribute('leftclick');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set leftclick (value) {\n this.setAttribute('leftclick', value);\n }\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n const current = this;\n const onMenuOpenHandler = (e) => {\n e.preventDefault();\n current.$dialog.style.top = e.pageY + 'px';\n current.$dialog.style.left = e.pageX + 'px';\n current.$dialog.style.display = 'block';\n };\n const onMenuCloseHandler = (e) => {\n if (e.button !== 2) {\n current.$dialog.style.display = 'none';\n }\n };\n const onMenuClickHandler = (e, action, id) => {\n const triggerEvent = new CustomEvent('change', {detail: {\n trigger: action,\n source: id\n }});\n this.dispatchEvent(triggerEvent);\n current.$dialog.style.display = 'none';\n };\n if (this._workarea !== undefined) {\n this._workarea.addEventListener('contextmenu', onMenuOpenHandler);\n if (this.getAttribute('leftclick') === 'true') {\n this._workarea.addEventListener('click', onMenuOpenHandler);\n }\n this._workarea.addEventListener('mousedown', onMenuCloseHandler);\n this.$sidePanels.addEventListener('mousedown', onMenuCloseHandler);\n }\n this.$duplicateLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'dupe', this.source));\n this.$deleteLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'delete', this.source));\n this.$mergeDownLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'merge_down', this.source));\n this.$mergeAllLink.addEventListener('click', (evt) => onMenuClickHandler(evt, 'merge_all', this.source));\n }\n}\n\n// Register\ncustomElements.define('se-cmenu-layers', SeCMenuLayerDialog);\n","import { updateChildNodes } from \"../core/dom.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport { createElement } from \"../core/template.js\";\nimport Dialog from \"./Dialog.js\";\nimport {\n defaultState,\n firstRender,\n ids,\n keydown,\n raiseChangeEvents,\n render,\n setState,\n state,\n stateEffects,\n template,\n} from \"./internal.js\";\n\n/**\n * Asks a single question the user can answer with choice buttons\n *\n * @inherits Dialog\n * @part {button} choice-button - a button representing a choice\n * @part {div} choice-button-container - the container for the choice buttons\n */\nclass AlertDialog extends Dialog {\n /**\n * The buttons created by the component to represent the choices in the\n * [choices](#choices) property.\n *\n * @type {HTMLElement[]}\n */\n get choiceButtons() {\n return this[state].choiceButtons;\n }\n\n /**\n * The class or tag used to create the `choice-button` parts —\n * the set of choices shown to the user.\n *\n * @type {PartDescriptor}\n * @default 'button'\n */\n get choiceButtonPartType() {\n return this[state].choiceButtonPartType;\n }\n set choiceButtonPartType(choiceButtonPartType) {\n this[setState]({ choiceButtonPartType });\n }\n\n /**\n * An array of strings indicating the choices the `AlertDialog` will present\n * to the user as responses to the alert. For each string in the array, the\n * `AlertDialog` displays a button labeled with that string.\n *\n * By default, this is an array with a single choice, \"OK\".\n *\n * @type {string[]}\n */\n get choices() {\n return this[state].choices;\n }\n set choices(choices) {\n this[setState]({ choices });\n }\n\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n choiceButtonPartType: \"button\",\n choiceButtons: [],\n choices: [\"OK\"],\n });\n }\n\n // Let the user select a choice by pressing its initial letter.\n [keydown](/** @type {KeyboardEvent} */ event) {\n let handled = false;\n\n const key = event.key.length === 1 && event.key.toLowerCase();\n if (key) {\n // See if one of the choices starts with the key.\n const choice = this.choices.find(\n (choice) => choice[0].toLowerCase() === key\n );\n if (choice) {\n this.close({\n choice,\n });\n handled = true;\n }\n }\n\n // Prefer mixin result if it's defined, otherwise use base result.\n return handled || (super[keydown] && super[keydown](event)) || false;\n }\n\n [render](/** @type {ChangedFlags} */ changed) {\n super[render](changed);\n\n if (this[firstRender]) {\n this[ids].choiceButtonContainer.addEventListener(\n \"click\",\n async (event) => {\n // TODO: Ignore clicks on choiceButtonContainer background.\n const button = event.target;\n if (button instanceof HTMLElement) {\n const choice = button.textContent;\n this[raiseChangeEvents] = true;\n await this.close({ choice });\n this[raiseChangeEvents] = false;\n }\n }\n );\n }\n\n if (changed.choiceButtons) {\n updateChildNodes(\n this[ids].choiceButtonContainer,\n this[state].choiceButtons\n );\n }\n }\n\n [stateEffects](state, changed) {\n const effects = super[stateEffects](state, changed);\n\n // When choices or choice button part type changes, regenerate buttons.\n if (changed.choiceButtonPartType || changed.choices) {\n /** @type {string[]} */ const choices = state.choices;\n const choiceButtons = choices.map((choice) => {\n const button = createElement(state.choiceButtonPartType);\n if (\"part\" in button) {\n /** @type {any} */ (button).part = \"choice-button\";\n }\n button.textContent = choice;\n return button;\n });\n Object.freeze(choiceButtons);\n Object.assign(effects, {\n choiceButtons,\n });\n }\n\n return effects;\n }\n\n get [template]() {\n const result = super[template];\n // Replace the default slot with a new default slot and a button container.\n const defaultSlot = result.content.querySelector(\"slot:not([name])\");\n if (defaultSlot) {\n defaultSlot.replaceWith(fragmentFrom.html`\n <div id=\"alertDialogContent\">\n <slot></slot>\n <div id=\"choiceButtonContainer\" part=\"choice-button-container\"></div>\n </div>\n `);\n }\n return result;\n }\n}\n\nexport default AlertDialog;\n","import AlertDialog from \"../base/AlertDialog.js\";\nimport { defaultState, template } from \"../base/internal.js\";\nimport { fragmentFrom } from \"../core/htmlLiterals.js\";\nimport PlainBorderButton from \"./PlainBorderButton.js\";\nimport PlainModalOverlayMixin from \"./PlainModalOverlayMixin.js\";\n\n/**\n * AlertDialog component in the Plain reference design system\n *\n * @inherits AlertDialog\n * @mixes PlainModalOverlayMixin\n * @part {PlainBorderButton} choice-button\n */\nclass PlainAlertDialog extends PlainModalOverlayMixin(AlertDialog) {\n // @ts-ignore\n get [defaultState]() {\n return Object.assign(super[defaultState], {\n choiceButtonPartType: PlainBorderButton,\n });\n }\n\n get [template]() {\n const result = super[template];\n result.content.append(\n fragmentFrom.html`\n <style>\n [part~=\"frame\"] {\n padding: 1em;\n }\n\n [part~=\"choice-button-container\"] {\n margin-top: 1em;\n }\n\n [part~=\"choice-button\"]:not(:first-child) {\n margin-left: 0.5em;\n }\n </style>\n `\n );\n return result;\n }\n}\n\nexport default PlainAlertDialog;\n","import PlainAlertDialog from 'elix/src/plain/PlainAlertDialog.js';\nimport {template} from 'elix/src/base/internal.js';\nimport {fragmentFrom} from 'elix/src/core/htmlLiterals.js';\n\n/**\n * @class SePlainAlertDialog\n */\nexport default class SePlainAlertDialog extends PlainAlertDialog {\n /**\n * @function get\n * @returns {PlainObject}\n */\n get [template] () {\n const result = super[template];\n // Replace the default slot with a new default slot and a button container.\n const defaultSlot = result.content.querySelector('#frameContent');\n if (defaultSlot) {\n defaultSlot.replaceWith(fragmentFrom.html`\n <div id=\"alertDialogContent\">\n <div id=\"se-content-alert\">\n <slot></slot>\n </div>\n <div id=\"choiceButtonContainer\" part=\"choice-button-container\"></div>\n </div>\n `);\n }\n result.content.append(\n fragmentFrom.html`\n <style>\n [part~=\"frame\"] {\n padding: 1em;\n background: #CCC;\n width: 300px;\n border: 1px outset #777;\n font-size: 0.8em;\n font-family: Verdana,Helvetica,sans-serif;\n border-radius: 5px;\n -moz-border-radius: 5px;\n -webkit-border-radius: 5px;\n }\n\n [part~=\"choice-button-container\"] {\n margin-top: 1em;\n text-align: center;\n }\n\n [part~=\"choice-button\"]:not(:first-child) {\n margin-left: 0.5em;\n }\n #se-content-alert{\n height: 95px;\n background: #DDD;\n overflow: auto;\n text-align: left;\n border: 1px solid #B0B0B0;\n padding: 1em;\n border-radius: 5px;\n -moz-border-radius: 5px;\n -webkit-border-radius: 5px;\n }\n </style>\n `\n );\n return result;\n }\n}\n\ncustomElements.define('se-elix-alert-dialog', SePlainAlertDialog);\n","import SePlainAlertDialog from './SePlainAlertDialog.js';\n\nconst seSelect = async (text, choices) => {\n const dialog = new SePlainAlertDialog();\n dialog.textContent = text;\n dialog.choices = choices;\n dialog.open();\n const response = await dialog.whenClosed();\n return response.choice;\n};\n\nwindow.seSelect = seSelect;\n","import SePlainAlertDialog from './SePlainAlertDialog.js';\n\nconst seConfirm = async (text, choices) => {\n const dialog = new SePlainAlertDialog();\n dialog.textContent = text;\n dialog.choices = (choices === undefined) ? ['Ok', 'Cancel'] : choices;\n dialog.open();\n const response = await dialog.whenClosed();\n return response.choice;\n};\n\nwindow.seConfirm = seConfirm;\n","import SePlainAlertDialog from './SePlainAlertDialog.js';\n/**\n * @class SePromptDialog\n */\nexport class SePromptDialog extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this.dialog = new SePlainAlertDialog();\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['title', 'close'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n switch (name) {\n case 'title':\n if (this.dialog.opened) {\n this.dialog.close();\n }\n this.dialog.textContent = newValue;\n this.dialog.choices = ['Cancel'];\n this.dialog.open();\n break;\n case 'close':\n if (this.dialog.opened) {\n this.dialog.close();\n }\n break;\n default:\n // eslint-disable-next-line no-console\n console.error('unknown attr for:', name, 'newValue =', newValue);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get title () {\n return this.getAttribute('title');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set title (value) {\n this.setAttribute('title', value);\n }\n /**\n * @function get\n * @returns {any}\n */\n get close () {\n return this.getAttribute('close');\n }\n\n /**\n * @function set\n * @returns {void}\n */\n set close (value) {\n this.setAttribute('close', value);\n }\n}\n\n// Register\ncustomElements.define('se-prompt-dialog', SePromptDialog);\n","import SePlainAlertDialog from './SePlainAlertDialog.js';\n\nconst seAlert = (text) => {\n const dialog = new SePlainAlertDialog();\n dialog.textContent = text;\n dialog.choices = ['Ok'];\n dialog.open();\n};\n\nwindow.seAlert = seAlert;\n","import 'elix/define/Dialog.js';\nimport './se-elix/define/NumberSpinBox.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n <style>\n \n #dialog_content {\n margin: 10px 10px 5px 10px;\n background: #DDD;\n overflow: auto;\n text-align: left;\n border: 1px solid #B0B0B0;\n }\n\n #dialog_content p, #dialog_content select, #dialog_content label {\n margin: 10px;\n line-height: 0.3em;\n }\n \n #dialog_container {\n font-family: Verdana;\n text-align: center;\n left: 50%;\n top: 50%;\n max-width: 400px;\n z-index: 50001;\n background: #CCC;\n border: 1px outset #777;\n font-family:Verdana,Helvetica,sans-serif;\n font-size:0.8em;\n }\n \n #dialog_container, #dialog_content {\n border-radius: 5px;\n -moz-border-radius: 5px;\n -webkit-border-radius: 5px;\n }\n \n #dialog_buttons input[type=text] {\n width: 90%;\n display: block;\n margin: 0 0 5px 11px;\n }\n \n #dialog_buttons input[type=button] {\n margin: 0 1em;\n }\n .se-select{\n text-align: center;\n }\n elix-number-spin-box{\n margin-left: 15px;\n }\n </style>\n <elix-dialog id=\"export_box\" aria-label=\"export svg\" closed>\n <div class=\"overlay\"></div>\n <div id=\"dialog_container\">\n <div id=\"dialog_content\">\n <p class=\"se-select\"> \n Select an image type for export:\n </p>\n <p class=\"se-select\">\n <select id=\"se-storage-pref\">\n <option value=\"PNG\">PNG</option>\n <option value=\"JPEG\">JPEG</option>\n <option value=\"BMP\">BMP</option>\n <option value=\"WEBP\">WEBP</option>\n <option value=\"PDF\">PDF</option>\n </select> \n </p>\n <p id=\"se-quality\">Quality:<elix-number-spin-box min=\"-1\" max=\"101\" step=\"5\" value=\"100\"></elix-number-spin-box></p>\n </div>\n <div id=\"dialog_buttons\">\n <button id=\"export_ok\">\n <img class=\"svg_icon\" src=\"./images/ok.svg\" alt=\"icon\" width=\"16\" height=\"16\" />\n Ok\n </button>\n <button id=\"export_cancel\">\n <img class=\"svg_icon\" src=\"./images/cancel.svg\" alt=\"icon\" width=\"16\" height=\"16\" />\n Cancel\n </button>\n </div>\n </div>\n </elix-dialog>\n`;\n/**\n * @class SeExportDialog\n */\nexport class SeExportDialog extends HTMLElement {\n /**\n * @function constructor\n */\n constructor () {\n super();\n // create the shadowDom and insert the template\n this._shadowRoot = this.attachShadow({mode: 'open'});\n this._shadowRoot.append(template.content.cloneNode(true));\n this.$dialog = this._shadowRoot.querySelector('#export_box');\n this.$okBtn = this._shadowRoot.querySelector('#export_ok');\n this.$cancelBtn = this._shadowRoot.querySelector('#export_cancel');\n this.$exportOption = this._shadowRoot.querySelector('#se-storage-pref');\n this.$qualityCont = this._shadowRoot.querySelector('#se-quality');\n this.$input = this._shadowRoot.querySelector('elix-number-spin-box');\n this.value = 1;\n }\n /**\n * @function observedAttributes\n * @returns {any} observed\n */\n static get observedAttributes () {\n return ['dialog'];\n }\n /**\n * @function attributeChangedCallback\n * @param {string} name\n * @param {string} oldValue\n * @param {string} newValue\n * @returns {void}\n */\n attributeChangedCallback (name, oldValue, newValue) {\n switch (name) {\n case 'dialog':\n if (newValue === 'open') {\n this.$dialog.open();\n } else {\n this.$dialog.close();\n }\n break;\n default:\n // super.attributeChangedCallback(name, oldValue, newValue);\n break;\n }\n }\n /**\n * @function get\n * @returns {any}\n */\n get dialog () {\n return this.getAttribute('dialog');\n }\n /**\n * @function set\n * @returns {void}\n */\n set dialog (value) {\n this.setAttribute('dialog', value);\n }\n /**\n * @function connectedCallback\n * @returns {void}\n */\n connectedCallback () {\n this.$input.addEventListener('change', (e) => {\n e.preventDefault();\n this.value = e.target.value;\n });\n this.$input.addEventListener('click', (e) => {\n e.preventDefault();\n this.value = e.target.value;\n });\n const onSubmitHandler = (e, action) => {\n if (action === 'cancel') {\n document.getElementById('se-export-dialog').setAttribute('dialog', 'close');\n } else {\n const triggerEvent = new CustomEvent('change', {detail: {\n trigger: action,\n imgType: this.$exportOption.value,\n quality: this.value\n }});\n this.dispatchEvent(triggerEvent);\n }\n };\n const onChangeHandler = (e) => {\n if (e.target.value === 'PDF') {\n this.$qualityCont.style.display = 'none';\n } else {\n this.$qualityCont.style.display = 'block';\n }\n };\n this.$okBtn.addEventListener('click', (evt) => onSubmitHandler(evt, 'ok'));\n this.$cancelBtn.addEventListener('click', (evt) => onSubmitHandler(evt, 'cancel'));\n this.$exportOption.addEventListener('change', (evt) => onChangeHandler(evt));\n }\n}\n\n// Register\ncustomElements.define('se-export-dialog', SeExportDialog);\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","// http://ross.posterous.com/2008/08/19/iphone-touch-events-in-javascript/\n/**\n *\n * @param {Event} ev\n * @returns {void}\n */\nfunction touchHandler (ev) {\n const {changedTouches} = ev,\n first = changedTouches[0];\n\n let type = '';\n switch (ev.type) {\n case 'touchstart': type = 'mousedown'; break;\n case 'touchmove': type = 'mousemove'; break;\n case 'touchend': type = 'mouseup'; break;\n default: return;\n }\n\n const {screenX, screenY, clientX, clientY} = first;\n const simulatedEvent = new MouseEvent(type, {\n // Event interface\n bubbles: true,\n cancelable: true,\n // UIEvent interface\n view: window,\n detail: 1, // click count\n // MouseEvent interface (customized)\n screenX, screenY, clientX, clientY,\n // MouseEvent interface (defaults) - these could be removed\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n button: 0, // main button (usually left)\n relatedTarget: null\n });\n if (changedTouches.length < 2) {\n first.target.dispatchEvent(simulatedEvent);\n ev.preventDefault();\n }\n}\n\ndocument.addEventListener('touchstart', touchHandler, true);\ndocument.addEventListener('touchmove', touchHandler, true);\ndocument.addEventListener('touchend', touchHandler, true);\ndocument.addEventListener('touchcancel', touchHandler, true);\n","// SVGPathSeg API polyfill\n// https://github.com/progers/pathseg\n//\n// This is a drop-in replacement for the SVGPathSeg and SVGPathSegList APIs that were removed from\n// SVG2 (https://lists.w3.org/Archives/Public/www-svg/2015Jun/0044.html), including the latest spec\n// changes which were implemented in Firefox 43 and Chrome 46.\n\n(function() { \"use strict\";\n if (!(\"SVGPathSeg\" in window)) {\n // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSeg\n window.SVGPathSeg = function(type, typeAsLetter, owningPathSegList) {\n this.pathSegType = type;\n this.pathSegTypeAsLetter = typeAsLetter;\n this._owningPathSegList = owningPathSegList;\n }\n\n window.SVGPathSeg.prototype.classname = \"SVGPathSeg\";\n\n window.SVGPathSeg.PATHSEG_UNKNOWN = 0;\n window.SVGPathSeg.PATHSEG_CLOSEPATH = 1;\n window.SVGPathSeg.PATHSEG_MOVETO_ABS = 2;\n window.SVGPathSeg.PATHSEG_MOVETO_REL = 3;\n window.SVGPathSeg.PATHSEG_LINETO_ABS = 4;\n window.SVGPathSeg.PATHSEG_LINETO_REL = 5;\n window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS = 6;\n window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL = 7;\n window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS = 8;\n window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL = 9;\n window.SVGPathSeg.PATHSEG_ARC_ABS = 10;\n window.SVGPathSeg.PATHSEG_ARC_REL = 11;\n window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS = 12;\n window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL = 13;\n window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS = 14;\n window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL = 15;\n window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;\n window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;\n window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;\n window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;\n\n // Notify owning PathSegList on any changes so they can be synchronized back to the path element.\n window.SVGPathSeg.prototype._segmentChanged = function() {\n if (this._owningPathSegList)\n this._owningPathSegList.segmentChanged(this);\n }\n\n window.SVGPathSegClosePath = function(owningPathSegList) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CLOSEPATH, \"z\", owningPathSegList);\n }\n window.SVGPathSegClosePath.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegClosePath.prototype.toString = function() { return \"[object SVGPathSegClosePath]\"; }\n window.SVGPathSegClosePath.prototype._asPathString = function() { return this.pathSegTypeAsLetter; }\n window.SVGPathSegClosePath.prototype.clone = function() { return new window.SVGPathSegClosePath(undefined); }\n\n window.SVGPathSegMovetoAbs = function(owningPathSegList, x, y) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_ABS, \"M\", owningPathSegList);\n this._x = x;\n this._y = y;\n }\n window.SVGPathSegMovetoAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegMovetoAbs.prototype.toString = function() { return \"[object SVGPathSegMovetoAbs]\"; }\n window.SVGPathSegMovetoAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegMovetoAbs.prototype.clone = function() { return new window.SVGPathSegMovetoAbs(undefined, this._x, this._y); }\n Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegMovetoRel = function(owningPathSegList, x, y) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_REL, \"m\", owningPathSegList);\n this._x = x;\n this._y = y;\n }\n window.SVGPathSegMovetoRel.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegMovetoRel.prototype.toString = function() { return \"[object SVGPathSegMovetoRel]\"; }\n window.SVGPathSegMovetoRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegMovetoRel.prototype.clone = function() { return new window.SVGPathSegMovetoRel(undefined, this._x, this._y); }\n Object.defineProperty(window.SVGPathSegMovetoRel.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegMovetoRel.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegLinetoAbs = function(owningPathSegList, x, y) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_ABS, \"L\", owningPathSegList);\n this._x = x;\n this._y = y;\n }\n window.SVGPathSegLinetoAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegLinetoAbs.prototype.toString = function() { return \"[object SVGPathSegLinetoAbs]\"; }\n window.SVGPathSegLinetoAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegLinetoAbs.prototype.clone = function() { return new window.SVGPathSegLinetoAbs(undefined, this._x, this._y); }\n Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegLinetoRel = function(owningPathSegList, x, y) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_REL, \"l\", owningPathSegList);\n this._x = x;\n this._y = y;\n }\n window.SVGPathSegLinetoRel.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegLinetoRel.prototype.toString = function() { return \"[object SVGPathSegLinetoRel]\"; }\n window.SVGPathSegLinetoRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegLinetoRel.prototype.clone = function() { return new window.SVGPathSegLinetoRel(undefined, this._x, this._y); }\n Object.defineProperty(window.SVGPathSegLinetoRel.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegLinetoRel.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegCurvetoCubicAbs = function(owningPathSegList, x, y, x1, y1, x2, y2) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, \"C\", owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n this._x2 = x2;\n this._y2 = y2;\n }\n window.SVGPathSegCurvetoCubicAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegCurvetoCubicAbs.prototype.toString = function() { return \"[object SVGPathSegCurvetoCubicAbs]\"; }\n window.SVGPathSegCurvetoCubicAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x1 + \" \" + this._y1 + \" \" + this._x2 + \" \" + this._y2 + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegCurvetoCubicAbs.prototype.clone = function() { return new window.SVGPathSegCurvetoCubicAbs(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); }\n Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"x1\", { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"y1\", { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"x2\", { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, \"y2\", { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegCurvetoCubicRel = function(owningPathSegList, x, y, x1, y1, x2, y2) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, \"c\", owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n this._x2 = x2;\n this._y2 = y2;\n }\n window.SVGPathSegCurvetoCubicRel.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegCurvetoCubicRel.prototype.toString = function() { return \"[object SVGPathSegCurvetoCubicRel]\"; }\n window.SVGPathSegCurvetoCubicRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x1 + \" \" + this._y1 + \" \" + this._x2 + \" \" + this._y2 + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegCurvetoCubicRel.prototype.clone = function() { return new window.SVGPathSegCurvetoCubicRel(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); }\n Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"x1\", { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"y1\", { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"x2\", { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, \"y2\", { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegCurvetoQuadraticAbs = function(owningPathSegList, x, y, x1, y1) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS, \"Q\", owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n }\n window.SVGPathSegCurvetoQuadraticAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegCurvetoQuadraticAbs.prototype.toString = function() { return \"[object SVGPathSegCurvetoQuadraticAbs]\"; }\n window.SVGPathSegCurvetoQuadraticAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x1 + \" \" + this._y1 + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegCurvetoQuadraticAbs.prototype.clone = function() { return new window.SVGPathSegCurvetoQuadraticAbs(undefined, this._x, this._y, this._x1, this._y1); }\n Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, \"x1\", { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, \"y1\", { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegCurvetoQuadraticRel = function(owningPathSegList, x, y, x1, y1) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL, \"q\", owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n }\n window.SVGPathSegCurvetoQuadraticRel.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegCurvetoQuadraticRel.prototype.toString = function() { return \"[object SVGPathSegCurvetoQuadraticRel]\"; }\n window.SVGPathSegCurvetoQuadraticRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x1 + \" \" + this._y1 + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegCurvetoQuadraticRel.prototype.clone = function() { return new window.SVGPathSegCurvetoQuadraticRel(undefined, this._x, this._y, this._x1, this._y1); }\n Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, \"x1\", { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, \"y1\", { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegArcAbs = function(owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_ABS, \"A\", owningPathSegList);\n this._x = x;\n this._y = y;\n this._r1 = r1;\n this._r2 = r2;\n this._angle = angle;\n this._largeArcFlag = largeArcFlag;\n this._sweepFlag = sweepFlag;\n }\n window.SVGPathSegArcAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegArcAbs.prototype.toString = function() { return \"[object SVGPathSegArcAbs]\"; }\n window.SVGPathSegArcAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._r1 + \" \" + this._r2 + \" \" + this._angle + \" \" + (this._largeArcFlag ? \"1\" : \"0\") + \" \" + (this._sweepFlag ? \"1\" : \"0\") + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegArcAbs.prototype.clone = function() { return new window.SVGPathSegArcAbs(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); }\n Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"r1\", { get: function() { return this._r1; }, set: function(r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"r2\", { get: function() { return this._r2; }, set: function(r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"angle\", { get: function() { return this._angle; }, set: function(angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"largeArcFlag\", { get: function() { return this._largeArcFlag; }, set: function(largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegArcAbs.prototype, \"sweepFlag\", { get: function() { return this._sweepFlag; }, set: function(sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegArcRel = function(owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_REL, \"a\", owningPathSegList);\n this._x = x;\n this._y = y;\n this._r1 = r1;\n this._r2 = r2;\n this._angle = angle;\n this._largeArcFlag = largeArcFlag;\n this._sweepFlag = sweepFlag;\n }\n window.SVGPathSegArcRel.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegArcRel.prototype.toString = function() { return \"[object SVGPathSegArcRel]\"; }\n window.SVGPathSegArcRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._r1 + \" \" + this._r2 + \" \" + this._angle + \" \" + (this._largeArcFlag ? \"1\" : \"0\") + \" \" + (this._sweepFlag ? \"1\" : \"0\") + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegArcRel.prototype.clone = function() { return new window.SVGPathSegArcRel(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); }\n Object.defineProperty(window.SVGPathSegArcRel.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegArcRel.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegArcRel.prototype, \"r1\", { get: function() { return this._r1; }, set: function(r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegArcRel.prototype, \"r2\", { get: function() { return this._r2; }, set: function(r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegArcRel.prototype, \"angle\", { get: function() { return this._angle; }, set: function(angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegArcRel.prototype, \"largeArcFlag\", { get: function() { return this._largeArcFlag; }, set: function(largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegArcRel.prototype, \"sweepFlag\", { get: function() { return this._sweepFlag; }, set: function(sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegLinetoHorizontalAbs = function(owningPathSegList, x) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, \"H\", owningPathSegList);\n this._x = x;\n }\n window.SVGPathSegLinetoHorizontalAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegLinetoHorizontalAbs.prototype.toString = function() { return \"[object SVGPathSegLinetoHorizontalAbs]\"; }\n window.SVGPathSegLinetoHorizontalAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x; }\n window.SVGPathSegLinetoHorizontalAbs.prototype.clone = function() { return new window.SVGPathSegLinetoHorizontalAbs(undefined, this._x); }\n Object.defineProperty(window.SVGPathSegLinetoHorizontalAbs.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegLinetoHorizontalRel = function(owningPathSegList, x) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, \"h\", owningPathSegList);\n this._x = x;\n }\n window.SVGPathSegLinetoHorizontalRel.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegLinetoHorizontalRel.prototype.toString = function() { return \"[object SVGPathSegLinetoHorizontalRel]\"; }\n window.SVGPathSegLinetoHorizontalRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x; }\n window.SVGPathSegLinetoHorizontalRel.prototype.clone = function() { return new window.SVGPathSegLinetoHorizontalRel(undefined, this._x); }\n Object.defineProperty(window.SVGPathSegLinetoHorizontalRel.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegLinetoVerticalAbs = function(owningPathSegList, y) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, \"V\", owningPathSegList);\n this._y = y;\n }\n window.SVGPathSegLinetoVerticalAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegLinetoVerticalAbs.prototype.toString = function() { return \"[object SVGPathSegLinetoVerticalAbs]\"; }\n window.SVGPathSegLinetoVerticalAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._y; }\n window.SVGPathSegLinetoVerticalAbs.prototype.clone = function() { return new window.SVGPathSegLinetoVerticalAbs(undefined, this._y); }\n Object.defineProperty(window.SVGPathSegLinetoVerticalAbs.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegLinetoVerticalRel = function(owningPathSegList, y) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, \"v\", owningPathSegList);\n this._y = y;\n }\n window.SVGPathSegLinetoVerticalRel.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegLinetoVerticalRel.prototype.toString = function() { return \"[object SVGPathSegLinetoVerticalRel]\"; }\n window.SVGPathSegLinetoVerticalRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._y; }\n window.SVGPathSegLinetoVerticalRel.prototype.clone = function() { return new window.SVGPathSegLinetoVerticalRel(undefined, this._y); }\n Object.defineProperty(window.SVGPathSegLinetoVerticalRel.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegCurvetoCubicSmoothAbs = function(owningPathSegList, x, y, x2, y2) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS, \"S\", owningPathSegList);\n this._x = x;\n this._y = y;\n this._x2 = x2;\n this._y2 = y2;\n }\n window.SVGPathSegCurvetoCubicSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegCurvetoCubicSmoothAbs.prototype.toString = function() { return \"[object SVGPathSegCurvetoCubicSmoothAbs]\"; }\n window.SVGPathSegCurvetoCubicSmoothAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x2 + \" \" + this._y2 + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegCurvetoCubicSmoothAbs.prototype.clone = function() { return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, this._x, this._y, this._x2, this._y2); }\n Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, \"x2\", { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, \"y2\", { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegCurvetoCubicSmoothRel = function(owningPathSegList, x, y, x2, y2) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL, \"s\", owningPathSegList);\n this._x = x;\n this._y = y;\n this._x2 = x2;\n this._y2 = y2;\n }\n window.SVGPathSegCurvetoCubicSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegCurvetoCubicSmoothRel.prototype.toString = function() { return \"[object SVGPathSegCurvetoCubicSmoothRel]\"; }\n window.SVGPathSegCurvetoCubicSmoothRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x2 + \" \" + this._y2 + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegCurvetoCubicSmoothRel.prototype.clone = function() { return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, this._x, this._y, this._x2, this._y2); }\n Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, \"x2\", { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, \"y2\", { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegCurvetoQuadraticSmoothAbs = function(owningPathSegList, x, y) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS, \"T\", owningPathSegList);\n this._x = x;\n this._y = y;\n }\n window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.toString = function() { return \"[object SVGPathSegCurvetoQuadraticSmoothAbs]\"; }\n window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.clone = function() { return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, this._x, this._y); }\n Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n\n window.SVGPathSegCurvetoQuadraticSmoothRel = function(owningPathSegList, x, y) {\n window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL, \"t\", owningPathSegList);\n this._x = x;\n this._y = y;\n }\n window.SVGPathSegCurvetoQuadraticSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype);\n window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.toString = function() { return \"[object SVGPathSegCurvetoQuadraticSmoothRel]\"; }\n window.SVGPathSegCurvetoQuadraticSmoothRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + \" \" + this._x + \" \" + this._y; }\n window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.clone = function() { return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, this._x, this._y); }\n Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, \"x\", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });\n Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, \"y\", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });\n\n // Add createSVGPathSeg* functions to window.SVGPathElement.\n // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-Interfacewindow.SVGPathElement.\n window.SVGPathElement.prototype.createSVGPathSegClosePath = function() { return new window.SVGPathSegClosePath(undefined); }\n window.SVGPathElement.prototype.createSVGPathSegMovetoAbs = function(x, y) { return new window.SVGPathSegMovetoAbs(undefined, x, y); }\n window.SVGPathElement.prototype.createSVGPathSegMovetoRel = function(x, y) { return new window.SVGPathSegMovetoRel(undefined, x, y); }\n window.SVGPathElement.prototype.createSVGPathSegLinetoAbs = function(x, y) { return new window.SVGPathSegLinetoAbs(undefined, x, y); }\n window.SVGPathElement.prototype.createSVGPathSegLinetoRel = function(x, y) { return new window.SVGPathSegLinetoRel(undefined, x, y); }\n window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs = function(x, y, x1, y1, x2, y2) { return new window.SVGPathSegCurvetoCubicAbs(undefined, x, y, x1, y1, x2, y2); }\n window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel = function(x, y, x1, y1, x2, y2) { return new window.SVGPathSegCurvetoCubicRel(undefined, x, y, x1, y1, x2, y2); }\n window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs = function(x, y, x1, y1) { return new window.SVGPathSegCurvetoQuadraticAbs(undefined, x, y, x1, y1); }\n window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel = function(x, y, x1, y1) { return new window.SVGPathSegCurvetoQuadraticRel(undefined, x, y, x1, y1); }\n window.SVGPathElement.prototype.createSVGPathSegArcAbs = function(x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new window.SVGPathSegArcAbs(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); }\n window.SVGPathElement.prototype.createSVGPathSegArcRel = function(x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new window.SVGPathSegArcRel(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); }\n window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs = function(x) { return new window.SVGPathSegLinetoHorizontalAbs(undefined, x); }\n window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel = function(x) { return new window.SVGPathSegLinetoHorizontalRel(undefined, x); }\n window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs = function(y) { return new window.SVGPathSegLinetoVerticalAbs(undefined, y); }\n window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel = function(y) { return new window.SVGPathSegLinetoVerticalRel(undefined, y); }\n window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs = function(x, y, x2, y2) { return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, x, y, x2, y2); }\n window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel = function(x, y, x2, y2) { return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, x, y, x2, y2); }\n window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs = function(x, y) { return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, x, y); }\n window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel = function(x, y) { return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, x, y); }\n\n if (!(\"getPathSegAtLength\" in window.SVGPathElement.prototype)) {\n // Add getPathSegAtLength to SVGPathElement.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-__svg__SVGPathElement__getPathSegAtLength\n // This polyfill requires SVGPathElement.getTotalLength to implement the distance-along-a-path algorithm.\n window.SVGPathElement.prototype.getPathSegAtLength = function(distance) {\n if (distance === undefined || !isFinite(distance))\n throw \"Invalid arguments.\";\n\n var measurementElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n measurementElement.setAttribute(\"d\", this.getAttribute(\"d\"));\n var lastPathSegment = measurementElement.pathSegList.numberOfItems - 1;\n\n // If the path is empty, return 0.\n if (lastPathSegment <= 0)\n return 0;\n\n do {\n measurementElement.pathSegList.removeItem(lastPathSegment);\n if (distance > measurementElement.getTotalLength())\n break;\n lastPathSegment--;\n } while (lastPathSegment > 0);\n return lastPathSegment;\n }\n }\n }\n\n // Checking for SVGPathSegList in window checks for the case of an implementation without the\n // SVGPathSegList API.\n // The second check for appendItem is specific to Firefox 59+ which removed only parts of the\n // SVGPathSegList API (e.g., appendItem). In this case we need to re-implement the entire API\n // so the polyfill data (i.e., _list) is used throughout.\n if (!(\"SVGPathSegList\" in window) || !(\"appendItem\" in window.SVGPathSegList.prototype)) {\n // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSegList\n window.SVGPathSegList = function(pathElement) {\n this._pathElement = pathElement;\n this._list = this._parsePath(this._pathElement.getAttribute(\"d\"));\n\n // Use a MutationObserver to catch changes to the path's \"d\" attribute.\n this._mutationObserverConfig = { \"attributes\": true, \"attributeFilter\": [\"d\"] };\n this._pathElementMutationObserver = new MutationObserver(this._updateListFromPathMutations.bind(this));\n this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\n }\n\n window.SVGPathSegList.prototype.classname = \"SVGPathSegList\";\n\n Object.defineProperty(window.SVGPathSegList.prototype, \"numberOfItems\", {\n get: function() {\n this._checkPathSynchronizedToList();\n return this._list.length;\n },\n enumerable: true\n });\n\n // Add the pathSegList accessors to window.SVGPathElement.\n // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGAnimatedPathData\n Object.defineProperty(window.SVGPathElement.prototype, \"pathSegList\", {\n get: function() {\n if (!this._pathSegList)\n this._pathSegList = new window.SVGPathSegList(this);\n return this._pathSegList;\n },\n enumerable: true\n });\n // FIXME: The following are not implemented and simply return window.SVGPathElement.pathSegList.\n Object.defineProperty(window.SVGPathElement.prototype, \"normalizedPathSegList\", { get: function() { return this.pathSegList; }, enumerable: true });\n Object.defineProperty(window.SVGPathElement.prototype, \"animatedPathSegList\", { get: function() { return this.pathSegList; }, enumerable: true });\n Object.defineProperty(window.SVGPathElement.prototype, \"animatedNormalizedPathSegList\", { get: function() { return this.pathSegList; }, enumerable: true });\n\n // Process any pending mutations to the path element and update the list as needed.\n // This should be the first call of all public functions and is needed because\n // MutationObservers are not synchronous so we can have pending asynchronous mutations.\n window.SVGPathSegList.prototype._checkPathSynchronizedToList = function() {\n this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords());\n }\n\n window.SVGPathSegList.prototype._updateListFromPathMutations = function(mutationRecords) {\n if (!this._pathElement)\n return;\n var hasPathMutations = false;\n mutationRecords.forEach(function(record) {\n if (record.attributeName == \"d\")\n hasPathMutations = true;\n });\n if (hasPathMutations)\n this._list = this._parsePath(this._pathElement.getAttribute(\"d\"));\n }\n\n // Serialize the list and update the path's 'd' attribute.\n window.SVGPathSegList.prototype._writeListToPath = function() {\n this._pathElementMutationObserver.disconnect();\n this._pathElement.setAttribute(\"d\", window.SVGPathSegList._pathSegArrayAsString(this._list));\n this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\n }\n\n // When a path segment changes the list needs to be synchronized back to the path element.\n window.SVGPathSegList.prototype.segmentChanged = function(pathSeg) {\n this._writeListToPath();\n }\n\n window.SVGPathSegList.prototype.clear = function() {\n this._checkPathSynchronizedToList();\n\n this._list.forEach(function(pathSeg) {\n pathSeg._owningPathSegList = null;\n });\n this._list = [];\n this._writeListToPath();\n }\n\n window.SVGPathSegList.prototype.initialize = function(newItem) {\n this._checkPathSynchronizedToList();\n\n this._list = [newItem];\n newItem._owningPathSegList = this;\n this._writeListToPath();\n return newItem;\n }\n\n window.SVGPathSegList.prototype._checkValidIndex = function(index) {\n if (isNaN(index) || index < 0 || index >= this.numberOfItems)\n throw \"INDEX_SIZE_ERR\";\n }\n\n window.SVGPathSegList.prototype.getItem = function(index) {\n this._checkPathSynchronizedToList();\n\n this._checkValidIndex(index);\n return this._list[index];\n }\n\n window.SVGPathSegList.prototype.insertItemBefore = function(newItem, index) {\n this._checkPathSynchronizedToList();\n\n // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.\n if (index > this.numberOfItems)\n index = this.numberOfItems;\n if (newItem._owningPathSegList) {\n // SVG2 spec says to make a copy.\n newItem = newItem.clone();\n }\n this._list.splice(index, 0, newItem);\n newItem._owningPathSegList = this;\n this._writeListToPath();\n return newItem;\n }\n\n window.SVGPathSegList.prototype.replaceItem = function(newItem, index) {\n this._checkPathSynchronizedToList();\n\n if (newItem._owningPathSegList) {\n // SVG2 spec says to make a copy.\n newItem = newItem.clone();\n }\n this._checkValidIndex(index);\n this._list[index] = newItem;\n newItem._owningPathSegList = this;\n this._writeListToPath();\n return newItem;\n }\n\n window.SVGPathSegList.prototype.removeItem = function(index) {\n this._checkPathSynchronizedToList();\n\n this._checkValidIndex(index);\n var item = this._list[index];\n this._list.splice(index, 1);\n this._writeListToPath();\n return item;\n }\n\n window.SVGPathSegList.prototype.appendItem = function(newItem) {\n this._checkPathSynchronizedToList();\n\n if (newItem._owningPathSegList) {\n // SVG2 spec says to make a copy.\n newItem = newItem.clone();\n }\n this._list.push(newItem);\n newItem._owningPathSegList = this;\n // TODO: Optimize this to just append to the existing attribute.\n this._writeListToPath();\n return newItem;\n }\n\n window.SVGPathSegList._pathSegArrayAsString = function(pathSegArray) {\n var string = \"\";\n var first = true;\n pathSegArray.forEach(function(pathSeg) {\n if (first) {\n first = false;\n string += pathSeg._asPathString();\n } else {\n string += \" \" + pathSeg._asPathString();\n }\n });\n return string;\n }\n\n // This closely follows SVGPathParser::parsePath from Source/core/svg/SVGPathParser.cpp.\n window.SVGPathSegList.prototype._parsePath = function(string) {\n if (!string || string.length == 0)\n return [];\n\n var owningPathSegList = this;\n\n var Builder = function() {\n this.pathSegList = [];\n }\n\n Builder.prototype.appendSegment = function(pathSeg) {\n this.pathSegList.push(pathSeg);\n }\n\n var Source = function(string) {\n this._string = string;\n this._currentIndex = 0;\n this._endIndex = this._string.length;\n this._previousCommand = window.SVGPathSeg.PATHSEG_UNKNOWN;\n\n this._skipOptionalSpaces();\n }\n\n Source.prototype._isCurrentSpace = function() {\n var character = this._string[this._currentIndex];\n return character <= \" \" && (character == \" \" || character == \"\\n\" || character == \"\\t\" || character == \"\\r\" || character == \"\\f\");\n }\n\n Source.prototype._skipOptionalSpaces = function() {\n while (this._currentIndex < this._endIndex && this._isCurrentSpace())\n this._currentIndex++;\n return this._currentIndex < this._endIndex;\n }\n\n Source.prototype._skipOptionalSpacesOrDelimiter = function() {\n if (this._currentIndex < this._endIndex && !this._isCurrentSpace() && this._string.charAt(this._currentIndex) != \",\")\n return false;\n if (this._skipOptionalSpaces()) {\n if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == \",\") {\n this._currentIndex++;\n this._skipOptionalSpaces();\n }\n }\n return this._currentIndex < this._endIndex;\n }\n\n Source.prototype.hasMoreData = function() {\n return this._currentIndex < this._endIndex;\n }\n\n Source.prototype.peekSegmentType = function() {\n var lookahead = this._string[this._currentIndex];\n return this._pathSegTypeFromChar(lookahead);\n }\n\n Source.prototype._pathSegTypeFromChar = function(lookahead) {\n switch (lookahead) {\n case \"Z\":\n case \"z\":\n return window.SVGPathSeg.PATHSEG_CLOSEPATH;\n case \"M\":\n return window.SVGPathSeg.PATHSEG_MOVETO_ABS;\n case \"m\":\n return window.SVGPathSeg.PATHSEG_MOVETO_REL;\n case \"L\":\n return window.SVGPathSeg.PATHSEG_LINETO_ABS;\n case \"l\":\n return window.SVGPathSeg.PATHSEG_LINETO_REL;\n case \"C\":\n return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS;\n case \"c\":\n return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL;\n case \"Q\":\n return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS;\n case \"q\":\n return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL;\n case \"A\":\n return window.SVGPathSeg.PATHSEG_ARC_ABS;\n case \"a\":\n return window.SVGPathSeg.PATHSEG_ARC_REL;\n case \"H\":\n return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS;\n case \"h\":\n return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL;\n case \"V\":\n return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS;\n case \"v\":\n return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL;\n case \"S\":\n return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS;\n case \"s\":\n return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL;\n case \"T\":\n return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS;\n case \"t\":\n return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL;\n default:\n return window.SVGPathSeg.PATHSEG_UNKNOWN;\n }\n }\n\n Source.prototype._nextCommandHelper = function(lookahead, previousCommand) {\n // Check for remaining coordinates in the current command.\n if ((lookahead == \"+\" || lookahead == \"-\" || lookahead == \".\" || (lookahead >= \"0\" && lookahead <= \"9\")) && previousCommand != window.SVGPathSeg.PATHSEG_CLOSEPATH) {\n if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_ABS)\n return window.SVGPathSeg.PATHSEG_LINETO_ABS;\n if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_REL)\n return window.SVGPathSeg.PATHSEG_LINETO_REL;\n return previousCommand;\n }\n return window.SVGPathSeg.PATHSEG_UNKNOWN;\n }\n\n Source.prototype.initialCommandIsMoveTo = function() {\n // If the path is empty it is still valid, so return true.\n if (!this.hasMoreData())\n return true;\n var command = this.peekSegmentType();\n // Path must start with moveTo.\n return command == window.SVGPathSeg.PATHSEG_MOVETO_ABS || command == window.SVGPathSeg.PATHSEG_MOVETO_REL;\n }\n\n // Parse a number from an SVG path. This very closely follows genericParseNumber(...) from Source/core/svg/SVGParserUtilities.cpp.\n // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-PathDataBNF\n Source.prototype._parseNumber = function() {\n var exponent = 0;\n var integer = 0;\n var frac = 1;\n var decimal = 0;\n var sign = 1;\n var expsign = 1;\n\n var startIndex = this._currentIndex;\n\n this._skipOptionalSpaces();\n\n // Read the sign.\n if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == \"+\")\n this._currentIndex++;\n else if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == \"-\") {\n this._currentIndex++;\n sign = -1;\n }\n\n if (this._currentIndex == this._endIndex || ((this._string.charAt(this._currentIndex) < \"0\" || this._string.charAt(this._currentIndex) > \"9\") && this._string.charAt(this._currentIndex) != \".\"))\n // The first character of a number must be one of [0-9+-.].\n return undefined;\n\n // Read the integer part, build right-to-left.\n var startIntPartIndex = this._currentIndex;\n while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= \"0\" && this._string.charAt(this._currentIndex) <= \"9\")\n this._currentIndex++; // Advance to first non-digit.\n\n if (this._currentIndex != startIntPartIndex) {\n var scanIntPartIndex = this._currentIndex - 1;\n var multiplier = 1;\n while (scanIntPartIndex >= startIntPartIndex) {\n integer += multiplier * (this._string.charAt(scanIntPartIndex--) - \"0\");\n multiplier *= 10;\n }\n }\n\n // Read the decimals.\n if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == \".\") {\n this._currentIndex++;\n\n // There must be a least one digit following the .\n if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < \"0\" || this._string.charAt(this._currentIndex) > \"9\")\n return undefined;\n while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= \"0\" && this._string.charAt(this._currentIndex) <= \"9\") {\n frac *= 10;\n decimal += (this._string.charAt(this._currentIndex) - \"0\") / frac;\n this._currentIndex += 1;\n }\n }\n\n // Read the exponent part.\n if (this._currentIndex != startIndex && this._currentIndex + 1 < this._endIndex && (this._string.charAt(this._currentIndex) == \"e\" || this._string.charAt(this._currentIndex) == \"E\") && (this._string.charAt(this._currentIndex + 1) != \"x\" && this._string.charAt(this._currentIndex + 1) != \"m\")) {\n this._currentIndex++;\n\n // Read the sign of the exponent.\n if (this._string.charAt(this._currentIndex) == \"+\") {\n this._currentIndex++;\n } else if (this._string.charAt(this._currentIndex) == \"-\") {\n this._currentIndex++;\n expsign = -1;\n }\n\n // There must be an exponent.\n if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < \"0\" || this._string.charAt(this._currentIndex) > \"9\")\n return undefined;\n\n while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= \"0\" && this._string.charAt(this._currentIndex) <= \"9\") {\n exponent *= 10;\n exponent += (this._string.charAt(this._currentIndex) - \"0\");\n this._currentIndex++;\n }\n }\n\n var number = integer + decimal;\n number *= sign;\n\n if (exponent)\n number *= Math.pow(10, expsign * exponent);\n\n if (startIndex == this._currentIndex)\n return undefined;\n\n this._skipOptionalSpacesOrDelimiter();\n\n return number;\n }\n\n Source.prototype._parseArcFlag = function() {\n if (this._currentIndex >= this._endIndex)\n return undefined;\n var flag = false;\n var flagChar = this._string.charAt(this._currentIndex++);\n if (flagChar == \"0\")\n flag = false;\n else if (flagChar == \"1\")\n flag = true;\n else\n return undefined;\n\n this._skipOptionalSpacesOrDelimiter();\n return flag;\n }\n\n Source.prototype.parseSegment = function() {\n var lookahead = this._string[this._currentIndex];\n var command = this._pathSegTypeFromChar(lookahead);\n if (command == window.SVGPathSeg.PATHSEG_UNKNOWN) {\n // Possibly an implicit command. Not allowed if this is the first command.\n if (this._previousCommand == window.SVGPathSeg.PATHSEG_UNKNOWN)\n return null;\n command = this._nextCommandHelper(lookahead, this._previousCommand);\n if (command == window.SVGPathSeg.PATHSEG_UNKNOWN)\n return null;\n } else {\n this._currentIndex++;\n }\n\n this._previousCommand = command;\n\n switch (command) {\n case window.SVGPathSeg.PATHSEG_MOVETO_REL:\n return new window.SVGPathSegMovetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n case window.SVGPathSeg.PATHSEG_MOVETO_ABS:\n return new window.SVGPathSegMovetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n case window.SVGPathSeg.PATHSEG_LINETO_REL:\n return new window.SVGPathSegLinetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n case window.SVGPathSeg.PATHSEG_LINETO_ABS:\n return new window.SVGPathSegLinetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:\n return new window.SVGPathSegLinetoHorizontalRel(owningPathSegList, this._parseNumber());\n case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:\n return new window.SVGPathSegLinetoHorizontalAbs(owningPathSegList, this._parseNumber());\n case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:\n return new window.SVGPathSegLinetoVerticalRel(owningPathSegList, this._parseNumber());\n case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:\n return new window.SVGPathSegLinetoVerticalAbs(owningPathSegList, this._parseNumber());\n case window.SVGPathSeg.PATHSEG_CLOSEPATH:\n this._skipOptionalSpaces();\n return new window.SVGPathSegClosePath(owningPathSegList);\n case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:\n var points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new window.SVGPathSegCurvetoCubicRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\n case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:\n var points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new window.SVGPathSegCurvetoCubicAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\n case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:\n var points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new window.SVGPathSegCurvetoCubicSmoothRel(owningPathSegList, points.x, points.y, points.x2, points.y2);\n case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:\n var points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new window.SVGPathSegCurvetoCubicSmoothAbs(owningPathSegList, points.x, points.y, points.x2, points.y2);\n case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:\n var points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new window.SVGPathSegCurvetoQuadraticRel(owningPathSegList, points.x, points.y, points.x1, points.y1);\n case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:\n var points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new window.SVGPathSegCurvetoQuadraticAbs(owningPathSegList, points.x, points.y, points.x1, points.y1);\n case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:\n return new window.SVGPathSegCurvetoQuadraticSmoothRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:\n return new window.SVGPathSegCurvetoQuadraticSmoothAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n case window.SVGPathSeg.PATHSEG_ARC_REL:\n var points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};\n return new window.SVGPathSegArcRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\n case window.SVGPathSeg.PATHSEG_ARC_ABS:\n var points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};\n return new window.SVGPathSegArcAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\n default:\n throw \"Unknown path seg type.\"\n }\n }\n\n var builder = new Builder();\n var source = new Source(string);\n\n if (!source.initialCommandIsMoveTo())\n return [];\n while (source.hasMoreData()) {\n var pathSeg = source.parseSegment();\n if (!pathSeg)\n return [];\n builder.appendSegment(pathSeg);\n }\n\n return builder.pathSegList;\n }\n }\n}());\n","/**\n * Browser detection.\n * @module browser\n * @license MIT\n *\n * @copyright 2010 Jeff Schiller, 2010 Alexis Deveria\n */\n\nimport 'pathseg';\n\nimport {NS} from './namespaces.js';\n\nconst supportsSVG_ = (function () {\nreturn Boolean(document.createElementNS && document.createElementNS(NS.SVG, 'svg').createSVGRect);\n}());\n\n/**\n * @function module:browser.supportsSvg\n * @returns {boolean}\n*/\nexport const supportsSvg = () => supportsSVG_;\n\nconst {userAgent} = navigator;\nconst svg = document.createElementNS(NS.SVG, 'svg');\n\n// Note: Browser sniffing should only be used if no other detection method is possible\nconst isOpera_ = Boolean(window.opera);\nconst isWebkit_ = userAgent.includes('AppleWebKit');\nconst isGecko_ = userAgent.includes('Gecko/');\nconst isChrome_ = userAgent.includes('Chrome/');\nconst isWindows_ = userAgent.includes('Windows');\nconst isMac_ = userAgent.includes('Macintosh');\nconst isTouch_ = 'ontouchstart' in window;\n\nconst supportsSelectors_ = (function () {\nreturn Boolean(svg.querySelector);\n}());\n\nconst supportsXpath_ = (function () {\nreturn Boolean(document.evaluate);\n}());\n\n// segList functions (for FF1.5 and 2.0)\nconst supportsPathReplaceItem_ = (function () {\nconst path = document.createElementNS(NS.SVG, 'path');\npath.setAttribute('d', 'M0,0 10,10');\nconst seglist = path.pathSegList;\nconst seg = path.createSVGPathSegLinetoAbs(5, 5);\ntry {\n seglist.replaceItem(seg, 1);\n return true;\n}catch (err) {/* empty */}\nreturn false;\n}());\n\nconst supportsPathInsertItemBefore_ = (function () {\nconst path = document.createElementNS(NS.SVG, 'path');\npath.setAttribute('d', 'M0,0 10,10');\nconst seglist = path.pathSegList;\nconst seg = path.createSVGPathSegLinetoAbs(5, 5);\ntry {\n seglist.insertItemBefore(seg, 1);\n return true;\n}catch (err) {/* empty */}\nreturn false;\n}());\n\n// text character positioning (for IE9 and now Chrome)\nconst supportsGoodTextCharPos_ = (function () {\nconst svgroot = document.createElementNS(NS.SVG, 'svg');\nconst svgcontent = document.createElementNS(NS.SVG, 'svg');\ndocument.documentElement.append(svgroot);\nsvgcontent.setAttribute('x', 5);\nsvgroot.append(svgcontent);\nconst text = document.createElementNS(NS.SVG, 'text');\ntext.textContent = 'a';\nsvgcontent.append(text);\ntry { // Chrome now fails here\n const pos = text.getStartPositionOfChar(0).x;\n return (pos === 0);\n} catch (err) {\n return false;\n} finally {\n svgroot.remove();\n}\n}());\n\nconst supportsPathBBox_ = (function () {\nconst svgcontent = document.createElementNS(NS.SVG, 'svg');\ndocument.documentElement.append(svgcontent);\nconst path = document.createElementNS(NS.SVG, 'path');\npath.setAttribute('d', 'M0,0 C0,0 10,10 10,0');\nsvgcontent.append(path);\nconst bbox = path.getBBox();\nsvgcontent.remove();\nreturn (bbox.height > 4 && bbox.height < 5);\n}());\n\n// Support for correct bbox sizing on groups with horizontal/vertical lines\nconst supportsHVLineContainerBBox_ = (function () {\nconst svgcontent = document.createElementNS(NS.SVG, 'svg');\ndocument.documentElement.append(svgcontent);\nconst path = document.createElementNS(NS.SVG, 'path');\npath.setAttribute('d', 'M0,0 10,0');\nconst path2 = document.createElementNS(NS.SVG, 'path');\npath2.setAttribute('d', 'M5,0 15,0');\nconst g = document.createElementNS(NS.SVG, 'g');\ng.append(path, path2);\nsvgcontent.append(g);\nconst bbox = g.getBBox();\nsvgcontent.remove();\n// Webkit gives 0, FF gives 10, Opera (correctly) gives 15\nreturn (bbox.width === 15);\n}());\n\nconst supportsEditableText_ = (function () {\n// TODO: Find better way to check support for this\nreturn isOpera_;\n}());\n\nconst supportsNonScalingStroke_ = (function () {\nconst rect = document.createElementNS(NS.SVG, 'rect');\nrect.setAttribute('style', 'vector-effect:non-scaling-stroke');\nreturn rect.style.vectorEffect === 'non-scaling-stroke';\n}());\n\nlet supportsNativeSVGTransformLists_ = (function () {\nconst rect = document.createElementNS(NS.SVG, 'rect');\nconst rxform = rect.transform.baseVal;\nconst t1 = svg.createSVGTransform();\nrxform.appendItem(t1);\nconst r1 = rxform.getItem(0);\nconst isSVGTransform = (o) => {\n // https://developer.mozilla.org/en-US/docs/Web/API/SVGTransform\n return o && typeof o === 'object' && typeof o.setMatrix === 'function' && 'angle' in o;\n};\nreturn isSVGTransform(r1) && isSVGTransform(t1) &&\n r1.type === t1.type && r1.angle === t1.angle &&\n r1.matrix.a === t1.matrix.a &&\n r1.matrix.b === t1.matrix.b &&\n r1.matrix.c === t1.matrix.c &&\n r1.matrix.d === t1.matrix.d &&\n r1.matrix.e === t1.matrix.e &&\n r1.matrix.f === t1.matrix.f;\n}());\n\n// Public API\n\n/**\n * @function module:browser.isOpera\n * @returns {boolean}\n*/\nexport const isOpera = () => isOpera_;\n/**\n * @function module:browser.isWebkit\n * @returns {boolean}\n*/\nexport const isWebkit = () => isWebkit_;\n/**\n * @function module:browser.isGecko\n * @returns {boolean}\n*/\nexport const isGecko = () => isGecko_;\n/**\n * @function module:browser.isChrome\n * @returns {boolean}\n*/\nexport const isChrome = () => isChrome_;\n/**\n * @function module:browser.isWindows\n * @returns {boolean}\n*/\nexport const isWindows = () => isWindows_;\n/**\n * @function module:browser.isMac\n * @returns {boolean}\n*/\nexport const isMac = () => isMac_;\n/**\n * @function module:browser.isTouch\n * @returns {boolean}\n*/\nexport const isTouch = () => isTouch_;\n\n/**\n * @function module:browser.supportsSelectors\n * @returns {boolean}\n*/\nexport const supportsSelectors = () => supportsSelectors_;\n\n/**\n * @function module:browser.supportsXpath\n * @returns {boolean}\n*/\nexport const supportsXpath = () => supportsXpath_;\n\n/**\n * @function module:browser.supportsPathReplaceItem\n * @returns {boolean}\n*/\nexport const supportsPathReplaceItem = () => supportsPathReplaceItem_;\n\n/**\n * @function module:browser.supportsPathInsertItemBefore\n * @returns {boolean}\n*/\nexport const supportsPathInsertItemBefore = () => supportsPathInsertItemBefore_;\n\n/**\n * @function module:browser.supportsPathBBox\n * @returns {boolean}\n*/\nexport const supportsPathBBox = () => supportsPathBBox_;\n\n/**\n * @function module:browser.supportsHVLineContainerBBox\n * @returns {boolean}\n*/\nexport const supportsHVLineContainerBBox = () => supportsHVLineContainerBBox_;\n\n/**\n * @function module:browser.supportsGoodTextCharPos\n * @returns {boolean}\n*/\nexport const supportsGoodTextCharPos = () => supportsGoodTextCharPos_;\n\n/**\n* @function module:browser.supportsEditableText\n * @returns {boolean}\n*/\nexport const supportsEditableText = () => supportsEditableText_;\n\n/**\n* @function module:browser.supportsNonScalingStroke\n* @returns {boolean}\n*/\nexport const supportsNonScalingStroke = () => supportsNonScalingStroke_;\n\n/**\n* @function module:browser.supportsNativeTransformLists\n* @returns {boolean}\n*/\nexport const supportsNativeTransformLists = () => supportsNativeSVGTransformLists_;\n\n/**\n * Set `supportsNativeSVGTransformLists_` to `false` (for unit testing).\n * @function module:browser.disableSupportsNativeTransformLists\n * @returns {void}\n*/\nexport const disableSupportsNativeTransformLists = () => {\n supportsNativeSVGTransformLists_ = false;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\n\n// `globalThis` object\n// https://tc39.es/ecma262/#sec-globalthis\n$({ global: true }, {\n globalThis: global\n});\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n /* global globalThis -- safe */\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","module.exports = {};\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return nativeDefineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar isForced = require('../internals/is-forced');\nvar path = require('../internals/path');\nvar bind = require('../internals/function-bind-context');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\n\nvar wrapConstructor = function (NativeConstructor) {\n var Wrapper = function (a, b, c) {\n if (this instanceof NativeConstructor) {\n switch (arguments.length) {\n case 0: return new NativeConstructor();\n case 1: return new NativeConstructor(a);\n case 2: return new NativeConstructor(a, b);\n } return new NativeConstructor(a, b, c);\n } return NativeConstructor.apply(this, arguments);\n };\n Wrapper.prototype = NativeConstructor.prototype;\n return Wrapper;\n};\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var PROTO = options.proto;\n\n var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;\n\n var target = GLOBAL ? path : path[TARGET] || (path[TARGET] = {});\n var targetPrototype = target.prototype;\n\n var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\n for (key in source) {\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contains in native\n USE_NATIVE = !FORCED && nativeSource && has(nativeSource, key);\n\n targetProperty = target[key];\n\n if (USE_NATIVE) if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(nativeSource, key);\n nativeProperty = descriptor && descriptor.value;\n } else nativeProperty = nativeSource[key];\n\n // export native or implementation\n sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];\n\n if (USE_NATIVE && typeof targetProperty === typeof sourceProperty) continue;\n\n // bind timers to global for call from export context\n if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);\n // wrap global constructors for prevent changs in this version\n else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n // make static versions for prototype methods\n else if (PROTO && typeof sourceProperty == 'function') resultProperty = bind(Function.call, sourceProperty);\n // default case\n else resultProperty = sourceProperty;\n\n // add a flag to not completely full polyfills\n if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(resultProperty, 'sham', true);\n }\n\n target[key] = resultProperty;\n\n if (PROTO) {\n VIRTUAL_PROTOTYPE = TARGET + 'Prototype';\n if (!has(path, VIRTUAL_PROTOTYPE)) {\n createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n }\n // export virtual prototype methods\n path[VIRTUAL_PROTOTYPE][key] = sourceProperty;\n // export real prototype methods\n if (options.real && targetPrototype && !targetPrototype[key]) {\n createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n }\n }\n }\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.9.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n /* global Symbol -- required for testing */\n return !String(Symbol());\n});\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n /* global Symbol -- safe */\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name)) {\n if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var isRegExp = require('../internals/is-regexp');\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar nativeStartsWith = ''.startsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = String(requireObjectCoercible(this));\n notARegExp(searchString);\n var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return nativeStartsWith\n ? nativeStartsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","var path = require('../internals/path');\n\nmodule.exports = function (CONSTRUCTOR) {\n return path[CONSTRUCTOR + 'Prototype'];\n};\n","require('../../../modules/es.string.starts-with');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('String').startsWith;\n","var startsWith = require('../string/virtual/starts-with');\n\nvar StringPrototype = String.prototype;\n\nmodule.exports = function (it) {\n var own = it.startsWith;\n return typeof it === 'string' || it === StringPrototype\n || (it instanceof String && own === StringPrototype.startsWith) ? startsWith : own;\n};\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseFloat = global.parseFloat;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity;\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(String(string));\n var result = $parseFloat(trimmedString);\n return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $ = require('../internals/export');\nvar parseFloatImplementation = require('../internals/number-parse-float');\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\n$({ global: true, forced: parseFloat != parseFloatImplementation }, {\n parseFloat: parseFloatImplementation\n});\n","require('../modules/es.parse-float');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseFloat;\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_OUT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push.call(target, value); // filterOut\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterOut` method\n // https://github.com/tc39/proposal-array-filtering\n filterOut: createMethod(7)\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","require('../../../modules/es.array.map');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').map;\n","var map = require('../array/virtual/map');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.map;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.map) ? map : own;\n};\n","var $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\n// `Array.isArray` method\n// https://tc39.es/ecma262/#sec-array.isarray\n$({ target: 'Array', stat: true }, {\n isArray: isArray\n});\n","require('../../modules/es.array.is-array');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.isArray;\n","var parent = require('../../es/array/is-array');\n\nmodule.exports = parent;\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n /* global ActiveXObject -- old IE */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","module.exports = {};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return nativeGetOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n","exports.f = Object.getOwnPropertySymbols;\n","var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (target, key, value, options) {\n if (options && options.enumerable) target[key] = value;\n else createNonEnumerableProperty(target, key, value);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar defineProperty = require('../internals/object-define-property').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar toString = require('../internals/object-to-string');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC, SET_METHOD) {\n if (it) {\n var target = STATIC ? it : it.prototype;\n if (!has(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {\n createNonEnumerableProperty(target, 'toString', toString);\n }\n }\n};\n","'use strict';\nvar redefineAll = require('../internals/redefine-all');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar $has = require('../internals/has');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (store) {\n return store.frozen || (store.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n return find(store.entries, function (it) {\n return it[0] === key;\n });\n};\n\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.entries.push([key, value]);\n },\n 'delete': function (key) {\n var index = findIndex(this.entries, function (it) {\n return it[0] === key;\n });\n if (~index) this.entries.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, CONSTRUCTOR_NAME);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n id: id++,\n frozen: undefined\n });\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var data = getWeakData(anObject(key), true);\n if (data === true) uncaughtFrozenStore(state).set(key, value);\n else data[state.id] = value;\n return that;\n };\n\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n return data && $has(data, state.id) && delete data[state.id];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).has(key);\n return data && $has(data, state.id);\n }\n });\n\n redefineAll(C.prototype, IS_MAP ? {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n var state = getInternalState(this);\n if (isObject(key)) {\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).get(key);\n return data ? data[state.id] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return define(this, key, value);\n }\n } : {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return define(this, value, true);\n }\n });\n\n return C;\n }\n};\n","'use strict';\nvar global = require('../internals/global');\nvar redefineAll = require('../internals/redefine-all');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar enforceIternalState = require('../internals/internal-state').enforce;\nvar NATIVE_WEAK_MAP = require('../internals/native-weak-map');\n\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar isExtensible = Object.isExtensible;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n return function WeakMap() {\n return init(this, arguments.length ? arguments[0] : undefined);\n };\n};\n\n// `WeakMap` constructor\n// https://tc39.es/ecma262/#sec-weakmap-constructor\nvar $WeakMap = module.exports = collection('WeakMap', wrapper, collectionWeak);\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n InternalMetadataModule.REQUIRED = true;\n var WeakMapPrototype = $WeakMap.prototype;\n var nativeDelete = WeakMapPrototype['delete'];\n var nativeHas = WeakMapPrototype.has;\n var nativeGet = WeakMapPrototype.get;\n var nativeSet = WeakMapPrototype.set;\n redefineAll(WeakMapPrototype, {\n 'delete': function (key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceIternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeDelete.call(this, key) || state.frozen['delete'](key);\n } return nativeDelete.call(this, key);\n },\n has: function has(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceIternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas.call(this, key) || state.frozen.has(key);\n } return nativeHas.call(this, key);\n },\n get: function get(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceIternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas.call(this, key) ? nativeGet.call(this, key) : state.frozen.get(key);\n } return nativeGet.call(this, key);\n },\n set: function set(key, value) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceIternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n nativeHas.call(this, key) ? nativeSet.call(this, key, value) : state.frozen.set(key, value);\n } else nativeSet.call(this, key, value);\n return this;\n }\n });\n}\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar isSymbol = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPrimitive(P, true);\n anObject(Attributes);\n if (has(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPrimitive(V, true);\n var enumerable = nativePropertyIsEnumerable.call(this, P);\n if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPrimitive(P, true);\n if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n result.push(AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = String(key);\n if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = [it];\n var index = 1;\n var $replacer;\n while (arguments.length > index) args.push(arguments[index++]);\n $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return $stringify.apply(null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.match` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.matchAll` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.matchall\ndefineWellKnownSymbol('matchAll');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.search` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.species` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.split` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","require('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.json.to-string-tag');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncDispose` well-known symbol\n// https://github.com/tc39/proposal-using-statement\ndefineWellKnownSymbol('asyncDispose');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.dispose` well-known symbol\n// https://github.com/tc39/proposal-using-statement\ndefineWellKnownSymbol('dispose');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.observable` well-known symbol\n// https://github.com/tc39/proposal-observable\ndefineWellKnownSymbol('observable');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('patternMatch');\n","// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\ndefineWellKnownSymbol('replaceAll');\n","var parent = require('../../es/symbol');\nrequire('../../modules/esnext.symbol.async-dispose');\nrequire('../../modules/esnext.symbol.dispose');\nrequire('../../modules/esnext.symbol.observable');\nrequire('../../modules/esnext.symbol.pattern-match');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.symbol.replace-all');\n\nmodule.exports = parent;\n","'use strict';\nvar fails = require('../internals/fails');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","/* eslint-disable no-proto -- safe */\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","require('./es.array.iterator');\nvar DOMIterables = require('../internals/dom-iterables');\nvar global = require('../internals/global');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n Iterators[COLLECTION_NAME] = Iterators.Array;\n}\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: String(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","var classof = require('../internals/classof');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n var O = Object(it);\n return O[ITERATOR] !== undefined\n || '@@iterator' in O\n // eslint-disable-next-line no-prototype-builtins -- safe\n || Iterators.hasOwnProperty(classof(O));\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var anObject = require('../internals/an-object');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = function (it) {\n var iteratorMethod = getIteratorMethod(it);\n if (typeof iteratorMethod != 'function') {\n throw TypeError(String(it) + ' is not iterable');\n } return anObject(iteratorMethod.call(it));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","require('../../../modules/es.array.slice');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').slice;\n","var slice = require('../array/virtual/slice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.slice;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.slice) ? slice : own;\n};\n","var parent = require('../../es/instance/slice');\n\nmodule.exports = parent;\n","var anObject = require('../internals/an-object');\n\nmodule.exports = function (iterator) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) {\n return anObject(returnMethod.call(iterator)).value;\n }\n};\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n result = new C();\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","require('../../modules/es.string.iterator');\nrequire('../../modules/es.array.from');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.from;\n","var parent = require('../../es/array/from');\n\nmodule.exports = parent;\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import _sliceInstanceProperty from \"@babel/runtime-corejs3/core-js/instance/slice\";\nimport _Array$from from \"@babel/runtime-corejs3/core-js/array/from\";\nimport arrayLikeToArray from \"@babel/runtime-corejs3/helpers/arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n var _context;\n\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n\n var n = _sliceInstanceProperty(_context = Object.prototype.toString.call(o)).call(_context, 8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return _Array$from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithHoles from \"@babel/runtime-corejs3/helpers/arrayWithHoles\";\nimport iterableToArrayLimit from \"@babel/runtime-corejs3/helpers/iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"@babel/runtime-corejs3/helpers/unsupportedIterableToArray\";\nimport nonIterableRest from \"@babel/runtime-corejs3/helpers/nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","import _Array$isArray from \"@babel/runtime-corejs3/core-js/array/is-array\";\nexport default function _arrayWithHoles(arr) {\n if (_Array$isArray(arr)) return arr;\n}","import _Symbol from \"@babel/runtime-corejs3/core-js/symbol\";\nimport _isIterable from \"@babel/runtime-corejs3/core-js/is-iterable\";\nimport _getIterator from \"@babel/runtime-corejs3/core-js/get-iterator\";\nexport default function _iterableToArrayLimit(arr, i) {\n if (typeof _Symbol === \"undefined\" || !_isIterable(Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = _getIterator(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar objectDefinePropertyModile = require('../internals/object-define-property');\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\n$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {\n defineProperty: objectDefinePropertyModile.f\n});\n","require('../../modules/es.object.define-property');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperty = module.exports = function defineProperty(it, key, desc) {\n return Object.defineProperty(it, key, desc);\n};\n\nif (Object.defineProperty.sham) defineProperty.sham = true;\n","var parent = require('../../es/object/define-property');\n\nmodule.exports = parent;\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperties = require('../internals/object-define-properties');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {\n defineProperties: defineProperties\n});\n","require('../../modules/es.object.define-properties');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperties = module.exports = function defineProperties(T, D) {\n return Object.defineProperties(T, D);\n};\n\nif (Object.defineProperties.sham) defineProperties.sham = true;\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","require('../../modules/es.object.get-own-property-descriptors');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getOwnPropertyDescriptors;\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\n$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {\n forEach: forEach\n});\n","require('../../../modules/es.array.for-each');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').forEach;\n","require('../../modules/web.dom-collections.iterator');\nvar forEach = require('../array/virtual/for-each');\nvar classof = require('../../internals/classof');\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.forEach;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.forEach)\n // eslint-disable-next-line no-prototype-builtins -- safe\n || DOMIterables.hasOwnProperty(classof(it)) ? forEach : own;\n};\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","require('../../modules/es.object.get-own-property-descriptor');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar getOwnPropertyDescriptor = module.exports = function getOwnPropertyDescriptor(it, key) {\n return Object.getOwnPropertyDescriptor(it, key);\n};\n\nif (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true;\n","var parent = require('../../es/object/get-own-property-descriptor');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","require('../../../modules/es.array.filter');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').filter;\n","var filter = require('../array/virtual/filter');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.filter;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.filter) ? filter : own;\n};\n","require('../../modules/es.symbol');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getOwnPropertySymbols;\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","require('../../modules/es.object.keys');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.keys;\n","module.exports = require(\"regenerator-runtime\");\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar iterate = require('../internals/iterate');\n\nvar $AggregateError = function AggregateError(errors, message) {\n var that = this;\n if (!(that instanceof $AggregateError)) return new $AggregateError(errors, message);\n if (setPrototypeOf) {\n // eslint-disable-next-line unicorn/error-message -- expected\n that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));\n }\n if (message !== undefined) createNonEnumerableProperty(that, 'message', String(message));\n var errorsArray = [];\n iterate(errors, errorsArray.push, { that: errorsArray });\n createNonEnumerableProperty(that, 'errors', errorsArray);\n return that;\n};\n\n$AggregateError.prototype = create(Error.prototype, {\n constructor: createPropertyDescriptor(5, $AggregateError),\n message: createPropertyDescriptor(5, ''),\n name: createPropertyDescriptor(5, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true }, {\n AggregateError: $AggregateError\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// patch native Promise.prototype for native async functions\nif (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {\n redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);\n}\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) {\n if (options && options.unsafe && target[key]) target[key] = src[key];\n else redefine(target, key, src[key], options);\n } return target;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar task = require('../internals/task');\n\nvar FORCED = !global.setImmediate || !global.clearImmediate;\n\n// http://w3c.github.io/setImmediate/\n$({ global: true, bind: true, enumerable: true, forced: FORCED }, {\n // `setImmediate` method\n // http://w3c.github.io/setImmediate/#si-setImmediate\n setImmediate: task.set,\n // `clearImmediate` method\n // http://w3c.github.io/setImmediate/#si-clearImmediate\n clearImmediate: task.clear\n});\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar location = global.location;\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\n\nvar run = function (id) {\n // eslint-disable-next-line no-prototype-builtins -- safe\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(id + '', location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func -- spec requirement\n (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n typeof postMessage == 'function' &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n then = promise.then;\n notify = function () {\n then.call(promise, flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar isObject = require('../internals/is-object');\nvar aFunction = require('../internals/a-function');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar PromiseConstructor = NativePromise;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar $fetch = getBuiltIn('fetch');\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);\n if (!GLOBAL_CORE_JS_PROMISE) {\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (V8_VERSION === 66) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n if (!IS_NODE && !NATIVE_REJECTION_EVENT) return true;\n }\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromiseConstructor.prototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = PromiseConstructor.resolve(1);\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n return !(promise.then(function () { /* empty */ }) instanceof FakePromise);\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n then.call(value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromiseConstructor, PROMISE);\n aFunction(executor);\n Internal.call(this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromiseConstructor.prototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n state.reactions.push(reaction);\n if (state.state != PENDING) notify(state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && typeof NativePromise == 'function') {\n nativeThen = NativePromise.prototype.then;\n\n // wrap native Promise#then for native async functions\n redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n nativeThen.call(that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // wrap fetch result\n if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n fetch: function fetch(input /* , init */) {\n return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));\n }\n });\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n capability.reject.call(undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n $promiseResolve.call(C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n iterate(iterable, function (promise) {\n $promiseResolve.call(C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n }\n};\n","module.exports = true;\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aFunction(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n promiseResolve.call(C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar getBuiltIn = require('../internals/get-built-in');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true }, {\n any: function any(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aFunction(C.resolve);\n var errors = [];\n var counter = 0;\n var remaining = 1;\n var alreadyResolved = false;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyRejected = false;\n errors.push(undefined);\n remaining++;\n promiseResolve.call(C, promise).then(function (value) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyResolved = true;\n resolve(value);\n }, function (error) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyRejected = true;\n errors[index] = error;\n --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));\n });\n });\n --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// patch native Promise.prototype for native async functions\nif (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {\n redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);\n}\n","require('../../modules/es.aggregate-error');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.any');\nrequire('../../modules/es.promise.finally');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n","'use strict';\nvar $ = require('../internals/export');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\n\n// `Promise.try` method\n// https://github.com/tc39/proposal-promise-try\n$({ target: 'Promise', stat: true }, {\n 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapabilityModule.f(this);\n var result = perform(callbackfn);\n (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);\n return promiseCapability.promise;\n }\n});\n","var parent = require('../../es/promise');\nrequire('../../modules/esnext.aggregate-error');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.promise.all-settled');\nrequire('../../modules/esnext.promise.try');\nrequire('../../modules/esnext.promise.any');\n\nmodule.exports = parent;\n","import _Promise from \"@babel/runtime-corejs3/core-js/promise\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n _Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new _Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","var parent = require('../../es/object/define-property');\n\nmodule.exports = parent;\n","import _Object$defineProperty from \"@babel/runtime-corejs3/core-js/object/define-property\";\nexport default function _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}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","import _Object$defineProperty from \"@babel/runtime-corejs3/core-js/object/define-property\";\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\n _Object$defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","require('../../../modules/es.array.concat');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').concat;\n","var concat = require('../array/virtual/concat');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.concat;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.concat) ? concat : own;\n};\n","var aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = toLength(O.length);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduce');\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\n\n// `Array.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || CHROME_BUG }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = toLength(O.length);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduce');\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\n\n// `Array.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || CHROME_BUG }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","require('../../../modules/es.array.reduce');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').reduce;\n","var reduce = require('../array/virtual/reduce');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.reduce;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.reduce) ? reduce : own;\n};\n","var $ = require('../internals/export');\n\n// `Date.now` method\n// https://tc39.es/ecma262/#sec-date.now\n$({ target: 'Date', stat: true }, {\n now: function now() {\n return new Date().getTime();\n }\n});\n","require('../../modules/es.date.now');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Date.now;\n","'use strict';\nvar $ = require('../internals/export');\nvar $every = require('../internals/array-iteration').every;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('every');\n\n// `Array.prototype.every` method\n// https://tc39.es/ecma262/#sec-array.prototype.every\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $every = require('../internals/array-iteration').every;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('every');\n\n// `Array.prototype.every` method\n// https://tc39.es/ecma262/#sec-array.prototype.every\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","require('../../../modules/es.array.every');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').every;\n","var every = require('../array/virtual/every');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.every;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.every) ? every : own;\n};\n","var parent = require('../../es/promise');\n\nmodule.exports = parent;\n","'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!(argsLength in factories)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func -- we have no proper alternatives, IE8- only\n factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = slice.call(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = partArgs.concat(slice.call(arguments));\n return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n };\n if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n return boundFunction;\n};\n","var $ = require('../internals/export');\nvar bind = require('../internals/function-bind');\n\n// `Function.prototype.bind` method\n// https://tc39.es/ecma262/#sec-function.prototype.bind\n$({ target: 'Function', proto: true }, {\n bind: bind\n});\n","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n if (!object) {\n object = root;\n }\n object.requestAnimationFrame = raf\n object.cancelAnimationFrame = caf\n}\n","require('../../../modules/es.function.bind');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Function').bind;\n","var bind = require('../function/virtual/bind');\n\nvar FunctionPrototype = Function.prototype;\n\nmodule.exports = function (it) {\n var own = it.bind;\n return it === FunctionPrototype || (it instanceof Function && own === FunctionPrototype.bind) ? bind : own;\n};\n","// Generated by CoffeeScript 1.12.2\n(function() {\n var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;\n\n if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n module.exports = function() {\n return performance.now();\n };\n } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n module.exports = function() {\n return (getNanoSeconds() - nodeLoadTime) / 1e6;\n };\n hrtime = process.hrtime;\n getNanoSeconds = function() {\n var hr;\n hr = hrtime();\n return hr[0] * 1e9 + hr[1];\n };\n moduleLoadTime = getNanoSeconds();\n upTime = process.uptime() * 1e9;\n nodeLoadTime = moduleLoadTime - upTime;\n } else if (Date.now) {\n module.exports = function() {\n return Date.now() - loadTime;\n };\n loadTime = Date.now();\n } else {\n module.exports = function() {\n return new Date().getTime() - loadTime;\n };\n loadTime = new Date().getTime();\n }\n\n}).call(this);\n\n//# sourceMappingURL=performance-now.js.map\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","require('../../../modules/es.string.trim');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('String').trim;\n","var trim = require('../string/virtual/trim');\n\nvar StringPrototype = String.prototype;\n\nmodule.exports = function (it) {\n var own = it.trim;\n return typeof it === 'string' || it === StringPrototype\n || (it instanceof String && own === StringPrototype.trim) ? trim : own;\n};\n","/*\n\tBased on rgbcolor.js by Stoyan Stefanov <sstoo@gmail.com>\n\thttp://www.phpied.com/rgb-color-parser-in-javascript/\n*/\n\nmodule.exports = function(color_string) {\n this.ok = false;\n this.alpha = 1.0;\n\n // strip any leading #\n if (color_string.charAt(0) == '#') { // remove # if any\n color_string = color_string.substr(1,6);\n }\n\n color_string = color_string.replace(/ /g,'');\n color_string = color_string.toLowerCase();\n\n // before getting into regexps, try simple matches\n // and overwrite the input\n var simple_colors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dodgerblue: '1e90ff',\n feldspar: 'd19275',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred : 'cd5c5c',\n indigo : '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslateblue: '8470ff',\n lightslategray: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n rebeccapurple: '663399',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n violetred: 'd02090',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n color_string = simple_colors[color_string] || color_string;\n // emd of simple type-in colors\n\n // array of color definition objects\n var color_defs = [\n {\n re: /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*((?:\\d?\\.)?\\d)\\)$/,\n example: ['rgba(123, 234, 45, 0.8)', 'rgba(255,234,245,1.0)'],\n process: function (bits){\n return [\n parseInt(bits[1]),\n parseInt(bits[2]),\n parseInt(bits[3]),\n parseFloat(bits[4])\n ];\n }\n },\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],\n process: function (bits){\n return [\n parseInt(bits[1]),\n parseInt(bits[2]),\n parseInt(bits[3])\n ];\n }\n },\n {\n re: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n example: ['#00ff00', '336699'],\n process: function (bits){\n return [\n parseInt(bits[1], 16),\n parseInt(bits[2], 16),\n parseInt(bits[3], 16)\n ];\n }\n },\n {\n re: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n example: ['#fb0', 'f0f'],\n process: function (bits){\n return [\n parseInt(bits[1] + bits[1], 16),\n parseInt(bits[2] + bits[2], 16),\n parseInt(bits[3] + bits[3], 16)\n ];\n }\n }\n ];\n\n // search through the definitions to find a match\n for (var i = 0; i < color_defs.length; i++) {\n var re = color_defs[i].re;\n var processor = color_defs[i].process;\n var bits = re.exec(color_string);\n if (bits) {\n var channels = processor(bits);\n this.r = channels[0];\n this.g = channels[1];\n this.b = channels[2];\n if (channels.length > 3) {\n this.alpha = channels[3];\n }\n this.ok = true;\n }\n\n }\n\n // validate/cleanup values\n this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);\n this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);\n this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);\n this.alpha = (this.alpha < 0) ? 0 : ((this.alpha > 1.0 || isNaN(this.alpha)) ? 1.0 : this.alpha);\n\n // some getters\n this.toRGB = function () {\n return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';\n }\n this.toRGBA = function () {\n return 'rgba(' + this.r + ', ' + this.g + ', ' + this.b + ', ' + this.alpha + ')';\n }\n this.toHex = function () {\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n if (r.length == 1) r = '0' + r;\n if (g.length == 1) g = '0' + g;\n if (b.length == 1) b = '0' + b;\n return '#' + r + g + b;\n }\n\n // help\n this.getHelpXML = function () {\n\n var examples = new Array();\n // add regexps\n for (var i = 0; i < color_defs.length; i++) {\n var example = color_defs[i].example;\n for (var j = 0; j < example.length; j++) {\n examples[examples.length] = example[j];\n }\n }\n // add type-in colors\n for (var sc in simple_colors) {\n examples[examples.length] = sc;\n }\n\n var xml = document.createElement('ul');\n xml.setAttribute('id', 'rgbcolor-examples');\n for (var i = 0; i < examples.length; i++) {\n try {\n var list_item = document.createElement('li');\n var list_color = new RGBColor(examples[i]);\n var example_div = document.createElement('div');\n example_div.style.cssText =\n 'margin: 3px; '\n + 'border: 1px solid black; '\n + 'background:' + list_color.toHex() + '; '\n + 'color:' + list_color.toHex()\n ;\n example_div.appendChild(document.createTextNode('test'));\n var list_item_value = document.createTextNode(\n ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex()\n );\n list_item.appendChild(example_div);\n list_item.appendChild(list_item_value);\n xml.appendChild(list_item);\n\n } catch(e){}\n }\n return xml;\n\n }\n\n}\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aFunction = require('../internals/a-function');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar bind = require('../internals/function-bind');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","require('../../modules/es.reflect.construct');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.construct;\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar create = require('../internals/object-create');\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n create: create\n});\n","require('../../modules/es.object.create');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nmodule.exports = function create(P, D) {\n return Object.create(P, D);\n};\n","var $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n setPrototypeOf: setPrototypeOf\n});\n","require('../../modules/es.object.set-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.setPrototypeOf;\n","import _Object$setPrototypeOf from \"@babel/runtime-corejs3/core-js/object/set-prototype-of\";\nexport default function _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}","import _Object$create from \"@babel/runtime-corejs3/core-js/object/create\";\nimport setPrototypeOf from \"@babel/runtime-corejs3/helpers/setPrototypeOf\";\nexport default function _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}","require('../../modules/es.symbol.iterator');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('iterator');\n","import _Symbol from \"@babel/runtime-corejs3/core-js/symbol\";\nimport _Symbol$iterator from \"@babel/runtime-corejs3/core-js/symbol/iterator\";\nexport default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof _Symbol === \"function\" && typeof _Symbol$iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof _Symbol === \"function\" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","export default function _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}","import _typeof from \"@babel/runtime-corejs3/helpers/typeof\";\nimport assertThisInitialized from \"@babel/runtime-corejs3/helpers/assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","require('../../modules/es.object.get-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getPrototypeOf;\n","import _Object$setPrototypeOf from \"@babel/runtime-corejs3/core-js/object/set-prototype-of\";\nimport _Object$getPrototypeOf from \"@babel/runtime-corejs3/core-js/object/get-prototype-of\";\nexport default function _getPrototypeOf(o) {\n _getPrototypeOf = _Object$setPrototypeOf ? _Object$getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || _Object$getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import arrayWithoutHoles from \"@babel/runtime-corejs3/helpers/arrayWithoutHoles\";\nimport iterableToArray from \"@babel/runtime-corejs3/helpers/iterableToArray\";\nimport unsupportedIterableToArray from \"@babel/runtime-corejs3/helpers/unsupportedIterableToArray\";\nimport nonIterableSpread from \"@babel/runtime-corejs3/helpers/nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import _Array$isArray from \"@babel/runtime-corejs3/core-js/array/is-array\";\nimport arrayLikeToArray from \"@babel/runtime-corejs3/helpers/arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n if (_Array$isArray(arr)) return arrayLikeToArray(arr);\n}","import _Symbol from \"@babel/runtime-corejs3/core-js/symbol\";\nimport _isIterable from \"@babel/runtime-corejs3/core-js/is-iterable\";\nimport _Array$from from \"@babel/runtime-corejs3/core-js/array/from\";\nexport default function _iterableToArray(iter) {\n if (typeof _Symbol !== \"undefined\" && _isIterable(Object(iter))) return _Array$from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/array-iteration').some;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\n\n// `Array.prototype.some` method\n// https://tc39.es/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","require('../../../modules/es.array.some');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').some;\n","var some = require('../array/virtual/some');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.some;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.some) ? some : own;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","require('../../../modules/es.array.includes');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').includes;\n","'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~String(requireObjectCoercible(this))\n .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","require('../../../modules/es.string.includes');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('String').includes;\n","var arrayIncludes = require('../array/virtual/includes');\nvar stringIncludes = require('../string/virtual/includes');\n\nvar ArrayPrototype = Array.prototype;\nvar StringPrototype = String.prototype;\n\nmodule.exports = function (it) {\n var own = it.includes;\n if (it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.includes)) return arrayIncludes;\n if (typeof it === 'string' || it === StringPrototype || (it instanceof String && own === StringPrototype.includes)) {\n return stringIncludes;\n } return own;\n};\n","var parent = require('../../es/array/from');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\nvar nativeReverse = [].reverse;\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n reverse: function reverse() {\n // eslint-disable-next-line no-self-assign -- dirty hack\n if (isArray(this)) this.length = this.length;\n return nativeReverse.call(this);\n }\n});\n","require('../../../modules/es.array.reverse');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').reverse;\n","var reverse = require('../array/virtual/reverse');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.reverse;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.reverse) ? reverse : own;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","require('../../../modules/es.array.index-of');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').indexOf;\n","var indexOf = require('../array/virtual/index-of');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.indexOf;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.indexOf) ? indexOf : own;\n};\n","var $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar has = require('../internals/has');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\n\n// `Reflect.get` method\n// https://tc39.es/ecma262/#sec-reflect.get\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var descriptor, prototype;\n if (anObject(target) === receiver) return target[propertyKey];\n if (descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey)) return has(descriptor, 'value')\n ? descriptor.value\n : descriptor.get === undefined\n ? undefined\n : descriptor.get.call(receiver);\n if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);\n}\n\n$({ target: 'Reflect', stat: true }, {\n get: get\n});\n","require('../../modules/es.reflect.get');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.get;\n","var parent = require('../../es/object/get-own-property-descriptor');\n\nmodule.exports = parent;\n","import _Reflect$get from \"@babel/runtime-corejs3/core-js/reflect/get\";\nimport _Object$getOwnPropertyDescriptor from \"@babel/runtime-corejs3/core-js/object/get-own-property-descriptor\";\nimport superPropBase from \"@babel/runtime-corejs3/helpers/superPropBase\";\nexport default function _get(target, property, receiver) {\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 if (!base) return;\n\n var desc = _Object$getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}","import getPrototypeOf from \"@babel/runtime-corejs3/helpers/getPrototypeOf\";\nexport default function _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}","var $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","require('../../../modules/es.array.fill');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').fill;\n","var fill = require('../array/virtual/fill');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.fill;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.fill) ? fill : own;\n};\n","/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar t=function(r,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,r){t.__proto__=r}||function(t,r){for(var e in r)r.hasOwnProperty(e)&&(t[e]=r[e])})(r,e)};function r(r,e){function i(){this.constructor=r}t(r,e),r.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}function e(t){var r=\"\";Array.isArray(t)||(t=[t]);for(var e=0;e<t.length;e++){var i=t[e];if(i.type===f.CLOSE_PATH)r+=\"z\";else if(i.type===f.HORIZ_LINE_TO)r+=(i.relative?\"h\":\"H\")+i.x;else if(i.type===f.VERT_LINE_TO)r+=(i.relative?\"v\":\"V\")+i.y;else if(i.type===f.MOVE_TO)r+=(i.relative?\"m\":\"M\")+i.x+\" \"+i.y;else if(i.type===f.LINE_TO)r+=(i.relative?\"l\":\"L\")+i.x+\" \"+i.y;else if(i.type===f.CURVE_TO)r+=(i.relative?\"c\":\"C\")+i.x1+\" \"+i.y1+\" \"+i.x2+\" \"+i.y2+\" \"+i.x+\" \"+i.y;else if(i.type===f.SMOOTH_CURVE_TO)r+=(i.relative?\"s\":\"S\")+i.x2+\" \"+i.y2+\" \"+i.x+\" \"+i.y;else if(i.type===f.QUAD_TO)r+=(i.relative?\"q\":\"Q\")+i.x1+\" \"+i.y1+\" \"+i.x+\" \"+i.y;else if(i.type===f.SMOOTH_QUAD_TO)r+=(i.relative?\"t\":\"T\")+i.x+\" \"+i.y;else{if(i.type!==f.ARC)throw new Error('Unexpected command type \"'+i.type+'\" at index '+e+\".\");r+=(i.relative?\"a\":\"A\")+i.rX+\" \"+i.rY+\" \"+i.xRot+\" \"+ +i.lArcFlag+\" \"+ +i.sweepFlag+\" \"+i.x+\" \"+i.y}}return r}function i(t,r){var e=t[0],i=t[1];return[e*Math.cos(r)-i*Math.sin(r),e*Math.sin(r)+i*Math.cos(r)]}function a(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];for(var e=0;e<t.length;e++)if(\"number\"!=typeof t[e])throw new Error(\"assertNumbers arguments[\"+e+\"] is not a number. \"+typeof t[e]+\" == typeof \"+t[e]);return!0}var n=Math.PI;function o(t,r,e){t.lArcFlag=0===t.lArcFlag?0:1,t.sweepFlag=0===t.sweepFlag?0:1;var a=t.rX,o=t.rY,s=t.x,u=t.y;a=Math.abs(t.rX),o=Math.abs(t.rY);var h=i([(r-s)/2,(e-u)/2],-t.xRot/180*n),c=h[0],y=h[1],p=Math.pow(c,2)/Math.pow(a,2)+Math.pow(y,2)/Math.pow(o,2);1<p&&(a*=Math.sqrt(p),o*=Math.sqrt(p)),t.rX=a,t.rY=o;var m=Math.pow(a,2)*Math.pow(y,2)+Math.pow(o,2)*Math.pow(c,2),O=(t.lArcFlag!==t.sweepFlag?1:-1)*Math.sqrt(Math.max(0,(Math.pow(a,2)*Math.pow(o,2)-m)/m)),T=a*y/o*O,v=-o*c/a*O,l=i([T,v],t.xRot/180*n);t.cX=l[0]+(r+s)/2,t.cY=l[1]+(e+u)/2,t.phi1=Math.atan2((y-v)/o,(c-T)/a),t.phi2=Math.atan2((-y-v)/o,(-c-T)/a),0===t.sweepFlag&&t.phi2>t.phi1&&(t.phi2-=2*n),1===t.sweepFlag&&t.phi2<t.phi1&&(t.phi2+=2*n),t.phi1*=180/n,t.phi2*=180/n}function s(t,r,e){a(t,r,e);var i=t*t+r*r-e*e;if(0>i)return[];if(0===i)return[[t*e/(t*t+r*r),r*e/(t*t+r*r)]];var n=Math.sqrt(i);return[[(t*e+r*n)/(t*t+r*r),(r*e-t*n)/(t*t+r*r)],[(t*e-r*n)/(t*t+r*r),(r*e+t*n)/(t*t+r*r)]]}var u,h=Math.PI/180;function c(t,r,e){return(1-e)*t+e*r}function y(t,r,e,i){return t+Math.cos(i/180*n)*r+Math.sin(i/180*n)*e}function p(t,r,e,i){var a=r-t,n=e-r,o=3*a+3*(i-e)-6*n,s=6*(n-a),u=3*a;return Math.abs(o)<1e-6?[-u/s]:function(t,r,e){void 0===e&&(e=1e-6);var i=t*t/4-r;if(i<-e)return[];if(i<=e)return[-t/2];var a=Math.sqrt(i);return[-t/2-a,-t/2+a]}(s/o,u/o,1e-6)}function m(t,r,e,i,a){var n=1-a;return t*(n*n*n)+r*(3*n*n*a)+e*(3*n*a*a)+i*(a*a*a)}!function(t){function r(){return u((function(t,r,e){return t.relative&&(void 0!==t.x1&&(t.x1+=r),void 0!==t.y1&&(t.y1+=e),void 0!==t.x2&&(t.x2+=r),void 0!==t.y2&&(t.y2+=e),void 0!==t.x&&(t.x+=r),void 0!==t.y&&(t.y+=e),t.relative=!1),t}))}function e(){var t=NaN,r=NaN,e=NaN,i=NaN;return u((function(a,n,o){return a.type&f.SMOOTH_CURVE_TO&&(a.type=f.CURVE_TO,t=isNaN(t)?n:t,r=isNaN(r)?o:r,a.x1=a.relative?n-t:2*n-t,a.y1=a.relative?o-r:2*o-r),a.type&f.CURVE_TO?(t=a.relative?n+a.x2:a.x2,r=a.relative?o+a.y2:a.y2):(t=NaN,r=NaN),a.type&f.SMOOTH_QUAD_TO&&(a.type=f.QUAD_TO,e=isNaN(e)?n:e,i=isNaN(i)?o:i,a.x1=a.relative?n-e:2*n-e,a.y1=a.relative?o-i:2*o-i),a.type&f.QUAD_TO?(e=a.relative?n+a.x1:a.x1,i=a.relative?o+a.y1:a.y1):(e=NaN,i=NaN),a}))}function n(){var t=NaN,r=NaN;return u((function(e,i,a){if(e.type&f.SMOOTH_QUAD_TO&&(e.type=f.QUAD_TO,t=isNaN(t)?i:t,r=isNaN(r)?a:r,e.x1=e.relative?i-t:2*i-t,e.y1=e.relative?a-r:2*a-r),e.type&f.QUAD_TO){t=e.relative?i+e.x1:e.x1,r=e.relative?a+e.y1:e.y1;var n=e.x1,o=e.y1;e.type=f.CURVE_TO,e.x1=((e.relative?0:i)+2*n)/3,e.y1=((e.relative?0:a)+2*o)/3,e.x2=(e.x+2*n)/3,e.y2=(e.y+2*o)/3}else t=NaN,r=NaN;return e}))}function u(t){var r=0,e=0,i=NaN,a=NaN;return function(n){if(isNaN(i)&&!(n.type&f.MOVE_TO))throw new Error(\"path must start with moveto\");var o=t(n,r,e,i,a);return n.type&f.CLOSE_PATH&&(r=i,e=a),void 0!==n.x&&(r=n.relative?r+n.x:n.x),void 0!==n.y&&(e=n.relative?e+n.y:n.y),n.type&f.MOVE_TO&&(i=r,a=e),o}}function O(t,r,e,i,n,o){return a(t,r,e,i,n,o),u((function(a,s,u,h){var c=a.x1,y=a.x2,p=a.relative&&!isNaN(h),m=void 0!==a.x?a.x:p?0:s,O=void 0!==a.y?a.y:p?0:u;function T(t){return t*t}a.type&f.HORIZ_LINE_TO&&0!==r&&(a.type=f.LINE_TO,a.y=a.relative?0:u),a.type&f.VERT_LINE_TO&&0!==e&&(a.type=f.LINE_TO,a.x=a.relative?0:s),void 0!==a.x&&(a.x=a.x*t+O*e+(p?0:n)),void 0!==a.y&&(a.y=m*r+a.y*i+(p?0:o)),void 0!==a.x1&&(a.x1=a.x1*t+a.y1*e+(p?0:n)),void 0!==a.y1&&(a.y1=c*r+a.y1*i+(p?0:o)),void 0!==a.x2&&(a.x2=a.x2*t+a.y2*e+(p?0:n)),void 0!==a.y2&&(a.y2=y*r+a.y2*i+(p?0:o));var v=t*i-r*e;if(void 0!==a.xRot&&(1!==t||0!==r||0!==e||1!==i))if(0===v)delete a.rX,delete a.rY,delete a.xRot,delete a.lArcFlag,delete a.sweepFlag,a.type=f.LINE_TO;else{var l=a.xRot*Math.PI/180,_=Math.sin(l),N=Math.cos(l),x=1/T(a.rX),d=1/T(a.rY),A=T(N)*x+T(_)*d,E=2*_*N*(x-d),C=T(_)*x+T(N)*d,M=A*i*i-E*r*i+C*r*r,R=E*(t*i+r*e)-2*(A*e*i+C*t*r),g=A*e*e-E*t*e+C*t*t,I=(Math.atan2(R,M-g)+Math.PI)%Math.PI/2,S=Math.sin(I),L=Math.cos(I);a.rX=Math.abs(v)/Math.sqrt(M*T(L)+R*S*L+g*T(S)),a.rY=Math.abs(v)/Math.sqrt(M*T(S)-R*S*L+g*T(L)),a.xRot=180*I/Math.PI}return void 0!==a.sweepFlag&&0>v&&(a.sweepFlag=+!a.sweepFlag),a}))}function T(){return function(t){var r={};for(var e in t)r[e]=t[e];return r}}t.ROUND=function(t){function r(r){return Math.round(r*t)/t}return void 0===t&&(t=1e13),a(t),function(t){return void 0!==t.x1&&(t.x1=r(t.x1)),void 0!==t.y1&&(t.y1=r(t.y1)),void 0!==t.x2&&(t.x2=r(t.x2)),void 0!==t.y2&&(t.y2=r(t.y2)),void 0!==t.x&&(t.x=r(t.x)),void 0!==t.y&&(t.y=r(t.y)),void 0!==t.rX&&(t.rX=r(t.rX)),void 0!==t.rY&&(t.rY=r(t.rY)),t}},t.TO_ABS=r,t.TO_REL=function(){return u((function(t,r,e){return t.relative||(void 0!==t.x1&&(t.x1-=r),void 0!==t.y1&&(t.y1-=e),void 0!==t.x2&&(t.x2-=r),void 0!==t.y2&&(t.y2-=e),void 0!==t.x&&(t.x-=r),void 0!==t.y&&(t.y-=e),t.relative=!0),t}))},t.NORMALIZE_HVZ=function(t,r,e){return void 0===t&&(t=!0),void 0===r&&(r=!0),void 0===e&&(e=!0),u((function(i,a,n,o,s){if(isNaN(o)&&!(i.type&f.MOVE_TO))throw new Error(\"path must start with moveto\");return r&&i.type&f.HORIZ_LINE_TO&&(i.type=f.LINE_TO,i.y=i.relative?0:n),e&&i.type&f.VERT_LINE_TO&&(i.type=f.LINE_TO,i.x=i.relative?0:a),t&&i.type&f.CLOSE_PATH&&(i.type=f.LINE_TO,i.x=i.relative?o-a:o,i.y=i.relative?s-n:s),i.type&f.ARC&&(0===i.rX||0===i.rY)&&(i.type=f.LINE_TO,delete i.rX,delete i.rY,delete i.xRot,delete i.lArcFlag,delete i.sweepFlag),i}))},t.NORMALIZE_ST=e,t.QT_TO_C=n,t.INFO=u,t.SANITIZE=function(t){void 0===t&&(t=0),a(t);var r=NaN,e=NaN,i=NaN,n=NaN;return u((function(a,o,s,u,h){var c=Math.abs,y=!1,p=0,m=0;if(a.type&f.SMOOTH_CURVE_TO&&(p=isNaN(r)?0:o-r,m=isNaN(e)?0:s-e),a.type&(f.CURVE_TO|f.SMOOTH_CURVE_TO)?(r=a.relative?o+a.x2:a.x2,e=a.relative?s+a.y2:a.y2):(r=NaN,e=NaN),a.type&f.SMOOTH_QUAD_TO?(i=isNaN(i)?o:2*o-i,n=isNaN(n)?s:2*s-n):a.type&f.QUAD_TO?(i=a.relative?o+a.x1:a.x1,n=a.relative?s+a.y1:a.y2):(i=NaN,n=NaN),a.type&f.LINE_COMMANDS||a.type&f.ARC&&(0===a.rX||0===a.rY||!a.lArcFlag)||a.type&f.CURVE_TO||a.type&f.SMOOTH_CURVE_TO||a.type&f.QUAD_TO||a.type&f.SMOOTH_QUAD_TO){var O=void 0===a.x?0:a.relative?a.x:a.x-o,T=void 0===a.y?0:a.relative?a.y:a.y-s;p=isNaN(i)?void 0===a.x1?p:a.relative?a.x:a.x1-o:i-o,m=isNaN(n)?void 0===a.y1?m:a.relative?a.y:a.y1-s:n-s;var v=void 0===a.x2?0:a.relative?a.x:a.x2-o,l=void 0===a.y2?0:a.relative?a.y:a.y2-s;c(O)<=t&&c(T)<=t&&c(p)<=t&&c(m)<=t&&c(v)<=t&&c(l)<=t&&(y=!0)}return a.type&f.CLOSE_PATH&&c(o-u)<=t&&c(s-h)<=t&&(y=!0),y?[]:a}))},t.MATRIX=O,t.ROTATE=function(t,r,e){void 0===r&&(r=0),void 0===e&&(e=0),a(t,r,e);var i=Math.sin(t),n=Math.cos(t);return O(n,i,-i,n,r-r*n+e*i,e-r*i-e*n)},t.TRANSLATE=function(t,r){return void 0===r&&(r=0),a(t,r),O(1,0,0,1,t,r)},t.SCALE=function(t,r){return void 0===r&&(r=t),a(t,r),O(t,0,0,r,0,0)},t.SKEW_X=function(t){return a(t),O(1,0,Math.atan(t),1,0,0)},t.SKEW_Y=function(t){return a(t),O(1,Math.atan(t),0,1,0,0)},t.X_AXIS_SYMMETRY=function(t){return void 0===t&&(t=0),a(t),O(-1,0,0,1,t,0)},t.Y_AXIS_SYMMETRY=function(t){return void 0===t&&(t=0),a(t),O(1,0,0,-1,0,t)},t.A_TO_C=function(){return u((function(t,r,e){return f.ARC===t.type?function(t,r,e){var a,n,s,u;t.cX||o(t,r,e);for(var y=Math.min(t.phi1,t.phi2),p=Math.max(t.phi1,t.phi2)-y,m=Math.ceil(p/90),O=new Array(m),T=r,v=e,l=0;l<m;l++){var _=c(t.phi1,t.phi2,l/m),N=c(t.phi1,t.phi2,(l+1)/m),x=N-_,d=4/3*Math.tan(x*h/4),A=[Math.cos(_*h)-d*Math.sin(_*h),Math.sin(_*h)+d*Math.cos(_*h)],E=A[0],C=A[1],M=[Math.cos(N*h),Math.sin(N*h)],R=M[0],g=M[1],I=[R+d*Math.sin(N*h),g-d*Math.cos(N*h)],S=I[0],L=I[1];O[l]={relative:t.relative,type:f.CURVE_TO};var H=function(r,e){var a=i([r*t.rX,e*t.rY],t.xRot),n=a[0],o=a[1];return[t.cX+n,t.cY+o]};a=H(E,C),O[l].x1=a[0],O[l].y1=a[1],n=H(S,L),O[l].x2=n[0],O[l].y2=n[1],s=H(R,g),O[l].x=s[0],O[l].y=s[1],t.relative&&(O[l].x1-=T,O[l].y1-=v,O[l].x2-=T,O[l].y2-=v,O[l].x-=T,O[l].y-=v),T=(u=[O[l].x,O[l].y])[0],v=u[1]}return O}(t,t.relative?0:r,t.relative?0:e):t}))},t.ANNOTATE_ARCS=function(){return u((function(t,r,e){return t.relative&&(r=0,e=0),f.ARC===t.type&&o(t,r,e),t}))},t.CLONE=T,t.CALCULATE_BOUNDS=function(){var t=function(t){var r={};for(var e in t)r[e]=t[e];return r},i=r(),a=n(),h=e(),c=u((function(r,e,n){var u=h(a(i(t(r))));function O(t){t>c.maxX&&(c.maxX=t),t<c.minX&&(c.minX=t)}function T(t){t>c.maxY&&(c.maxY=t),t<c.minY&&(c.minY=t)}if(u.type&f.DRAWING_COMMANDS&&(O(e),T(n)),u.type&f.HORIZ_LINE_TO&&O(u.x),u.type&f.VERT_LINE_TO&&T(u.y),u.type&f.LINE_TO&&(O(u.x),T(u.y)),u.type&f.CURVE_TO){O(u.x),T(u.y);for(var v=0,l=p(e,u.x1,u.x2,u.x);v<l.length;v++){0<(w=l[v])&&1>w&&O(m(e,u.x1,u.x2,u.x,w))}for(var _=0,N=p(n,u.y1,u.y2,u.y);_<N.length;_++){0<(w=N[_])&&1>w&&T(m(n,u.y1,u.y2,u.y,w))}}if(u.type&f.ARC){O(u.x),T(u.y),o(u,e,n);for(var x=u.xRot/180*Math.PI,d=Math.cos(x)*u.rX,A=Math.sin(x)*u.rX,E=-Math.sin(x)*u.rY,C=Math.cos(x)*u.rY,M=u.phi1<u.phi2?[u.phi1,u.phi2]:-180>u.phi2?[u.phi2+360,u.phi1+360]:[u.phi2,u.phi1],R=M[0],g=M[1],I=function(t){var r=t[0],e=t[1],i=180*Math.atan2(e,r)/Math.PI;return i<R?i+360:i},S=0,L=s(E,-d,0).map(I);S<L.length;S++){(w=L[S])>R&&w<g&&O(y(u.cX,d,E,w))}for(var H=0,U=s(C,-A,0).map(I);H<U.length;H++){var w;(w=U[H])>R&&w<g&&T(y(u.cY,A,C,w))}}return r}));return c.minX=1/0,c.maxX=-1/0,c.minY=1/0,c.maxY=-1/0,c}}(u||(u={}));var O,T=function(){function t(){}return t.prototype.round=function(t){return this.transform(u.ROUND(t))},t.prototype.toAbs=function(){return this.transform(u.TO_ABS())},t.prototype.toRel=function(){return this.transform(u.TO_REL())},t.prototype.normalizeHVZ=function(t,r,e){return this.transform(u.NORMALIZE_HVZ(t,r,e))},t.prototype.normalizeST=function(){return this.transform(u.NORMALIZE_ST())},t.prototype.qtToC=function(){return this.transform(u.QT_TO_C())},t.prototype.aToC=function(){return this.transform(u.A_TO_C())},t.prototype.sanitize=function(t){return this.transform(u.SANITIZE(t))},t.prototype.translate=function(t,r){return this.transform(u.TRANSLATE(t,r))},t.prototype.scale=function(t,r){return this.transform(u.SCALE(t,r))},t.prototype.rotate=function(t,r,e){return this.transform(u.ROTATE(t,r,e))},t.prototype.matrix=function(t,r,e,i,a,n){return this.transform(u.MATRIX(t,r,e,i,a,n))},t.prototype.skewX=function(t){return this.transform(u.SKEW_X(t))},t.prototype.skewY=function(t){return this.transform(u.SKEW_Y(t))},t.prototype.xSymmetry=function(t){return this.transform(u.X_AXIS_SYMMETRY(t))},t.prototype.ySymmetry=function(t){return this.transform(u.Y_AXIS_SYMMETRY(t))},t.prototype.annotateArcs=function(){return this.transform(u.ANNOTATE_ARCS())},t}(),v=function(t){return\" \"===t||\"\\t\"===t||\"\\r\"===t||\"\\n\"===t},l=function(t){return\"0\".charCodeAt(0)<=t.charCodeAt(0)&&t.charCodeAt(0)<=\"9\".charCodeAt(0)},_=function(t){function e(){var r=t.call(this)||this;return r.curNumber=\"\",r.curCommandType=-1,r.curCommandRelative=!1,r.canParseCommandOrComma=!0,r.curNumberHasExp=!1,r.curNumberHasExpDigits=!1,r.curNumberHasDecimal=!1,r.curArgs=[],r}return r(e,t),e.prototype.finish=function(t){if(void 0===t&&(t=[]),this.parse(\" \",t),0!==this.curArgs.length||!this.canParseCommandOrComma)throw new SyntaxError(\"Unterminated command at the path end.\");return t},e.prototype.parse=function(t,r){var e=this;void 0===r&&(r=[]);for(var i=function(t){r.push(t),e.curArgs.length=0,e.canParseCommandOrComma=!0},a=0;a<t.length;a++){var n=t[a],o=!(this.curCommandType!==f.ARC||3!==this.curArgs.length&&4!==this.curArgs.length||1!==this.curNumber.length||\"0\"!==this.curNumber&&\"1\"!==this.curNumber),s=l(n)&&(\"0\"===this.curNumber&&\"0\"===n||o);if(!l(n)||s)if(\"e\"!==n&&\"E\"!==n)if(\"-\"!==n&&\"+\"!==n||!this.curNumberHasExp||this.curNumberHasExpDigits)if(\".\"!==n||this.curNumberHasExp||this.curNumberHasDecimal||o){if(this.curNumber&&-1!==this.curCommandType){var u=Number(this.curNumber);if(isNaN(u))throw new SyntaxError(\"Invalid number ending at \"+a);if(this.curCommandType===f.ARC)if(0===this.curArgs.length||1===this.curArgs.length){if(0>u)throw new SyntaxError('Expected positive number, got \"'+u+'\" at index \"'+a+'\"')}else if((3===this.curArgs.length||4===this.curArgs.length)&&\"0\"!==this.curNumber&&\"1\"!==this.curNumber)throw new SyntaxError('Expected a flag, got \"'+this.curNumber+'\" at index \"'+a+'\"');this.curArgs.push(u),this.curArgs.length===N[this.curCommandType]&&(f.HORIZ_LINE_TO===this.curCommandType?i({type:f.HORIZ_LINE_TO,relative:this.curCommandRelative,x:u}):f.VERT_LINE_TO===this.curCommandType?i({type:f.VERT_LINE_TO,relative:this.curCommandRelative,y:u}):this.curCommandType===f.MOVE_TO||this.curCommandType===f.LINE_TO||this.curCommandType===f.SMOOTH_QUAD_TO?(i({type:this.curCommandType,relative:this.curCommandRelative,x:this.curArgs[0],y:this.curArgs[1]}),f.MOVE_TO===this.curCommandType&&(this.curCommandType=f.LINE_TO)):this.curCommandType===f.CURVE_TO?i({type:f.CURVE_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x2:this.curArgs[2],y2:this.curArgs[3],x:this.curArgs[4],y:this.curArgs[5]}):this.curCommandType===f.SMOOTH_CURVE_TO?i({type:f.SMOOTH_CURVE_TO,relative:this.curCommandRelative,x2:this.curArgs[0],y2:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===f.QUAD_TO?i({type:f.QUAD_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===f.ARC&&i({type:f.ARC,relative:this.curCommandRelative,rX:this.curArgs[0],rY:this.curArgs[1],xRot:this.curArgs[2],lArcFlag:this.curArgs[3],sweepFlag:this.curArgs[4],x:this.curArgs[5],y:this.curArgs[6]})),this.curNumber=\"\",this.curNumberHasExpDigits=!1,this.curNumberHasExp=!1,this.curNumberHasDecimal=!1,this.canParseCommandOrComma=!0}if(!v(n))if(\",\"===n&&this.canParseCommandOrComma)this.canParseCommandOrComma=!1;else if(\"+\"!==n&&\"-\"!==n&&\".\"!==n)if(s)this.curNumber=n,this.curNumberHasDecimal=!1;else{if(0!==this.curArgs.length)throw new SyntaxError(\"Unterminated command at index \"+a+\".\");if(!this.canParseCommandOrComma)throw new SyntaxError('Unexpected character \"'+n+'\" at index '+a+\". Command cannot follow comma\");if(this.canParseCommandOrComma=!1,\"z\"!==n&&\"Z\"!==n)if(\"h\"===n||\"H\"===n)this.curCommandType=f.HORIZ_LINE_TO,this.curCommandRelative=\"h\"===n;else if(\"v\"===n||\"V\"===n)this.curCommandType=f.VERT_LINE_TO,this.curCommandRelative=\"v\"===n;else if(\"m\"===n||\"M\"===n)this.curCommandType=f.MOVE_TO,this.curCommandRelative=\"m\"===n;else if(\"l\"===n||\"L\"===n)this.curCommandType=f.LINE_TO,this.curCommandRelative=\"l\"===n;else if(\"c\"===n||\"C\"===n)this.curCommandType=f.CURVE_TO,this.curCommandRelative=\"c\"===n;else if(\"s\"===n||\"S\"===n)this.curCommandType=f.SMOOTH_CURVE_TO,this.curCommandRelative=\"s\"===n;else if(\"q\"===n||\"Q\"===n)this.curCommandType=f.QUAD_TO,this.curCommandRelative=\"q\"===n;else if(\"t\"===n||\"T\"===n)this.curCommandType=f.SMOOTH_QUAD_TO,this.curCommandRelative=\"t\"===n;else{if(\"a\"!==n&&\"A\"!==n)throw new SyntaxError('Unexpected character \"'+n+'\" at index '+a+\".\");this.curCommandType=f.ARC,this.curCommandRelative=\"a\"===n}else r.push({type:f.CLOSE_PATH}),this.canParseCommandOrComma=!0,this.curCommandType=-1}else this.curNumber=n,this.curNumberHasDecimal=\".\"===n}else this.curNumber+=n,this.curNumberHasDecimal=!0;else this.curNumber+=n;else this.curNumber+=n,this.curNumberHasExp=!0;else this.curNumber+=n,this.curNumberHasExpDigits=this.curNumberHasExp}return r},e.prototype.transform=function(t){return Object.create(this,{parse:{value:function(r,e){void 0===e&&(e=[]);for(var i=0,a=Object.getPrototypeOf(this).parse.call(this,r);i<a.length;i++){var n=a[i],o=t(n);Array.isArray(o)?e.push.apply(e,o):e.push(o)}return e}}})},e}(T),f=function(t){function i(r){var e=t.call(this)||this;return e.commands=\"string\"==typeof r?i.parse(r):r,e}return r(i,t),i.prototype.encode=function(){return i.encode(this.commands)},i.prototype.getBounds=function(){var t=u.CALCULATE_BOUNDS();return this.transform(t),t},i.prototype.transform=function(t){for(var r=[],e=0,i=this.commands;e<i.length;e++){var a=t(i[e]);Array.isArray(a)?r.push.apply(r,a):r.push(a)}return this.commands=r,this},i.encode=function(t){return e(t)},i.parse=function(t){var r=new _,e=[];return r.parse(t,e),r.finish(e),e},i.CLOSE_PATH=1,i.MOVE_TO=2,i.HORIZ_LINE_TO=4,i.VERT_LINE_TO=8,i.LINE_TO=16,i.CURVE_TO=32,i.SMOOTH_CURVE_TO=64,i.QUAD_TO=128,i.SMOOTH_QUAD_TO=256,i.ARC=512,i.LINE_COMMANDS=i.LINE_TO|i.HORIZ_LINE_TO|i.VERT_LINE_TO,i.DRAWING_COMMANDS=i.HORIZ_LINE_TO|i.VERT_LINE_TO|i.LINE_TO|i.CURVE_TO|i.SMOOTH_CURVE_TO|i.QUAD_TO|i.SMOOTH_QUAD_TO|i.ARC,i}(T),N=((O={})[f.MOVE_TO]=2,O[f.LINE_TO]=2,O[f.HORIZ_LINE_TO]=1,O[f.VERT_LINE_TO]=1,O[f.CLOSE_PATH]=0,O[f.QUAD_TO]=4,O[f.SMOOTH_QUAD_TO]=2,O[f.CURVE_TO]=6,O[f.SMOOTH_CURVE_TO]=4,O[f.ARC]=7,O);export{N as COMMAND_ARG_COUNTS,f as SVGPathData,_ as SVGPathDataParser,u as SVGPathDataTransformer,e as encodeSVGPath};\n//# sourceMappingURL=SVGPathData.module.js.map\n","var $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\n\n// `Reflect.deleteProperty` method\n// https://tc39.es/ecma262/#sec-reflect.deleteproperty\n$({ target: 'Reflect', stat: true }, {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var descriptor = getOwnPropertyDescriptor(anObject(target), propertyKey);\n return descriptor && !descriptor.configurable ? false : delete target[propertyKey];\n }\n});\n","require('../../modules/es.reflect.delete-property');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.deleteProperty;\n","require('../../../modules/es.array.iterator');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').values;\n","require('../../modules/web.dom-collections.iterator');\nvar values = require('../array/virtual/values');\nvar classof = require('../../internals/classof');\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.values;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.values)\n // eslint-disable-next-line no-prototype-builtins -- safe\n || DOMIterables.hasOwnProperty(classof(it)) ? values : own;\n};\n","var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar hex = /^[+-]?0[Xx]/;\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22;\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(String(string));\n return $parseInt(S, (radix >>> 0) || (hex.test(S) ? 16 : 10));\n} : $parseInt;\n","var $ = require('../internals/export');\nvar parseIntImplementation = require('../internals/number-parse-int');\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\n$({ global: true, forced: parseInt != parseIntImplementation }, {\n parseInt: parseIntImplementation\n});\n","require('../modules/es.parse-int');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseInt;\n","var parent = require('../../es/array/is-array');\n\nmodule.exports = parent;\n","require('../modules/web.dom-collections.iterator');\nrequire('../modules/es.string.iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = getIteratorMethod;\n","var parent = require('../../es/symbol');\n\nmodule.exports = parent;\n","var parent = require('../../es/instance/slice');\n\nmodule.exports = parent;\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\n\nvar nativeIsExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeIsExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n isExtensible: function isExtensible(it) {\n return isObject(it) ? nativeIsExtensible ? nativeIsExtensible(it) : true : false;\n }\n});\n","var $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\n\nvar nativePreventExtensions = Object.preventExtensions;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativePreventExtensions(1); });\n\n// `Object.preventExtensions` method\n// https://tc39.es/ecma262/#sec-object.preventextensions\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n preventExtensions: function preventExtensions(it) {\n return nativePreventExtensions && isObject(it) ? nativePreventExtensions(onFreeze(it)) : it;\n }\n});\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar defineProperty = require('../internals/object-define-property').f;\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + ++id, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar meta = module.exports = {\n REQUIRED: false,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","'use strict';\nvar $ = require('./export');\nvar global = require('../internals/global');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar fails = require('../internals/fails');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isObject = require('../internals/is-object');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar defineProperty = require('../internals/object-define-property').f;\nvar forEach = require('../internals/array-iteration').forEach;\nvar DESCRIPTORS = require('../internals/descriptors');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var exported = {};\n var Constructor;\n\n if (!DESCRIPTORS || typeof NativeConstructor != 'function'\n || !(IS_WEAK || NativePrototype.forEach && !fails(function () { new NativeConstructor().entries().next(); }))\n ) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.REQUIRED = true;\n } else {\n Constructor = wrapper(function (target, iterable) {\n setInternalState(anInstance(target, Constructor, CONSTRUCTOR_NAME), {\n type: CONSTRUCTOR_NAME,\n collection: new NativeConstructor()\n });\n if (iterable != undefined) iterate(iterable, target[ADDER], { that: target, AS_ENTRIES: IS_MAP });\n });\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) {\n var IS_ADDER = KEY == 'add' || KEY == 'set';\n if (KEY in NativePrototype && !(IS_WEAK && KEY == 'clear')) {\n createNonEnumerableProperty(Constructor.prototype, KEY, function (a, b) {\n var collection = getInternalState(this).collection;\n if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;\n var result = collection[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n }\n });\n\n IS_WEAK || defineProperty(Constructor.prototype, 'size', {\n configurable: true,\n get: function () {\n return getInternalState(this).collection.size;\n }\n });\n }\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME, false, true);\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: true }, exported);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, CONSTRUCTOR_NAME);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(C.prototype, IS_MAP ? {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return C;\n },\n setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","require('../../modules/es.map');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aFunction = require('../internals/a-function');\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\n\nvar nativeApply = getBuiltIn('Reflect', 'apply');\nvar functionApply = Function.apply;\n\n// MS Edge argumentsList argument is optional\nvar OPTIONAL_ARGUMENTS_LIST = !fails(function () {\n nativeApply(function () { /* empty */ });\n});\n\n// `Reflect.apply` method\n// https://tc39.es/ecma262/#sec-reflect.apply\n$({ target: 'Reflect', stat: true, forced: OPTIONAL_ARGUMENTS_LIST }, {\n apply: function apply(target, thisArgument, argumentsList) {\n aFunction(target);\n anObject(argumentsList);\n return nativeApply\n ? nativeApply(target, thisArgument, argumentsList)\n : functionApply.call(target, thisArgument, argumentsList);\n }\n});\n","require('../../modules/es.reflect.apply');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.apply;\n","var $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar objectGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\n// `Reflect.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-reflect.getprototypeof\n$({ target: 'Reflect', stat: true, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(target) {\n return objectGetPrototypeOf(anObject(target));\n }\n});\n","require('../../modules/es.reflect.get-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.getPrototypeOf;\n","function _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\n/* eslint-disable no-bitwise -- used for calculations */\n\n/* eslint-disable unicorn/prefer-query-selector -- aiming at\n backward-compatibility */\n\n/**\n* StackBlur - a fast almost Gaussian Blur For Canvas\n*\n* In case you find this class useful - especially in commercial projects -\n* I am not totally unhappy for a small donation to my PayPal account\n* mario@quasimondo.de\n*\n* Or support me on flattr:\n* {@link https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript}.\n*\n* @module StackBlur\n* @author Mario Klingemann\n* Contact: mario@quasimondo.com\n* Website: {@link http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html}\n* Twitter: @quasimondo\n*\n* @copyright (c) 2010 Mario Klingemann\n*\n* Permission is hereby granted, free of charge, to any person\n* obtaining a copy of this software and associated documentation\n* files (the \"Software\"), to deal in the Software without\n* restriction, including without limitation the rights to use,\n* copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the\n* Software is furnished to do so, subject to the following\n* conditions:\n*\n* The above copyright notice and this permission notice shall be\n* included in all copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n* OTHER DEALINGS IN THE SOFTWARE.\n*/\nvar mulTable = [512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512, 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456, 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512, 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328, 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456, 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335, 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512, 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405, 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328, 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271, 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456, 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388, 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335, 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292, 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259];\nvar shgTable = [9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24];\n/**\n * @param {string|HTMLImageElement} img\n * @param {string|HTMLCanvasElement} canvas\n * @param {Float} radius\n * @param {boolean} blurAlphaChannel\n * @param {boolean} useOffset\n * @param {boolean} skipStyles\n * @returns {undefined}\n */\n\nfunction processImage(img, canvas, radius, blurAlphaChannel, useOffset, skipStyles) {\n if (typeof img === 'string') {\n img = document.getElementById(img);\n }\n\n if (!img || !('naturalWidth' in img)) {\n return;\n }\n\n var dimensionType = useOffset ? 'offset' : 'natural';\n var w = img[dimensionType + 'Width'];\n var h = img[dimensionType + 'Height'];\n\n if (typeof canvas === 'string') {\n canvas = document.getElementById(canvas);\n }\n\n if (!canvas || !('getContext' in canvas)) {\n return;\n }\n\n if (!skipStyles) {\n canvas.style.width = w + 'px';\n canvas.style.height = h + 'px';\n }\n\n canvas.width = w;\n canvas.height = h;\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, w, h);\n context.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, w, h);\n\n if (isNaN(radius) || radius < 1) {\n return;\n }\n\n if (blurAlphaChannel) {\n processCanvasRGBA(canvas, 0, 0, w, h, radius);\n } else {\n processCanvasRGB(canvas, 0, 0, w, h, radius);\n }\n}\n/**\n * @param {string|HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @throws {Error|TypeError}\n * @returns {ImageData} See {@link https://html.spec.whatwg.org/multipage/canvas.html#imagedata}\n */\n\n\nfunction getImageDataFromCanvas(canvas, topX, topY, width, height) {\n if (typeof canvas === 'string') {\n canvas = document.getElementById(canvas);\n }\n\n if (!canvas || _typeof(canvas) !== 'object' || !('getContext' in canvas)) {\n throw new TypeError('Expecting canvas with `getContext` method ' + 'in processCanvasRGB(A) calls!');\n }\n\n var context = canvas.getContext('2d');\n\n try {\n return context.getImageData(topX, topY, width, height);\n } catch (e) {\n throw new Error('unable to access image data: ' + e);\n }\n}\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {undefined}\n */\n\n\nfunction processCanvasRGBA(canvas, topX, topY, width, height, radius) {\n if (isNaN(radius) || radius < 1) {\n return;\n }\n\n radius |= 0;\n var imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);\n imageData = processImageDataRGBA(imageData, topX, topY, width, height, radius);\n canvas.getContext('2d').putImageData(imageData, topX, topY);\n}\n/**\n * @param {ImageData} imageData\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {ImageData}\n */\n\n\nfunction processImageDataRGBA(imageData, topX, topY, width, height, radius) {\n var pixels = imageData.data;\n var div = 2 * radius + 1; // const w4 = width << 2;\n\n var widthMinus1 = width - 1;\n var heightMinus1 = height - 1;\n var radiusPlus1 = radius + 1;\n var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n var stackStart = new BlurStack();\n var stack = stackStart;\n var stackEnd;\n\n for (var i = 1; i < div; i++) {\n stack = stack.next = new BlurStack();\n\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n\n stack.next = stackStart;\n var stackIn = null,\n stackOut = null,\n yw = 0,\n yi = 0;\n var mulSum = mulTable[radius];\n var shgSum = shgTable[radius];\n\n for (var y = 0; y < height; y++) {\n stack = stackStart;\n var pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n pa = pixels[yi + 3];\n\n for (var _i = 0; _i < radiusPlus1; _i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n\n var rInSum = 0,\n gInSum = 0,\n bInSum = 0,\n aInSum = 0,\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n aOutSum = radiusPlus1 * pa,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb,\n aSum = sumFactor * pa;\n\n for (var _i2 = 1; _i2 < radiusPlus1; _i2++) {\n var p = yi + ((widthMinus1 < _i2 ? widthMinus1 : _i2) << 2);\n var r = pixels[p],\n g = pixels[p + 1],\n b = pixels[p + 2],\n a = pixels[p + 3];\n var rbs = radiusPlus1 - _i2;\n rSum += (stack.r = r) * rbs;\n gSum += (stack.g = g) * rbs;\n bSum += (stack.b = b) * rbs;\n aSum += (stack.a = a) * rbs;\n rInSum += r;\n gInSum += g;\n bInSum += b;\n aInSum += a;\n stack = stack.next;\n }\n\n stackIn = stackStart;\n stackOut = stackEnd;\n\n for (var x = 0; x < width; x++) {\n var paInitial = aSum * mulSum >> shgSum;\n pixels[yi + 3] = paInitial;\n\n if (paInitial !== 0) {\n var _a2 = 255 / paInitial;\n\n pixels[yi] = (rSum * mulSum >> shgSum) * _a2;\n pixels[yi + 1] = (gSum * mulSum >> shgSum) * _a2;\n pixels[yi + 2] = (bSum * mulSum >> shgSum) * _a2;\n } else {\n pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0;\n }\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n aSum -= aOutSum;\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n aOutSum -= stackIn.a;\n\n var _p = x + radius + 1;\n\n _p = yw + (_p < widthMinus1 ? _p : widthMinus1) << 2;\n rInSum += stackIn.r = pixels[_p];\n gInSum += stackIn.g = pixels[_p + 1];\n bInSum += stackIn.b = pixels[_p + 2];\n aInSum += stackIn.a = pixels[_p + 3];\n rSum += rInSum;\n gSum += gInSum;\n bSum += bInSum;\n aSum += aInSum;\n stackIn = stackIn.next;\n var _stackOut = stackOut,\n _r = _stackOut.r,\n _g = _stackOut.g,\n _b = _stackOut.b,\n _a = _stackOut.a;\n rOutSum += _r;\n gOutSum += _g;\n bOutSum += _b;\n aOutSum += _a;\n rInSum -= _r;\n gInSum -= _g;\n bInSum -= _b;\n aInSum -= _a;\n stackOut = stackOut.next;\n yi += 4;\n }\n\n yw += width;\n }\n\n for (var _x = 0; _x < width; _x++) {\n yi = _x << 2;\n\n var _pr = pixels[yi],\n _pg = pixels[yi + 1],\n _pb = pixels[yi + 2],\n _pa = pixels[yi + 3],\n _rOutSum = radiusPlus1 * _pr,\n _gOutSum = radiusPlus1 * _pg,\n _bOutSum = radiusPlus1 * _pb,\n _aOutSum = radiusPlus1 * _pa,\n _rSum = sumFactor * _pr,\n _gSum = sumFactor * _pg,\n _bSum = sumFactor * _pb,\n _aSum = sumFactor * _pa;\n\n stack = stackStart;\n\n for (var _i3 = 0; _i3 < radiusPlus1; _i3++) {\n stack.r = _pr;\n stack.g = _pg;\n stack.b = _pb;\n stack.a = _pa;\n stack = stack.next;\n }\n\n var yp = width;\n var _gInSum = 0,\n _bInSum = 0,\n _aInSum = 0,\n _rInSum = 0;\n\n for (var _i4 = 1; _i4 <= radius; _i4++) {\n yi = yp + _x << 2;\n\n var _rbs = radiusPlus1 - _i4;\n\n _rSum += (stack.r = _pr = pixels[yi]) * _rbs;\n _gSum += (stack.g = _pg = pixels[yi + 1]) * _rbs;\n _bSum += (stack.b = _pb = pixels[yi + 2]) * _rbs;\n _aSum += (stack.a = _pa = pixels[yi + 3]) * _rbs;\n _rInSum += _pr;\n _gInSum += _pg;\n _bInSum += _pb;\n _aInSum += _pa;\n stack = stack.next;\n\n if (_i4 < heightMinus1) {\n yp += width;\n }\n }\n\n yi = _x;\n stackIn = stackStart;\n stackOut = stackEnd;\n\n for (var _y = 0; _y < height; _y++) {\n var _p2 = yi << 2;\n\n pixels[_p2 + 3] = _pa = _aSum * mulSum >> shgSum;\n\n if (_pa > 0) {\n _pa = 255 / _pa;\n pixels[_p2] = (_rSum * mulSum >> shgSum) * _pa;\n pixels[_p2 + 1] = (_gSum * mulSum >> shgSum) * _pa;\n pixels[_p2 + 2] = (_bSum * mulSum >> shgSum) * _pa;\n } else {\n pixels[_p2] = pixels[_p2 + 1] = pixels[_p2 + 2] = 0;\n }\n\n _rSum -= _rOutSum;\n _gSum -= _gOutSum;\n _bSum -= _bOutSum;\n _aSum -= _aOutSum;\n _rOutSum -= stackIn.r;\n _gOutSum -= stackIn.g;\n _bOutSum -= stackIn.b;\n _aOutSum -= stackIn.a;\n _p2 = _x + ((_p2 = _y + radiusPlus1) < heightMinus1 ? _p2 : heightMinus1) * width << 2;\n _rSum += _rInSum += stackIn.r = pixels[_p2];\n _gSum += _gInSum += stackIn.g = pixels[_p2 + 1];\n _bSum += _bInSum += stackIn.b = pixels[_p2 + 2];\n _aSum += _aInSum += stackIn.a = pixels[_p2 + 3];\n stackIn = stackIn.next;\n _rOutSum += _pr = stackOut.r;\n _gOutSum += _pg = stackOut.g;\n _bOutSum += _pb = stackOut.b;\n _aOutSum += _pa = stackOut.a;\n _rInSum -= _pr;\n _gInSum -= _pg;\n _bInSum -= _pb;\n _aInSum -= _pa;\n stackOut = stackOut.next;\n yi += width;\n }\n }\n\n return imageData;\n}\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {undefined}\n */\n\n\nfunction processCanvasRGB(canvas, topX, topY, width, height, radius) {\n if (isNaN(radius) || radius < 1) {\n return;\n }\n\n radius |= 0;\n var imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);\n imageData = processImageDataRGB(imageData, topX, topY, width, height, radius);\n canvas.getContext('2d').putImageData(imageData, topX, topY);\n}\n/**\n * @param {ImageData} imageData\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {ImageData}\n */\n\n\nfunction processImageDataRGB(imageData, topX, topY, width, height, radius) {\n var pixels = imageData.data;\n var div = 2 * radius + 1; // const w4 = width << 2;\n\n var widthMinus1 = width - 1;\n var heightMinus1 = height - 1;\n var radiusPlus1 = radius + 1;\n var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n var stackStart = new BlurStack();\n var stack = stackStart;\n var stackEnd;\n\n for (var i = 1; i < div; i++) {\n stack = stack.next = new BlurStack();\n\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n\n stack.next = stackStart;\n var stackIn = null;\n var stackOut = null;\n var mulSum = mulTable[radius];\n var shgSum = shgTable[radius];\n var p, rbs;\n var yw = 0,\n yi = 0;\n\n for (var y = 0; y < height; y++) {\n var pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb;\n stack = stackStart;\n\n for (var _i5 = 0; _i5 < radiusPlus1; _i5++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n var rInSum = 0,\n gInSum = 0,\n bInSum = 0;\n\n for (var _i6 = 1; _i6 < radiusPlus1; _i6++) {\n p = yi + ((widthMinus1 < _i6 ? widthMinus1 : _i6) << 2);\n rSum += (stack.r = pr = pixels[p]) * (rbs = radiusPlus1 - _i6);\n gSum += (stack.g = pg = pixels[p + 1]) * rbs;\n bSum += (stack.b = pb = pixels[p + 2]) * rbs;\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n stack = stack.next;\n }\n\n stackIn = stackStart;\n stackOut = stackEnd;\n\n for (var x = 0; x < width; x++) {\n pixels[yi] = rSum * mulSum >> shgSum;\n pixels[yi + 1] = gSum * mulSum >> shgSum;\n pixels[yi + 2] = bSum * mulSum >> shgSum;\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n p = yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1) << 2;\n rInSum += stackIn.r = pixels[p];\n gInSum += stackIn.g = pixels[p + 1];\n bInSum += stackIn.b = pixels[p + 2];\n rSum += rInSum;\n gSum += gInSum;\n bSum += bInSum;\n stackIn = stackIn.next;\n rOutSum += pr = stackOut.r;\n gOutSum += pg = stackOut.g;\n bOutSum += pb = stackOut.b;\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n stackOut = stackOut.next;\n yi += 4;\n }\n\n yw += width;\n }\n\n for (var _x2 = 0; _x2 < width; _x2++) {\n yi = _x2 << 2;\n\n var _pr2 = pixels[yi],\n _pg2 = pixels[yi + 1],\n _pb2 = pixels[yi + 2],\n _rOutSum2 = radiusPlus1 * _pr2,\n _gOutSum2 = radiusPlus1 * _pg2,\n _bOutSum2 = radiusPlus1 * _pb2,\n _rSum2 = sumFactor * _pr2,\n _gSum2 = sumFactor * _pg2,\n _bSum2 = sumFactor * _pb2;\n\n stack = stackStart;\n\n for (var _i7 = 0; _i7 < radiusPlus1; _i7++) {\n stack.r = _pr2;\n stack.g = _pg2;\n stack.b = _pb2;\n stack = stack.next;\n }\n\n var _rInSum2 = 0,\n _gInSum2 = 0,\n _bInSum2 = 0;\n\n for (var _i8 = 1, yp = width; _i8 <= radius; _i8++) {\n yi = yp + _x2 << 2;\n _rSum2 += (stack.r = _pr2 = pixels[yi]) * (rbs = radiusPlus1 - _i8);\n _gSum2 += (stack.g = _pg2 = pixels[yi + 1]) * rbs;\n _bSum2 += (stack.b = _pb2 = pixels[yi + 2]) * rbs;\n _rInSum2 += _pr2;\n _gInSum2 += _pg2;\n _bInSum2 += _pb2;\n stack = stack.next;\n\n if (_i8 < heightMinus1) {\n yp += width;\n }\n }\n\n yi = _x2;\n stackIn = stackStart;\n stackOut = stackEnd;\n\n for (var _y2 = 0; _y2 < height; _y2++) {\n p = yi << 2;\n pixels[p] = _rSum2 * mulSum >> shgSum;\n pixels[p + 1] = _gSum2 * mulSum >> shgSum;\n pixels[p + 2] = _bSum2 * mulSum >> shgSum;\n _rSum2 -= _rOutSum2;\n _gSum2 -= _gOutSum2;\n _bSum2 -= _bOutSum2;\n _rOutSum2 -= stackIn.r;\n _gOutSum2 -= stackIn.g;\n _bOutSum2 -= stackIn.b;\n p = _x2 + ((p = _y2 + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width << 2;\n _rSum2 += _rInSum2 += stackIn.r = pixels[p];\n _gSum2 += _gInSum2 += stackIn.g = pixels[p + 1];\n _bSum2 += _bInSum2 += stackIn.b = pixels[p + 2];\n stackIn = stackIn.next;\n _rOutSum2 += _pr2 = stackOut.r;\n _gOutSum2 += _pg2 = stackOut.g;\n _bOutSum2 += _pb2 = stackOut.b;\n _rInSum2 -= _pr2;\n _gInSum2 -= _pg2;\n _bInSum2 -= _pb2;\n stackOut = stackOut.next;\n yi += width;\n }\n }\n\n return imageData;\n}\n/**\n *\n */\n\n\nvar BlurStack =\n/**\n * Set properties.\n */\nfunction BlurStack() {\n _classCallCheck(this, BlurStack);\n\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n this.next = null;\n};\n\nexport { BlurStack, processCanvasRGB as canvasRGB, processCanvasRGBA as canvasRGBA, processImage as image, processImageDataRGB as imageDataRGB, processImageDataRGBA as imageDataRGBA };\n","/**\n * A jQuery module to work with SVG attributes.\n * @module jQueryAttr\n * @license MIT\n */\n\n/**\n* This fixes `$(...).attr()` to work as expected with SVG elements.\n* Does not currently use `*AttributeNS()` since we rarely need that.\n* Adds {@link external:jQuery.fn.attr}.\n* See {@link https://api.jquery.com/attr/} for basic documentation of `.attr()`.\n*\n* Additional functionality:\n* - When getting attributes, a string that's a number is returned as type number.\n* - If an array is supplied as the first parameter, multiple values are returned\n* as an object with values for each given attribute.\n* @function module:jQueryAttr.jQueryAttr\n* @param {external:jQuery} $ The jQuery object to which to add the plug-in\n* @returns {external:jQuery}\n*/\nexport default function jQueryPluginSVG ($) {\n const proxied = $.fn.attr,\n svgns = 'http://www.w3.org/2000/svg';\n /**\n * @typedef {PlainObject<string, string|Float>} module:jQueryAttr.Attributes\n */\n /**\n * @function external:jQuery.fn.attr\n * @param {string|string[]|PlainObject<string, string>} key\n * @param {string} value\n * @returns {external:jQuery|module:jQueryAttr.Attributes}\n */\n $.fn.attr = function (key, value) {\n const len = this.length;\n if (!len) { return proxied.call(this, key, value); }\n for (let i = 0; i < len; ++i) {\n const elem = this[i];\n // set/get SVG attribute\n if (elem.namespaceURI === svgns) {\n // Setting attribute\n if (value !== undefined) {\n elem.setAttribute(key, value);\n } else if (Array.isArray(key)) {\n // Getting attributes from array\n const obj = {};\n let j = key.length;\n\n while (j--) {\n const aname = key[j];\n let attr = elem.getAttribute(aname);\n // This returns a number when appropriate\n if (attr || attr === '0') {\n attr = isNaN(attr) ? attr : (attr - 0);\n }\n obj[aname] = attr;\n }\n return obj;\n }\n if (typeof key === 'object') {\n // Setting attributes from object\n for (const [name, val] of Object.entries(key)) {\n elem.setAttribute(name, val);\n }\n // Getting attribute\n } else {\n let attr = elem.getAttribute(key);\n if (attr || attr === '0') {\n attr = isNaN(attr) ? attr : (attr - 0);\n }\n return attr;\n }\n } else {\n return proxied.call(this, key, value);\n }\n }\n return this;\n };\n return $;\n}\n","/**\n * Partial polyfill of `SVGTransformList`\n * @module SVGTransformList\n *\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria, 2010 Jeff Schiller\n */\n\nimport {NS} from '../common/namespaces.js';\nimport {supportsNativeTransformLists} from '../common/browser.js';\n\nconst svgroot = document.createElementNS(NS.SVG, 'svg');\n\n/**\n * Helper function to convert `SVGTransform` to a string.\n * @param {SVGTransform} xform\n * @returns {string}\n */\nfunction transformToString (xform) {\n const m = xform.matrix;\n let text = '';\n switch (xform.type) {\n case 1: // MATRIX\n text = 'matrix(' + [m.a, m.b, m.c, m.d, m.e, m.f].join(',') + ')';\n break;\n case 2: // TRANSLATE\n text = 'translate(' + m.e + ',' + m.f + ')';\n break;\n case 3: // SCALE\n text = (m.a === m.d) ? `scale(${m.a})` : `scale(${m.a},${m.d})`;\n break;\n case 4: { // ROTATE\n let cx = 0;\n let cy = 0;\n // this prevents divide by zero\n if (xform.angle !== 0) {\n const K = 1 - m.a;\n cy = (K * m.f + m.b * m.e) / (K * K + m.b * m.b);\n cx = (m.e - m.b * cy) / K;\n }\n text = 'rotate(' + xform.angle + ' ' + cx + ',' + cy + ')';\n break;\n }\n }\n return text;\n}\n\n/**\n * Map of SVGTransformList objects.\n */\nlet listMap_ = {};\n\n/**\n* @interface module:SVGTransformList.SVGEditTransformList\n* @property {Integer} numberOfItems unsigned long\n*/\n/**\n* @function module:SVGTransformList.SVGEditTransformList#clear\n* @returns {void}\n*/\n/**\n* @function module:SVGTransformList.SVGEditTransformList#initialize\n* @param {SVGTransform} newItem\n* @returns {SVGTransform}\n*/\n/**\n* DOES NOT THROW DOMException, INDEX_SIZE_ERR.\n* @function module:SVGTransformList.SVGEditTransformList#getItem\n* @param {Integer} index unsigned long\n* @returns {SVGTransform}\n*/\n/**\n* DOES NOT THROW DOMException, INDEX_SIZE_ERR.\n* @function module:SVGTransformList.SVGEditTransformList#insertItemBefore\n* @param {SVGTransform} newItem\n* @param {Integer} index unsigned long\n* @returns {SVGTransform}\n*/\n/**\n* DOES NOT THROW DOMException, INDEX_SIZE_ERR.\n* @function module:SVGTransformList.SVGEditTransformList#replaceItem\n* @param {SVGTransform} newItem\n* @param {Integer} index unsigned long\n* @returns {SVGTransform}\n*/\n/**\n* DOES NOT THROW DOMException, INDEX_SIZE_ERR.\n* @function module:SVGTransformList.SVGEditTransformList#removeItem\n* @param {Integer} index unsigned long\n* @returns {SVGTransform}\n*/\n/**\n* @function module:SVGTransformList.SVGEditTransformList#appendItem\n* @param {SVGTransform} newItem\n* @returns {SVGTransform}\n*/\n/**\n* NOT IMPLEMENTED.\n* @ignore\n* @function module:SVGTransformList.SVGEditTransformList#createSVGTransformFromMatrix\n* @param {SVGMatrix} matrix\n* @returns {SVGTransform}\n*/\n/**\n* NOT IMPLEMENTED.\n* @ignore\n* @function module:SVGTransformList.SVGEditTransformList#consolidate\n* @returns {SVGTransform}\n*/\n\n/**\n* SVGTransformList implementation for Webkit.\n* These methods do not currently raise any exceptions.\n* These methods also do not check that transforms are being inserted. This is basically\n* implementing as much of SVGTransformList that we need to get the job done.\n* @implements {module:SVGTransformList.SVGEditTransformList}\n*/\nexport class SVGTransformList {\n /**\n * @param {Element} elem\n * @returns {SVGTransformList}\n */\n constructor (elem) {\n this._elem = elem || null;\n this._xforms = [];\n // TODO: how do we capture the undo-ability in the changed transform list?\n this._update = function () {\n let tstr = '';\n // /* const concatMatrix = */ svgroot.createSVGMatrix();\n for (let i = 0; i < this.numberOfItems; ++i) {\n const xform = this._list.getItem(i);\n tstr += transformToString(xform) + ' ';\n }\n this._elem.setAttribute('transform', tstr);\n };\n this._list = this;\n this._init = function () {\n // Transform attribute parser\n let str = this._elem.getAttribute('transform');\n if (!str) { return; }\n\n // TODO: Add skew support in future\n const re = /\\s*((scale|matrix|rotate|translate)\\s*\\(.*?\\))\\s*,?\\s*/;\n // const re = /\\s*(?<xform>(?:scale|matrix|rotate|translate)\\s*\\(.*?\\))\\s*,?\\s*/;\n let m = true;\n while (m) {\n m = str.match(re);\n str = str.replace(re, '');\n if (m && m[1]) {\n const x = m[1];\n const bits = x.split(/\\s*\\(/);\n const name = bits[0];\n const valBits = bits[1].match(/\\s*(.*?)\\s*\\)/);\n valBits[1] = valBits[1].replace(/(\\d)-/g, '$1 -');\n const valArr = valBits[1].split(/[, ]+/);\n const letters = 'abcdef'.split('');\n /*\n if (m && m.groups.xform) {\n const x = m.groups.xform;\n const [name, bits] = x.split(/\\s*\\(/);\n const valBits = bits.match(/\\s*(?<nonWhitespace>.*?)\\s*\\)/);\n valBits.groups.nonWhitespace = valBits.groups.nonWhitespace.replace(\n /(?<digit>\\d)-/g, '$<digit> -'\n );\n const valArr = valBits.groups.nonWhitespace.split(/[, ]+/);\n const letters = [...'abcdef'];\n */\n const mtx = svgroot.createSVGMatrix();\n Object.values(valArr).forEach(function (item, i) {\n valArr[i] = Number.parseFloat(item);\n if (name === 'matrix') {\n mtx[letters[i]] = valArr[i];\n }\n });\n const xform = svgroot.createSVGTransform();\n const fname = 'set' + name.charAt(0).toUpperCase() + name.slice(1);\n const values = name === 'matrix' ? [mtx] : valArr;\n\n if (name === 'scale' && values.length === 1) {\n values.push(values[0]);\n } else if (name === 'translate' && values.length === 1) {\n values.push(0);\n } else if (name === 'rotate' && values.length === 1) {\n values.push(0, 0);\n }\n xform[fname](...values);\n this._list.appendItem(xform);\n }\n }\n };\n this._removeFromOtherLists = function (item) {\n if (item) {\n // Check if this transform is already in a transformlist, and\n // remove it if so.\n Object.values(listMap_).some((tl) => {\n for (let i = 0, len = tl._xforms.length; i < len; ++i) {\n if (tl._xforms[i] === item) {\n tl.removeItem(i);\n return true;\n }\n }\n return false;\n });\n }\n };\n\n this.numberOfItems = 0;\n }\n /**\n * @returns {void}\n */\n clear () {\n this.numberOfItems = 0;\n this._xforms = [];\n }\n\n /**\n * @param {SVGTransform} newItem\n * @returns {void}\n */\n initialize (newItem) {\n this.numberOfItems = 1;\n this._removeFromOtherLists(newItem);\n this._xforms = [newItem];\n }\n\n /**\n * @param {Integer} index unsigned long\n * @throws {Error}\n * @returns {SVGTransform}\n */\n getItem (index) {\n if (index < this.numberOfItems && index >= 0) {\n return this._xforms[index];\n }\n const err = new Error('DOMException with code=INDEX_SIZE_ERR');\n err.code = 1;\n throw err;\n }\n\n /**\n * @param {SVGTransform} newItem\n * @param {Integer} index unsigned long\n * @returns {SVGTransform}\n */\n insertItemBefore (newItem, index) {\n let retValue = null;\n if (index >= 0) {\n if (index < this.numberOfItems) {\n this._removeFromOtherLists(newItem);\n const newxforms = new Array(this.numberOfItems + 1);\n // TODO: use array copying and slicing\n let i;\n for (i = 0; i < index; ++i) {\n newxforms[i] = this._xforms[i];\n }\n newxforms[i] = newItem;\n for (let j = i + 1; i < this.numberOfItems; ++j, ++i) {\n newxforms[j] = this._xforms[i];\n }\n this.numberOfItems++;\n this._xforms = newxforms;\n retValue = newItem;\n this._list._update();\n } else {\n retValue = this._list.appendItem(newItem);\n }\n }\n return retValue;\n }\n\n /**\n * @param {SVGTransform} newItem\n * @param {Integer} index unsigned long\n * @returns {SVGTransform}\n */\n replaceItem (newItem, index) {\n let retValue = null;\n if (index < this.numberOfItems && index >= 0) {\n this._removeFromOtherLists(newItem);\n this._xforms[index] = newItem;\n retValue = newItem;\n this._list._update();\n }\n return retValue;\n }\n\n /**\n * @param {Integer} index unsigned long\n * @throws {Error}\n * @returns {SVGTransform}\n */\n removeItem (index) {\n if (index < this.numberOfItems && index >= 0) {\n const retValue = this._xforms[index];\n const newxforms = new Array(this.numberOfItems - 1);\n let i;\n for (i = 0; i < index; ++i) {\n newxforms[i] = this._xforms[i];\n }\n for (let j = i; j < this.numberOfItems - 1; ++j, ++i) {\n newxforms[j] = this._xforms[i + 1];\n }\n this.numberOfItems--;\n this._xforms = newxforms;\n this._list._update();\n return retValue;\n }\n const err = new Error('DOMException with code=INDEX_SIZE_ERR');\n err.code = 1;\n throw err;\n }\n\n /**\n * @param {SVGTransform} newItem\n * @returns {SVGTransform}\n */\n appendItem (newItem) {\n this._removeFromOtherLists(newItem);\n this._xforms.push(newItem);\n this.numberOfItems++;\n this._list._update();\n return newItem;\n }\n}\n\n/**\n* @function module:SVGTransformList.resetListMap\n* @returns {void}\n*/\nexport const resetListMap = function () {\n listMap_ = {};\n};\n\n/**\n * Removes transforms of the given element from the map.\n * @function module:SVGTransformList.removeElementFromListMap\n * @param {Element} elem - a DOM Element\n * @returns {void}\n */\nexport let removeElementFromListMap = function (elem) {\n if (elem.id && listMap_[elem.id]) {\n delete listMap_[elem.id];\n }\n};\n\n/**\n* Returns an object that behaves like a `SVGTransformList` for the given DOM element.\n* @function module:SVGTransformList.getTransformList\n* @param {Element} elem - DOM element to get a transformlist from\n* @todo The polyfill should have `SVGAnimatedTransformList` and this should use it\n* @returns {SVGAnimatedTransformList|SVGTransformList}\n*/\nexport const getTransformList = function (elem) {\n if (!supportsNativeTransformLists()) {\n const id = elem.id || 'temp';\n let t = listMap_[id];\n if (!t || id === 'temp') {\n listMap_[id] = new SVGTransformList(elem);\n listMap_[id]._init();\n t = listMap_[id];\n }\n return t;\n }\n if (elem.transform) {\n return elem.transform.baseVal;\n }\n if (elem.gradientTransform) {\n return elem.gradientTransform.baseVal;\n }\n if (elem.patternTransform) {\n return elem.patternTransform.baseVal;\n }\n\n return null;\n};\n\n/**\n* @callback module:SVGTransformList.removeElementFromListMap\n* @param {Element} elem\n* @returns {void}\n*/\n/**\n* Replace `removeElementFromListMap` for unit-testing.\n* @function module:SVGTransformList.changeRemoveElementFromListMap\n* @param {module:SVGTransformList.removeElementFromListMap} cb Passed a single argument `elem`\n* @returns {void}\n*/\n\nexport const changeRemoveElementFromListMap = function (cb) {\n removeElementFromListMap = cb;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduceRight = require('../internals/array-reduce').right;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduceRight');\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\n\n// `Array.prototype.reduceRight` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduceright\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || CHROME_BUG }, {\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduceRight(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","/**\n * Mathematical utilities.\n * @module math\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria, 2010 Jeff Schiller\n */\n\n/**\n* @typedef {PlainObject} module:math.AngleCoord45\n* @property {Float} x - The angle-snapped x value\n* @property {Float} y - The angle-snapped y value\n* @property {Integer} a - The angle at which to snap\n*/\n\n/**\n* @typedef {PlainObject} module:math.XYObject\n* @property {Float} x\n* @property {Float} y\n*/\n\nimport {NS} from '../common/namespaces.js';\nimport {getTransformList} from './svgtransformlist.js';\n\n// Constants\nconst NEAR_ZERO = 1e-14;\n\n// Throw away SVGSVGElement used for creating matrices/transforms.\nconst svg = document.createElementNS(NS.SVG, 'svg');\n\n/**\n * A (hopefully) quicker function to transform a point by a matrix\n * (this function avoids any DOM calls and just does the math).\n * @function module:math.transformPoint\n * @param {Float} x - Float representing the x coordinate\n * @param {Float} y - Float representing the y coordinate\n * @param {SVGMatrix} m - Matrix object to transform the point with\n * @returns {module:math.XYObject} An x, y object representing the transformed point\n*/\nexport const transformPoint = function (x, y, m) {\n return {x: m.a * x + m.c * y + m.e, y: m.b * x + m.d * y + m.f};\n};\n\n/**\n * Helper function to check if the matrix performs no actual transform\n * (i.e. exists for identity purposes).\n * @function module:math.isIdentity\n * @param {SVGMatrix} m - The matrix object to check\n * @returns {boolean} Indicates whether or not the matrix is 1,0,0,1,0,0\n*/\nexport const isIdentity = function (m) {\n return (m.a === 1 && m.b === 0 && m.c === 0 && m.d === 1 && m.e === 0 && m.f === 0);\n};\n\n/**\n * This function tries to return a `SVGMatrix` that is the multiplication `m1 * m2`.\n * We also round to zero when it's near zero.\n * @function module:math.matrixMultiply\n * @param {...SVGMatrix} args - Matrix objects to multiply\n * @returns {SVGMatrix} The matrix object resulting from the calculation\n*/\nexport const matrixMultiply = function (...args) {\n const m = args.reduceRight((prev, m1) => {\n return m1.multiply(prev);\n });\n\n if (Math.abs(m.a) < NEAR_ZERO) { m.a = 0; }\n if (Math.abs(m.b) < NEAR_ZERO) { m.b = 0; }\n if (Math.abs(m.c) < NEAR_ZERO) { m.c = 0; }\n if (Math.abs(m.d) < NEAR_ZERO) { m.d = 0; }\n if (Math.abs(m.e) < NEAR_ZERO) { m.e = 0; }\n if (Math.abs(m.f) < NEAR_ZERO) { m.f = 0; }\n\n return m;\n};\n\n/**\n * See if the given transformlist includes a non-indentity matrix transform.\n * @function module:math.hasMatrixTransform\n * @param {SVGTransformList} [tlist] - The transformlist to check\n * @returns {boolean} Whether or not a matrix transform was found\n*/\nexport const hasMatrixTransform = function (tlist) {\n if (!tlist) { return false; }\n let num = tlist.numberOfItems;\n while (num--) {\n const xform = tlist.getItem(num);\n if (xform.type === 1 && !isIdentity(xform.matrix)) { return true; }\n }\n return false;\n};\n\n/**\n* @typedef {PlainObject} module:math.TransformedBox An object with the following values\n* @property {module:math.XYObject} tl - The top left coordinate\n* @property {module:math.XYObject} tr - The top right coordinate\n* @property {module:math.XYObject} bl - The bottom left coordinate\n* @property {module:math.XYObject} br - The bottom right coordinate\n* @property {PlainObject} aabox - Object with the following values:\n* @property {Float} aabox.x - Float with the axis-aligned x coordinate\n* @property {Float} aabox.y - Float with the axis-aligned y coordinate\n* @property {Float} aabox.width - Float with the axis-aligned width coordinate\n* @property {Float} aabox.height - Float with the axis-aligned height coordinate\n*/\n\n/**\n * Transforms a rectangle based on the given matrix.\n * @function module:math.transformBox\n * @param {Float} l - Float with the box's left coordinate\n * @param {Float} t - Float with the box's top coordinate\n * @param {Float} w - Float with the box width\n * @param {Float} h - Float with the box height\n * @param {SVGMatrix} m - Matrix object to transform the box by\n * @returns {module:math.TransformedBox}\n*/\nexport const transformBox = function (l, t, w, h, m) {\n const tl = transformPoint(l, t, m),\n tr = transformPoint((l + w), t, m),\n bl = transformPoint(l, (t + h), m),\n br = transformPoint((l + w), (t + h), m),\n\n minx = Math.min(tl.x, tr.x, bl.x, br.x),\n maxx = Math.max(tl.x, tr.x, bl.x, br.x),\n miny = Math.min(tl.y, tr.y, bl.y, br.y),\n maxy = Math.max(tl.y, tr.y, bl.y, br.y);\n\n return {\n tl,\n tr,\n bl,\n br,\n aabox: {\n x: minx,\n y: miny,\n width: (maxx - minx),\n height: (maxy - miny)\n }\n };\n};\n\n/**\n * This returns a single matrix Transform for a given Transform List\n * (this is the equivalent of `SVGTransformList.consolidate()` but unlike\n * that method, this one does not modify the actual `SVGTransformList`).\n * This function is very liberal with its `min`, `max` arguments.\n * @function module:math.transformListToTransform\n * @param {SVGTransformList} tlist - The transformlist object\n * @param {Integer} [min=0] - Optional integer indicating start transform position\n * @param {Integer} [max] - Optional integer indicating end transform position;\n * defaults to one less than the tlist's `numberOfItems`\n * @returns {SVGTransform} A single matrix transform object\n*/\nexport const transformListToTransform = function (tlist, min, max) {\n if (!tlist) {\n // Or should tlist = null have been prevented before this?\n return svg.createSVGTransformFromMatrix(svg.createSVGMatrix());\n }\n min = min || 0;\n max = max || (tlist.numberOfItems - 1);\n min = Number.parseInt(min);\n max = Number.parseInt(max);\n if (min > max) { const temp = max; max = min; min = temp; }\n let m = svg.createSVGMatrix();\n for (let i = min; i <= max; ++i) {\n // if our indices are out of range, just use a harmless identity matrix\n const mtom = (i >= 0 && i < tlist.numberOfItems\n ? tlist.getItem(i).matrix\n : svg.createSVGMatrix());\n m = matrixMultiply(m, mtom);\n }\n return svg.createSVGTransformFromMatrix(m);\n};\n\n/**\n * Get the matrix object for a given element.\n * @function module:math.getMatrix\n * @param {Element} elem - The DOM element to check\n * @returns {SVGMatrix} The matrix object associated with the element's transformlist\n*/\nexport const getMatrix = function (elem) {\n const tlist = getTransformList(elem);\n return transformListToTransform(tlist).matrix;\n};\n\n/**\n * Returns a 45 degree angle coordinate associated with the two given\n * coordinates.\n * @function module:math.snapToAngle\n * @param {Integer} x1 - First coordinate's x value\n * @param {Integer} y1 - First coordinate's y value\n * @param {Integer} x2 - Second coordinate's x value\n * @param {Integer} y2 - Second coordinate's y value\n * @returns {module:math.AngleCoord45}\n*/\nexport const snapToAngle = function (x1, y1, x2, y2) {\n const snap = Math.PI / 4; // 45 degrees\n const dx = x2 - x1;\n const dy = y2 - y1;\n const angle = Math.atan2(dy, dx);\n const dist = Math.sqrt(dx * dx + dy * dy);\n const snapangle = Math.round(angle / snap) * snap;\n\n return {\n x: x1 + dist * Math.cos(snapangle),\n y: y1 + dist * Math.sin(snapangle),\n a: snapangle\n };\n};\n\n/**\n * Check if two rectangles (BBoxes objects) intersect each other.\n * @function module:math.rectsIntersect\n * @param {SVGRect} r1 - The first BBox-like object\n * @param {SVGRect} r2 - The second BBox-like object\n * @returns {boolean} True if rectangles intersect\n */\nexport const rectsIntersect = function (r1, r2) {\n return r2.x < (r1.x + r1.width) &&\n (r2.x + r2.width) > r1.x &&\n r2.y < (r1.y + r1.height) &&\n (r2.y + r2.height) > r1.y;\n};\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar isPrototypeOf = ObjectPrototype.isPrototypeOf;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME;\n\nvar TypedArrayConstructorsList = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n BigInt64Array: 8,\n BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return klass === 'DataView'\n || has(TypedArrayConstructorsList, klass)\n || has(BigIntArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function (it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return has(TypedArrayConstructorsList, klass)\n || has(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n if (isTypedArray(it)) return it;\n throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n if (setPrototypeOf) {\n if (isPrototypeOf.call(TypedArray, C)) return C;\n } else for (var ARRAY in TypedArrayConstructorsList) if (has(TypedArrayConstructorsList, NAME)) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (C === TypedArrayConstructor || isPrototypeOf.call(TypedArrayConstructor, C))) {\n return C;\n }\n } throw TypeError('Target is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && has(TypedArrayConstructor.prototype, KEY)) {\n delete TypedArrayConstructor.prototype[KEY];\n }\n }\n if (!TypedArrayPrototype[KEY] || forced) {\n redefine(TypedArrayPrototype, KEY, forced ? property\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && has(TypedArrayConstructor, KEY)) {\n delete TypedArrayConstructor[KEY];\n }\n }\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8Array[KEY] || property);\n } catch (error) { /* empty */ }\n } else return;\n }\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n redefine(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n if (!global[NAME]) NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || typeof TypedArray != 'function' || TypedArray === Function.prototype) {\n // eslint-disable-next-line no-shadow -- safe\n TypedArray = function TypedArray() {\n throw TypeError('Incorrect invocation');\n };\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n TypedArrayPrototype = TypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !has(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQIRED = true;\n defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n } });\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n}\n\nmodule.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n","module.exports = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';\n","/* eslint-disable no-new -- required for testing */\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar NATIVE_ARRAY_BUFFER_VIEWS = require('../internals/array-buffer-view-core').NATIVE_ARRAY_BUFFER_VIEWS;\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n Int8Array(1);\n}) || !fails(function () {\n new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n new Int8Array();\n new Int8Array(null);\n new Int8Array(1.5);\n new Int8Array(iterable);\n}, true) || fails(function () {\n // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n","var toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length or index');\n return length;\n};\n","// IEEE754 conversions based on https://github.com/feross/ieee754\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n var buffer = new Array(bytes);\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n var index = 0;\n var exponent, mantissa, c;\n number = abs(number);\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number || number === Infinity) {\n // eslint-disable-next-line no-self-compare -- NaN check\n mantissa = number != number ? 1 : 0;\n exponent = eMax;\n } else {\n exponent = floor(log(number) / LN2);\n if (number * (c = pow(2, -exponent)) < 1) {\n exponent--;\n c *= 2;\n }\n if (exponent + eBias >= 1) {\n number += rt / c;\n } else {\n number += rt * pow(2, 1 - eBias);\n }\n if (number * c >= 2) {\n exponent++;\n c /= 2;\n }\n if (exponent + eBias >= eMax) {\n mantissa = 0;\n exponent = eMax;\n } else if (exponent + eBias >= 1) {\n mantissa = (number * c - 1) * pow(2, mantissaLength);\n exponent = exponent + eBias;\n } else {\n mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n exponent = 0;\n }\n }\n for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);\n exponent = exponent << mantissaLength | mantissa;\n exponentLength += mantissaLength;\n for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);\n buffer[--index] |= sign * 128;\n return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n var bytes = buffer.length;\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var nBits = exponentLength - 7;\n var index = bytes - 1;\n var sign = buffer[index--];\n var exponent = sign & 127;\n var mantissa;\n sign >>= 7;\n for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);\n mantissa = exponent & (1 << -nBits) - 1;\n exponent >>= -nBits;\n nBits += mantissaLength;\n for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);\n if (exponent === 0) {\n exponent = 1 - eBias;\n } else if (exponent === eMax) {\n return mantissa ? NaN : sign ? -Infinity : Infinity;\n } else {\n mantissa = mantissa + pow(2, mantissaLength);\n exponent = exponent - eBias;\n } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n pack: pack,\n unpack: unpack\n};\n","'use strict';\nvar global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefineAll = require('../internals/redefine-all');\nvar fails = require('../internals/fails');\nvar anInstance = require('../internals/an-instance');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar IEEE754 = require('../internals/ieee754');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar arrayFill = require('../internals/array-fill');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar $DataView = global[DATA_VIEW];\nvar $DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar RangeError = global.RangeError;\n\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function (number) {\n return [number & 0xFF];\n};\n\nvar packInt16 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function (buffer) {\n return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function (number) {\n return packIEEE754(number, 23, 4);\n};\n\nvar packFloat64 = function (number) {\n return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function (Constructor, key) {\n defineProperty(Constructor[PROTOTYPE], key, { get: function () { return getInternalState(this)[key]; } });\n};\n\nvar get = function (view, count, index, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = bytes.slice(start, start + count);\n return isLittleEndian ? pack : pack.reverse();\n};\n\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = conversion(+value);\n for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n setInternalState(this, {\n bytes: arrayFill.call(new Array(byteLength), 0),\n byteLength: byteLength\n });\n if (!DESCRIPTORS) this.byteLength = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = getInternalState(buffer).byteLength;\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n setInternalState(this, {\n buffer: buffer,\n byteLength: byteLength,\n byteOffset: offset\n });\n if (!DESCRIPTORS) {\n this.buffer = buffer;\n this.byteLength = byteLength;\n this.byteOffset = offset;\n }\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, 'byteLength');\n addGetter($DataView, 'buffer');\n addGetter($DataView, 'byteLength');\n addGetter($DataView, 'byteOffset');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n }\n });\n} else {\n /* eslint-disable no-new -- required for testing */\n if (!fails(function () {\n NativeArrayBuffer(1);\n }) || !fails(function () {\n new NativeArrayBuffer(-1);\n }) || fails(function () {\n new NativeArrayBuffer();\n new NativeArrayBuffer(1.5);\n new NativeArrayBuffer(NaN);\n return NativeArrayBuffer.name != ARRAY_BUFFER;\n })) {\n /* eslint-enable no-new -- required for testing */\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new NativeArrayBuffer(toIndex(length));\n };\n var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE] = NativeArrayBuffer[PROTOTYPE];\n for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) {\n createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n }\n }\n ArrayBufferPrototype.constructor = $ArrayBuffer;\n }\n\n // WebKit bug - the same parent prototype for typed arrays and data view\n if (setPrototypeOf && getPrototypeOf($DataViewPrototype) !== ObjectPrototype) {\n setPrototypeOf($DataViewPrototype, ObjectPrototype);\n }\n\n // iOS Safari 7.x bug\n var testView = new $DataView(new $ArrayBuffer(2));\n var nativeSetInt8 = $DataViewPrototype.setInt8;\n testView.setInt8(0, 2147483648);\n testView.setInt8(1, 2147483649);\n if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll($DataViewPrototype, {\n setInt8: function setInt8(byteOffset, value) {\n nativeSetInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n nativeSetInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, { unsafe: true });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\n\nmodule.exports = {\n ArrayBuffer: $ArrayBuffer,\n DataView: $DataView\n};\n","var toPositiveInteger = require('../internals/to-positive-integer');\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw RangeError('Wrong offset');\n return offset;\n};\n","var toInteger = require('../internals/to-integer');\n\nmodule.exports = function (it) {\n var result = toInteger(it);\n if (result < 0) throw RangeError(\"The argument can't be less than 0\");\n return result;\n};\n","var toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar bind = require('../internals/function-bind-context');\nvar aTypedArrayConstructor = require('../internals/array-buffer-view-core').aTypedArrayConstructor;\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var i, length, result, step, iterator, next;\n if (iteratorMethod != undefined && !isArrayIteratorMethod(iteratorMethod)) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n O = [];\n while (!(step = next.call(iterator)).done) {\n O.push(step.value);\n }\n }\n if (mapping && argumentsLength > 2) {\n mapfn = bind(mapfn, arguments[2], 2);\n }\n length = toLength(O.length);\n result = new (aTypedArrayConstructor(this))(length);\n for (i = 0; length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar anInstance = require('../internals/an-instance');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar toOffset = require('../internals/to-offset');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar typedArrayFrom = require('../internals/typed-array-from');\nvar forEach = require('../internals/array-iteration').forEach;\nvar setSpecies = require('../internals/set-species');\nvar definePropertyModule = require('../internals/object-define-property');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar InternalStateModule = require('../internals/internal-state');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = new (aTypedArrayConstructor(C))(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n\nvar addGetter = function (it, key) {\n nativeDefineProperty(it, key, { get: function () {\n return getInternalState(this)[key];\n } });\n};\n\nvar isArrayBuffer = function (it) {\n var klass;\n return it instanceof ArrayBuffer || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n return isTypedArray(target)\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n return isTypedArrayIndex(target, key = toPrimitive(key, true))\n ? createPropertyDescriptor(2, target[key])\n : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n if (isTypedArrayIndex(target, key = toPrimitive(key, true))\n && isObject(descriptor)\n && has(descriptor, 'value')\n && !has(descriptor, 'get')\n && !has(descriptor, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !descriptor.configurable\n && (!has(descriptor, 'writable') || descriptor.writable)\n && (!has(descriptor, 'enumerable') || descriptor.enumerable)\n ) {\n target[key] = descriptor.value;\n return target;\n } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n definePropertyModule.f = wrappedDefineProperty;\n addGetter(TypedArrayPrototype, 'buffer');\n addGetter(TypedArrayPrototype, 'byteOffset');\n addGetter(TypedArrayPrototype, 'byteLength');\n addGetter(TypedArrayPrototype, 'length');\n }\n\n $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n defineProperty: wrappedDefineProperty\n });\n\n module.exports = function (TYPE, wrapper, CLAMPED) {\n var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + TYPE;\n var SETTER = 'set' + TYPE;\n var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n var TypedArrayConstructor = NativeTypedArrayConstructor;\n var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n var exported = {};\n\n var getter = function (that, index) {\n var data = getInternalState(that);\n return data.view[GETTER](index * BYTES + data.byteOffset, true);\n };\n\n var setter = function (that, index, value) {\n var data = getInternalState(that);\n if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n };\n\n var addElement = function (that, index) {\n nativeDefineProperty(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n anInstance(that, TypedArrayConstructor, CONSTRUCTOR_NAME);\n var index = 0;\n var byteOffset = 0;\n var buffer, byteLength, length;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new ArrayBuffer(byteLength);\n } else if (isArrayBuffer(data)) {\n buffer = data;\n byteOffset = toOffset(offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - byteOffset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (isTypedArray(data)) {\n return fromList(TypedArrayConstructor, data);\n } else {\n return typedArrayFrom.call(TypedArrayConstructor, data);\n }\n setInternalState(that, {\n buffer: buffer,\n byteOffset: byteOffset,\n byteLength: byteLength,\n length: length,\n view: new DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n anInstance(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME);\n return inheritIfRequired(function () {\n if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n if (isArrayBuffer(data)) return $length !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n : typedArrayOffset !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n : new NativeTypedArrayConstructor(data);\n if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n return typedArrayFrom.call(TypedArrayConstructor, data);\n }(), dummy, TypedArrayConstructor);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n if (!(key in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n }\n });\n TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n }\n\n if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n }\n\n if (TYPED_ARRAY_TAG) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n }\n\n exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n $({\n global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS\n }, exported);\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n }\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n }\n\n setSpecies(CONSTRUCTOR_NAME);\n };\n} else module.exports = function () { /* empty */ };\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $copyWithin = require('../internals/array-copy-within');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n return $copyWithin.call(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $every = require('../internals/array-iteration').every;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $fill = require('../internals/array-fill');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n return $fill.apply(aTypedArray(this), arguments);\n});\n","var aTypedArrayConstructor = require('../internals/array-buffer-view-core').aTypedArrayConstructor;\nvar speciesConstructor = require('../internals/species-constructor');\n\nmodule.exports = function (instance, list) {\n var C = speciesConstructor(instance, instance.constructor);\n var index = 0;\n var length = list.length;\n var result = new (aTypedArrayConstructor(C))(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $filter = require('../internals/array-iteration').filter;\nvar fromSpeciesAndList = require('../internals/typed-array-from-species-and-list');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return fromSpeciesAndList(this, list);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $find = require('../internals/array-iteration').find;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findIndex = require('../internals/array-iteration').findIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $includes = require('../internals/array-includes').includes;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $indexOf = require('../internals/array-includes').indexOf;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar global = require('../internals/global');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayIterators = require('../modules/es.array.iterator');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = ArrayIterators.values;\nvar arrayKeys = ArrayIterators.keys;\nvar arrayEntries = ArrayIterators.entries;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar nativeTypedArrayIterator = Uint8Array && Uint8Array.prototype[ITERATOR];\n\nvar CORRECT_ITER_NAME = !!nativeTypedArrayIterator\n && (nativeTypedArrayIterator.name == 'values' || nativeTypedArrayIterator.name == undefined);\n\nvar typedArrayValues = function values() {\n return arrayValues.call(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n return arrayEntries.call(aTypedArray(this));\n});\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n return arrayKeys.call(aTypedArray(this));\n});\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, !CORRECT_ITER_NAME);\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, !CORRECT_ITER_NAME);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = [].join;\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nexportTypedArrayMethod('join', function join(separator) {\n return $join.apply(aTypedArray(this), arguments);\n});\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar min = Math.min;\nvar nativeLastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!nativeLastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return nativeLastIndexOf.apply(this, arguments) || 0;\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n return -1;\n} : nativeLastIndexOf;\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $lastIndexOf = require('../internals/array-last-index-of');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n return $lastIndexOf.apply(aTypedArray(this), arguments);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $map = require('../internals/array-iteration').map;\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n return new (aTypedArrayConstructor(speciesConstructor(O, O.constructor)))(length);\n });\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduce = require('../internals/array-reduce').left;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n return $reduce(aTypedArray(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduceRight = require('../internals/array-reduce').right;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRicht` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n return $reduceRight(aTypedArray(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n var that = this;\n var length = aTypedArray(that).length;\n var middle = floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar toLength = require('../internals/to-length');\nvar toOffset = require('../internals/to-offset');\nvar toObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n /* global Int8Array -- safe */\n new Int8Array(1).set({});\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError('Wrong length');\n while (index < len) this[offset + index] = src[index++];\n}, FORCED);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar speciesConstructor = require('../internals/species-constructor');\nvar fails = require('../internals/fails');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $slice = [].slice;\n\nvar FORCED = fails(function () {\n /* global Int8Array -- safe */\n new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n var list = $slice.call(aTypedArray(this), start, end);\n var C = speciesConstructor(this, this.constructor);\n var index = 0;\n var length = list.length;\n var result = new (aTypedArrayConstructor(C))(length);\n while (length > index) result[index] = list[index++];\n return result;\n}, FORCED);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $some = require('../internals/array-iteration').some;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $sort = [].sort;\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n return $sort.call(aTypedArray(this), comparefn);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n var O = aTypedArray(this);\n var length = O.length;\n var beginIndex = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O.constructor))(\n O.buffer,\n O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n );\n});\n","'use strict';\nvar global = require('../internals/global');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar fails = require('../internals/fails');\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\nvar $slice = [].slice;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n return $toLocaleString.apply(TO_LOCALE_STRING_BUG ? $slice.call(aTypedArray(this)) : aTypedArray(this), arguments);\n}, FORCED);\n","'use strict';\nvar exportTypedArrayMethod = require('../internals/array-buffer-view-core').exportTypedArrayMethod;\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar arrayJoin = [].join;\n\nif (fails(function () { arrayToString.call({}); })) {\n arrayToString = function toString() {\n return arrayJoin.call(this);\n };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar anObject = require('../internals/an-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar DataView = ArrayBufferModule.DataView;\nvar nativeArrayBufferSlice = ArrayBuffer.prototype.slice;\n\nvar INCORRECT_SLICE = fails(function () {\n return !new ArrayBuffer(2).slice(1, undefined).byteLength;\n});\n\n// `ArrayBuffer.prototype.slice` method\n// https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice\n$({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, {\n slice: function slice(start, end) {\n if (nativeArrayBufferSlice !== undefined && end === undefined) {\n return nativeArrayBufferSlice.call(anObject(this), start); // FF fix\n }\n var length = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = new (speciesConstructor(this, ArrayBuffer))(toLength(fin - first));\n var viewSource = new DataView(this);\n var viewTarget = new DataView(result);\n var index = 0;\n while (first < fin) {\n viewTarget.setUint8(index++, viewSource.getUint8(first++));\n } return result;\n }\n});\n","/* globals jQuery */\n/**\n * Miscellaneous utilities.\n * @module utilities\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria, 2010 Jeff Schiller\n */\n\nimport jQueryPluginSVG from './jQuery.attr.js'; // Needed for SVG attribute setting and array form with `attr`\nimport {NS} from '../common/namespaces.js';\nimport {getTransformList} from './svgtransformlist.js';\nimport {setUnitAttr, getTypeMap} from '../common/units.js';\nimport {\n hasMatrixTransform, transformListToTransform, transformBox\n} from './math.js';\nimport {\n isWebkit, supportsHVLineContainerBBox, supportsPathBBox, supportsXpath,\n supportsSelectors\n} from '../common/browser.js';\n\n// Constants\nconst $ = jQueryPluginSVG(jQuery);\n\n// String used to encode base64.\nconst KEYSTR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n// Much faster than running getBBox() every time\nconst visElems = 'a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use,clipPath';\nconst visElemsArr = visElems.split(',');\n// const hidElems = 'defs,desc,feGaussianBlur,filter,linearGradient,marker,mask,metadata,pattern,radialGradient,stop,switch,symbol,title,textPath';\n\nlet editorContext_ = null;\nlet domdoc_ = null;\nlet domcontainer_ = null;\nlet svgroot_ = null;\n\n/**\n* Object with the following keys/values.\n* @typedef {PlainObject} module:utilities.SVGElementJSON\n* @property {string} element - Tag name of the SVG element to create\n* @property {PlainObject<string, string>} attr - Has key-value attributes to assign to the new element. An `id` should be set so that {@link module:utilities.EditorContext#addSVGElementFromJson} can later re-identify the element for modification or replacement.\n* @property {boolean} [curStyles=false] - Indicates whether current style attributes should be applied first\n* @property {module:utilities.SVGElementJSON[]} [children] - Data objects to be added recursively as children\n* @property {string} [namespace=\"http://www.w3.org/2000/svg\"] - Indicate a (non-SVG) namespace\n*/\n\n/**\n * An object that creates SVG elements for the canvas.\n *\n * @interface module:utilities.EditorContext\n * @property {module:path.pathActions} pathActions\n */\n/**\n * @function module:utilities.EditorContext#getSVGContent\n * @returns {SVGSVGElement}\n */\n/**\n * Create a new SVG element based on the given object keys/values and add it\n * to the current layer.\n * The element will be run through `cleanupElement` before being returned.\n * @function module:utilities.EditorContext#addSVGElementFromJson\n * @param {module:utilities.SVGElementJSON} data\n * @returns {Element} The new element\n*/\n/**\n * @function module:utilities.EditorContext#getSelectedElements\n * @returns {Element[]} the array with selected DOM elements\n*/\n/**\n * @function module:utilities.EditorContext#getDOMDocument\n * @returns {HTMLDocument}\n*/\n/**\n * @function module:utilities.EditorContext#getDOMContainer\n * @returns {HTMLElement}\n*/\n/**\n * @function module:utilities.EditorContext#getSVGRoot\n * @returns {SVGSVGElement}\n*/\n/**\n * @function module:utilities.EditorContext#getBaseUnit\n * @returns {string}\n*/\n/**\n * @function module:utilities.EditorContext#getSnappingStep\n * @returns {Float|string}\n*/\n\n/**\n* @function module:utilities.init\n* @param {module:utilities.EditorContext} editorContext\n* @returns {void}\n*/\nexport const init = function (editorContext) {\n editorContext_ = editorContext;\n domdoc_ = editorContext.getDOMDocument();\n domcontainer_ = editorContext.getDOMContainer();\n svgroot_ = editorContext.getSVGRoot();\n};\n\n/**\n * Used to prevent the [Billion laughs attack]{@link https://en.wikipedia.org/wiki/Billion_laughs_attack}.\n * @function module:utilities.dropXMLInternalSubset\n * @param {string} str String to be processed\n * @returns {string} The string with entity declarations in the internal subset removed\n * @todo This might be needed in other places `parseFromString` is used even without LGTM flagging\n */\nexport const dropXMLInternalSubset = (str) => {\n return str.replace(/(<!DOCTYPE\\s+\\w*\\s*\\[).*(\\?]>)/, '$1$2');\n // return str.replace(/(?<doctypeOpen><!DOCTYPE\\s+\\w*\\s*\\[).*(?<doctypeClose>\\?\\]>)/, '$<doctypeOpen>$<doctypeClose>');\n};\n\n/**\n* Converts characters in a string to XML-friendly entities.\n* @function module:utilities.toXml\n* @example `&` becomes `&amp;`\n* @param {string} str - The string to be converted\n* @returns {string} The converted string\n*/\nexport const toXml = function (str) {\n // &apos; is ok in XML, but not HTML\n // &gt; does not normally need escaping, though it can if within a CDATA expression (and preceded by \"]]\")\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#x27;'); // Note: `&apos;` is XML only\n};\n\n/**\n* Converts XML entities in a string to single characters.\n* @function module:utilities.fromXml\n* @example `&amp;` becomes `&`\n* @param {string} str - The string to be converted\n* @returns {string} The converted string\n*/\nexport function fromXml (str) {\n return $('<p/>').html(str).text();\n}\n\n// This code was written by Tyler Akins and has been placed in the\n// public domain. It would be nice if you left this header intact.\n// Base64 code from Tyler Akins -- http://rumkin.com\n\n// schiller: Removed string concatenation in favour of Array.join() optimization,\n// also precalculate the size of the array needed.\n\n/**\n* Converts a string to base64.\n* @function module:utilities.encode64\n* @param {string} input\n* @returns {string} Base64 output\n*/\nexport function encode64 (input) {\n // base64 strings are 4/3 larger than the original string\n input = encodeUTF8(input); // convert non-ASCII characters\n // input = convertToXMLReferences(input);\n if (window.btoa) {\n return window.btoa(input); // Use native if available\n }\n const output = new Array(Math.floor((input.length + 2) / 3) * 4);\n\n let i = 0,\n p = 0;\n do {\n const chr1 = input.charCodeAt(i++);\n const chr2 = input.charCodeAt(i++);\n const chr3 = input.charCodeAt(i++);\n\n /* eslint-disable no-bitwise */\n const enc1 = chr1 >> 2;\n const enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n\n let enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n let enc4 = chr3 & 63;\n /* eslint-enable no-bitwise */\n\n if (Number.isNaN(chr2)) {\n enc3 = 64;\n enc4 = 64;\n } else if (Number.isNaN(chr3)) {\n enc4 = 64;\n }\n\n output[p++] = KEYSTR.charAt(enc1);\n output[p++] = KEYSTR.charAt(enc2);\n output[p++] = KEYSTR.charAt(enc3);\n output[p++] = KEYSTR.charAt(enc4);\n } while (i < input.length);\n\n return output.join('');\n}\n\n/**\n* Converts a string from base64.\n* @function module:utilities.decode64\n* @param {string} input Base64-encoded input\n* @returns {string} Decoded output\n*/\nexport function decode64 (input) {\n if (window.atob) {\n return decodeUTF8(window.atob(input));\n }\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n input = input.replace(/[^A-Za-z\\d+/=]/g, '');\n\n let output = '';\n let i = 0;\n\n do {\n const enc1 = KEYSTR.indexOf(input.charAt(i++));\n const enc2 = KEYSTR.indexOf(input.charAt(i++));\n const enc3 = KEYSTR.indexOf(input.charAt(i++));\n const enc4 = KEYSTR.indexOf(input.charAt(i++));\n\n /* eslint-disable no-bitwise */\n const chr1 = (enc1 << 2) | (enc2 >> 4);\n const chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n const chr3 = ((enc3 & 3) << 6) | enc4;\n /* eslint-enable no-bitwise */\n\n output += String.fromCharCode(chr1);\n\n if (enc3 !== 64) {\n output += String.fromCharCode(chr2);\n }\n if (enc4 !== 64) {\n output += String.fromCharCode(chr3);\n }\n } while (i < input.length);\n return decodeUTF8(output);\n}\n\n/**\n* @function module:utilities.decodeUTF8\n* @param {string} argString\n* @returns {string}\n*/\nexport function decodeUTF8 (argString) {\n return decodeURIComponent(escape(argString));\n}\n\n// codedread:does not seem to work with webkit-based browsers on OSX // Brettz9: please test again as function upgraded\n/**\n* @function module:utilities.encodeUTF8\n* @param {string} argString\n* @returns {string}\n*/\nexport const encodeUTF8 = function (argString) {\n return unescape(encodeURIComponent(argString));\n};\n\n/**\n * Convert dataURL to object URL.\n * @function module:utilities.dataURLToObjectURL\n * @param {string} dataurl\n * @returns {string} object URL or empty string\n */\nexport const dataURLToObjectURL = function (dataurl) {\n if (typeof Uint8Array === 'undefined' || typeof Blob === 'undefined' || typeof URL === 'undefined' || !URL.createObjectURL) {\n return '';\n }\n const arr = dataurl.split(','),\n mime = arr[0].match(/:(.*?);/)[1],\n bstr = atob(arr[1]);\n /*\n const [prefix, suffix] = dataurl.split(','),\n {groups: {mime}} = prefix.match(/:(?<mime>.*?);/),\n bstr = atob(suffix);\n */\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n const blob = new Blob([u8arr], {type: mime});\n return URL.createObjectURL(blob);\n};\n\n/**\n * Get object URL for a blob object.\n * @function module:utilities.createObjectURL\n * @param {Blob} blob A Blob object or File object\n * @returns {string} object URL or empty string\n */\nexport const createObjectURL = function (blob) {\n if (!blob || typeof URL === 'undefined' || !URL.createObjectURL) {\n return '';\n }\n return URL.createObjectURL(blob);\n};\n\n/**\n * @property {string} blankPageObjectURL\n */\nexport const blankPageObjectURL = (function () {\n if (typeof Blob === 'undefined') {\n return '';\n }\n const blob = new Blob(['<html><head><title>SVG-edit</title></head><body>&nbsp;</body></html>'], {type: 'text/html'});\n return createObjectURL(blob);\n})();\n\n/**\n* Converts a string to use XML references (for non-ASCII).\n* @function module:utilities.convertToXMLReferences\n* @param {string} input\n* @returns {string} Decimal numeric character references\n*/\nexport const convertToXMLReferences = function (input) {\n let output = '';\n [...input].forEach((ch) => {\n const c = ch.charCodeAt();\n output += (c <= 127) ? ch : `&#${c};`;\n });\n return output;\n};\n\n/**\n* Cross-browser compatible method of converting a string to an XML tree.\n* Found this function [here]{@link http://groups.google.com/group/jquery-dev/browse_thread/thread/c6d11387c580a77f}.\n* @function module:utilities.text2xml\n* @param {string} sXML\n* @throws {Error}\n* @returns {XMLDocument}\n*/\nexport const text2xml = function (sXML) {\n if (sXML.includes('<svg:svg')) {\n sXML = sXML.replace(/<(\\/?)svg:/g, '<$1').replace('xmlns:svg', 'xmlns');\n }\n\n let out, dXML;\n try {\n dXML = (window.DOMParser) ? new DOMParser() : new window.ActiveXObject('Microsoft.XMLDOM');\n dXML.async = false;\n } catch (e) {\n throw new Error('XML Parser could not be instantiated');\n }\n try {\n if (dXML.loadXML) {\n out = (dXML.loadXML(sXML)) ? dXML : false;\n } else {\n out = dXML.parseFromString(sXML, 'text/xml');\n }\n } catch (e2) { throw new Error('Error parsing XML string'); }\n return out;\n};\n\n/**\n* @typedef {PlainObject} module:utilities.BBoxObject (like `DOMRect`)\n* @property {Float} x\n* @property {Float} y\n* @property {Float} width\n* @property {Float} height\n*/\n\n/**\n* Converts a `SVGRect` into an object.\n* @function module:utilities.bboxToObj\n* @param {SVGRect} bbox - a SVGRect\n* @returns {module:utilities.BBoxObject} An object with properties names x, y, width, height.\n*/\nexport const bboxToObj = function ({x, y, width, height}) {\n return {x, y, width, height};\n};\n\n/**\n* @callback module:utilities.TreeWalker\n* @param {Element} elem - DOM element being traversed\n* @returns {void}\n*/\n\n/**\n* Walks the tree and executes the callback on each element in a top-down fashion.\n* @function module:utilities.walkTree\n* @param {Element} elem - DOM element to traverse\n* @param {module:utilities.TreeWalker} cbFn - Callback function to run on each element\n* @returns {void}\n*/\nexport const walkTree = function (elem, cbFn) {\n if (elem && elem.nodeType === 1) {\n cbFn(elem);\n let i = elem.childNodes.length;\n while (i--) {\n walkTree(elem.childNodes.item(i), cbFn);\n }\n }\n};\n\n/**\n* Walks the tree and executes the callback on each element in a depth-first fashion.\n* @function module:utilities.walkTreePost\n* @todo Shouldn't this be calling walkTreePost?\n* @param {Element} elem - DOM element to traverse\n* @param {module:utilities.TreeWalker} cbFn - Callback function to run on each element\n* @returns {void}\n*/\nexport const walkTreePost = function (elem, cbFn) {\n if (elem && elem.nodeType === 1) {\n let i = elem.childNodes.length;\n while (i--) {\n walkTree(elem.childNodes.item(i), cbFn);\n }\n cbFn(elem);\n }\n};\n\n/**\n* Extracts the URL from the `url(...)` syntax of some attributes.\n* Three variants:\n* - `<circle fill=\"url(someFile.svg#foo)\" />`\n* - `<circle fill=\"url('someFile.svg#foo')\" />`\n* - `<circle fill='url(\"someFile.svg#foo\")' />`\n* @function module:utilities.getUrlFromAttr\n* @param {string} attrVal The attribute value as a string\n* @returns {string} String with just the URL, like \"someFile.svg#foo\"\n*/\nexport const getUrlFromAttr = function (attrVal) {\n if (attrVal) {\n // url('#somegrad')\n if (attrVal.startsWith('url(\"')) {\n return attrVal.substring(5, attrVal.indexOf('\"', 6));\n }\n // url('#somegrad')\n if (attrVal.startsWith(\"url('\")) {\n return attrVal.substring(5, attrVal.indexOf(\"'\", 6));\n }\n if (attrVal.startsWith('url(')) {\n return attrVal.substring(4, attrVal.indexOf(')'));\n }\n }\n return null;\n};\n\n/**\n* @function module:utilities.getHref\n* @param {Element} elem\n* @returns {string} The given element's `xlink:href` value\n*/\nexport let getHref = function (elem) {\n return elem.getAttributeNS(NS.XLINK, 'href');\n};\n\n/**\n* Sets the given element's `xlink:href` value.\n* @function module:utilities.setHref\n* @param {Element} elem\n* @param {string} val\n* @returns {void}\n*/\nexport let setHref = function (elem, val) {\n elem.setAttributeNS(NS.XLINK, 'xlink:href', val);\n};\n\n/**\n* @function module:utilities.findDefs\n* @returns {SVGDefsElement} The document's `<defs>` element, creating it first if necessary\n*/\nexport const findDefs = function () {\n const svgElement = editorContext_.getSVGContent();\n let defs = svgElement.getElementsByTagNameNS(NS.SVG, 'defs');\n if (defs.length > 0) {\n defs = defs[0];\n } else {\n defs = svgElement.ownerDocument.createElementNS(NS.SVG, 'defs');\n if (svgElement.firstChild) {\n // first child is a comment, so call nextSibling\n svgElement.insertBefore(defs, svgElement.firstChild.nextSibling);\n // svgElement.firstChild.nextSibling.before(defs); // Not safe\n } else {\n svgElement.append(defs);\n }\n }\n return defs;\n};\n\n// TODO(codedread): Consider moving the next to functions to bbox.js\n\n/**\n* Get correct BBox for a path in Webkit.\n* Converted from code found [here]{@link http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html}.\n* @function module:utilities.getPathBBox\n* @param {SVGPathElement} path - The path DOM element to get the BBox for\n* @returns {module:utilities.BBoxObject} A BBox-like object\n*/\nexport const getPathBBox = function (path) {\n const seglist = path.pathSegList;\n const tot = seglist.numberOfItems;\n\n const bounds = [[], []];\n const start = seglist.getItem(0);\n let P0 = [start.x, start.y];\n\n const getCalc = function (j, P1, P2, P3) {\n return function (t) {\n return 1 - t ** 3 * P0[j] +\n 3 * 1 - t ** 2 * t * P1[j] +\n 3 * (1 - t) * t ** 2 * P2[j] +\n t ** 3 * P3[j];\n };\n };\n\n for (let i = 0; i < tot; i++) {\n const seg = seglist.getItem(i);\n\n if (seg.x === undefined) { continue; }\n\n // Add actual points to limits\n bounds[0].push(P0[0]);\n bounds[1].push(P0[1]);\n\n if (seg.x1) {\n const P1 = [seg.x1, seg.y1],\n P2 = [seg.x2, seg.y2],\n P3 = [seg.x, seg.y];\n\n for (let j = 0; j < 2; j++) {\n const calc = getCalc(j, P1, P2, P3);\n\n const b = 6 * P0[j] - 12 * P1[j] + 6 * P2[j];\n const a = -3 * P0[j] + 9 * P1[j] - 9 * P2[j] + 3 * P3[j];\n const c = 3 * P1[j] - 3 * P0[j];\n\n if (a === 0) {\n if (b === 0) { continue; }\n const t = -c / b;\n if (t > 0 && t < 1) {\n bounds[j].push(calc(t));\n }\n continue;\n }\n const b2ac = b ** 2 - 4 * c * a;\n if (b2ac < 0) { continue; }\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (t1 > 0 && t1 < 1) { bounds[j].push(calc(t1)); }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (t2 > 0 && t2 < 1) { bounds[j].push(calc(t2)); }\n }\n P0 = P3;\n } else {\n bounds[0].push(seg.x);\n bounds[1].push(seg.y);\n }\n }\n\n const x = Math.min.apply(null, bounds[0]);\n const w = Math.max.apply(null, bounds[0]) - x;\n const y = Math.min.apply(null, bounds[1]);\n const h = Math.max.apply(null, bounds[1]) - y;\n return {\n x,\n y,\n width: w,\n height: h\n };\n};\n\n/**\n* Get the given/selected element's bounding box object, checking for\n* horizontal/vertical lines (see issue 717)\n* Note that performance is currently terrible, so some way to improve would\n* be great.\n* @param {Element} selected - Container or `<use>` DOM element\n* @returns {DOMRect} Bounding box object\n*/\nfunction groupBBFix (selected) {\n if (supportsHVLineContainerBBox()) {\n try { return selected.getBBox(); } catch (e) {/* empty */}\n }\n const ref = $.data(selected, 'ref');\n let matched = null;\n let ret, copy;\n\n if (ref) {\n copy = $(ref).children().clone().attr('visibility', 'hidden');\n $(svgroot_).append(copy);\n matched = copy.filter('line, path');\n } else {\n matched = $(selected).find('line, path');\n }\n\n let issue = false;\n if (matched.length) {\n matched.each(function () {\n const bb = this.getBBox();\n if (!bb.width || !bb.height) {\n issue = true;\n }\n });\n if (issue) {\n const elems = ref ? copy : $(selected).children();\n ret = getStrokedBBox(elems);\n } else {\n ret = selected.getBBox();\n }\n } else {\n ret = selected.getBBox();\n }\n if (ref) {\n copy.remove();\n }\n return ret;\n}\n\n/**\n* Get the given/selected element's bounding box object, convert it to be more\n* usable when necessary.\n* @function module:utilities.getBBox\n* @param {Element} elem - Optional DOM element to get the BBox for\n* @returns {module:utilities.BBoxObject} Bounding box object\n*/\nexport const getBBox = function (elem) {\n const selected = elem || editorContext_.geSelectedElements()[0];\n if (elem.nodeType !== 1) { return null; }\n const elname = selected.nodeName;\n\n let ret = null;\n switch (elname) {\n case 'text':\n if (selected.textContent === '') {\n selected.textContent = 'a'; // Some character needed for the selector to use.\n ret = selected.getBBox();\n selected.textContent = '';\n } else if (selected.getBBox) {\n ret = selected.getBBox();\n }\n break;\n case 'path':\n if (!supportsPathBBox()) {\n ret = getPathBBox(selected);\n } else if (selected.getBBox) {\n ret = selected.getBBox();\n }\n break;\n case 'g':\n case 'a':\n ret = groupBBFix(selected);\n break;\n default:\n\n if (elname === 'use') {\n ret = groupBBFix(selected); // , true);\n }\n if (elname === 'use' || (elname === 'foreignObject' && isWebkit())) {\n if (!ret) { ret = selected.getBBox(); }\n // This is resolved in later versions of webkit, perhaps we should\n // have a featured detection for correct 'use' behavior?\n // ——————————\n if (!isWebkit()) {\n const {x, y, width, height} = ret;\n const bb = {\n width,\n height,\n x: x + Number.parseFloat(selected.getAttribute('x') || 0),\n y: y + Number.parseFloat(selected.getAttribute('y') || 0)\n };\n ret = bb;\n }\n } else if (visElemsArr.includes(elname)) {\n if (selected) {\n try {\n ret = selected.getBBox();\n } catch (err) {\n // tspan (and textPath apparently) have no `getBBox` in Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=937268\n // Re: Chrome returning bbox for containing text element, see: https://bugs.chromium.org/p/chromium/issues/detail?id=349835\n const extent = selected.getExtentOfChar(0); // pos+dimensions of the first glyph\n const width = selected.getComputedTextLength(); // width of the tspan\n ret = {\n x: extent.x,\n y: extent.y,\n width,\n height: extent.height\n };\n }\n } else {\n // Check if element is child of a foreignObject\n const fo = $(selected).closest('foreignObject');\n if (fo.length && fo[0].getBBox) {\n ret = fo[0].getBBox();\n }\n }\n }\n }\n if (ret) {\n ret = bboxToObj(ret);\n }\n\n // get the bounding box from the DOM (which is in that element's coordinate system)\n return ret;\n};\n\n/**\n* @typedef {GenericArray} module:utilities.PathSegmentArray\n* @property {Integer} length 2\n* @property {\"M\"|\"L\"|\"C\"|\"Z\"} 0\n* @property {Float[]} 1\n*/\n\n/**\n* Create a path 'd' attribute from path segments.\n* Each segment is an array of the form: `[singleChar, [x,y, x,y, ...]]`\n* @function module:utilities.getPathDFromSegments\n* @param {module:utilities.PathSegmentArray[]} pathSegments - An array of path segments to be converted\n* @returns {string} The converted path d attribute.\n*/\nexport const getPathDFromSegments = function (pathSegments) {\n let d = '';\n\n $.each(pathSegments, function (j, [singleChar, pts]) {\n d += singleChar;\n for (let i = 0; i < pts.length; i += 2) {\n d += (pts[i] + ',' + pts[i + 1]) + ' ';\n }\n });\n\n return d;\n};\n\n/**\n* Make a path 'd' attribute from a simple SVG element shape.\n* @function module:utilities.getPathDFromElement\n* @param {Element} elem - The element to be converted\n* @returns {string} The path d attribute or `undefined` if the element type is unknown.\n*/\nexport const getPathDFromElement = function (elem) {\n // Possibly the cubed root of 6, but 1.81 works best\n let num = 1.81;\n let d, a, rx, ry;\n switch (elem.tagName) {\n case 'ellipse':\n case 'circle': {\n a = $(elem).attr(['rx', 'ry', 'cx', 'cy']);\n const {cx, cy} = a;\n ({rx, ry} = a);\n if (elem.tagName === 'circle') {\n ry = $(elem).attr('r');\n rx = ry;\n }\n\n d = getPathDFromSegments([\n ['M', [(cx - rx), (cy)]],\n ['C', [(cx - rx), (cy - ry / num), (cx - rx / num), (cy - ry), (cx), (cy - ry)]],\n ['C', [(cx + rx / num), (cy - ry), (cx + rx), (cy - ry / num), (cx + rx), (cy)]],\n ['C', [(cx + rx), (cy + ry / num), (cx + rx / num), (cy + ry), (cx), (cy + ry)]],\n ['C', [(cx - rx / num), (cy + ry), (cx - rx), (cy + ry / num), (cx - rx), (cy)]],\n ['Z', []]\n ]);\n break;\n } case 'path':\n d = elem.getAttribute('d');\n break;\n case 'line':\n a = $(elem).attr(['x1', 'y1', 'x2', 'y2']);\n d = 'M' + a.x1 + ',' + a.y1 + 'L' + a.x2 + ',' + a.y2;\n break;\n case 'polyline':\n d = 'M' + elem.getAttribute('points');\n break;\n case 'polygon':\n d = 'M' + elem.getAttribute('points') + ' Z';\n break;\n case 'rect': {\n const r = $(elem).attr(['rx', 'ry']);\n ({rx, ry} = r);\n const b = elem.getBBox();\n const {x, y} = b,\n w = b.width,\n h = b.height;\n num = 4 - num; // Why? Because!\n\n d = (!rx && !ry)\n // Regular rect\n ? getPathDFromSegments([\n ['M', [x, y]],\n ['L', [x + w, y]],\n ['L', [x + w, y + h]],\n ['L', [x, y + h]],\n ['L', [x, y]],\n ['Z', []]\n ])\n : getPathDFromSegments([\n ['M', [x, y + ry]],\n ['C', [x, y + ry / num, x + rx / num, y, x + rx, y]],\n ['L', [x + w - rx, y]],\n ['C', [x + w - rx / num, y, x + w, y + ry / num, x + w, y + ry]],\n ['L', [x + w, y + h - ry]],\n ['C', [x + w, y + h - ry / num, x + w - rx / num, y + h, x + w - rx, y + h]],\n ['L', [x + rx, y + h]],\n ['C', [x + rx / num, y + h, x, y + h - ry / num, x, y + h - ry]],\n ['L', [x, y + ry]],\n ['Z', []]\n ]);\n break;\n } default:\n break;\n }\n\n return d;\n};\n\n/**\n* Get a set of attributes from an element that is useful for convertToPath.\n* @function module:utilities.getExtraAttributesForConvertToPath\n* @param {Element} elem - The element to be probed\n* @returns {PlainObject<\"marker-start\"|\"marker-end\"|\"marker-mid\"|\"filter\"|\"clip-path\", string>} An object with attributes.\n*/\nexport const getExtraAttributesForConvertToPath = function (elem) {\n const attrs = {};\n // TODO: make this list global so that we can properly maintain it\n // TODO: what about @transform, @clip-rule, @fill-rule, etc?\n $.each(['marker-start', 'marker-end', 'marker-mid', 'filter', 'clip-path'], function () {\n const a = elem.getAttribute(this);\n if (a) {\n attrs[this] = a;\n }\n });\n return attrs;\n};\n\n/**\n* Get the BBox of an element-as-path.\n* @function module:utilities.getBBoxOfElementAsPath\n* @param {Element} elem - The DOM element to be probed\n* @param {module:utilities.EditorContext#addSVGElementFromJson} addSVGElementFromJson - Function to add the path element to the current layer. See canvas.addSVGElementFromJson\n* @param {module:path.pathActions} pathActions - If a transform exists, `pathActions.resetOrientation()` is used. See: canvas.pathActions.\n* @returns {DOMRect|false} The resulting path's bounding box object.\n*/\nexport const getBBoxOfElementAsPath = function (elem, addSVGElementFromJson, pathActions) {\n const path = addSVGElementFromJson({\n element: 'path',\n attr: getExtraAttributesForConvertToPath(elem)\n });\n\n const eltrans = elem.getAttribute('transform');\n if (eltrans) {\n path.setAttribute('transform', eltrans);\n }\n\n const {parentNode} = elem;\n if (elem.nextSibling) {\n elem.before(path);\n } else {\n parentNode.append(path);\n }\n\n const d = getPathDFromElement(elem);\n if (d) {\n path.setAttribute('d', d);\n } else {\n path.remove();\n }\n\n // Get the correct BBox of the new path, then discard it\n pathActions.resetOrientation(path);\n let bb = false;\n try {\n bb = path.getBBox();\n } catch (e) {\n // Firefox fails\n }\n path.remove();\n return bb;\n};\n\n/**\n* Convert selected element to a path.\n* @function module:utilities.convertToPath\n* @param {Element} elem - The DOM element to be converted\n* @param {module:utilities.SVGElementJSON} attrs - Apply attributes to new path. see canvas.convertToPath\n* @param {module:utilities.EditorContext#addSVGElementFromJson} addSVGElementFromJson - Function to add the path element to the current layer. See canvas.addSVGElementFromJson\n* @param {module:path.pathActions} pathActions - If a transform exists, pathActions.resetOrientation() is used. See: canvas.pathActions.\n* @param {module:draw.DrawCanvasInit#clearSelection|module:path.EditorContext#clearSelection} clearSelection - see [canvas.clearSelection]{@link module:svgcanvas.SvgCanvas#clearSelection}\n* @param {module:path.EditorContext#addToSelection} addToSelection - see [canvas.addToSelection]{@link module:svgcanvas.SvgCanvas#addToSelection}\n* @param {module:history} hstry - see history module\n* @param {module:path.EditorContext#addCommandToHistory|module:draw.DrawCanvasInit#addCommandToHistory} addCommandToHistory - see [canvas.addCommandToHistory]{@link module:svgcanvas~addCommandToHistory}\n* @returns {SVGPathElement|null} The converted path element or null if the DOM element was not recognized.\n*/\nexport const convertToPath = function (\n elem, attrs, addSVGElementFromJson, pathActions,\n clearSelection, addToSelection, hstry, addCommandToHistory\n) {\n const batchCmd = new hstry.BatchCommand('Convert element to Path');\n\n // Any attribute on the element not covered by the passed-in attributes\n attrs = $.extend({}, attrs, getExtraAttributesForConvertToPath(elem));\n\n const path = addSVGElementFromJson({\n element: 'path',\n attr: attrs\n });\n\n const eltrans = elem.getAttribute('transform');\n if (eltrans) {\n path.setAttribute('transform', eltrans);\n }\n\n const {id} = elem;\n const {parentNode} = elem;\n if (elem.nextSibling) {\n elem.before(path);\n } else {\n parentNode.append(path);\n }\n\n const d = getPathDFromElement(elem);\n if (d) {\n path.setAttribute('d', d);\n\n // Replace the current element with the converted one\n\n // Reorient if it has a matrix\n if (eltrans) {\n const tlist = getTransformList(path);\n if (hasMatrixTransform(tlist)) {\n pathActions.resetOrientation(path);\n }\n }\n\n const {nextSibling} = elem;\n batchCmd.addSubCommand(new hstry.RemoveElementCommand(elem, nextSibling, parent));\n batchCmd.addSubCommand(new hstry.InsertElementCommand(path));\n\n clearSelection();\n elem.remove();\n path.setAttribute('id', id);\n path.removeAttribute('visibility');\n addToSelection([path], true);\n\n addCommandToHistory(batchCmd);\n\n return path;\n }\n // the elem.tagName was not recognized, so no \"d\" attribute. Remove it, so we've haven't changed anything.\n path.remove();\n return null;\n};\n\n/**\n* Can the bbox be optimized over the native getBBox? The optimized bbox is the same as the native getBBox when\n* the rotation angle is a multiple of 90 degrees and there are no complex transforms.\n* Getting an optimized bbox can be dramatically slower, so we want to make sure it's worth it.\n*\n* The best example for this is a circle rotate 45 degrees. The circle doesn't get wider or taller when rotated\n* about it's center.\n*\n* The standard, unoptimized technique gets the native bbox of the circle, rotates the box 45 degrees, uses\n* that width and height, and applies any transforms to get the final bbox. This means the calculated bbox\n* is much wider than the original circle. If the angle had been 0, 90, 180, etc. both techniques render the\n* same bbox.\n*\n* The optimization is not needed if the rotation is a multiple 90 degrees. The default technique is to call\n* getBBox then apply the angle and any transforms.\n*\n* @param {Float} angle - The rotation angle in degrees\n* @param {boolean} hasAMatrixTransform - True if there is a matrix transform\n* @returns {boolean} True if the bbox can be optimized.\n*/\nfunction bBoxCanBeOptimizedOverNativeGetBBox (angle, hasAMatrixTransform) {\n const angleModulo90 = angle % 90;\n const closeTo90 = angleModulo90 < -89.99 || angleModulo90 > 89.99;\n const closeTo0 = angleModulo90 > -0.001 && angleModulo90 < 0.001;\n return hasAMatrixTransform || !(closeTo0 || closeTo90);\n}\n\n/**\n* Get bounding box that includes any transforms.\n* @function module:utilities.getBBoxWithTransform\n* @param {Element} elem - The DOM element to be converted\n* @param {module:utilities.EditorContext#addSVGElementFromJson} addSVGElementFromJson - Function to add the path element to the current layer. See canvas.addSVGElementFromJson\n* @param {module:path.pathActions} pathActions - If a transform exists, pathActions.resetOrientation() is used. See: canvas.pathActions.\n* @returns {module:utilities.BBoxObject|module:math.TransformedBox|DOMRect} A single bounding box object\n*/\nexport const getBBoxWithTransform = function (elem, addSVGElementFromJson, pathActions) {\n // TODO: Fix issue with rotated groups. Currently they work\n // fine in FF, but not in other browsers (same problem mentioned\n // in Issue 339 comment #2).\n\n let bb = getBBox(elem);\n\n if (!bb) {\n return null;\n }\n\n const tlist = getTransformList(elem);\n const angle = getRotationAngleFromTransformList(tlist);\n const hasMatrixXForm = hasMatrixTransform(tlist);\n\n if (angle || hasMatrixXForm) {\n let goodBb = false;\n if (bBoxCanBeOptimizedOverNativeGetBBox(angle, hasMatrixXForm)) {\n // Get the BBox from the raw path for these elements\n // TODO: why ellipse and not circle\n const elemNames = ['ellipse', 'path', 'line', 'polyline', 'polygon'];\n if (elemNames.includes(elem.tagName)) {\n goodBb = getBBoxOfElementAsPath(elem, addSVGElementFromJson, pathActions);\n bb = goodBb;\n } else if (elem.tagName === 'rect') {\n // Look for radius\n const rx = elem.getAttribute('rx');\n const ry = elem.getAttribute('ry');\n if (rx || ry) {\n goodBb = getBBoxOfElementAsPath(elem, addSVGElementFromJson, pathActions);\n bb = goodBb;\n }\n }\n }\n\n if (!goodBb) {\n const {matrix} = transformListToTransform(tlist);\n bb = transformBox(bb.x, bb.y, bb.width, bb.height, matrix).aabox;\n\n // Old technique that was exceedingly slow with large documents.\n //\n // Accurate way to get BBox of rotated element in Firefox:\n // Put element in group and get its BBox\n //\n // Must use clone else FF freaks out\n // const clone = elem.cloneNode(true);\n // const g = document.createElementNS(NS.SVG, 'g');\n // const parent = elem.parentNode;\n // parent.append(g);\n // g.append(clone);\n // const bb2 = bboxToObj(g.getBBox());\n // g.remove();\n }\n }\n return bb;\n};\n\n/**\n * @param {Element} elem\n * @returns {Float}\n * @todo This is problematic with large stroke-width and, for example, a single\n * horizontal line. The calculated BBox extends way beyond left and right sides.\n */\nfunction getStrokeOffsetForBBox (elem) {\n const sw = elem.getAttribute('stroke-width');\n return (!isNaN(sw) && elem.getAttribute('stroke') !== 'none') ? sw / 2 : 0;\n}\n\n/**\n * @typedef {PlainObject} BBox\n * @property {Integer} x The x value\n * @property {Integer} y The y value\n * @property {Float} width\n * @property {Float} height\n */\n\n/**\n* Get the bounding box for one or more stroked and/or transformed elements.\n* @function module:utilities.getStrokedBBox\n* @param {Element[]} elems - Array with DOM elements to check\n* @param {module:utilities.EditorContext#addSVGElementFromJson} addSVGElementFromJson - Function to add the path element to the current layer. See canvas.addSVGElementFromJson\n* @param {module:path.pathActions} pathActions - If a transform exists, pathActions.resetOrientation() is used. See: canvas.pathActions.\n* @returns {module:utilities.BBoxObject|module:math.TransformedBox|DOMRect} A single bounding box object\n*/\nexport const getStrokedBBox = function (elems, addSVGElementFromJson, pathActions) {\n if (!elems || !elems.length) { return false; }\n\n let fullBb;\n $.each(elems, function () {\n if (fullBb) { return; }\n if (!this.parentNode) { return; }\n fullBb = getBBoxWithTransform(this, addSVGElementFromJson, pathActions);\n });\n\n // This shouldn't ever happen...\n if (fullBb === undefined) { return null; }\n\n // fullBb doesn't include the stoke, so this does no good!\n // if (elems.length == 1) return fullBb;\n\n let maxX = fullBb.x + fullBb.width;\n let maxY = fullBb.y + fullBb.height;\n let minX = fullBb.x;\n let minY = fullBb.y;\n\n // If only one elem, don't call the potentially slow getBBoxWithTransform method again.\n if (elems.length === 1) {\n const offset = getStrokeOffsetForBBox(elems[0]);\n minX -= offset;\n minY -= offset;\n maxX += offset;\n maxY += offset;\n } else {\n $.each(elems, function (i, elem) {\n const curBb = getBBoxWithTransform(elem, addSVGElementFromJson, pathActions);\n if (curBb) {\n const offset = getStrokeOffsetForBBox(elem);\n minX = Math.min(minX, curBb.x - offset);\n minY = Math.min(minY, curBb.y - offset);\n // TODO: The old code had this test for max, but not min. I suspect this test should be for both min and max\n if (elem.nodeType === 1) {\n maxX = Math.max(maxX, curBb.x + curBb.width + offset);\n maxY = Math.max(maxY, curBb.y + curBb.height + offset);\n }\n }\n });\n }\n\n fullBb.x = minX;\n fullBb.y = minY;\n fullBb.width = maxX - minX;\n fullBb.height = maxY - minY;\n return fullBb;\n};\n\n/**\n* Get all elements that have a BBox (excludes `<defs>`, `<title>`, etc).\n* Note that 0-opacity, off-screen etc elements are still considered \"visible\"\n* for this function.\n* @function module:utilities.getVisibleElements\n* @param {Element} parentElement - The parent DOM element to search within\n* @returns {Element[]} All \"visible\" elements.\n*/\nexport const getVisibleElements = function (parentElement) {\n if (!parentElement) {\n parentElement = $(editorContext_.getSVGContent()).children(); // Prevent layers from being included\n }\n\n const contentElems = [];\n $(parentElement).children().each(function (i, elem) {\n if (elem.getBBox) {\n contentElems.push(elem);\n }\n });\n return contentElems.reverse();\n};\n\n/**\n* Get the bounding box for one or more stroked and/or transformed elements.\n* @function module:utilities.getStrokedBBoxDefaultVisible\n* @param {Element[]} elems - Array with DOM elements to check\n* @returns {module:utilities.BBoxObject} A single bounding box object\n*/\nexport const getStrokedBBoxDefaultVisible = function (elems) {\n if (!elems) { elems = getVisibleElements(); }\n return getStrokedBBox(\n elems,\n editorContext_.addSVGElementFromJson,\n editorContext_.pathActions\n );\n};\n\n/**\n* Get the rotation angle of the given transform list.\n* @function module:utilities.getRotationAngleFromTransformList\n* @param {SVGTransformList} tlist - List of transforms\n* @param {boolean} toRad - When true returns the value in radians rather than degrees\n* @returns {Float} The angle in degrees or radians\n*/\nexport const getRotationAngleFromTransformList = function (tlist, toRad) {\n if (!tlist) { return 0; } // <svg> elements have no tlist\n const N = tlist.numberOfItems;\n for (let i = 0; i < N; ++i) {\n const xform = tlist.getItem(i);\n if (xform.type === 4) {\n return toRad ? xform.angle * Math.PI / 180.0 : xform.angle;\n }\n }\n return 0.0;\n};\n\n/**\n* Get the rotation angle of the given/selected DOM element.\n* @function module:utilities.getRotationAngle\n* @param {Element} [elem] - DOM element to get the angle for. Default to first of selected elements.\n* @param {boolean} [toRad=false] - When true returns the value in radians rather than degrees\n* @returns {Float} The angle in degrees or radians\n*/\nexport let getRotationAngle = function (elem, toRad) {\n const selected = elem || editorContext_.getSelectedElements()[0];\n // find the rotation transform (if any) and set it\n const tlist = getTransformList(selected);\n return getRotationAngleFromTransformList(tlist, toRad);\n};\n\n/**\n* Get the reference element associated with the given attribute value.\n* @function module:utilities.getRefElem\n* @param {string} attrVal - The attribute value as a string\n* @returns {Element} Reference element\n*/\nexport const getRefElem = function (attrVal) {\n return getElem(getUrlFromAttr(attrVal).substr(1));\n};\n\n/**\n* Get a DOM element by ID within the SVG root element.\n* @function module:utilities.getElem\n* @param {string} id - String with the element's new ID\n* @returns {?Element}\n*/\nexport const getElem = (supportsSelectors())\n ? function (id) {\n // querySelector lookup\n return svgroot_.querySelector('#' + id);\n }\n : supportsXpath()\n ? function (id) {\n // xpath lookup\n return domdoc_.evaluate(\n 'svg:svg[@id=\"svgroot\"]//svg:*[@id=\"' + id + '\"]',\n domcontainer_,\n function () { return NS.SVG; },\n 9,\n null\n ).singleNodeValue;\n }\n : function (id) {\n // jQuery lookup: twice as slow as xpath in FF\n return $(svgroot_).find(`[id=${id}]`)[0];\n };\n\n/**\n* Assigns multiple attributes to an element.\n* @function module:utilities.assignAttributes\n* @param {Element} elem - DOM element to apply new attribute values to\n* @param {PlainObject<string, string>} attrs - Object with attribute keys/values\n* @param {Integer} [suspendLength] - Milliseconds to suspend redraw\n* @param {boolean} [unitCheck=false] - Boolean to indicate the need to use units.setUnitAttr\n* @returns {void}\n*/\nexport const assignAttributes = function (elem, attrs, suspendLength, unitCheck) {\n for (const [key, value] of Object.entries(attrs)) {\n const ns = (key.substr(0, 4) === 'xml:'\n ? NS.XML\n : key.substr(0, 6) === 'xlink:' ? NS.XLINK : null);\n if (isNullish(value)) {\n if (ns) {\n elem.removeAttributeNS(ns, key);\n } else {\n elem.removeAttribute(key);\n }\n continue;\n }\n if (ns) {\n elem.setAttributeNS(ns, key, value);\n } else if (!unitCheck) {\n elem.setAttribute(key, value);\n } else {\n setUnitAttr(elem, key, value);\n }\n }\n};\n\n/**\n* Remove unneeded (default) attributes, making resulting SVG smaller.\n* @function module:utilities.cleanupElement\n* @param {Element} element - DOM element to clean up\n* @returns {void}\n*/\nexport const cleanupElement = function (element) {\n const defaults = {\n 'fill-opacity': 1,\n 'stop-opacity': 1,\n opacity: 1,\n stroke: 'none',\n 'stroke-dasharray': 'none',\n 'stroke-linejoin': 'miter',\n 'stroke-linecap': 'butt',\n 'stroke-opacity': 1,\n 'stroke-width': 1,\n rx: 0,\n ry: 0\n };\n\n if (element.nodeName === 'ellipse') {\n // Ellipse elements require rx and ry attributes\n delete defaults.rx;\n delete defaults.ry;\n }\n\n Object.entries(defaults).forEach(([attr, val]) => {\n if (element.getAttribute(attr) === String(val)) {\n element.removeAttribute(attr);\n }\n });\n};\n\n/**\n* Round value to for snapping.\n* @function module:utilities.snapToGrid\n* @param {Float} value\n* @returns {Integer}\n*/\nexport const snapToGrid = function (value) {\n const unit = editorContext_.getBaseUnit();\n let stepSize = editorContext_.getSnappingStep();\n if (unit !== 'px') {\n stepSize *= getTypeMap()[unit];\n }\n value = Math.round(value / stepSize) * stepSize;\n return value;\n};\n\n/**\n * Prevents default browser click behaviour on the given element.\n * @function module:utilities.preventClickDefault\n * @param {Element} img - The DOM element to prevent the click on\n * @returns {void}\n */\nexport const preventClickDefault = function (img) {\n $(img).click(function (e) { e.preventDefault(); });\n};\n\n/**\n * @callback module:utilities.GetNextID\n * @returns {string} The ID\n */\n\n/**\n * Whether a value is `null` or `undefined`.\n * @param {any} val\n * @returns {boolean}\n */\nexport const isNullish = (val) => {\n return val === null || val === undefined;\n};\n\n/**\n* Overwrite methods for unit testing.\n* @function module:utilities.mock\n* @param {PlainObject} mockMethods\n* @param {module:utilities.getHref} mockMethods.getHref\n* @param {module:utilities.setHref} mockMethods.setHref\n* @param {module:utilities.getRotationAngle} mockMethods.getRotationAngle\n* @returns {void}\n*/\nexport const mock = ({\n getHref: getHrefUser, setHref: setHrefUser, getRotationAngle: getRotationAngleUser\n}) => {\n getHref = getHrefUser;\n setHref = setHrefUser;\n getRotationAngle = getRotationAngleUser;\n};\n\n// shortcuts to common DOM functions\nexport const $id = (id) => document.getElementById(id);\nexport const $qq = (sel) => document.querySelector(sel);\nexport const $qa = (sel) => [...document.querySelectorAll(sel)];\n","/* eslint-disable no-console */\n/**\n * For command history tracking and undo functionality.\n * @module history\n * @license MIT\n * @copyright 2010 Jeff Schiller\n */\n\nimport {getHref, setHref, getRotationAngle, isNullish} from './utilities.js';\nimport {removeElementFromListMap} from './svgtransformlist.js';\n\n/**\n* Group: Undo/Redo history management.\n*/\nexport const HistoryEventTypes = {\n BEFORE_APPLY: 'before_apply',\n AFTER_APPLY: 'after_apply',\n BEFORE_UNAPPLY: 'before_unapply',\n AFTER_UNAPPLY: 'after_unapply'\n};\n\n/**\n* Base class for commands.\n*/\nexport class Command {\n /**\n * @returns {string}\n */\n getText () {\n return this.text;\n }\n /**\n * @param {module:history.HistoryEventHandler} handler\n * @param {callback} applyFunction\n * @returns {void}\n */\n apply (handler, applyFunction) {\n handler && handler.handleHistoryEvent(HistoryEventTypes.BEFORE_APPLY, this);\n applyFunction(handler);\n handler && handler.handleHistoryEvent(HistoryEventTypes.AFTER_APPLY, this);\n }\n\n /**\n * @param {module:history.HistoryEventHandler} handler\n * @param {callback} unapplyFunction\n * @returns {void}\n */\n unapply (handler, unapplyFunction) {\n handler && handler.handleHistoryEvent(HistoryEventTypes.BEFORE_UNAPPLY, this);\n unapplyFunction();\n handler && handler.handleHistoryEvent(HistoryEventTypes.AFTER_UNAPPLY, this);\n }\n\n /**\n * @returns {Element[]} Array with element associated with this command\n * This function needs to be surcharged if multiple elements are returned.\n */\n elements () {\n return [this.elem];\n }\n\n /**\n * @returns {string} String with element associated with this command\n */\n type () {\n return this.constructor.name;\n }\n}\n\n// Todo: Figure out why the interface members aren't showing\n// up (with or without modules applied), despite our apparently following\n// http://usejsdoc.org/tags-interface.html#virtual-comments\n\n/**\n * An interface that all command objects must implement.\n * @interface module:history.HistoryCommand\n*/\n/**\n * Applies.\n *\n * @function module:history.HistoryCommand#apply\n * @param {module:history.HistoryEventHandler} handler\n * @fires module:history~Command#event:history\n * @returns {void|true}\n */\n/**\n *\n * Unapplies.\n * @function module:history.HistoryCommand#unapply\n * @param {module:history.HistoryEventHandler} handler\n * @fires module:history~Command#event:history\n * @returns {void|true}\n */\n/**\n * Returns the elements.\n * @function module:history.HistoryCommand#elements\n * @returns {Element[]}\n */\n/**\n * Gets the text.\n * @function module:history.HistoryCommand#getText\n * @returns {string}\n */\n/**\n * Gives the type.\n * @function module:history.HistoryCommand.type\n * @returns {string}\n */\n\n/**\n * @event module:history~Command#event:history\n * @type {module:history.HistoryCommand}\n */\n\n/**\n * An interface for objects that will handle history events.\n * @interface module:history.HistoryEventHandler\n */\n/**\n *\n * @function module:history.HistoryEventHandler#handleHistoryEvent\n * @param {string} eventType One of the HistoryEvent types\n * @param {module:history~Command#event:history} command\n * @listens module:history~Command#event:history\n * @returns {void}\n *\n */\n\n/**\n * History command for an element that had its DOM position changed.\n * @implements {module:history.HistoryCommand}\n*/\nexport class MoveElementCommand extends Command {\n /**\n * @param {Element} elem - The DOM element that was moved\n * @param {Element} oldNextSibling - The element's next sibling before it was moved\n * @param {Element} oldParent - The element's parent before it was moved\n * @param {string} [text] - An optional string visible to user related to this change\n */\n constructor (elem, oldNextSibling, oldParent, text) {\n super();\n this.elem = elem;\n this.text = text ? ('Move ' + elem.tagName + ' to ' + text) : ('Move ' + elem.tagName);\n this.oldNextSibling = oldNextSibling;\n this.oldParent = oldParent;\n this.newNextSibling = elem.nextSibling;\n this.newParent = elem.parentNode;\n }\n\n /**\n * Re-positions the element.\n * @param {module:history.HistoryEventHandler} handler\n * @fires module:history~Command#event:history\n * @returns {void}\n */\n apply (handler) {\n super.apply(handler, () => {\n this.elem = this.newParent.insertBefore(this.elem, this.newNextSibling);\n });\n }\n\n /**\n * Positions the element back to its original location.\n * @param {module:history.HistoryEventHandler} handler\n * @fires module:history~Command#event:history\n * @returns {void}\n */\n unapply (handler) {\n super.unapply(handler, () => {\n this.elem = this.oldParent.insertBefore(this.elem, this.oldNextSibling);\n });\n }\n}\n\n/**\n* History command for an element that was added to the DOM.\n* @implements {module:history.HistoryCommand}\n*/\nexport class InsertElementCommand extends Command {\n /**\n * @param {Element} elem - The newly added DOM element\n * @param {string} text - An optional string visible to user related to this change\n */\n constructor (elem, text) {\n super();\n this.elem = elem;\n this.text = text || ('Create ' + elem.tagName);\n this.parent = elem.parentNode;\n this.nextSibling = this.elem.nextSibling;\n }\n\n /**\n * Re-inserts the new element.\n * @param {module:history.HistoryEventHandler} handler\n * @fires module:history~Command#event:history\n * @returns {void}\n */\n apply (handler) {\n super.apply(handler, () => {\n this.elem = this.parent.insertBefore(this.elem, this.nextSibling);\n });\n }\n\n /**\n * Removes the element.\n * @param {module:history.HistoryEventHandler} handler\n * @fires module:history~Command#event:history\n * @returns {void}\n */\n unapply (handler) {\n super.unapply(handler, () => {\n this.parent = this.elem.parentNode;\n this.elem.remove();\n });\n }\n}\n\n/**\n* History command for an element removed from the DOM.\n* @implements {module:history.HistoryCommand}\n*/\nexport class RemoveElementCommand extends Command {\n /**\n * @param {Element} elem - The removed DOM element\n * @param {Node} oldNextSibling - The DOM element's nextSibling when it was in the DOM\n * @param {Element} oldParent - The DOM element's parent\n * @param {string} [text] - An optional string visible to user related to this change\n */\n constructor (elem, oldNextSibling, oldParent, text) {\n super();\n this.elem = elem;\n this.text = text || ('Delete ' + elem.tagName);\n this.nextSibling = oldNextSibling;\n this.parent = oldParent;\n\n // special hack for webkit: remove this element's entry in the svgTransformLists map\n removeElementFromListMap(elem);\n }\n\n /**\n * Re-removes the new element.\n * @param {module:history.HistoryEventHandler} handler\n * @fires module:history~Command#event:history\n * @returns {void}\n */\n apply (handler) {\n super.apply(handler, () => {\n removeElementFromListMap(this.elem);\n this.parent = this.elem.parentNode;\n this.elem.remove();\n });\n }\n\n /**\n * Re-adds the new element.\n * @param {module:history.HistoryEventHandler} handler\n * @fires module:history~Command#event:history\n * @returns {void}\n */\n unapply (handler) {\n super.unapply(handler, () => {\n removeElementFromListMap(this.elem);\n if (isNullish(this.nextSibling) && window.console) {\n console.error('Reference element was lost');\n }\n this.parent.insertBefore(this.elem, this.nextSibling); // Don't use `before` or `prepend` as `this.nextSibling` may be `null`\n });\n }\n}\n\n/**\n* @typedef {\"#text\"|\"#href\"|string} module:history.CommandAttributeName\n*/\n/**\n* @typedef {PlainObject<module:history.CommandAttributeName, string>} module:history.CommandAttributes\n*/\n\n/**\n* History command to make a change to an element.\n* Usually an attribute change, but can also be textcontent.\n* @implements {module:history.HistoryCommand}\n*/\nexport class ChangeElementCommand extends Command {\n /**\n * @param {Element} elem - The DOM element that was changed\n * @param {module:history.CommandAttributes} attrs - Attributes to be changed with the values they had *before* the change\n * @param {string} text - An optional string visible to user related to this change\n */\n constructor (elem, attrs, text) {\n super();\n this.elem = elem;\n this.text = text ? ('Change ' + elem.tagName + ' ' + text) : ('Change ' + elem.tagName);\n this.newValues = {};\n this.oldValues = attrs;\n for (const attr in attrs) {\n if (attr === '#text') {\n this.newValues[attr] = elem.textContent;\n } else if (attr === '#href') {\n this.newValues[attr] = getHref(elem);\n } else {\n this.newValues[attr] = elem.getAttribute(attr);\n }\n }\n }\n\n /**\n * Performs the stored change action.\n * @param {module:history.HistoryEventHandler} handler\n * @fires module:history~Command#event:history\n * @returns {void}\n */\n apply (handler) {\n super.apply(handler, () => {\n let bChangedTransform = false;\n Object.entries(this.newValues).forEach(([attr, value]) => {\n if (value) {\n if (attr === '#text') {\n this.elem.textContent = value;\n } else if (attr === '#href') {\n setHref(this.elem, value);\n } else {\n this.elem.setAttribute(attr, value);\n }\n } else if (attr === '#text') {\n this.elem.textContent = '';\n } else {\n this.elem.setAttribute(attr, '');\n this.elem.removeAttribute(attr);\n }\n\n if (attr === 'transform') { bChangedTransform = true; }\n });\n\n // relocate rotational transform, if necessary\n if (!bChangedTransform) {\n const angle = getRotationAngle(this.elem);\n if (angle) {\n const bbox = this.elem.getBBox();\n const cx = bbox.x + bbox.width / 2;\n const cy = bbox.y + bbox.height / 2;\n const rotate = ['rotate(', angle, ' ', cx, ',', cy, ')'].join('');\n if (rotate !== this.elem.getAttribute('transform')) {\n this.elem.setAttribute('transform', rotate);\n }\n }\n }\n });\n }\n\n /**\n * Reverses the stored change action.\n * @param {module:history.HistoryEventHandler} handler\n * @fires module:history~Command#event:history\n * @returns {void}\n */\n unapply (handler) {\n super.unapply(handler, () => {\n let bChangedTransform = false;\n Object.entries(this.oldValues).forEach(([attr, value]) => {\n if (value) {\n if (attr === '#text') {\n this.elem.textContent = value;\n } else if (attr === '#href') {\n setHref(this.elem, value);\n } else {\n this.elem.setAttribute(attr, value);\n }\n } else if (attr === '#text') {\n this.elem.textContent = '';\n } else {\n this.elem.removeAttribute(attr);\n }\n if (attr === 'transform') { bChangedTransform = true; }\n });\n // relocate rotational transform, if necessary\n if (!bChangedTransform) {\n const angle = getRotationAngle(this.elem);\n if (angle) {\n const bbox = this.elem.getBBox();\n const cx = bbox.x + bbox.width / 2,\n cy = bbox.y + bbox.height / 2;\n const rotate = ['rotate(', angle, ' ', cx, ',', cy, ')'].join('');\n if (rotate !== this.elem.getAttribute('transform')) {\n this.elem.setAttribute('transform', rotate);\n }\n }\n }\n // Remove transformlist to prevent confusion that causes bugs like 575.\n removeElementFromListMap(this.elem);\n });\n }\n}\n\n// TODO: create a 'typing' command object that tracks changes in text\n// if a new Typing command is created and the top command on the stack is also a Typing\n// and they both affect the same element, then collapse the two commands into one\n\n/**\n* History command that can contain/execute multiple other commands.\n* @implements {module:history.HistoryCommand}\n*/\nexport class BatchCommand extends Command {\n /**\n * @param {string} [text] - An optional string visible to user related to this change\n */\n constructor (text) {\n super();\n this.text = text || 'Batch Command';\n this.stack = [];\n }\n\n /**\n * Runs \"apply\" on all subcommands.\n * @param {module:history.HistoryEventHandler} handler\n * @fires module:history~Command#event:history\n * @returns {void}\n */\n apply (handler) {\n super.apply(handler, () => {\n this.stack.forEach((stackItem) => {\n console.assert(stackItem, 'stack item should not be null');\n stackItem && stackItem.apply(handler);\n });\n });\n }\n\n /**\n * Runs \"unapply\" on all subcommands.\n * @param {module:history.HistoryEventHandler} handler\n * @fires module:history~Command#event:history\n * @returns {void}\n */\n unapply (handler) {\n super.unapply(handler, () => {\n this.stack.reverse().forEach((stackItem) => {\n console.assert(stackItem, 'stack item should not be null');\n stackItem && stackItem.unapply(handler);\n });\n });\n }\n\n /**\n * Iterate through all our subcommands.\n * @returns {Element[]} All the elements we are changing\n */\n elements () {\n const elems = [];\n let cmd = this.stack.length;\n while (cmd--) {\n if (!this.stack[cmd]) continue;\n const thisElems = this.stack[cmd].elements();\n let elem = thisElems.length;\n while (elem--) {\n if (!elems.includes(thisElems[elem])) { elems.push(thisElems[elem]); }\n }\n }\n return elems;\n }\n\n /**\n * Adds a given command to the history stack.\n * @param {Command} cmd - The undo command object to add\n * @returns {void}\n */\n addSubCommand (cmd) {\n console.assert(cmd !== null, 'cmd should not be null');\n this.stack.push(cmd);\n }\n\n /**\n * @returns {boolean} Indicates whether or not the batch command is empty\n */\n isEmpty () {\n return !this.stack.length;\n }\n}\n\n/**\n*\n*/\nexport class UndoManager {\n /**\n * @param {module:history.HistoryEventHandler} historyEventHandler\n */\n constructor (historyEventHandler) {\n this.handler_ = historyEventHandler || null;\n this.undoStackPointer = 0;\n this.undoStack = [];\n\n // this is the stack that stores the original values, the elements and\n // the attribute name for begin/finish\n this.undoChangeStackPointer = -1;\n this.undoableChangeStack = [];\n }\n\n /**\n * Resets the undo stack, effectively clearing the undo/redo history.\n * @returns {void}\n */\n resetUndoStack () {\n this.undoStack = [];\n this.undoStackPointer = 0;\n }\n\n /**\n * @returns {Integer} Current size of the undo history stack\n */\n getUndoStackSize () {\n return this.undoStackPointer;\n }\n\n /**\n * @returns {Integer} Current size of the redo history stack\n */\n getRedoStackSize () {\n return this.undoStack.length - this.undoStackPointer;\n }\n\n /**\n * @returns {string} String associated with the next undo command\n */\n getNextUndoCommandText () {\n return this.undoStackPointer > 0 ? this.undoStack[this.undoStackPointer - 1].getText() : '';\n }\n\n /**\n * @returns {string} String associated with the next redo command\n */\n getNextRedoCommandText () {\n return this.undoStackPointer < this.undoStack.length ? this.undoStack[this.undoStackPointer].getText() : '';\n }\n\n /**\n * Performs an undo step.\n * @returns {void}\n */\n undo () {\n if (this.undoStackPointer > 0) {\n const cmd = this.undoStack[--this.undoStackPointer];\n cmd.unapply(this.handler_);\n }\n }\n\n /**\n * Performs a redo step.\n * @returns {void}\n */\n redo () {\n if (this.undoStackPointer < this.undoStack.length && this.undoStack.length > 0) {\n const cmd = this.undoStack[this.undoStackPointer++];\n cmd.apply(this.handler_);\n }\n }\n\n /**\n * Adds a command object to the undo history stack.\n * @param {Command} cmd - The command object to add\n * @returns {void}\n */\n addCommandToHistory (cmd) {\n // TODO: we MUST compress consecutive text changes to the same element\n // (right now each keystroke is saved as a separate command that includes the\n // entire text contents of the text element)\n // TODO: consider limiting the history that we store here (need to do some slicing)\n\n // if our stack pointer is not at the end, then we have to remove\n // all commands after the pointer and insert the new command\n if (this.undoStackPointer < this.undoStack.length && this.undoStack.length > 0) {\n this.undoStack = this.undoStack.splice(0, this.undoStackPointer);\n }\n this.undoStack.push(cmd);\n this.undoStackPointer = this.undoStack.length;\n }\n\n /**\n * This function tells the canvas to remember the old values of the\n * `attrName` attribute for each element sent in. The elements and values\n * are stored on a stack, so the next call to `finishUndoableChange()` will\n * pop the elements and old values off the stack, gets the current values\n * from the DOM and uses all of these to construct the undo-able command.\n * @param {string} attrName - The name of the attribute being changed\n * @param {Element[]} elems - Array of DOM elements being changed\n * @returns {void}\n */\n beginUndoableChange (attrName, elems) {\n const p = ++this.undoChangeStackPointer;\n let i = elems.length;\n const oldValues = new Array(i), elements = new Array(i);\n while (i--) {\n const elem = elems[i];\n if (isNullish(elem)) { continue; }\n elements[i] = elem;\n oldValues[i] = elem.getAttribute(attrName);\n }\n this.undoableChangeStack[p] = {\n attrName,\n oldValues,\n elements\n };\n }\n\n /**\n * This function returns a `BatchCommand` object which summarizes the\n * change since `beginUndoableChange` was called. The command can then\n * be added to the command history.\n * @returns {BatchCommand} Batch command object with resulting changes\n */\n finishUndoableChange () {\n const p = this.undoChangeStackPointer--;\n const changeset = this.undoableChangeStack[p];\n const {attrName} = changeset;\n const batchCmd = new BatchCommand('Change ' + attrName);\n let i = changeset.elements.length;\n while (i--) {\n const elem = changeset.elements[i];\n if (isNullish(elem)) { continue; }\n const changes = {};\n changes[attrName] = changeset.oldValues[i];\n if (changes[attrName] !== elem.getAttribute(attrName)) {\n batchCmd.addSubCommand(new ChangeElementCommand(elem, changes, attrName));\n }\n }\n this.undoableChangeStack[p] = null;\n return batchCmd;\n }\n}\n","/* globals jQuery */\n/**\n * Path functionality.\n * @module path\n * @license MIT\n *\n * @copyright 2011 Alexis Deveria, 2011 Jeff Schiller\n */\n\nimport {NS} from '../common/namespaces.js';\nimport {ChangeElementCommand} from './history.js';\nimport {\n transformPoint, getMatrix\n} from './math.js';\nimport {\n assignAttributes, getRotationAngle, isNullish,\n getElem\n} from './utilities.js';\nimport {\n supportsPathInsertItemBefore, supportsPathReplaceItem, isWebkit\n} from '../common/browser.js';\n\nconst $ = jQuery;\nlet pathMethodsContext_ = null;\nlet editorContext_ = null;\n\n/**\n* @function module:path-actions.init\n* @param {module:path-actions.pathMethodsContext_} pathMethodsContext\n* @returns {void}\n*/\nexport const init = function (pathMethodsContext) {\n pathMethodsContext_ = pathMethodsContext;\n};\n\n/**\n* @function module:path.insertItemBefore\n* @param {Element} elem\n* @param {Segment} newseg\n* @param {Integer} index\n* @returns {void}\n*/\nexport const insertItemBeforeMethod = function (elem, newseg, index) {\n // Support insertItemBefore on paths for FF2\n const list = elem.pathSegList;\n\n if (supportsPathInsertItemBefore()) {\n list.insertItemBefore(newseg, index);\n return;\n }\n const len = list.numberOfItems;\n const arr = [];\n for (let i = 0; i < len; i++) {\n const curSeg = list.getItem(i);\n arr.push(curSeg);\n }\n list.clear();\n for (let i = 0; i < len; i++) {\n if (i === index) { // index + 1\n list.appendItem(newseg);\n }\n list.appendItem(arr[i]);\n }\n};\n\n/**\n* @function module:path.ptObjToArr\n* @todo See if this should just live in `replacePathSeg`\n* @param {string} type\n* @param {SVGPathSegMovetoAbs|SVGPathSegLinetoAbs|SVGPathSegCurvetoCubicAbs|SVGPathSegCurvetoQuadraticAbs|SVGPathSegArcAbs|SVGPathSegLinetoHorizontalAbs|SVGPathSegLinetoVerticalAbs|SVGPathSegCurvetoCubicSmoothAbs|SVGPathSegCurvetoQuadraticSmoothAbs} segItem\n* @returns {ArgumentsArray}\n*/\nexport const ptObjToArrMethod = function (type, segItem) {\n const segData = pathMethodsContext_.getSegData();\n const props = segData[type];\n return props.map((prop) => {\n return segItem[prop];\n });\n};\n\n/**\n* @function module:path.getGripPt\n* @param {Segment} seg\n* @param {module:math.XYObject} altPt\n* @returns {module:math.XYObject}\n*/\nexport const getGripPtMethod = function (seg, altPt) {\n const {path: pth} = seg;\n let out = {\n x: altPt ? altPt.x : seg.item.x,\n y: altPt ? altPt.y : seg.item.y\n };\n\n if (pth.matrix) {\n const pt = transformPoint(out.x, out.y, pth.matrix);\n out = pt;\n }\n editorContext_ = pathMethodsContext_.getEditorContext();\n const currentZoom = editorContext_.getCurrentZoom();\n out.x *= currentZoom;\n out.y *= currentZoom;\n\n return out;\n};\n/**\n* @function module:path.getPointFromGrip\n* @param {module:math.XYObject} pt\n* @param {module:path.Path} pth\n* @returns {module:math.XYObject}\n*/\nexport const getPointFromGripMethod = function (pt, pth) {\n const out = {\n x: pt.x,\n y: pt.y\n };\n\n if (pth.matrix) {\n pt = transformPoint(out.x, out.y, pth.imatrix);\n out.x = pt.x;\n out.y = pt.y;\n }\n editorContext_ = pathMethodsContext_.getEditorContext();\n const currentZoom = editorContext_.getCurrentZoom();\n out.x /= currentZoom;\n out.y /= currentZoom;\n\n return out;\n};\n/**\n* @function module:path.getGripContainer\n* @returns {Element}\n*/\nexport const getGripContainerMethod = function () {\n let c = getElem('pathpointgrip_container');\n if (!c) {\n const parentElement = getElem('selectorParentGroup');\n c = document.createElementNS(NS.SVG, 'g');\n parentElement.append(c);\n c.id = 'pathpointgrip_container';\n }\n return c;\n};\n/**\n* Requires prior call to `setUiStrings` if `xlink:title`\n* to be set on the grip.\n* @function module:path.addPointGrip\n* @param {Integer} index\n* @param {Integer} x\n* @param {Integer} y\n* @returns {SVGCircleElement}\n*/\nexport const addPointGripMethod = function (index, x, y) {\n // create the container of all the point grips\n const pointGripContainer = getGripContainerMethod();\n\n let pointGrip = getElem('pathpointgrip_' + index);\n // create it\n if (!pointGrip) {\n pointGrip = document.createElementNS(NS.SVG, 'circle');\n const atts = {\n id: 'pathpointgrip_' + index,\n display: 'none',\n r: 4,\n fill: '#0FF',\n stroke: '#00F',\n 'stroke-width': 2,\n cursor: 'move',\n style: 'pointer-events:all'\n };\n const uiStrings = pathMethodsContext_.getUIStrings();\n if ('pathNodeTooltip' in uiStrings) { // May be empty if running path.js without svg-editor\n atts['xlink:title'] = uiStrings.pathNodeTooltip;\n }\n assignAttributes(pointGrip, atts);\n pointGripContainer.append(pointGrip);\n\n const grip = $('#pathpointgrip_' + index);\n grip.dblclick(function () {\n const path = pathMethodsContext_.getPathObj();\n if (path) {\n path.setSegType();\n }\n });\n }\n if (x && y) {\n // set up the point grip element and display it\n assignAttributes(pointGrip, {\n cx: x,\n cy: y,\n display: 'inline'\n });\n }\n return pointGrip;\n};\n/**\n* Requires prior call to `setUiStrings` if `xlink:title`\n* to be set on the grip.\n* @function module:path.addCtrlGrip\n* @param {string} id\n* @returns {SVGCircleElement}\n*/\nexport const addCtrlGripMethod = function (id) {\n let pointGrip = getElem('ctrlpointgrip_' + id);\n if (pointGrip) { return pointGrip; }\n\n pointGrip = document.createElementNS(NS.SVG, 'circle');\n const atts = {\n id: 'ctrlpointgrip_' + id,\n display: 'none',\n r: 4,\n fill: '#0FF',\n stroke: '#55F',\n 'stroke-width': 1,\n cursor: 'move',\n style: 'pointer-events:all'\n };\n const uiStrings = pathMethodsContext_.getUIStrings();\n if ('pathCtrlPtTooltip' in uiStrings) { // May be empty if running path.js without svg-editor\n atts['xlink:title'] = uiStrings.pathCtrlPtTooltip;\n }\n assignAttributes(pointGrip, atts);\n getGripContainerMethod().append(pointGrip);\n return pointGrip;\n};\n/**\n* @function module:path.getCtrlLine\n* @param {string} id\n* @returns {SVGLineElement}\n*/\nexport const getCtrlLineMethod = function (id) {\n let ctrlLine = getElem('ctrlLine_' + id);\n if (ctrlLine) { return ctrlLine; }\n\n ctrlLine = document.createElementNS(NS.SVG, 'line');\n assignAttributes(ctrlLine, {\n id: 'ctrlLine_' + id,\n stroke: '#555',\n 'stroke-width': 1,\n style: 'pointer-events:none'\n });\n getGripContainerMethod().append(ctrlLine);\n return ctrlLine;\n};\n/**\n* @function module:path.getPointGrip\n* @param {Segment} seg\n* @param {boolean} update\n* @returns {SVGCircleElement}\n*/\nexport const getPointGripMethod = function (seg, update) {\n const {index} = seg;\n const pointGrip = addPointGripMethod(index);\n\n if (update) {\n const pt = getGripPtMethod(seg);\n assignAttributes(pointGrip, {\n cx: pt.x,\n cy: pt.y,\n display: 'inline'\n });\n }\n\n return pointGrip;\n};\n/**\n* @function module:path.getControlPoints\n* @param {Segment} seg\n* @returns {PlainObject<string, SVGLineElement|SVGCircleElement>}\n*/\nexport const getControlPointsMethod = function (seg) {\n const {item, index} = seg;\n if (!('x1' in item) || !('x2' in item)) { return null; }\n const cpt = {};\n /* const pointGripContainer = */ getGripContainerMethod();\n\n // Note that this is intentionally not seg.prev.item\n const path = pathMethodsContext_.getPathObj();\n const prev = path.segs[index - 1].item;\n\n const segItems = [prev, item];\n\n for (let i = 1; i < 3; i++) {\n const id = index + 'c' + i;\n\n const ctrlLine = cpt['c' + i + '_line'] = getCtrlLineMethod(id);\n\n const pt = getGripPtMethod(seg, {x: item['x' + i], y: item['y' + i]});\n const gpt = getGripPtMethod(seg, {x: segItems[i - 1].x, y: segItems[i - 1].y});\n\n assignAttributes(ctrlLine, {\n x1: pt.x,\n y1: pt.y,\n x2: gpt.x,\n y2: gpt.y,\n display: 'inline'\n });\n\n cpt['c' + i + '_line'] = ctrlLine;\n\n // create it\n const pointGrip = cpt['c' + i] = addCtrlGripMethod(id);\n\n assignAttributes(pointGrip, {\n cx: pt.x,\n cy: pt.y,\n display: 'inline'\n });\n cpt['c' + i] = pointGrip;\n }\n return cpt;\n};\n/**\n* This replaces the segment at the given index. Type is given as number.\n* @function module:path.replacePathSeg\n* @param {Integer} type Possible values set during {@link module:path.init}\n* @param {Integer} index\n* @param {ArgumentsArray} pts\n* @param {SVGPathElement} elem\n* @returns {void}\n*/\nexport const replacePathSegMethod = function (type, index, pts, elem) {\n const path = pathMethodsContext_.getPathObj();\n const pth = elem || path.elem;\n const pathFuncs = pathMethodsContext_.getPathFuncs();\n const func = 'createSVGPathSeg' + pathFuncs[type];\n const seg = pth[func](...pts);\n\n if (supportsPathReplaceItem()) {\n pth.pathSegList.replaceItem(seg, index);\n } else {\n const segList = pth.pathSegList;\n const len = segList.numberOfItems;\n const arr = [];\n for (let i = 0; i < len; i++) {\n const curSeg = segList.getItem(i);\n arr.push(curSeg);\n }\n segList.clear();\n for (let i = 0; i < len; i++) {\n if (i === index) {\n segList.appendItem(seg);\n } else {\n segList.appendItem(arr[i]);\n }\n }\n }\n};\n/**\n* @function module:path.getSegSelector\n* @param {Segment} seg\n* @param {boolean} update\n* @returns {SVGPathElement}\n*/\nexport const getSegSelectorMethod = function (seg, update) {\n const {index} = seg;\n let segLine = getElem('segline_' + index);\n if (!segLine) {\n const pointGripContainer = getGripContainerMethod();\n // create segline\n segLine = document.createElementNS(NS.SVG, 'path');\n assignAttributes(segLine, {\n id: 'segline_' + index,\n display: 'none',\n fill: 'none',\n stroke: '#0FF',\n 'stroke-width': 2,\n style: 'pointer-events:none',\n d: 'M0,0 0,0'\n });\n pointGripContainer.append(segLine);\n }\n\n if (update) {\n const {prev} = seg;\n if (!prev) {\n segLine.setAttribute('display', 'none');\n return segLine;\n }\n\n const pt = getGripPtMethod(prev);\n // Set start point\n replacePathSegMethod(2, 0, [pt.x, pt.y], segLine);\n\n const pts = ptObjToArrMethod(seg.type, seg.item); // , true);\n for (let i = 0; i < pts.length; i += 2) {\n const point = getGripPtMethod(seg, {x: pts[i], y: pts[i + 1]});\n pts[i] = point.x;\n pts[i + 1] = point.y;\n }\n\n replacePathSegMethod(seg.type, 1, pts, segLine);\n }\n return segLine;\n};\n/**\n*\n*/\nexport class Segment {\n /**\n * @param {Integer} index\n * @param {SVGPathSeg} item\n * @todo Is `item` be more constrained here?\n */\n constructor (index, item) {\n this.selected = false;\n this.index = index;\n this.item = item;\n this.type = item.pathSegType;\n\n this.ctrlpts = [];\n this.ptgrip = null;\n this.segsel = null;\n }\n\n /**\n * @param {boolean} y\n * @returns {void}\n */\n showCtrlPts (y) {\n for (const i in this.ctrlpts) {\n if ({}.hasOwnProperty.call(this.ctrlpts, i)) {\n this.ctrlpts[i].setAttribute('display', y ? 'inline' : 'none');\n }\n }\n }\n\n /**\n * @param {boolean} y\n * @returns {void}\n */\n selectCtrls (y) {\n $('#ctrlpointgrip_' + this.index + 'c1, #ctrlpointgrip_' + this.index + 'c2')\n .attr('fill', y ? '#0FF' : '#EEE');\n }\n\n /**\n * @param {boolean} y\n * @returns {void}\n */\n show (y) {\n if (this.ptgrip) {\n this.ptgrip.setAttribute('display', y ? 'inline' : 'none');\n this.segsel.setAttribute('display', y ? 'inline' : 'none');\n // Show/hide all control points if available\n this.showCtrlPts(y);\n }\n }\n\n /**\n * @param {boolean} y\n * @returns {void}\n */\n select (y) {\n if (this.ptgrip) {\n this.ptgrip.setAttribute('stroke', y ? '#0FF' : '#00F');\n this.segsel.setAttribute('display', y ? 'inline' : 'none');\n if (this.ctrlpts) {\n this.selectCtrls(y);\n }\n this.selected = y;\n }\n }\n\n /**\n * @returns {void}\n */\n addGrip () {\n this.ptgrip = getPointGripMethod(this, true);\n this.ctrlpts = getControlPointsMethod(this); // , true);\n this.segsel = getSegSelectorMethod(this, true);\n }\n\n /**\n * @param {boolean} full\n * @returns {void}\n */\n update (full) {\n if (this.ptgrip) {\n const pt = getGripPtMethod(this);\n assignAttributes(this.ptgrip, {\n cx: pt.x,\n cy: pt.y\n });\n\n getSegSelectorMethod(this, true);\n\n if (this.ctrlpts) {\n if (full) {\n const path = pathMethodsContext_.getPathObj();\n this.item = path.elem.pathSegList.getItem(this.index);\n this.type = this.item.pathSegType;\n }\n getControlPointsMethod(this);\n }\n // this.segsel.setAttribute('display', y ? 'inline' : 'none');\n }\n }\n\n /**\n * @param {Integer} dx\n * @param {Integer} dy\n * @returns {void}\n */\n move (dx, dy) {\n const {item} = this;\n\n const curPts = this.ctrlpts\n ? [\n item.x += dx, item.y += dy,\n item.x1, item.y1, item.x2 += dx, item.y2 += dy\n ]\n : [item.x += dx, item.y += dy];\n\n replacePathSegMethod(\n this.type,\n this.index,\n // type 10 means ARC\n this.type === 10 ? ptObjToArrMethod(this.type, item) : curPts\n );\n\n if (this.next && this.next.ctrlpts) {\n const next = this.next.item;\n const nextPts = [\n next.x, next.y,\n next.x1 += dx, next.y1 += dy, next.x2, next.y2\n ];\n replacePathSegMethod(this.next.type, this.next.index, nextPts);\n }\n\n if (this.mate) {\n // The last point of a closed subpath has a 'mate',\n // which is the 'M' segment of the subpath\n const {item: itm} = this.mate;\n const pts = [itm.x += dx, itm.y += dy];\n replacePathSegMethod(this.mate.type, this.mate.index, pts);\n // Has no grip, so does not need 'updating'?\n }\n\n this.update(true);\n if (this.next) { this.next.update(true); }\n }\n\n /**\n * @param {Integer} num\n * @returns {void}\n */\n setLinked (num) {\n let seg, anum, pt;\n if (num === 2) {\n anum = 1;\n seg = this.next;\n if (!seg) { return; }\n pt = this.item;\n } else {\n anum = 2;\n seg = this.prev;\n if (!seg) { return; }\n pt = seg.item;\n }\n\n const {item} = seg;\n item['x' + anum] = pt.x + (pt.x - this.item['x' + num]);\n item['y' + anum] = pt.y + (pt.y - this.item['y' + num]);\n\n const pts = [\n item.x, item.y,\n item.x1, item.y1,\n item.x2, item.y2\n ];\n\n replacePathSegMethod(seg.type, seg.index, pts);\n seg.update(true);\n }\n\n /**\n * @param {Integer} num\n * @param {Integer} dx\n * @param {Integer} dy\n * @returns {void}\n */\n moveCtrl (num, dx, dy) {\n const {item} = this;\n item['x' + num] += dx;\n item['y' + num] += dy;\n\n const pts = [\n item.x, item.y,\n item.x1, item.y1, item.x2, item.y2\n ];\n\n replacePathSegMethod(this.type, this.index, pts);\n this.update(true);\n }\n\n /**\n * @param {Integer} newType Possible values set during {@link module:path.init}\n * @param {ArgumentsArray} pts\n * @returns {void}\n */\n setType (newType, pts) {\n replacePathSegMethod(newType, this.index, pts);\n this.type = newType;\n const path = pathMethodsContext_.getPathObj();\n this.item = path.elem.pathSegList.getItem(this.index);\n this.showCtrlPts(newType === 6);\n this.ctrlpts = getControlPointsMethod(this);\n this.update(true);\n }\n}\n\n/**\n*\n*/\nexport class Path {\n /**\n * @param {SVGPathElement} elem\n * @throws {Error} If constructed without a path element\n */\n constructor (elem) {\n if (!elem || elem.tagName !== 'path') {\n throw new Error('svgedit.path.Path constructed without a <path> element');\n }\n\n this.elem = elem;\n this.segs = [];\n this.selected_pts = [];\n pathMethodsContext_.setPathObj(this);\n // path = this;\n\n this.init();\n }\n\n /**\n * Reset path data.\n * @returns {module:path.Path}\n */\n init () {\n // Hide all grips, etc\n\n // fixed, needed to work on all found elements, not just first\n $(getGripContainerMethod()).find('*').each(function () {\n $(this).attr('display', 'none');\n });\n\n const segList = this.elem.pathSegList;\n const len = segList.numberOfItems;\n this.segs = [];\n this.selected_pts = [];\n this.first_seg = null;\n\n // Set up segs array\n for (let i = 0; i < len; i++) {\n const item = segList.getItem(i);\n const segment = new Segment(i, item);\n segment.path = this;\n this.segs.push(segment);\n }\n\n const {segs} = this;\n\n let startI = null;\n for (let i = 0; i < len; i++) {\n const seg = segs[i];\n const nextSeg = (i + 1) >= len ? null : segs[i + 1];\n const prevSeg = (i - 1) < 0 ? null : segs[i - 1];\n if (seg.type === 2) {\n if (prevSeg && prevSeg.type !== 1) {\n // New sub-path, last one is open,\n // so add a grip to last sub-path's first point\n const startSeg = segs[startI];\n startSeg.next = segs[startI + 1];\n startSeg.next.prev = startSeg;\n startSeg.addGrip();\n }\n // Remember that this is a starter seg\n startI = i;\n } else if (nextSeg && nextSeg.type === 1) {\n // This is the last real segment of a closed sub-path\n // Next is first seg after \"M\"\n seg.next = segs[startI + 1];\n\n // First seg after \"M\"'s prev is this\n seg.next.prev = seg;\n seg.mate = segs[startI];\n seg.addGrip();\n if (isNullish(this.first_seg)) {\n this.first_seg = seg;\n }\n } else if (!nextSeg) {\n if (seg.type !== 1) {\n // Last seg, doesn't close so add a grip\n // to last sub-path's first point\n const startSeg = segs[startI];\n startSeg.next = segs[startI + 1];\n startSeg.next.prev = startSeg;\n startSeg.addGrip();\n seg.addGrip();\n\n if (!this.first_seg) {\n // Open path, so set first as real first and add grip\n this.first_seg = segs[startI];\n }\n }\n } else if (seg.type !== 1) {\n // Regular segment, so add grip and its \"next\"\n seg.addGrip();\n\n // Don't set its \"next\" if it's an \"M\"\n if (nextSeg && nextSeg.type !== 2) {\n seg.next = nextSeg;\n seg.next.prev = seg;\n }\n }\n }\n return this;\n }\n\n /**\n * @callback module:path.PathEachSegCallback\n * @this module:path.Segment\n * @param {Integer} i The index of the seg being iterated\n * @returns {boolean|void} Will stop execution of `eachSeg` if returns `false`\n */\n /**\n * @param {module:path.PathEachSegCallback} fn\n * @returns {void}\n */\n eachSeg (fn) {\n const len = this.segs.length;\n for (let i = 0; i < len; i++) {\n const ret = fn.call(this.segs[i], i);\n if (ret === false) { break; }\n }\n }\n\n /**\n * @param {Integer} index\n * @returns {void}\n */\n addSeg (index) {\n // Adds a new segment\n const seg = this.segs[index];\n if (!seg.prev) { return; }\n\n const {prev} = seg;\n let newseg, newX, newY;\n switch (seg.item.pathSegType) {\n case 4: {\n newX = (seg.item.x + prev.item.x) / 2;\n newY = (seg.item.y + prev.item.y) / 2;\n newseg = this.elem.createSVGPathSegLinetoAbs(newX, newY);\n break;\n } case 6: { // make it a curved segment to preserve the shape (WRS)\n // https://en.wikipedia.org/wiki/De_Casteljau%27s_algorithm#Geometric_interpretation\n const p0x = (prev.item.x + seg.item.x1) / 2;\n const p1x = (seg.item.x1 + seg.item.x2) / 2;\n const p2x = (seg.item.x2 + seg.item.x) / 2;\n const p01x = (p0x + p1x) / 2;\n const p12x = (p1x + p2x) / 2;\n newX = (p01x + p12x) / 2;\n const p0y = (prev.item.y + seg.item.y1) / 2;\n const p1y = (seg.item.y1 + seg.item.y2) / 2;\n const p2y = (seg.item.y2 + seg.item.y) / 2;\n const p01y = (p0y + p1y) / 2;\n const p12y = (p1y + p2y) / 2;\n newY = (p01y + p12y) / 2;\n newseg = this.elem.createSVGPathSegCurvetoCubicAbs(newX, newY, p0x, p0y, p01x, p01y);\n const pts = [seg.item.x, seg.item.y, p12x, p12y, p2x, p2y];\n replacePathSegMethod(seg.type, index, pts);\n break;\n }\n }\n\n insertItemBeforeMethod(this.elem, newseg, index);\n }\n\n /**\n * @param {Integer} index\n * @returns {void}\n */\n deleteSeg (index) {\n const seg = this.segs[index];\n const list = this.elem.pathSegList;\n\n seg.show(false);\n const {next} = seg;\n if (seg.mate) {\n // Make the next point be the \"M\" point\n const pt = [next.item.x, next.item.y];\n replacePathSegMethod(2, next.index, pt);\n\n // Reposition last node\n replacePathSegMethod(4, seg.index, pt);\n\n list.removeItem(seg.mate.index);\n } else if (!seg.prev) {\n // First node of open path, make next point the M\n // const {item} = seg;\n const pt = [next.item.x, next.item.y];\n replacePathSegMethod(2, seg.next.index, pt);\n list.removeItem(index);\n } else {\n list.removeItem(index);\n }\n }\n\n /**\n * @param {Integer} index\n * @returns {void}\n */\n removePtFromSelection (index) {\n const pos = this.selected_pts.indexOf(index);\n if (pos === -1) {\n return;\n }\n this.segs[index].select(false);\n this.selected_pts.splice(pos, 1);\n }\n\n /**\n * @returns {void}\n */\n clearSelection () {\n this.eachSeg(function () {\n // 'this' is the segment here\n this.select(false);\n });\n this.selected_pts = [];\n }\n\n /**\n * @returns {void}\n */\n storeD () {\n this.last_d = this.elem.getAttribute('d');\n }\n\n /**\n * @param {Integer} y\n * @returns {Path}\n */\n show (y) {\n // Shows this path's segment grips\n this.eachSeg(function () {\n // 'this' is the segment here\n this.show(y);\n });\n if (y) {\n this.selectPt(this.first_seg.index);\n }\n return this;\n }\n\n /**\n * Move selected points.\n * @param {Integer} dx\n * @param {Integer} dy\n * @returns {void}\n */\n movePts (dx, dy) {\n let i = this.selected_pts.length;\n while (i--) {\n const seg = this.segs[this.selected_pts[i]];\n seg.move(dx, dy);\n }\n }\n\n /**\n * @param {Integer} dx\n * @param {Integer} dy\n * @returns {void}\n */\n moveCtrl (dx, dy) {\n const seg = this.segs[this.selected_pts[0]];\n seg.moveCtrl(this.dragctrl, dx, dy);\n if (pathMethodsContext_.getLinkControlPts()) {\n seg.setLinked(this.dragctrl);\n }\n }\n\n /**\n * @param {?Integer} newType See {@link https://www.w3.org/TR/SVG/single-page.html#paths-InterfaceSVGPathSeg}\n * @returns {void}\n */\n setSegType (newType) {\n this.storeD();\n let i = this.selected_pts.length;\n let text;\n while (i--) {\n const selPt = this.selected_pts[i];\n\n // Selected seg\n const cur = this.segs[selPt];\n const {prev} = cur;\n if (!prev) { continue; }\n\n if (!newType) { // double-click, so just toggle\n text = 'Toggle Path Segment Type';\n\n // Toggle segment to curve/straight line\n const oldType = cur.type;\n\n newType = (oldType === 6) ? 4 : 6;\n }\n\n newType = Number(newType);\n\n const curX = cur.item.x;\n const curY = cur.item.y;\n const prevX = prev.item.x;\n const prevY = prev.item.y;\n let points;\n switch (newType) {\n case 6: {\n if (cur.olditem) {\n const old = cur.olditem;\n points = [curX, curY, old.x1, old.y1, old.x2, old.y2];\n } else {\n const diffX = curX - prevX;\n const diffY = curY - prevY;\n // get control points from straight line segment\n /*\n const ct1x = (prevX + (diffY/2));\n const ct1y = (prevY - (diffX/2));\n const ct2x = (curX + (diffY/2));\n const ct2y = (curY - (diffX/2));\n */\n // create control points on the line to preserve the shape (WRS)\n const ct1x = (prevX + (diffX / 3));\n const ct1y = (prevY + (diffY / 3));\n const ct2x = (curX - (diffX / 3));\n const ct2y = (curY - (diffY / 3));\n points = [curX, curY, ct1x, ct1y, ct2x, ct2y];\n }\n break;\n } case 4: {\n points = [curX, curY];\n\n // Store original prevve segment nums\n cur.olditem = cur.item;\n break;\n }\n }\n\n cur.setType(newType, points);\n }\n const path = pathMethodsContext_.getPathObj();\n path.endChanges(text);\n }\n\n /**\n * @param {Integer} pt\n * @param {Integer} ctrlNum\n * @returns {void}\n */\n selectPt (pt, ctrlNum) {\n this.clearSelection();\n if (isNullish(pt)) {\n this.eachSeg(function (i) {\n // 'this' is the segment here.\n if (this.prev) {\n pt = i;\n }\n });\n }\n this.addPtsToSelection(pt);\n if (ctrlNum) {\n this.dragctrl = ctrlNum;\n\n if (pathMethodsContext_.getLinkControlPts()) {\n this.segs[pt].setLinked(ctrlNum);\n }\n }\n }\n\n /**\n * Update position of all points.\n * @returns {Path}\n */\n update () {\n const {elem} = this;\n if (getRotationAngle(elem)) {\n this.matrix = getMatrix(elem);\n this.imatrix = this.matrix.inverse();\n } else {\n this.matrix = null;\n this.imatrix = null;\n }\n\n this.eachSeg(function (i) {\n this.item = elem.pathSegList.getItem(i);\n this.update();\n });\n\n return this;\n }\n\n /**\n * @param {string} text\n * @returns {void}\n */\n endChanges (text) {\n if (isWebkit()) { editorContext_.resetD(this.elem); }\n const cmd = new ChangeElementCommand(this.elem, {d: this.last_d}, text);\n editorContext_.endChanges({cmd, elem: this.elem});\n }\n\n /**\n * @param {Integer|Integer[]} indexes\n * @returns {void}\n */\n addPtsToSelection (indexes) {\n if (!Array.isArray(indexes)) { indexes = [indexes]; }\n indexes.forEach((index) => {\n const seg = this.segs[index];\n if (seg.ptgrip && !this.selected_pts.includes(index) && index >= 0) {\n this.selected_pts.push(index);\n }\n });\n this.selected_pts.sort();\n let i = this.selected_pts.length;\n const grips = [];\n grips.length = i;\n // Loop through points to be selected and highlight each\n while (i--) {\n const pt = this.selected_pts[i];\n const seg = this.segs[pt];\n seg.select(true);\n grips[i] = seg.ptgrip;\n }\n\n const closedSubpath = Path.subpathIsClosed(this.selected_pts[0]);\n editorContext_.addPtsToSelection({grips, closedSubpath});\n }\n\n // STATIC\n /**\n * @param {Integer} index\n * @returns {boolean}\n */\n static subpathIsClosed (index) {\n let clsd = false;\n // Check if subpath is already open\n const path = pathMethodsContext_.getPathObj();\n path.eachSeg(function (i) {\n if (i <= index) { return true; }\n if (this.type === 2) {\n // Found M first, so open\n return false;\n }\n if (this.type === 1) {\n // Found Z first, so closed\n clsd = true;\n return false;\n }\n return true;\n });\n\n return clsd;\n }\n}\n","/* globals jQuery */\n/**\n * Path functionality.\n * @module path\n * @license MIT\n *\n * @copyright 2011 Alexis Deveria, 2011 Jeff Schiller\n */\n\nimport {NS} from '../common/namespaces.js';\nimport {shortFloat} from '../common/units.js';\nimport {getTransformList} from './svgtransformlist.js';\nimport {ChangeElementCommand, BatchCommand} from './history.js';\nimport {\n transformPoint, snapToAngle, rectsIntersect,\n transformListToTransform\n} from './math.js';\nimport {\n assignAttributes, getElem, getRotationAngle, snapToGrid, isNullish,\n getBBox as utilsGetBBox\n} from './utilities.js';\nimport {\n isWebkit\n} from '../common/browser.js';\n\nconst $ = jQuery;\n\nlet pathActionsContext_ = null;\nlet editorContext_ = null;\nlet path = null;\n\n/**\n* @function module:path-actions.init\n* @param {module:path-actions.pathActionsContext_} pathActionsContext\n* @returns {void}\n*/\nexport const init = function (pathActionsContext) {\n pathActionsContext_ = pathActionsContext;\n // editorContext_ = pathActionsContext_.getEditorContext();\n // path = pathActionsContext_.getPathObj();\n};\n\n/**\n * Convert a path to one with only absolute or relative values.\n * @todo move to pathActions.js\n * @function module:path.convertPath\n * @param {SVGPathElement} pth - the path to convert\n * @param {boolean} toRel - true of convert to relative\n * @returns {string}\n */\nexport const convertPath = function (pth, toRel) {\n const {pathSegList} = pth;\n const len = pathSegList.numberOfItems;\n let curx = 0, cury = 0;\n let d = '';\n let lastM = null;\n\n for (let i = 0; i < len; ++i) {\n const seg = pathSegList.getItem(i);\n // if these properties are not in the segment, set them to zero\n let x = seg.x || 0,\n y = seg.y || 0,\n x1 = seg.x1 || 0,\n y1 = seg.y1 || 0,\n x2 = seg.x2 || 0,\n y2 = seg.y2 || 0;\n\n const type = seg.pathSegType;\n const pathMap = pathActionsContext_.getPathMap();\n let letter = pathMap[type][toRel ? 'toLowerCase' : 'toUpperCase']();\n\n switch (type) {\n case 1: // z,Z closepath (Z/z)\n d += 'z';\n if (lastM && !toRel) {\n curx = lastM[0];\n cury = lastM[1];\n }\n break;\n case 12: // absolute horizontal line (H)\n x -= curx;\n // Fallthrough\n case 13: // relative horizontal line (h)\n if (toRel) {\n y = 0;\n curx += x;\n letter = 'l';\n } else {\n y = cury;\n x += curx;\n curx = x;\n letter = 'L';\n }\n // Convert to \"line\" for easier editing\n d += pathDSegment(letter, [[x, y]]);\n break;\n case 14: // absolute vertical line (V)\n y -= cury;\n // Fallthrough\n case 15: // relative vertical line (v)\n if (toRel) {\n x = 0;\n cury += y;\n letter = 'l';\n } else {\n x = curx;\n y += cury;\n cury = y;\n letter = 'L';\n }\n // Convert to \"line\" for easier editing\n d += pathDSegment(letter, [[x, y]]);\n break;\n case 2: // absolute move (M)\n case 4: // absolute line (L)\n case 18: // absolute smooth quad (T)\n x -= curx;\n y -= cury;\n // Fallthrough\n case 5: // relative line (l)\n case 3: // relative move (m)\n case 19: // relative smooth quad (t)\n if (toRel) {\n curx += x;\n cury += y;\n } else {\n x += curx;\n y += cury;\n curx = x;\n cury = y;\n }\n if (type === 2 || type === 3) { lastM = [curx, cury]; }\n\n d += pathDSegment(letter, [[x, y]]);\n break;\n case 6: // absolute cubic (C)\n x -= curx; x1 -= curx; x2 -= curx;\n y -= cury; y1 -= cury; y2 -= cury;\n // Fallthrough\n case 7: // relative cubic (c)\n if (toRel) {\n curx += x;\n cury += y;\n } else {\n x += curx; x1 += curx; x2 += curx;\n y += cury; y1 += cury; y2 += cury;\n curx = x;\n cury = y;\n }\n d += pathDSegment(letter, [[x1, y1], [x2, y2], [x, y]]);\n break;\n case 8: // absolute quad (Q)\n x -= curx; x1 -= curx;\n y -= cury; y1 -= cury;\n // Fallthrough\n case 9: // relative quad (q)\n if (toRel) {\n curx += x;\n cury += y;\n } else {\n x += curx; x1 += curx;\n y += cury; y1 += cury;\n curx = x;\n cury = y;\n }\n d += pathDSegment(letter, [[x1, y1], [x, y]]);\n break;\n case 10: // absolute elliptical arc (A)\n x -= curx;\n y -= cury;\n // Fallthrough\n case 11: // relative elliptical arc (a)\n if (toRel) {\n curx += x;\n cury += y;\n } else {\n x += curx;\n y += cury;\n curx = x;\n cury = y;\n }\n d += pathDSegment(letter, [[seg.r1, seg.r2]], [\n seg.angle,\n (seg.largeArcFlag ? 1 : 0),\n (seg.sweepFlag ? 1 : 0)\n ], [x, y]);\n break;\n case 16: // absolute smooth cubic (S)\n x -= curx; x2 -= curx;\n y -= cury; y2 -= cury;\n // Fallthrough\n case 17: // relative smooth cubic (s)\n if (toRel) {\n curx += x;\n cury += y;\n } else {\n x += curx; x2 += curx;\n y += cury; y2 += cury;\n curx = x;\n cury = y;\n }\n d += pathDSegment(letter, [[x2, y2], [x, y]]);\n break;\n } // switch on path segment type\n } // for each segment\n return d;\n};\n\n/**\n * TODO: refactor callers in `convertPath` to use `getPathDFromSegments` instead of this function.\n * Legacy code refactored from `svgcanvas.pathActions.convertPath`.\n * @param {string} letter - path segment command (letter in potentially either case from {@link module:path.pathMap}; see [SVGPathSeg#pathSegTypeAsLetter]{@link https://www.w3.org/TR/SVG/single-page.html#paths-__svg__SVGPathSeg__pathSegTypeAsLetter})\n * @param {GenericArray<GenericArray<Integer>>} points - x,y points\n * @param {GenericArray<GenericArray<Integer>>} [morePoints] - x,y points\n * @param {Integer[]} [lastPoint] - x,y point\n * @returns {string}\n */\nfunction pathDSegment (letter, points, morePoints, lastPoint) {\n $.each(points, function (i, pnt) {\n points[i] = shortFloat(pnt);\n });\n let segment = letter + points.join(' ');\n if (morePoints) {\n segment += ' ' + morePoints.join(' ');\n }\n if (lastPoint) {\n segment += ' ' + shortFloat(lastPoint);\n }\n return segment;\n}\n\n/**\n* Group: Path edit functions.\n* Functions relating to editing path elements.\n* @namespace {PlainObject} pathActions\n* @memberof module:path\n*/\nexport const pathActionsMethod = (function () {\n let subpath = false;\n let newPoint, firstCtrl;\n\n let currentPath = null;\n let hasMoved = false;\n // No `editorContext_` yet but should be ok as is `null` by default\n // editorContext_.setDrawnPath(null);\n\n /**\n * This function converts a polyline (created by the fh_path tool) into\n * a path element and coverts every three line segments into a single bezier\n * curve in an attempt to smooth out the free-hand.\n * @function smoothPolylineIntoPath\n * @param {Element} element\n * @returns {Element}\n */\n const smoothPolylineIntoPath = function (element) {\n let i;\n const {points} = element;\n const N = points.numberOfItems;\n if (N >= 4) {\n // loop through every 3 points and convert to a cubic bezier curve segment\n //\n // NOTE: this is cheating, it means that every 3 points has the potential to\n // be a corner instead of treating each point in an equal manner. In general,\n // this technique does not look that good.\n //\n // I am open to better ideas!\n //\n // Reading:\n // - http://www.efg2.com/Lab/Graphics/Jean-YvesQueinecBezierCurves.htm\n // - https://www.codeproject.com/KB/graphics/BezierSpline.aspx?msg=2956963\n // - https://www.ian-ko.com/ET_GeoWizards/UserGuide/smooth.htm\n // - https://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/Bezier/bezier-der.html\n let curpos = points.getItem(0), prevCtlPt = null;\n let d = [];\n d.push(['M', curpos.x, ',', curpos.y, ' C'].join(''));\n for (i = 1; i <= (N - 4); i += 3) {\n let ct1 = points.getItem(i);\n const ct2 = points.getItem(i + 1);\n const end = points.getItem(i + 2);\n\n // if the previous segment had a control point, we want to smooth out\n // the control points on both sides\n if (prevCtlPt) {\n const newpts = pathActionsContext_.smoothControlPoints(prevCtlPt, ct1, curpos);\n if (newpts && newpts.length === 2) {\n const prevArr = d[d.length - 1].split(',');\n prevArr[2] = newpts[0].x;\n prevArr[3] = newpts[0].y;\n d[d.length - 1] = prevArr.join(',');\n ct1 = newpts[1];\n }\n }\n\n d.push([ct1.x, ct1.y, ct2.x, ct2.y, end.x, end.y].join(','));\n\n curpos = end;\n prevCtlPt = ct2;\n }\n // handle remaining line segments\n d.push('L');\n while (i < N) {\n const pt = points.getItem(i);\n d.push([pt.x, pt.y].join(','));\n i++;\n }\n d = d.join(' ');\n\n // create new path element\n editorContext_ = pathActionsContext_.getEditorContext();\n element = editorContext_.addSVGElementFromJson({\n element: 'path',\n curStyles: true,\n attr: {\n id: editorContext_.getId(),\n d,\n fill: 'none'\n }\n });\n // No need to call \"changed\", as this is already done under mouseUp\n }\n return element;\n };\n // console.log(pathActionsContext_);\n // const convertPath = pathActionsContext_.getConvertPath();\n return (/** @lends module:path.pathActions */ {\n /**\n * @param {MouseEvent} evt\n * @param {Element} mouseTarget\n * @param {Float} startX\n * @param {Float} startY\n * @returns {boolean|void}\n */\n mouseDown (evt, mouseTarget, startX, startY) {\n let id;\n editorContext_ = pathActionsContext_.getEditorContext();\n if (editorContext_.getCurrentMode() === 'path') {\n let mouseX = startX; // Was this meant to work with the other `mouseX`? (was defined globally so adding `let` to at least avoid a global)\n let mouseY = startY; // Was this meant to work with the other `mouseY`? (was defined globally so adding `let` to at least avoid a global)\n\n const currentZoom = editorContext_.getCurrentZoom();\n let x = mouseX / currentZoom,\n y = mouseY / currentZoom,\n stretchy = getElem('path_stretch_line');\n newPoint = [x, y];\n\n if (editorContext_.getGridSnapping()) {\n x = snapToGrid(x);\n y = snapToGrid(y);\n mouseX = snapToGrid(mouseX);\n mouseY = snapToGrid(mouseY);\n }\n\n if (!stretchy) {\n stretchy = document.createElementNS(NS.SVG, 'path');\n assignAttributes(stretchy, {\n id: 'path_stretch_line',\n stroke: '#22C',\n 'stroke-width': '0.5',\n fill: 'none'\n });\n getElem('selectorParentGroup').append(stretchy);\n }\n stretchy.setAttribute('display', 'inline');\n\n let keep = null;\n let index;\n // if pts array is empty, create path element with M at current point\n const drawnPath = editorContext_.getDrawnPath();\n if (!drawnPath) {\n const dAttr = 'M' + x + ',' + y + ' '; // Was this meant to work with the other `dAttr`? (was defined globally so adding `var` to at least avoid a global)\n /* drawnPath = */ editorContext_.setDrawnPath(editorContext_.addSVGElementFromJson({\n element: 'path',\n curStyles: true,\n attr: {\n d: dAttr,\n id: editorContext_.getNextId(),\n opacity: editorContext_.getOpacity() / 2\n }\n }));\n // set stretchy line to first point\n stretchy.setAttribute('d', ['M', mouseX, mouseY, mouseX, mouseY].join(' '));\n index = subpath ? path.segs.length : 0;\n pathActionsContext_.addPointGrip(index, mouseX, mouseY);\n } else {\n // determine if we clicked on an existing point\n const seglist = drawnPath.pathSegList;\n let i = seglist.numberOfItems;\n const FUZZ = 6 / currentZoom;\n let clickOnPoint = false;\n while (i) {\n i--;\n const item = seglist.getItem(i);\n const px = item.x, py = item.y;\n // found a matching point\n if (x >= (px - FUZZ) && x <= (px + FUZZ) &&\n y >= (py - FUZZ) && y <= (py + FUZZ)\n ) {\n clickOnPoint = true;\n break;\n }\n }\n\n // get path element that we are in the process of creating\n id = editorContext_.getId();\n\n // Remove previous path object if previously created\n pathActionsContext_.removePath_(id);\n\n const newpath = getElem(id);\n let newseg;\n let sSeg;\n const len = seglist.numberOfItems;\n // if we clicked on an existing point, then we are done this path, commit it\n // (i, i+1) are the x,y that were clicked on\n if (clickOnPoint) {\n // if clicked on any other point but the first OR\n // the first point was clicked on and there are less than 3 points\n // then leave the path open\n // otherwise, close the path\n if (i <= 1 && len >= 2) {\n // Create end segment\n const absX = seglist.getItem(0).x;\n const absY = seglist.getItem(0).y;\n\n sSeg = stretchy.pathSegList.getItem(1);\n newseg = sSeg.pathSegType === 4\n ? drawnPath.createSVGPathSegLinetoAbs(absX, absY)\n : drawnPath.createSVGPathSegCurvetoCubicAbs(absX, absY, sSeg.x1 / currentZoom, sSeg.y1 / currentZoom, absX, absY);\n\n const endseg = drawnPath.createSVGPathSegClosePath();\n seglist.appendItem(newseg);\n seglist.appendItem(endseg);\n } else if (len < 3) {\n keep = false;\n return keep;\n }\n $(stretchy).remove();\n\n // This will signal to commit the path\n // const element = newpath; // Other event handlers define own `element`, so this was probably not meant to interact with them or one which shares state (as there were none); I therefore adding a missing `var` to avoid a global\n /* drawnPath = */ editorContext_.setDrawnPath(null);\n editorContext_.setStarted(false);\n\n if (subpath) {\n if (path.matrix) {\n editorContext_.remapElement(newpath, {}, path.matrix.inverse());\n }\n\n const newD = newpath.getAttribute('d');\n const origD = $(path.elem).attr('d');\n $(path.elem).attr('d', origD + newD);\n $(newpath).remove();\n if (path.matrix) {\n pathActionsContext_.recalcRotatedPath();\n }\n init();\n pathActionsMethod.toEditMode(path.elem);\n path.selectPt();\n return false;\n }\n // else, create a new point, update path element\n } else {\n // Checks if current target or parents are #svgcontent\n if (!$.contains(\n editorContext_.getContainer(),\n editorContext_.getMouseTarget(evt)\n )) {\n // Clicked outside canvas, so don't make point\n // console.log('Clicked outside canvas');\n return false;\n }\n\n const num = drawnPath.pathSegList.numberOfItems;\n const last = drawnPath.pathSegList.getItem(num - 1);\n const lastx = last.x, lasty = last.y;\n\n if (evt.shiftKey) {\n const xya = snapToAngle(lastx, lasty, x, y);\n ({x, y} = xya);\n }\n\n // Use the segment defined by stretchy\n sSeg = stretchy.pathSegList.getItem(1);\n newseg = sSeg.pathSegType === 4\n ? drawnPath.createSVGPathSegLinetoAbs(editorContext_.round(x), editorContext_.round(y))\n : drawnPath.createSVGPathSegCurvetoCubicAbs(\n editorContext_.round(x),\n editorContext_.round(y),\n sSeg.x1 / currentZoom,\n sSeg.y1 / currentZoom,\n sSeg.x2 / currentZoom,\n sSeg.y2 / currentZoom\n );\n\n drawnPath.pathSegList.appendItem(newseg);\n\n x *= currentZoom;\n y *= currentZoom;\n\n // set stretchy line to latest point\n stretchy.setAttribute('d', ['M', x, y, x, y].join(' '));\n index = num;\n if (subpath) { index += path.segs.length; }\n pathActionsContext_.addPointGrip(index, x, y);\n }\n // keep = true;\n }\n\n return undefined;\n }\n\n // TODO: Make sure currentPath isn't null at this point\n if (!path) { return undefined; }\n\n path.storeD();\n\n ({id} = evt.target);\n let curPt;\n if (id.substr(0, 14) === 'pathpointgrip_') {\n // Select this point\n curPt = path.cur_pt = Number.parseInt(id.substr(14));\n path.dragging = [startX, startY];\n const seg = path.segs[curPt];\n\n // only clear selection if shift is not pressed (otherwise, add\n // node to selection)\n if (!evt.shiftKey) {\n if (path.selected_pts.length <= 1 || !seg.selected) {\n path.clearSelection();\n }\n path.addPtsToSelection(curPt);\n } else if (seg.selected) {\n path.removePtFromSelection(curPt);\n } else {\n path.addPtsToSelection(curPt);\n }\n } else if (id.startsWith('ctrlpointgrip_')) {\n path.dragging = [startX, startY];\n\n const parts = id.split('_')[1].split('c');\n curPt = Number(parts[0]);\n const ctrlNum = Number(parts[1]);\n path.selectPt(curPt, ctrlNum);\n }\n\n // Start selection box\n if (!path.dragging) {\n let rubberBox = editorContext_.getRubberBox();\n if (isNullish(rubberBox)) {\n rubberBox = editorContext_.setRubberBox(\n editorContext_.selectorManager.getRubberBandBox()\n );\n }\n const currentZoom = editorContext_.getCurrentZoom();\n assignAttributes(rubberBox, {\n x: startX * currentZoom,\n y: startY * currentZoom,\n width: 0,\n height: 0,\n display: 'inline'\n }, 100);\n }\n return undefined;\n },\n /**\n * @param {Float} mouseX\n * @param {Float} mouseY\n * @returns {void}\n */\n mouseMove (mouseX, mouseY) {\n editorContext_ = pathActionsContext_.getEditorContext();\n const currentZoom = editorContext_.getCurrentZoom();\n hasMoved = true;\n const drawnPath = editorContext_.getDrawnPath();\n if (editorContext_.getCurrentMode() === 'path') {\n if (!drawnPath) { return; }\n const seglist = drawnPath.pathSegList;\n const index = seglist.numberOfItems - 1;\n\n if (newPoint) {\n // First point\n // if (!index) { return; }\n\n // Set control points\n const pointGrip1 = pathActionsContext_.addCtrlGrip('1c1');\n const pointGrip2 = pathActionsContext_.addCtrlGrip('0c2');\n\n // dragging pointGrip1\n pointGrip1.setAttribute('cx', mouseX);\n pointGrip1.setAttribute('cy', mouseY);\n pointGrip1.setAttribute('display', 'inline');\n\n const ptX = newPoint[0];\n const ptY = newPoint[1];\n\n // set curve\n // const seg = seglist.getItem(index);\n const curX = mouseX / currentZoom;\n const curY = mouseY / currentZoom;\n const altX = (ptX + (ptX - curX));\n const altY = (ptY + (ptY - curY));\n\n pointGrip2.setAttribute('cx', altX * currentZoom);\n pointGrip2.setAttribute('cy', altY * currentZoom);\n pointGrip2.setAttribute('display', 'inline');\n\n const ctrlLine = pathActionsContext_.getCtrlLine(1);\n assignAttributes(ctrlLine, {\n x1: mouseX,\n y1: mouseY,\n x2: altX * currentZoom,\n y2: altY * currentZoom,\n display: 'inline'\n });\n\n if (index === 0) {\n firstCtrl = [mouseX, mouseY];\n } else {\n const last = seglist.getItem(index - 1);\n let lastX = last.x;\n let lastY = last.y;\n\n if (last.pathSegType === 6) {\n lastX += (lastX - last.x2);\n lastY += (lastY - last.y2);\n } else if (firstCtrl) {\n lastX = firstCtrl[0] / currentZoom;\n lastY = firstCtrl[1] / currentZoom;\n }\n pathActionsContext_.replacePathSeg(6, index, [ptX, ptY, lastX, lastY, altX, altY], drawnPath);\n }\n } else {\n const stretchy = getElem('path_stretch_line');\n if (stretchy) {\n const prev = seglist.getItem(index);\n if (prev.pathSegType === 6) {\n const prevX = prev.x + (prev.x - prev.x2);\n const prevY = prev.y + (prev.y - prev.y2);\n pathActionsContext_.replacePathSeg(\n 6,\n 1,\n [mouseX, mouseY, prevX * currentZoom, prevY * currentZoom, mouseX, mouseY],\n stretchy\n );\n } else if (firstCtrl) {\n pathActionsContext_.replacePathSeg(6, 1, [mouseX, mouseY, firstCtrl[0], firstCtrl[1], mouseX, mouseY], stretchy);\n } else {\n pathActionsContext_.replacePathSeg(4, 1, [mouseX, mouseY], stretchy);\n }\n }\n }\n return;\n }\n // if we are dragging a point, let's move it\n if (path.dragging) {\n const pt = pathActionsContext_.getPointFromGrip({\n x: path.dragging[0],\n y: path.dragging[1]\n }, path);\n const mpt = pathActionsContext_.getPointFromGrip({\n x: mouseX,\n y: mouseY\n }, path);\n const diffX = mpt.x - pt.x;\n const diffY = mpt.y - pt.y;\n path.dragging = [mouseX, mouseY];\n\n if (path.dragctrl) {\n path.moveCtrl(diffX, diffY);\n } else {\n path.movePts(diffX, diffY);\n }\n } else {\n path.selected_pts = [];\n path.eachSeg(function (_i) {\n const seg = this;\n if (!seg.next && !seg.prev) { return; }\n\n // const {item} = seg;\n const rubberBox = editorContext_.getRubberBox();\n const rbb = rubberBox.getBBox();\n\n const pt = pathActionsContext_.getGripPt(seg);\n const ptBb = {\n x: pt.x,\n y: pt.y,\n width: 0,\n height: 0\n };\n\n const sel = rectsIntersect(rbb, ptBb);\n\n this.select(sel);\n // Note that addPtsToSelection is not being run\n if (sel) { path.selected_pts.push(seg.index); }\n });\n }\n },\n /**\n * @typedef module:path.keepElement\n * @type {PlainObject}\n * @property {boolean} keep\n * @property {Element} element\n */\n /**\n * @param {Event} evt\n * @param {Element} element\n * @param {Float} _mouseX\n * @param {Float} _mouseY\n * @returns {module:path.keepElement|void}\n */\n mouseUp (evt, element, _mouseX, _mouseY) {\n editorContext_ = pathActionsContext_.getEditorContext();\n const drawnPath = editorContext_.getDrawnPath();\n // Create mode\n if (editorContext_.getCurrentMode() === 'path') {\n newPoint = null;\n if (!drawnPath) {\n element = getElem(editorContext_.getId());\n editorContext_.setStarted(false);\n firstCtrl = null;\n }\n\n return {\n keep: true,\n element\n };\n }\n\n // Edit mode\n const rubberBox = editorContext_.getRubberBox();\n if (path.dragging) {\n const lastPt = path.cur_pt;\n\n path.dragging = false;\n path.dragctrl = false;\n path.update();\n\n if (hasMoved) {\n path.endChanges('Move path point(s)');\n }\n\n if (!evt.shiftKey && !hasMoved) {\n path.selectPt(lastPt);\n }\n } else if (rubberBox && rubberBox.getAttribute('display') !== 'none') {\n // Done with multi-node-select\n rubberBox.setAttribute('display', 'none');\n\n if (rubberBox.getAttribute('width') <= 2 && rubberBox.getAttribute('height') <= 2) {\n pathActionsMethod.toSelectMode(evt.target);\n }\n\n // else, move back to select mode\n } else {\n pathActionsMethod.toSelectMode(evt.target);\n }\n hasMoved = false;\n return undefined;\n },\n /**\n * @param {Element} element\n * @returns {void}\n */\n toEditMode (element) {\n editorContext_ = pathActionsContext_.getEditorContext();\n path = pathActionsContext_.getPath_(element);\n editorContext_.setCurrentMode('pathedit');\n editorContext_.clearSelection();\n path.show(true).update();\n path.oldbbox = utilsGetBBox(path.elem);\n subpath = false;\n },\n /**\n * @param {Element} elem\n * @fires module:svgcanvas.SvgCanvas#event:selected\n * @returns {void}\n */\n toSelectMode (elem) {\n editorContext_ = pathActionsContext_.getEditorContext();\n const selPath = (elem === path.elem);\n editorContext_.setCurrentMode('select');\n path.show(false);\n currentPath = false;\n editorContext_.clearSelection();\n\n if (path.matrix) {\n // Rotated, so may need to re-calculate the center\n pathActionsContext_.recalcRotatedPath();\n }\n\n if (selPath) {\n editorContext_.call('selected', [elem]);\n editorContext_.addToSelection([elem], true);\n }\n },\n /**\n * @param {boolean} on\n * @returns {void}\n */\n addSubPath (on) {\n editorContext_ = pathActionsContext_.getEditorContext();\n if (on) {\n // Internally we go into \"path\" mode, but in the UI it will\n // still appear as if in \"pathedit\" mode.\n editorContext_.setCurrentMode('path');\n subpath = true;\n } else {\n pathActionsMethod.clear(true);\n pathActionsMethod.toEditMode(path.elem);\n }\n },\n /**\n * @param {Element} target\n * @returns {void}\n */\n select (target) {\n editorContext_ = pathActionsContext_.getEditorContext();\n if (currentPath === target) {\n pathActionsMethod.toEditMode(target);\n editorContext_.setCurrentMode('pathedit');\n // going into pathedit mode\n } else {\n currentPath = target;\n }\n },\n /**\n * @fires module:svgcanvas.SvgCanvas#event:changed\n * @returns {void}\n */\n reorient () {\n editorContext_ = pathActionsContext_.getEditorContext();\n const elem = editorContext_.getSelectedElements()[0];\n if (!elem) { return; }\n const angl = getRotationAngle(elem);\n if (angl === 0) { return; }\n\n const batchCmd = new BatchCommand('Reorient path');\n const changes = {\n d: elem.getAttribute('d'),\n transform: elem.getAttribute('transform')\n };\n batchCmd.addSubCommand(new ChangeElementCommand(elem, changes));\n editorContext_.clearSelection();\n this.resetOrientation(elem);\n\n editorContext_.addCommandToHistory(batchCmd);\n\n // Set matrix to null\n pathActionsContext_.getPath_(elem).show(false).matrix = null;\n\n this.clear();\n\n editorContext_.addToSelection([elem], true);\n editorContext_.call('changed', editorContext_.getSelectedElements());\n },\n\n /**\n * @param {boolean} remove Not in use\n * @returns {void}\n */\n clear (remove) {\n editorContext_ = pathActionsContext_.getEditorContext();\n const drawnPath = editorContext_.getDrawnPath();\n currentPath = null;\n if (drawnPath) {\n const elem = getElem(editorContext_.getId());\n $(getElem('path_stretch_line')).remove();\n $(elem).remove();\n $(getElem('pathpointgrip_container')).find('*').attr('display', 'none');\n firstCtrl = null;\n editorContext_.setDrawnPath(null);\n editorContext_.setStarted(false);\n } else if (editorContext_.getCurrentMode() === 'pathedit') {\n this.toSelectMode();\n }\n if (path) { path.init().show(false); }\n },\n /**\n * @param {?(Element|SVGPathElement)} pth\n * @returns {false|void}\n */\n resetOrientation (pth) {\n if (isNullish(pth) || pth.nodeName !== 'path') { return false; }\n const tlist = getTransformList(pth);\n const m = transformListToTransform(tlist).matrix;\n tlist.clear();\n pth.removeAttribute('transform');\n const segList = pth.pathSegList;\n\n // Opera/win/non-EN throws an error here.\n // TODO: Find out why!\n // Presumed fixed in Opera 10.5, so commented out for now\n\n // try {\n const len = segList.numberOfItems;\n // } catch(err) {\n // const fixed_d = pathActions.convertPath(pth);\n // pth.setAttribute('d', fixed_d);\n // segList = pth.pathSegList;\n // const len = segList.numberOfItems;\n // }\n // let lastX, lastY;\n for (let i = 0; i < len; ++i) {\n const seg = segList.getItem(i);\n const type = seg.pathSegType;\n if (type === 1) { continue; }\n const pts = [];\n $.each(['', 1, 2], function (j, n) {\n const x = seg['x' + n], y = seg['y' + n];\n if (x !== undefined && y !== undefined) {\n const pt = transformPoint(x, y, m);\n pts.splice(pts.length, 0, pt.x, pt.y);\n }\n });\n pathActionsContext_.replacePathSeg(type, i, pts, pth);\n }\n\n pathActionsContext_.reorientGrads(pth, m);\n return undefined;\n },\n /**\n * @returns {void}\n */\n zoomChange () {\n editorContext_ = pathActionsContext_.getEditorContext();\n if (editorContext_.getCurrentMode() === 'pathedit') {\n path.update();\n }\n },\n /**\n * @typedef {PlainObject} module:path.NodePoint\n * @property {Float} x\n * @property {Float} y\n * @property {Integer} type\n */\n /**\n * @returns {module:path.NodePoint}\n */\n getNodePoint () {\n const selPt = path.selected_pts.length ? path.selected_pts[0] : 1;\n\n const seg = path.segs[selPt];\n return {\n x: seg.item.x,\n y: seg.item.y,\n type: seg.type\n };\n },\n /**\n * @param {boolean} linkPoints\n * @returns {void}\n */\n linkControlPoints (linkPoints) {\n pathActionsContext_.setLinkControlPoints(linkPoints);\n },\n /**\n * @returns {void}\n */\n clonePathNode () {\n path.storeD();\n\n const selPts = path.selected_pts;\n // const {segs} = path;\n\n let i = selPts.length;\n const nums = [];\n\n while (i--) {\n const pt = selPts[i];\n path.addSeg(pt);\n\n nums.push(pt + i);\n nums.push(pt + i + 1);\n }\n path.init().addPtsToSelection(nums);\n\n path.endChanges('Clone path node(s)');\n },\n /**\n * @returns {void}\n */\n opencloseSubPath () {\n const selPts = path.selected_pts;\n // Only allow one selected node for now\n if (selPts.length !== 1) { return; }\n\n const {elem} = path;\n const list = elem.pathSegList;\n\n // const len = list.numberOfItems;\n\n const index = selPts[0];\n\n let openPt = null;\n let startItem = null;\n\n // Check if subpath is already open\n path.eachSeg(function (i) {\n if (this.type === 2 && i <= index) {\n startItem = this.item;\n }\n if (i <= index) { return true; }\n if (this.type === 2) {\n // Found M first, so open\n openPt = i;\n return false;\n }\n if (this.type === 1) {\n // Found Z first, so closed\n openPt = false;\n return false;\n }\n return true;\n });\n\n if (isNullish(openPt)) {\n // Single path, so close last seg\n openPt = path.segs.length - 1;\n }\n\n if (openPt !== false) {\n // Close this path\n\n // Create a line going to the previous \"M\"\n const newseg = elem.createSVGPathSegLinetoAbs(startItem.x, startItem.y);\n\n const closer = elem.createSVGPathSegClosePath();\n if (openPt === path.segs.length - 1) {\n list.appendItem(newseg);\n list.appendItem(closer);\n } else {\n pathActionsContext_.insertItemBefore(elem, closer, openPt);\n pathActionsContext_.insertItemBefore(elem, newseg, openPt);\n }\n\n path.init().selectPt(openPt + 1);\n return;\n }\n\n // M 1,1 L 2,2 L 3,3 L 1,1 z // open at 2,2\n // M 2,2 L 3,3 L 1,1\n\n // M 1,1 L 2,2 L 1,1 z M 4,4 L 5,5 L6,6 L 5,5 z\n // M 1,1 L 2,2 L 1,1 z [M 4,4] L 5,5 L(M)6,6 L 5,5 z\n\n const seg = path.segs[index];\n\n if (seg.mate) {\n list.removeItem(index); // Removes last \"L\"\n list.removeItem(index); // Removes the \"Z\"\n path.init().selectPt(index - 1);\n return;\n }\n\n let lastM, zSeg;\n\n // Find this sub-path's closing point and remove\n for (let i = 0; i < list.numberOfItems; i++) {\n const item = list.getItem(i);\n\n if (item.pathSegType === 2) {\n // Find the preceding M\n lastM = i;\n } else if (i === index) {\n // Remove it\n list.removeItem(lastM);\n // index--;\n } else if (item.pathSegType === 1 && index < i) {\n // Remove the closing seg of this subpath\n zSeg = i - 1;\n list.removeItem(i);\n break;\n }\n }\n\n let num = (index - lastM) - 1;\n\n while (num--) {\n pathActionsContext_.insertItemBefore(elem, list.getItem(lastM), zSeg);\n }\n\n const pt = list.getItem(lastM);\n\n // Make this point the new \"M\"\n pathActionsContext_.replacePathSeg(2, lastM, [pt.x, pt.y]);\n\n // i = index; // i is local here, so has no effect; what was the intent for this?\n\n path.init().selectPt(0);\n },\n /**\n * @returns {void}\n */\n deletePathNode () {\n if (!pathActionsMethod.canDeleteNodes) { return; }\n path.storeD();\n\n const selPts = path.selected_pts;\n\n let i = selPts.length;\n while (i--) {\n const pt = selPts[i];\n path.deleteSeg(pt);\n }\n\n // Cleanup\n const cleanup = function () {\n const segList = path.elem.pathSegList;\n let len = segList.numberOfItems;\n\n const remItems = function (pos, count) {\n while (count--) {\n segList.removeItem(pos);\n }\n };\n\n if (len <= 1) { return true; }\n\n while (len--) {\n const item = segList.getItem(len);\n if (item.pathSegType === 1) {\n const prev = segList.getItem(len - 1);\n const nprev = segList.getItem(len - 2);\n if (prev.pathSegType === 2) {\n remItems(len - 1, 2);\n cleanup();\n break;\n } else if (nprev.pathSegType === 2) {\n remItems(len - 2, 3);\n cleanup();\n break;\n }\n } else if (item.pathSegType === 2 && len > 0) {\n const prevType = segList.getItem(len - 1).pathSegType;\n // Path has M M\n if (prevType === 2) {\n remItems(len - 1, 1);\n cleanup();\n break;\n // Entire path ends with Z M\n } else if (prevType === 1 && segList.numberOfItems - 1 === len) {\n remItems(len, 1);\n cleanup();\n break;\n }\n }\n }\n return false;\n };\n\n cleanup();\n\n // Completely delete a path with 1 or 0 segments\n if (path.elem.pathSegList.numberOfItems <= 1) {\n pathActionsMethod.toSelectMode(path.elem);\n editorContext_ = pathActionsContext_.getEditorContext();\n editorContext_.canvas.deleteSelectedElements();\n return;\n }\n\n path.init();\n path.clearSelection();\n\n // TODO: Find right way to select point now\n // path.selectPt(selPt);\n if (window.opera) { // Opera repaints incorrectly\n const cp = $(path.elem);\n cp.attr('d', cp.attr('d'));\n }\n path.endChanges('Delete path node(s)');\n },\n // Can't seem to use `@borrows` here, so using `@see`\n /**\n * Smooth polyline into path.\n * @function module:path.pathActions.smoothPolylineIntoPath\n * @see module:path~smoothPolylineIntoPath\n */\n smoothPolylineIntoPath,\n /* eslint-enable */\n /**\n * @param {?Integer} v See {@link https://www.w3.org/TR/SVG/single-page.html#paths-InterfaceSVGPathSeg}\n * @returns {void}\n */\n setSegType (v) {\n path.setSegType(v);\n },\n /**\n * @param {string} attr\n * @param {Float} newValue\n * @returns {void}\n */\n moveNode (attr, newValue) {\n const selPts = path.selected_pts;\n if (!selPts.length) { return; }\n\n path.storeD();\n\n // Get first selected point\n const seg = path.segs[selPts[0]];\n const diff = {x: 0, y: 0};\n diff[attr] = newValue - seg.item[attr];\n\n seg.move(diff.x, diff.y);\n path.endChanges('Move path point');\n },\n /**\n * @param {Element} elem\n * @returns {void}\n */\n fixEnd (elem) {\n // Adds an extra segment if the last seg before a Z doesn't end\n // at its M point\n // M0,0 L0,100 L100,100 z\n const segList = elem.pathSegList;\n const len = segList.numberOfItems;\n let lastM;\n for (let i = 0; i < len; ++i) {\n const item = segList.getItem(i);\n if (item.pathSegType === 2) {\n lastM = item;\n }\n\n if (item.pathSegType === 1) {\n const prev = segList.getItem(i - 1);\n if (prev.x !== lastM.x || prev.y !== lastM.y) {\n // Add an L segment here\n const newseg = elem.createSVGPathSegLinetoAbs(lastM.x, lastM.y);\n pathActionsContext_.insertItemBefore(elem, newseg, i);\n // Can this be done better?\n pathActionsMethod.fixEnd(elem);\n break;\n }\n }\n }\n editorContext_ = pathActionsContext_.getEditorContext();\n if (isWebkit()) { editorContext_.resetD(elem); }\n },\n // Can't seem to use `@borrows` here, so using `@see`\n /**\n * Convert a path to one with only absolute or relative values.\n * @function module:path.pathActions.convertPath\n * @see module:path.convertPath\n */\n convertPath\n });\n})();\n// end pathActions\n","/* globals jQuery */\n/**\n * Path functionality.\n * @module path\n * @license MIT\n *\n * @copyright 2011 Alexis Deveria, 2011 Jeff Schiller\n */\n\nimport {getTransformList} from './svgtransformlist.js';\nimport {shortFloat} from '../common/units.js';\nimport {transformPoint} from './math.js';\nimport {\n getRotationAngle, getBBox,\n getRefElem, findDefs, isNullish,\n getBBox as utilsGetBBox\n} from './utilities.js';\nimport {\n init as pathMethodInit, insertItemBeforeMethod, ptObjToArrMethod, getGripPtMethod,\n getPointFromGripMethod, addPointGripMethod, getGripContainerMethod, addCtrlGripMethod,\n getCtrlLineMethod, getPointGripMethod, getControlPointsMethod, replacePathSegMethod,\n getSegSelectorMethod, Path\n} from './path-method.js';\nimport {\n init as pathActionsInit, pathActionsMethod\n} from './path-actions.js';\n\nconst $ = jQuery;\n\nconst segData = {\n 2: ['x', 'y'], // PATHSEG_MOVETO_ABS\n 4: ['x', 'y'], // PATHSEG_LINETO_ABS\n 6: ['x', 'y', 'x1', 'y1', 'x2', 'y2'], // PATHSEG_CURVETO_CUBIC_ABS\n 8: ['x', 'y', 'x1', 'y1'], // PATHSEG_CURVETO_QUADRATIC_ABS\n 10: ['x', 'y', 'r1', 'r2', 'angle', 'largeArcFlag', 'sweepFlag'], // PATHSEG_ARC_ABS\n 12: ['x'], // PATHSEG_LINETO_HORIZONTAL_ABS\n 14: ['y'], // PATHSEG_LINETO_VERTICAL_ABS\n 16: ['x', 'y', 'x2', 'y2'], // PATHSEG_CURVETO_CUBIC_SMOOTH_ABS\n 18: ['x', 'y'] // PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS\n};\n\n/**\n * @tutorial LocaleDocs\n * @typedef {module:locale.LocaleStrings|PlainObject} module:path.uiStrings\n * @property {PlainObject<string, string>} ui\n*/\n\nconst uiStrings = {};\n/**\n* @function module:path.setUiStrings\n* @param {module:path.uiStrings} strs\n* @returns {void}\n*/\nexport const setUiStrings = function (strs) {\n Object.assign(uiStrings, strs.ui);\n};\n\nlet pathFuncs = [];\n\nlet linkControlPts = true;\n\n// Stores references to paths via IDs.\n// TODO: Make this cross-document happy.\nlet pathData = {};\n\n/**\n* @function module:path.setLinkControlPoints\n* @param {boolean} lcp\n* @returns {void}\n*/\nexport const setLinkControlPoints = function (lcp) {\n linkControlPts = lcp;\n};\n\n/**\n * @name module:path.path\n * @type {null|module:path.Path}\n * @memberof module:path\n*/\nexport let path = null;\n\nlet editorContext_ = null;\n\n/**\n* @external MouseEvent\n*/\n\n/**\n* Object with the following keys/values.\n* @typedef {PlainObject} module:path.SVGElementJSON\n* @property {string} element - Tag name of the SVG element to create\n* @property {PlainObject<string, string>} attr - Has key-value attributes to assign to the new element. An `id` should be set so that {@link module:utilities.EditorContext#addSVGElementFromJson} can later re-identify the element for modification or replacement.\n* @property {boolean} [curStyles=false] - Indicates whether current style attributes should be applied first\n* @property {module:path.SVGElementJSON[]} [children] - Data objects to be added recursively as children\n* @property {string} [namespace=\"http://www.w3.org/2000/svg\"] - Indicate a (non-SVG) namespace\n*/\n/**\n * @interface module:path.EditorContext\n * @property {module:select.SelectorManager} selectorManager\n * @property {module:svgcanvas.SvgCanvas} canvas\n */\n/**\n * @function module:path.EditorContext#call\n * @param {\"selected\"|\"changed\"} ev - String with the event name\n * @param {module:svgcanvas.SvgCanvas#event:selected|module:svgcanvas.SvgCanvas#event:changed} arg - Argument to pass through to the callback function. If the event is \"changed\", an array of `Element`s is passed; if \"selected\", a single-item array of `Element` is passed.\n * @returns {void}\n */\n/**\n * @function module:path.EditorContext#resetD\n * @param {SVGPathElement} p\n * @returns {void}\n*/\n/**\n * Note: This doesn't round to an integer necessarily.\n * @function module:path.EditorContext#round\n * @param {Float} val\n * @returns {Float} Rounded value to nearest value based on `currentZoom`\n */\n/**\n * @function module:path.EditorContext#clearSelection\n * @param {boolean} [noCall] - When `true`, does not call the \"selected\" handler\n * @returns {void}\n*/\n/**\n * @function module:path.EditorContext#addToSelection\n * @param {Element[]} elemsToAdd - An array of DOM elements to add to the selection\n * @param {boolean} showGrips - Indicates whether the resize grips should be shown\n * @returns {void}\n*/\n/**\n * @function module:path.EditorContext#addCommandToHistory\n * @param {Command} cmd\n * @returns {void}\n */\n/**\n * @function module:path.EditorContext#remapElement\n * @param {Element} selected - DOM element to be changed\n * @param {PlainObject<string, string>} changes - Object with changes to be remapped\n * @param {SVGMatrix} m - Matrix object to use for remapping coordinates\n * @returns {void}\n */\n/**\n * @function module:path.EditorContext#addSVGElementFromJson\n * @param {module:path.SVGElementJSON} data\n * @returns {Element} The new element\n*/\n/**\n * @function module:path.EditorContext#getGridSnapping\n * @returns {boolean}\n */\n/**\n * @function module:path.EditorContext#getOpacity\n * @returns {Float}\n */\n/**\n * @function module:path.EditorContext#getSelectedElements\n * @returns {Element[]} the array with selected DOM elements\n*/\n/**\n * @function module:path.EditorContext#getContainer\n * @returns {Element}\n */\n/**\n * @function module:path.EditorContext#setStarted\n * @param {boolean} s\n * @returns {void}\n */\n/**\n * @function module:path.EditorContext#getRubberBox\n * @returns {SVGRectElement}\n*/\n/**\n * @function module:path.EditorContext#setRubberBox\n * @param {SVGRectElement} rb\n * @returns {SVGRectElement} Same as parameter passed in\n */\n/**\n * @function module:path.EditorContext#addPtsToSelection\n * @param {PlainObject} cfg\n * @param {boolean} cfg.closedSubpath\n * @param {SVGCircleElement[]} cfg.grips\n * @returns {void}\n */\n/**\n * @function module:path.EditorContext#endChanges\n * @param {PlainObject} cfg\n * @param {string} cfg.cmd\n * @param {Element} cfg.elem\n * @returns {void}\n*/\n/**\n * @function module:path.EditorContext#getCurrentZoom\n * @returns {Float} The current zoom level\n */\n/**\n * Returns the last created DOM element ID string.\n * @function module:path.EditorContext#getId\n * @returns {string}\n */\n/**\n * Creates and returns a unique ID string for a DOM element.\n * @function module:path.EditorContext#getNextId\n * @returns {string}\n*/\n/**\n * Gets the desired element from a mouse event.\n * @function module:path.EditorContext#getMouseTarget\n * @param {external:MouseEvent} evt - Event object from the mouse event\n * @returns {Element} DOM element we want\n */\n/**\n * @function module:path.EditorContext#getCurrentMode\n * @returns {string}\n */\n/**\n * @function module:path.EditorContext#setCurrentMode\n * @param {string} cm The mode\n * @returns {string} The same mode as passed in\n*/\n/**\n * @function module:path.EditorContext#getDrawnPath\n * @returns {SVGPathElement|null}\n */\n/**\n * @function module:path.EditorContext#setDrawnPath\n * @param {SVGPathElement|null} dp\n * @returns {SVGPathElement|null} The same value as passed in\n */\n/**\n * @function module:path.EditorContext#getSVGRoot\n * @returns {SVGSVGElement}\n*/\n\n/**\n* @function module:path.init\n* @param {module:path.EditorContext} editorContext\n* @returns {void}\n*/\nexport const init = function (editorContext) {\n editorContext_ = editorContext;\n\n pathFuncs = [0, 'ClosePath'];\n const pathFuncsStrs = [\n 'Moveto', 'Lineto', 'CurvetoCubic', 'CurvetoQuadratic', 'Arc',\n 'LinetoHorizontal', 'LinetoVertical', 'CurvetoCubicSmooth', 'CurvetoQuadraticSmooth'\n ];\n $.each(pathFuncsStrs, function (i, s) {\n pathFuncs.push(s + 'Abs');\n pathFuncs.push(s + 'Rel');\n });\n};\n\npathMethodInit(\n /**\n* @implements {module:path-method.pathMethodsContext}\n*/\n {\n getEditorContext () { return editorContext_; },\n getSegData () { return segData; },\n getUIStrings () { return uiStrings; },\n getPathObj () { return path; },\n setPathObj (obj) { path = obj; },\n getPathFuncs () { return pathFuncs; },\n getLinkControlPts () { return linkControlPts; }\n }\n);\n\n/**\n* @function module:path.insertItemBefore\n* @param {Element} elem\n* @param {Segment} newseg\n* @param {Integer} index\n* @returns {void}\n*/\nexport const insertItemBefore = insertItemBeforeMethod;\n\n/**\n* @function module:path.ptObjToArr\n* @todo See if this should just live in `replacePathSeg`\n* @param {string} type\n* @param {SVGPathSegMovetoAbs|SVGPathSegLinetoAbs|SVGPathSegCurvetoCubicAbs|SVGPathSegCurvetoQuadraticAbs|SVGPathSegArcAbs|SVGPathSegLinetoHorizontalAbs|SVGPathSegLinetoVerticalAbs|SVGPathSegCurvetoCubicSmoothAbs|SVGPathSegCurvetoQuadraticSmoothAbs} segItem\n* @returns {ArgumentsArray}\n*/\nexport const ptObjToArr = ptObjToArrMethod;\n\n/**\n* @function module:path.getGripPt\n* @param {Segment} seg\n* @param {module:math.XYObject} altPt\n* @returns {module:math.XYObject}\n*/\nexport const getGripPt = getGripPtMethod;\n\n/**\n* @function module:path.getPointFromGrip\n* @param {module:math.XYObject} pt\n* @param {module:path.Path} pth\n* @returns {module:math.XYObject}\n*/\nexport const getPointFromGrip = getPointFromGripMethod;\n\n/**\n* Requires prior call to `setUiStrings` if `xlink:title`\n* to be set on the grip.\n* @function module:path.addPointGrip\n* @param {Integer} index\n* @param {Integer} x\n* @param {Integer} y\n* @returns {SVGCircleElement}\n*/\nexport const addPointGrip = addPointGripMethod;\n\n/**\n* @function module:path.getGripContainer\n* @returns {Element}\n*/\nexport const getGripContainer = getGripContainerMethod;\n\n/**\n* Requires prior call to `setUiStrings` if `xlink:title`\n* to be set on the grip.\n* @function module:path.addCtrlGrip\n* @param {string} id\n* @returns {SVGCircleElement}\n*/\nexport const addCtrlGrip = addCtrlGripMethod;\n\n/**\n* @function module:path.getCtrlLine\n* @param {string} id\n* @returns {SVGLineElement}\n*/\nexport const getCtrlLine = getCtrlLineMethod;\n\n/**\n* @function module:path.getPointGrip\n* @param {Segment} seg\n* @param {boolean} update\n* @returns {SVGCircleElement}\n*/\nexport const getPointGrip = getPointGripMethod;\n\n/**\n* @function module:path.getControlPoints\n* @param {Segment} seg\n* @returns {PlainObject<string, SVGLineElement|SVGCircleElement>}\n*/\nexport const getControlPoints = getControlPointsMethod;\n\n/**\n* This replaces the segment at the given index. Type is given as number.\n* @function module:path.replacePathSeg\n* @param {Integer} type Possible values set during {@link module:path.init}\n* @param {Integer} index\n* @param {ArgumentsArray} pts\n* @param {SVGPathElement} elem\n* @returns {void}\n*/\nexport const replacePathSeg = replacePathSegMethod;\n\n/**\n* @function module:path.getSegSelector\n* @param {Segment} seg\n* @param {boolean} update\n* @returns {SVGPathElement}\n*/\nexport const getSegSelector = getSegSelectorMethod;\n\n/**\n * @typedef {PlainObject} Point\n * @property {Integer} x The x value\n * @property {Integer} y The y value\n */\n\n/**\n* Takes three points and creates a smoother line based on them.\n* @function module:path.smoothControlPoints\n* @param {Point} ct1 - Object with x and y values (first control point)\n* @param {Point} ct2 - Object with x and y values (second control point)\n* @param {Point} pt - Object with x and y values (third point)\n* @returns {Point[]} Array of two \"smoothed\" point objects\n*/\nexport const smoothControlPoints = function (ct1, ct2, pt) {\n // each point must not be the origin\n const x1 = ct1.x - pt.x,\n y1 = ct1.y - pt.y,\n x2 = ct2.x - pt.x,\n y2 = ct2.y - pt.y;\n\n if ((x1 !== 0 || y1 !== 0) && (x2 !== 0 || y2 !== 0)) {\n const\n r1 = Math.sqrt(x1 * x1 + y1 * y1),\n r2 = Math.sqrt(x2 * x2 + y2 * y2),\n nct1 = editorContext_.getSVGRoot().createSVGPoint(),\n nct2 = editorContext_.getSVGRoot().createSVGPoint();\n let anglea = Math.atan2(y1, x1),\n angleb = Math.atan2(y2, x2);\n if (anglea < 0) { anglea += 2 * Math.PI; }\n if (angleb < 0) { angleb += 2 * Math.PI; }\n\n const angleBetween = Math.abs(anglea - angleb),\n angleDiff = Math.abs(Math.PI - angleBetween) / 2;\n\n let newAnglea, newAngleb;\n if (anglea - angleb > 0) {\n newAnglea = angleBetween < Math.PI ? (anglea + angleDiff) : (anglea - angleDiff);\n newAngleb = angleBetween < Math.PI ? (angleb - angleDiff) : (angleb + angleDiff);\n } else {\n newAnglea = angleBetween < Math.PI ? (anglea - angleDiff) : (anglea + angleDiff);\n newAngleb = angleBetween < Math.PI ? (angleb + angleDiff) : (angleb - angleDiff);\n }\n\n // rotate the points\n nct1.x = r1 * Math.cos(newAnglea) + pt.x;\n nct1.y = r1 * Math.sin(newAnglea) + pt.y;\n nct2.x = r2 * Math.cos(newAngleb) + pt.x;\n nct2.y = r2 * Math.sin(newAngleb) + pt.y;\n\n return [nct1, nct2];\n }\n return undefined;\n};\n\n/**\n* @function module:path.getPath_\n* @param {SVGPathElement} elem\n* @returns {module:path.Path}\n*/\nexport const getPath_ = function (elem) {\n let p = pathData[elem.id];\n if (!p) {\n p = pathData[elem.id] = new Path(elem);\n }\n return p;\n};\n\n/**\n* @function module:path.removePath_\n* @param {string} id\n* @returns {void}\n*/\nexport const removePath_ = function (id) {\n if (id in pathData) { delete pathData[id]; }\n};\n\nlet newcx, newcy, oldcx, oldcy, angle;\n\nconst getRotVals = function (x, y) {\n let dx = x - oldcx;\n let dy = y - oldcy;\n\n // rotate the point around the old center\n let r = Math.sqrt(dx * dx + dy * dy);\n let theta = Math.atan2(dy, dx) + angle;\n dx = r * Math.cos(theta) + oldcx;\n dy = r * Math.sin(theta) + oldcy;\n\n // dx,dy should now hold the actual coordinates of each\n // point after being rotated\n\n // now we want to rotate them around the new center in the reverse direction\n dx -= newcx;\n dy -= newcy;\n\n r = Math.sqrt(dx * dx + dy * dy);\n theta = Math.atan2(dy, dx) - angle;\n\n return {x: r * Math.cos(theta) + newcx,\n y: r * Math.sin(theta) + newcy};\n};\n\n// If the path was rotated, we must now pay the piper:\n// Every path point must be rotated into the rotated coordinate system of\n// its old center, then determine the new center, then rotate it back\n// This is because we want the path to remember its rotation\n\n/**\n* @function module:path.recalcRotatedPath\n* @todo This is still using ye olde transform methods, can probably\n* be optimized or even taken care of by `recalculateDimensions`\n* @returns {void}\n*/\nexport const recalcRotatedPath = function () {\n const currentPath = path.elem;\n angle = getRotationAngle(currentPath, true);\n if (!angle) { return; }\n // selectedBBoxes[0] = path.oldbbox;\n const oldbox = path.oldbbox; // selectedBBoxes[0],\n oldcx = oldbox.x + oldbox.width / 2;\n oldcy = oldbox.y + oldbox.height / 2;\n const box = getBBox(currentPath);\n newcx = box.x + box.width / 2;\n newcy = box.y + box.height / 2;\n\n // un-rotate the new center to the proper position\n const dx = newcx - oldcx,\n dy = newcy - oldcy,\n r = Math.sqrt(dx * dx + dy * dy),\n theta = Math.atan2(dy, dx) + angle;\n\n newcx = r * Math.cos(theta) + oldcx;\n newcy = r * Math.sin(theta) + oldcy;\n\n const list = currentPath.pathSegList;\n\n let i = list.numberOfItems;\n while (i) {\n i -= 1;\n const seg = list.getItem(i),\n type = seg.pathSegType;\n if (type === 1) { continue; }\n\n const rvals = getRotVals(seg.x, seg.y),\n points = [rvals.x, rvals.y];\n if (!isNullish(seg.x1) && !isNullish(seg.x2)) {\n const cVals1 = getRotVals(seg.x1, seg.y1);\n const cVals2 = getRotVals(seg.x2, seg.y2);\n points.splice(points.length, 0, cVals1.x, cVals1.y, cVals2.x, cVals2.y);\n }\n replacePathSeg(type, i, points);\n } // loop for each point\n\n /* box = */ getBBox(currentPath);\n // selectedBBoxes[0].x = box.x; selectedBBoxes[0].y = box.y;\n // selectedBBoxes[0].width = box.width; selectedBBoxes[0].height = box.height;\n\n // now we must set the new transform to be rotated around the new center\n const Rnc = editorContext_.getSVGRoot().createSVGTransform(),\n tlist = getTransformList(currentPath);\n Rnc.setRotate((angle * 180.0 / Math.PI), newcx, newcy);\n tlist.replaceItem(Rnc, 0);\n};\n\n// ====================================\n// Public API starts here\n\n/**\n* @function module:path.clearData\n* @returns {void}\n*/\nexport const clearData = function () {\n pathData = {};\n};\n\n// Making public for mocking\n/**\n* @function module:path.reorientGrads\n* @param {Element} elem\n* @param {SVGMatrix} m\n* @returns {void}\n*/\nexport const reorientGrads = function (elem, m) {\n const bb = utilsGetBBox(elem);\n for (let i = 0; i < 2; i++) {\n const type = i === 0 ? 'fill' : 'stroke';\n const attrVal = elem.getAttribute(type);\n if (attrVal && attrVal.startsWith('url(')) {\n const grad = getRefElem(attrVal);\n if (grad.tagName === 'linearGradient') {\n let x1 = grad.getAttribute('x1') || 0;\n let y1 = grad.getAttribute('y1') || 0;\n let x2 = grad.getAttribute('x2') || 1;\n let y2 = grad.getAttribute('y2') || 0;\n\n // Convert to USOU points\n x1 = (bb.width * x1) + bb.x;\n y1 = (bb.height * y1) + bb.y;\n x2 = (bb.width * x2) + bb.x;\n y2 = (bb.height * y2) + bb.y;\n\n // Transform those points\n const pt1 = transformPoint(x1, y1, m);\n const pt2 = transformPoint(x2, y2, m);\n\n // Convert back to BB points\n const gCoords = {\n x1: (pt1.x - bb.x) / bb.width,\n y1: (pt1.y - bb.y) / bb.height,\n x2: (pt2.x - bb.x) / bb.width,\n y2: (pt2.y - bb.y) / bb.height\n };\n\n const newgrad = grad.cloneNode(true);\n $(newgrad).attr(gCoords);\n\n newgrad.id = editorContext_.getNextId();\n findDefs().append(newgrad);\n elem.setAttribute(type, 'url(#' + newgrad.id + ')');\n }\n }\n }\n};\n\n/**\n* This is how we map paths to our preferred relative segment types.\n* @name module:path.pathMap\n* @type {GenericArray}\n*/\nconst pathMap = [\n 0, 'z', 'M', 'm', 'L', 'l', 'C', 'c', 'Q', 'q', 'A', 'a',\n 'H', 'h', 'V', 'v', 'S', 's', 'T', 't'\n];\n\n/**\n * Convert a path to one with only absolute or relative values.\n * @todo move to pathActions.js\n * @function module:path.convertPath\n * @param {SVGPathElement} pth - the path to convert\n * @param {boolean} toRel - true of convert to relative\n * @returns {string}\n */\nexport const convertPath = function (pth, toRel) {\n const {pathSegList} = pth;\n const len = pathSegList.numberOfItems;\n let curx = 0, cury = 0;\n let d = '';\n let lastM = null;\n\n for (let i = 0; i < len; ++i) {\n const seg = pathSegList.getItem(i);\n // if these properties are not in the segment, set them to zero\n let x = seg.x || 0,\n y = seg.y || 0,\n x1 = seg.x1 || 0,\n y1 = seg.y1 || 0,\n x2 = seg.x2 || 0,\n y2 = seg.y2 || 0;\n\n const type = seg.pathSegType;\n let letter = pathMap[type][toRel ? 'toLowerCase' : 'toUpperCase']();\n\n switch (type) {\n case 1: // z,Z closepath (Z/z)\n d += 'z';\n if (lastM && !toRel) {\n curx = lastM[0];\n cury = lastM[1];\n }\n break;\n case 12: // absolute horizontal line (H)\n x -= curx;\n // Fallthrough\n case 13: // relative horizontal line (h)\n if (toRel) {\n y = 0;\n curx += x;\n letter = 'l';\n } else {\n y = cury;\n x += curx;\n curx = x;\n letter = 'L';\n }\n // Convert to \"line\" for easier editing\n d += pathDSegment(letter, [[x, y]]);\n break;\n case 14: // absolute vertical line (V)\n y -= cury;\n // Fallthrough\n case 15: // relative vertical line (v)\n if (toRel) {\n x = 0;\n cury += y;\n letter = 'l';\n } else {\n x = curx;\n y += cury;\n cury = y;\n letter = 'L';\n }\n // Convert to \"line\" for easier editing\n d += pathDSegment(letter, [[x, y]]);\n break;\n case 2: // absolute move (M)\n case 4: // absolute line (L)\n case 18: // absolute smooth quad (T)\n x -= curx;\n y -= cury;\n // Fallthrough\n case 5: // relative line (l)\n case 3: // relative move (m)\n case 19: // relative smooth quad (t)\n if (toRel) {\n curx += x;\n cury += y;\n } else {\n x += curx;\n y += cury;\n curx = x;\n cury = y;\n }\n if (type === 2 || type === 3) { lastM = [curx, cury]; }\n\n d += pathDSegment(letter, [[x, y]]);\n break;\n case 6: // absolute cubic (C)\n x -= curx; x1 -= curx; x2 -= curx;\n y -= cury; y1 -= cury; y2 -= cury;\n // Fallthrough\n case 7: // relative cubic (c)\n if (toRel) {\n curx += x;\n cury += y;\n } else {\n x += curx; x1 += curx; x2 += curx;\n y += cury; y1 += cury; y2 += cury;\n curx = x;\n cury = y;\n }\n d += pathDSegment(letter, [[x1, y1], [x2, y2], [x, y]]);\n break;\n case 8: // absolute quad (Q)\n x -= curx; x1 -= curx;\n y -= cury; y1 -= cury;\n // Fallthrough\n case 9: // relative quad (q)\n if (toRel) {\n curx += x;\n cury += y;\n } else {\n x += curx; x1 += curx;\n y += cury; y1 += cury;\n curx = x;\n cury = y;\n }\n d += pathDSegment(letter, [[x1, y1], [x, y]]);\n break;\n case 10: // absolute elliptical arc (A)\n x -= curx;\n y -= cury;\n // Fallthrough\n case 11: // relative elliptical arc (a)\n if (toRel) {\n curx += x;\n cury += y;\n } else {\n x += curx;\n y += cury;\n curx = x;\n cury = y;\n }\n d += pathDSegment(letter, [[seg.r1, seg.r2]], [\n seg.angle,\n (seg.largeArcFlag ? 1 : 0),\n (seg.sweepFlag ? 1 : 0)\n ], [x, y]);\n break;\n case 16: // absolute smooth cubic (S)\n x -= curx; x2 -= curx;\n y -= cury; y2 -= cury;\n // Fallthrough\n case 17: // relative smooth cubic (s)\n if (toRel) {\n curx += x;\n cury += y;\n } else {\n x += curx; x2 += curx;\n y += cury; y2 += cury;\n curx = x;\n cury = y;\n }\n d += pathDSegment(letter, [[x2, y2], [x, y]]);\n break;\n } // switch on path segment type\n } // for each segment\n return d;\n};\n\n/**\n * TODO: refactor callers in `convertPath` to use `getPathDFromSegments` instead of this function.\n * Legacy code refactored from `svgcanvas.pathActions.convertPath`.\n * @param {string} letter - path segment command (letter in potentially either case from {@link module:path.pathMap}; see [SVGPathSeg#pathSegTypeAsLetter]{@link https://www.w3.org/TR/SVG/single-page.html#paths-__svg__SVGPathSeg__pathSegTypeAsLetter})\n * @param {GenericArray<GenericArray<Integer>>} points - x,y points\n * @param {GenericArray<GenericArray<Integer>>} [morePoints] - x,y points\n * @param {Integer[]} [lastPoint] - x,y point\n * @returns {string}\n */\nfunction pathDSegment (letter, points, morePoints, lastPoint) {\n $.each(points, function (i, pnt) {\n points[i] = shortFloat(pnt);\n });\n let segment = letter + points.join(' ');\n if (morePoints) {\n segment += ' ' + morePoints.join(' ');\n }\n if (lastPoint) {\n segment += ' ' + shortFloat(lastPoint);\n }\n return segment;\n}\n\npathActionsInit(\n /**\n* @implements {module:path-actions.pathActionsContext}\n*/\n {\n getEditorContext () { return editorContext_; },\n getPathMap () { return pathMap; },\n smoothControlPoints,\n addPointGrip,\n recalcRotatedPath,\n removePath_,\n addCtrlGrip,\n getCtrlLine,\n replacePathSeg,\n insertItemBefore,\n getPointFromGrip,\n getGripPt,\n getPath_,\n reorientGrads,\n setLinkControlPoints\n }\n);\n\n/**\n* Group: Path edit functions.\n* Functions relating to editing path elements.\n*/\nexport const pathActions = pathActionsMethod;\n// end pathActions\n","/* globals jQuery */\n/**\n * Provides tools for the layer concept.\n * @module layer\n * @license MIT\n *\n * @copyright 2011 Jeff Schiller, 2016 Flint O'Brien\n */\n\nimport {NS} from '../common/namespaces.js';\nimport {toXml, walkTree, isNullish} from './utilities.js';\n\nconst $ = jQuery;\n\n/**\n * This class encapsulates the concept of a layer in the drawing. It can be constructed with\n * an existing group element or, with three parameters, will create a new layer group element.\n *\n * @example\n * const l1 = new Layer('name', group); // Use the existing group for this layer.\n * const l2 = new Layer('name', group, svgElem); // Create a new group and add it to the DOM after group.\n * const l3 = new Layer('name', null, svgElem); // Create a new group and add it to the DOM as the last layer.\n * @memberof module:layer\n */\nclass Layer {\n /**\n * @param {string} name - Layer name\n * @param {SVGGElement|null} group - An existing SVG group element or null.\n * If group and no svgElem, use group for this layer.\n * If group and svgElem, create a new group element and insert it in the DOM after group.\n * If no group and svgElem, create a new group element and insert it in the DOM as the last layer.\n * @param {SVGGElement} [svgElem] - The SVG DOM element. If defined, use this to add\n * a new layer to the document.\n */\n constructor (name, group, svgElem) {\n this.name_ = name;\n this.group_ = svgElem ? null : group;\n\n if (svgElem) {\n // Create a group element with title and add it to the DOM.\n const svgdoc = svgElem.ownerDocument;\n this.group_ = svgdoc.createElementNS(NS.SVG, 'g');\n const layerTitle = svgdoc.createElementNS(NS.SVG, 'title');\n layerTitle.textContent = name;\n this.group_.append(layerTitle);\n if (group) {\n $(group).after(this.group_);\n } else {\n svgElem.append(this.group_);\n }\n }\n\n addLayerClass(this.group_);\n walkTree(this.group_, function (e) {\n e.setAttribute('style', 'pointer-events:inherit');\n });\n\n this.group_.setAttribute('style', svgElem ? 'pointer-events:all' : 'pointer-events:none');\n }\n\n /**\n * Get the layer's name.\n * @returns {string} The layer name\n */\n getName () {\n return this.name_;\n }\n\n /**\n * Get the group element for this layer.\n * @returns {SVGGElement} The layer SVG group\n */\n getGroup () {\n return this.group_;\n }\n\n /**\n * Active this layer so it takes pointer events.\n * @returns {void}\n */\n activate () {\n this.group_.setAttribute('style', 'pointer-events:all');\n }\n\n /**\n * Deactive this layer so it does NOT take pointer events.\n * @returns {void}\n */\n deactivate () {\n this.group_.setAttribute('style', 'pointer-events:none');\n }\n\n /**\n * Set this layer visible or hidden based on 'visible' parameter.\n * @param {boolean} visible - If true, make visible; otherwise, hide it.\n * @returns {void}\n */\n setVisible (visible) {\n const expected = visible === undefined || visible ? 'inline' : 'none';\n const oldDisplay = this.group_.getAttribute('display');\n if (oldDisplay !== expected) {\n this.group_.setAttribute('display', expected);\n }\n }\n\n /**\n * Is this layer visible?\n * @returns {boolean} True if visible.\n */\n isVisible () {\n return this.group_.getAttribute('display') !== 'none';\n }\n\n /**\n * Get layer opacity.\n * @returns {Float} Opacity value.\n */\n getOpacity () {\n const opacity = this.group_.getAttribute('opacity');\n if (isNullish(opacity)) {\n return 1;\n }\n return Number.parseFloat(opacity);\n }\n\n /**\n * Sets the opacity of this layer. If opacity is not a value between 0.0 and 1.0,\n * nothing happens.\n * @param {Float} opacity - A float value in the range 0.0-1.0\n * @returns {void}\n */\n setOpacity (opacity) {\n if (typeof opacity === 'number' && opacity >= 0.0 && opacity <= 1.0) {\n this.group_.setAttribute('opacity', opacity);\n }\n }\n\n /**\n * Append children to this layer.\n * @param {SVGGElement} children - The children to append to this layer.\n * @returns {void}\n */\n appendChildren (children) {\n for (const child of children) {\n this.group_.append(child);\n }\n }\n\n /**\n * @returns {SVGTitleElement|null}\n */\n getTitleElement () {\n const len = this.group_.childNodes.length;\n for (let i = 0; i < len; ++i) {\n const child = this.group_.childNodes.item(i);\n if (child && child.tagName === 'title') {\n return child;\n }\n }\n return null;\n }\n\n /**\n * Set the name of this layer.\n * @param {string} name - The new name.\n * @param {module:history.HistoryRecordingService} hrService - History recording service\n * @returns {string|null} The new name if changed; otherwise, null.\n */\n setName (name, hrService) {\n const previousName = this.name_;\n name = toXml(name);\n // now change the underlying title element contents\n const title = this.getTitleElement();\n if (title) {\n $(title).empty();\n title.textContent = name;\n this.name_ = name;\n if (hrService) {\n hrService.changeElement(title, {'#text': previousName});\n }\n return this.name_;\n }\n return null;\n }\n\n /**\n * Remove this layer's group from the DOM. No more functions on group can be called after this.\n * @returns {SVGGElement} The layer SVG group that was just removed.\n */\n removeGroup () {\n const group = this.group_;\n this.group_.remove();\n this.group_ = undefined;\n return group;\n }\n /**\n * Test whether an element is a layer or not.\n * @param {SVGGElement} elem - The SVGGElement to test.\n * @returns {boolean} True if the element is a layer\n */\n static isLayer (elem) {\n return elem && elem.tagName === 'g' && Layer.CLASS_REGEX.test(elem.getAttribute('class'));\n }\n}\n/**\n * @property {string} CLASS_NAME - class attribute assigned to all layer groups.\n */\nLayer.CLASS_NAME = 'layer';\n\n/**\n * @property {RegExp} CLASS_REGEX - Used to test presence of class Layer.CLASS_NAME\n */\nLayer.CLASS_REGEX = new RegExp('(\\\\s|^)' + Layer.CLASS_NAME + '(\\\\s|$)');\n\n/**\n * Add class `Layer.CLASS_NAME` to the element (usually `class='layer'`).\n *\n * @param {SVGGElement} elem - The SVG element to update\n * @returns {void}\n */\nfunction addLayerClass (elem) {\n const classes = elem.getAttribute('class');\n if (isNullish(classes) || !classes.length) {\n elem.setAttribute('class', Layer.CLASS_NAME);\n } else if (!Layer.CLASS_REGEX.test(classes)) {\n elem.setAttribute('class', classes + ' ' + Layer.CLASS_NAME);\n }\n}\n\nexport default Layer;\n","/**\n * HistoryRecordingService component of history.\n * @module history\n * @license MIT\n * @copyright 2016 Flint O'Brien\n */\n\nimport {\n BatchCommand, MoveElementCommand, InsertElementCommand, RemoveElementCommand,\n ChangeElementCommand\n} from './history.js';\n\n/**\n * History recording service.\n *\n * A self-contained service interface for recording history. Once injected, no other dependencies\n * or globals are required (example: UndoManager, command types, etc.). Easy to mock for unit tests.\n * Built on top of history classes in history.js.\n *\n * There is a simple start/end interface for batch commands.\n *\n * HistoryRecordingService.NO_HISTORY is a singleton that can be passed in to functions\n * that record history. This helps when the caller requires that no history be recorded.\n *\n * The following will record history: insert, batch, insert.\n * @example\n * hrService = new HistoryRecordingService(this.undoMgr);\n * hrService.insertElement(elem, text); // add simple command to history.\n * hrService.startBatchCommand('create two elements');\n * hrService.changeElement(elem, attrs, text); // add to batchCommand\n * hrService.changeElement(elem, attrs2, text); // add to batchCommand\n * hrService.endBatchCommand(); // add batch command with two change commands to history.\n * hrService.insertElement(elem, text); // add simple command to history.\n *\n * @example\n * // Note that all functions return this, so commands can be chained, like so:\n * hrService\n * .startBatchCommand('create two elements')\n * .insertElement(elem, text)\n * .changeElement(elem, attrs, text)\n * .endBatchCommand();\n *\n * @memberof module:history\n */\nclass HistoryRecordingService {\n /**\n * @param {history.UndoManager|null} undoManager - The undo manager.\n * A value of `null` is valid for cases where no history recording is required.\n * See singleton: {@link module:history.HistoryRecordingService.HistoryRecordingService.NO_HISTORY}\n */\n constructor (undoManager) {\n this.undoManager_ = undoManager;\n this.currentBatchCommand_ = null;\n this.batchCommandStack_ = [];\n }\n\n /**\n * Start a batch command so multiple commands can recorded as a single history command.\n * Requires a corresponding call to endBatchCommand. Start and end commands can be nested.\n *\n * @param {string} text - Optional string describing the batch command.\n * @returns {module:history.HistoryRecordingService}\n */\n startBatchCommand (text) {\n if (!this.undoManager_) { return this; }\n this.currentBatchCommand_ = new BatchCommand(text);\n this.batchCommandStack_.push(this.currentBatchCommand_);\n return this;\n }\n\n /**\n * End a batch command and add it to the history or a parent batch command.\n * @returns {module:history.HistoryRecordingService}\n */\n endBatchCommand () {\n if (!this.undoManager_) { return this; }\n if (this.currentBatchCommand_) {\n const batchCommand = this.currentBatchCommand_;\n this.batchCommandStack_.pop();\n const {length: len} = this.batchCommandStack_;\n this.currentBatchCommand_ = len ? this.batchCommandStack_[len - 1] : null;\n this.addCommand_(batchCommand);\n }\n return this;\n }\n\n /**\n * Add a `MoveElementCommand` to the history or current batch command.\n * @param {Element} elem - The DOM element that was moved\n * @param {Element} oldNextSibling - The element's next sibling before it was moved\n * @param {Element} oldParent - The element's parent before it was moved\n * @param {string} [text] - An optional string visible to user related to this change\n * @returns {module:history.HistoryRecordingService}\n */\n moveElement (elem, oldNextSibling, oldParent, text) {\n if (!this.undoManager_) { return this; }\n this.addCommand_(new MoveElementCommand(elem, oldNextSibling, oldParent, text));\n return this;\n }\n\n /**\n * Add an `InsertElementCommand` to the history or current batch command.\n * @param {Element} elem - The DOM element that was added\n * @param {string} [text] - An optional string visible to user related to this change\n * @returns {module:history.HistoryRecordingService}\n */\n insertElement (elem, text) {\n if (!this.undoManager_) { return this; }\n this.addCommand_(new InsertElementCommand(elem, text));\n return this;\n }\n\n /**\n * Add a `RemoveElementCommand` to the history or current batch command.\n * @param {Element} elem - The DOM element that was removed\n * @param {Element} oldNextSibling - The element's next sibling before it was removed\n * @param {Element} oldParent - The element's parent before it was removed\n * @param {string} [text] - An optional string visible to user related to this change\n * @returns {module:history.HistoryRecordingService}\n */\n removeElement (elem, oldNextSibling, oldParent, text) {\n if (!this.undoManager_) { return this; }\n this.addCommand_(new RemoveElementCommand(elem, oldNextSibling, oldParent, text));\n return this;\n }\n\n /**\n * Add a `ChangeElementCommand` to the history or current batch command.\n * @param {Element} elem - The DOM element that was changed\n * @param {module:history.CommandAttributes} attrs - An object with the attributes to be changed and the values they had *before* the change\n * @param {string} [text] - An optional string visible to user related to this change\n * @returns {module:history.HistoryRecordingService}\n */\n changeElement (elem, attrs, text) {\n if (!this.undoManager_) { return this; }\n this.addCommand_(new ChangeElementCommand(elem, attrs, text));\n return this;\n }\n\n /**\n * Private function to add a command to the history or current batch command.\n * @private\n * @param {Command} cmd\n * @returns {module:history.HistoryRecordingService|void}\n */\n addCommand_ (cmd) {\n if (!this.undoManager_) { return this; }\n if (this.currentBatchCommand_) {\n this.currentBatchCommand_.addSubCommand(cmd);\n } else {\n this.undoManager_.addCommandToHistory(cmd);\n }\n return undefined;\n }\n}\n/**\n * @memberof module:history.HistoryRecordingService\n * @property {module:history.HistoryRecordingService} NO_HISTORY - Singleton that can be passed to functions that record history, but the caller requires that no history be recorded.\n */\nHistoryRecordingService.NO_HISTORY = new HistoryRecordingService();\nexport default HistoryRecordingService;\n","/* globals jQuery */\n\nimport jQueryPluginSVG from './jQuery.attr.js'; // Needed for SVG attribute setting and array form with `attr`\nimport {isWebkit} from '../common/browser.js';\nimport {convertPath} from './path.js';\nimport {preventClickDefault} from './utilities.js';\n\n// Constants\nconst $ = jQueryPluginSVG(jQuery);\n\n/**\n * Create a clone of an element, updating its ID and its children's IDs when needed.\n * @function module:utilities.copyElem\n * @param {Element} el - DOM element to clone\n * @param {module:utilities.GetNextID} getNextId - The getter of the next unique ID.\n * @returns {Element} The cloned element\n */\nexport const copyElem = function (el, getNextId) {\n // manually create a copy of the element\n const newEl = document.createElementNS(el.namespaceURI, el.nodeName);\n $.each(el.attributes, function (i, attr) {\n if (attr.localName !== '-moz-math-font-style') {\n newEl.setAttributeNS(attr.namespaceURI, attr.nodeName, attr.value);\n }\n });\n // set the copied element's new id\n newEl.removeAttribute('id');\n newEl.id = getNextId();\n\n // Opera's \"d\" value needs to be reset for Opera/Win/non-EN\n // Also needed for webkit (else does not keep curved segments on clone)\n if (isWebkit() && el.nodeName === 'path') {\n const fixedD = convertPath(el);\n newEl.setAttribute('d', fixedD);\n }\n\n // now create copies of all children\n $.each(el.childNodes, function (i, child) {\n switch (child.nodeType) {\n case 1: // element node\n newEl.append(copyElem(child, getNextId));\n break;\n case 3: // text node\n newEl.textContent = child.nodeValue;\n break;\n default:\n break;\n }\n });\n\n if ($(el).data('gsvg')) {\n $(newEl).data('gsvg', newEl.firstChild);\n } else if ($(el).data('symbol')) {\n const ref = $(el).data('symbol');\n $(newEl).data('ref', ref).data('symbol', ref);\n } else if (newEl.tagName === 'image') {\n preventClickDefault(newEl);\n }\n\n return newEl;\n};\n","/* globals jQuery */\n/**\n * Tools for drawing.\n * @module draw\n * @license MIT\n * @copyright 2011 Jeff Schiller\n */\n\nimport Layer from './layer.js';\nimport HistoryRecordingService from './historyrecording.js';\n\nimport {NS} from '../common/namespaces.js';\nimport {isOpera} from '../common/browser.js';\nimport {\n toXml, getElem\n} from './utilities.js';\nimport {\n copyElem as utilCopyElem\n} from './copy-elem.js';\nimport {\n BatchCommand, RemoveElementCommand, MoveElementCommand, ChangeElementCommand\n} from './history.js';\n\nconst $ = jQuery;\n\nconst visElems = 'a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use'.split(',');\n\nconst RandomizeModes = {\n LET_DOCUMENT_DECIDE: 0,\n ALWAYS_RANDOMIZE: 1,\n NEVER_RANDOMIZE: 2\n};\nlet randIds = RandomizeModes.LET_DOCUMENT_DECIDE;\n// Array with current disabled elements (for in-group editing)\nlet disabledElems = [];\n\n/**\n * Get a HistoryRecordingService.\n * @param {module:history.HistoryRecordingService} [hrService] - if exists, return it instead of creating a new service.\n * @returns {module:history.HistoryRecordingService}\n */\nfunction historyRecordingService (hrService) {\n return hrService || new HistoryRecordingService(canvas_.undoMgr);\n}\n\n/**\n * Find the layer name in a group element.\n * @param {Element} group The group element to search in.\n * @returns {string} The layer name or empty string.\n */\nfunction findLayerNameInGroup (group) {\n return $('title', group).text() ||\n (isOpera() && group.querySelectorAll\n // Hack for Opera 10.60\n ? $(group.querySelectorAll('title')).text()\n : '');\n}\n\n/**\n * Given a set of names, return a new unique name.\n * @param {string[]} existingLayerNames - Existing layer names.\n * @returns {string} - The new name.\n */\nfunction getNewLayerName (existingLayerNames) {\n let i = 1;\n // TODO(codedread): What about internationalization of \"Layer\"?\n while (existingLayerNames.includes(('Layer ' + i))) { i++; }\n return 'Layer ' + i;\n}\n\n/**\n * This class encapsulates the concept of a SVG-edit drawing.\n */\nexport class Drawing {\n /**\n * @param {SVGSVGElement} svgElem - The SVG DOM Element that this JS object\n * encapsulates. If the svgElem has a se:nonce attribute on it, then\n * IDs will use the nonce as they are generated.\n * @param {string} [optIdPrefix=svg_] - The ID prefix to use.\n * @throws {Error} If not initialized with an SVG element\n */\n constructor (svgElem, optIdPrefix) {\n if (!svgElem || !svgElem.tagName || !svgElem.namespaceURI ||\n svgElem.tagName !== 'svg' || svgElem.namespaceURI !== NS.SVG) {\n throw new Error('Error: svgedit.draw.Drawing instance initialized without a <svg> element');\n }\n\n /**\n * The SVG DOM Element that represents this drawing.\n * @type {SVGSVGElement}\n */\n this.svgElem_ = svgElem;\n\n /**\n * The latest object number used in this drawing.\n * @type {Integer}\n */\n this.obj_num = 0;\n\n /**\n * The prefix to prepend to each element id in the drawing.\n * @type {string}\n */\n this.idPrefix = optIdPrefix || 'svg_';\n\n /**\n * An array of released element ids to immediately reuse.\n * @type {Integer[]}\n */\n this.releasedNums = [];\n\n /**\n * The z-ordered array of Layer objects. Each layer has a name\n * and group element.\n * The first layer is the one at the bottom of the rendering.\n * @type {Layer[]}\n */\n this.all_layers = [];\n\n /**\n * Map of all_layers by name.\n *\n * Note: Layers are ordered, but referenced externally by name; so, we need both container\n * types depending on which function is called (i.e. all_layers and layer_map).\n *\n * @type {PlainObject<string, Layer>}\n */\n this.layer_map = {};\n\n /**\n * The current layer being used.\n * @type {Layer}\n */\n this.current_layer = null;\n\n /**\n * The nonce to use to uniquely identify elements across drawings.\n * @type {!string}\n */\n this.nonce_ = '';\n const n = this.svgElem_.getAttributeNS(NS.SE, 'nonce');\n // If already set in the DOM, use the nonce throughout the document\n // else, if randomizeIds(true) has been called, create and set the nonce.\n if (n && randIds !== RandomizeModes.NEVER_RANDOMIZE) {\n this.nonce_ = n;\n } else if (randIds === RandomizeModes.ALWAYS_RANDOMIZE) {\n this.setNonce(Math.floor(Math.random() * 100001));\n }\n }\n\n /**\n * @param {string} id Element ID to retrieve\n * @returns {Element} SVG element within the root SVGSVGElement\n */\n getElem_ (id) {\n if (this.svgElem_.querySelector) {\n // querySelector lookup\n return this.svgElem_.querySelector('#' + id);\n }\n // jQuery lookup: twice as slow as xpath in FF\n return $(this.svgElem_).find('[id=' + id + ']')[0];\n }\n\n /**\n * @returns {SVGSVGElement}\n */\n getSvgElem () {\n return this.svgElem_;\n }\n\n /**\n * @returns {!(string|Integer)} The previously set nonce\n */\n getNonce () {\n return this.nonce_;\n }\n\n /**\n * @param {!(string|Integer)} n The nonce to set\n * @returns {void}\n */\n setNonce (n) {\n this.svgElem_.setAttributeNS(NS.XMLNS, 'xmlns:se', NS.SE);\n this.svgElem_.setAttributeNS(NS.SE, 'se:nonce', n);\n this.nonce_ = n;\n }\n\n /**\n * Clears any previously set nonce.\n * @returns {void}\n */\n clearNonce () {\n // We deliberately leave any se:nonce attributes alone,\n // we just don't use it to randomize ids.\n this.nonce_ = '';\n }\n\n /**\n * Returns the latest object id as a string.\n * @returns {string} The latest object Id.\n */\n getId () {\n return this.nonce_\n ? this.idPrefix + this.nonce_ + '_' + this.obj_num\n : this.idPrefix + this.obj_num;\n }\n\n /**\n * Returns the next object Id as a string.\n * @returns {string} The next object Id to use.\n */\n getNextId () {\n const oldObjNum = this.obj_num;\n let restoreOldObjNum = false;\n\n // If there are any released numbers in the release stack,\n // use the last one instead of the next obj_num.\n // We need to temporarily use obj_num as that is what getId() depends on.\n if (this.releasedNums.length > 0) {\n this.obj_num = this.releasedNums.pop();\n restoreOldObjNum = true;\n } else {\n // If we are not using a released id, then increment the obj_num.\n this.obj_num++;\n }\n\n // Ensure the ID does not exist.\n let id = this.getId();\n while (this.getElem_(id)) {\n if (restoreOldObjNum) {\n this.obj_num = oldObjNum;\n restoreOldObjNum = false;\n }\n this.obj_num++;\n id = this.getId();\n }\n // Restore the old object number if required.\n if (restoreOldObjNum) {\n this.obj_num = oldObjNum;\n }\n return id;\n }\n\n /**\n * Releases the object Id, letting it be used as the next id in getNextId().\n * This method DOES NOT remove any elements from the DOM, it is expected\n * that client code will do this.\n * @param {string} id - The id to release.\n * @returns {boolean} True if the id was valid to be released, false otherwise.\n */\n releaseId (id) {\n // confirm if this is a valid id for this Document, else return false\n const front = this.idPrefix + (this.nonce_ ? this.nonce_ + '_' : '');\n if (typeof id !== 'string' || !id.startsWith(front)) {\n return false;\n }\n // extract the obj_num of this id\n const num = Number.parseInt(id.substr(front.length));\n\n // if we didn't get a positive number or we already released this number\n // then return false.\n if (typeof num !== 'number' || num <= 0 || this.releasedNums.includes(num)) {\n return false;\n }\n\n // push the released number into the released queue\n this.releasedNums.push(num);\n\n return true;\n }\n\n /**\n * Returns the number of layers in the current drawing.\n * @returns {Integer} The number of layers in the current drawing.\n */\n getNumLayers () {\n return this.all_layers.length;\n }\n\n /**\n * Check if layer with given name already exists.\n * @param {string} name - The layer name to check\n * @returns {boolean}\n */\n hasLayer (name) {\n return this.layer_map[name] !== undefined;\n }\n\n /**\n * Returns the name of the ith layer. If the index is out of range, an empty string is returned.\n * @param {Integer} i - The zero-based index of the layer you are querying.\n * @returns {string} The name of the ith layer (or the empty string if none found)\n */\n getLayerName (i) {\n return i >= 0 && i < this.getNumLayers() ? this.all_layers[i].getName() : '';\n }\n\n /**\n * @returns {SVGGElement|null} The SVGGElement representing the current layer.\n */\n getCurrentLayer () {\n return this.current_layer ? this.current_layer.getGroup() : null;\n }\n\n /**\n * Get a layer by name.\n * @param {string} name\n * @returns {SVGGElement} The SVGGElement representing the named layer or null.\n */\n getLayerByName (name) {\n const layer = this.layer_map[name];\n return layer ? layer.getGroup() : null;\n }\n\n /**\n * Returns the name of the currently selected layer. If an error occurs, an empty string\n * is returned.\n * @returns {string} The name of the currently active layer (or the empty string if none found).\n */\n getCurrentLayerName () {\n return this.current_layer ? this.current_layer.getName() : '';\n }\n\n /**\n * Set the current layer's name.\n * @param {string} name - The new name.\n * @param {module:history.HistoryRecordingService} hrService - History recording service\n * @returns {string|null} The new name if changed; otherwise, null.\n */\n setCurrentLayerName (name, hrService) {\n let finalName = null;\n if (this.current_layer) {\n const oldName = this.current_layer.getName();\n finalName = this.current_layer.setName(name, hrService);\n if (finalName) {\n delete this.layer_map[oldName];\n this.layer_map[finalName] = this.current_layer;\n }\n }\n return finalName;\n }\n\n /**\n * Set the current layer's position.\n * @param {Integer} newpos - The zero-based index of the new position of the layer. Range should be 0 to layers-1\n * @returns {{title: SVGGElement, previousName: string}|null} If the name was changed, returns {title:SVGGElement, previousName:string}; otherwise null.\n */\n setCurrentLayerPosition (newpos) {\n const layerCount = this.getNumLayers();\n if (!this.current_layer || newpos < 0 || newpos >= layerCount) {\n return null;\n }\n\n let oldpos;\n for (oldpos = 0; oldpos < layerCount; ++oldpos) {\n if (this.all_layers[oldpos] === this.current_layer) { break; }\n }\n // some unknown error condition (current_layer not in all_layers)\n if (oldpos === layerCount) { return null; }\n\n if (oldpos !== newpos) {\n // if our new position is below us, we need to insert before the node after newpos\n const currentGroup = this.current_layer.getGroup();\n const oldNextSibling = currentGroup.nextSibling;\n\n let refGroup = null;\n if (newpos > oldpos) {\n if (newpos < layerCount - 1) {\n refGroup = this.all_layers[newpos + 1].getGroup();\n }\n // if our new position is above us, we need to insert before the node at newpos\n } else {\n refGroup = this.all_layers[newpos].getGroup();\n }\n this.svgElem_.insertBefore(currentGroup, refGroup); // Ok to replace with `refGroup.before(currentGroup);`?\n\n this.identifyLayers();\n this.setCurrentLayer(this.getLayerName(newpos));\n\n return {\n currentGroup,\n oldNextSibling\n };\n }\n return null;\n }\n\n /**\n * @param {module:history.HistoryRecordingService} hrService\n * @returns {void}\n */\n mergeLayer (hrService) {\n const currentGroup = this.current_layer.getGroup();\n const prevGroup = $(currentGroup).prev()[0];\n if (!prevGroup) { return; }\n\n hrService.startBatchCommand('Merge Layer');\n\n const layerNextSibling = currentGroup.nextSibling;\n hrService.removeElement(currentGroup, layerNextSibling, this.svgElem_);\n\n while (currentGroup.firstChild) {\n const child = currentGroup.firstChild;\n if (child.localName === 'title') {\n hrService.removeElement(child, child.nextSibling, currentGroup);\n child.remove();\n continue;\n }\n const oldNextSibling = child.nextSibling;\n prevGroup.append(child);\n hrService.moveElement(child, oldNextSibling, currentGroup);\n }\n\n // Remove current layer's group\n this.current_layer.removeGroup();\n // Remove the current layer and set the previous layer as the new current layer\n const index = this.all_layers.indexOf(this.current_layer);\n if (index > 0) {\n const name = this.current_layer.getName();\n this.current_layer = this.all_layers[index - 1];\n this.all_layers.splice(index, 1);\n delete this.layer_map[name];\n }\n\n hrService.endBatchCommand();\n }\n\n /**\n * @param {module:history.HistoryRecordingService} hrService\n * @returns {void}\n */\n mergeAllLayers (hrService) {\n // Set the current layer to the last layer.\n this.current_layer = this.all_layers[this.all_layers.length - 1];\n\n hrService.startBatchCommand('Merge all Layers');\n while (this.all_layers.length > 1) {\n this.mergeLayer(hrService);\n }\n hrService.endBatchCommand();\n }\n\n /**\n * Sets the current layer. If the name is not a valid layer name, then this\n * function returns `false`. Otherwise it returns `true`. This is not an\n * undo-able action.\n * @param {string} name - The name of the layer you want to switch to.\n * @returns {boolean} `true` if the current layer was switched, otherwise `false`\n */\n setCurrentLayer (name) {\n const layer = this.layer_map[name];\n if (layer) {\n if (this.current_layer) {\n this.current_layer.deactivate();\n }\n this.current_layer = layer;\n this.current_layer.activate();\n return true;\n }\n return false;\n }\n\n /**\n * Deletes the current layer from the drawing and then clears the selection.\n * This function then calls the 'changed' handler. This is an undoable action.\n * @todo Does this actually call the 'changed' handler?\n * @returns {SVGGElement} The SVGGElement of the layer removed or null.\n */\n deleteCurrentLayer () {\n if (this.current_layer && this.getNumLayers() > 1) {\n const oldLayerGroup = this.current_layer.removeGroup();\n this.identifyLayers();\n return oldLayerGroup;\n }\n return null;\n }\n\n /**\n * Updates layer system and sets the current layer to the\n * top-most layer (last `<g>` child of this drawing).\n * @returns {void}\n */\n identifyLayers () {\n this.all_layers = [];\n this.layer_map = {};\n const numchildren = this.svgElem_.childNodes.length;\n // loop through all children of SVG element\n const orphans = [], layernames = [];\n let layer = null;\n let childgroups = false;\n for (let i = 0; i < numchildren; ++i) {\n const child = this.svgElem_.childNodes.item(i);\n // for each g, find its layer name\n if (child && child.nodeType === 1) {\n if (child.tagName === 'g') {\n childgroups = true;\n const name = findLayerNameInGroup(child);\n if (name) {\n layernames.push(name);\n layer = new Layer(name, child);\n this.all_layers.push(layer);\n this.layer_map[name] = layer;\n } else {\n // if group did not have a name, it is an orphan\n orphans.push(child);\n }\n } else if (visElems.includes(child.nodeName)) {\n // Child is \"visible\" (i.e. not a <title> or <defs> element), so it is an orphan\n orphans.push(child);\n }\n }\n }\n\n // If orphans or no layers found, create a new layer and add all the orphans to it\n if (orphans.length > 0 || !childgroups) {\n layer = new Layer(getNewLayerName(layernames), null, this.svgElem_);\n layer.appendChildren(orphans);\n this.all_layers.push(layer);\n this.layer_map[name] = layer;\n } else {\n layer.activate();\n }\n this.current_layer = layer;\n }\n\n /**\n * Creates a new top-level layer in the drawing with the given name and\n * makes it the current layer.\n * @param {string} name - The given name. If the layer name exists, a new name will be generated.\n * @param {module:history.HistoryRecordingService} hrService - History recording service\n * @returns {SVGGElement} The SVGGElement of the new layer, which is\n * also the current layer of this drawing.\n */\n createLayer (name, hrService) {\n if (this.current_layer) {\n this.current_layer.deactivate();\n }\n // Check for duplicate name.\n if (name === undefined || name === null || name === '' || this.layer_map[name]) {\n name = getNewLayerName(Object.keys(this.layer_map));\n }\n\n // Crate new layer and add to DOM as last layer\n const layer = new Layer(name, null, this.svgElem_);\n // Like to assume hrService exists, but this is backwards compatible with old version of createLayer.\n if (hrService) {\n hrService.startBatchCommand('Create Layer');\n hrService.insertElement(layer.getGroup());\n hrService.endBatchCommand();\n }\n\n this.all_layers.push(layer);\n this.layer_map[name] = layer;\n this.current_layer = layer;\n return layer.getGroup();\n }\n\n /**\n * Creates a copy of the current layer with the given name and makes it the current layer.\n * @param {string} name - The given name. If the layer name exists, a new name will be generated.\n * @param {module:history.HistoryRecordingService} hrService - History recording service\n * @returns {SVGGElement} The SVGGElement of the new layer, which is\n * also the current layer of this drawing.\n */\n cloneLayer (name, hrService) {\n if (!this.current_layer) { return null; }\n this.current_layer.deactivate();\n // Check for duplicate name.\n if (name === undefined || name === null || name === '' || this.layer_map[name]) {\n name = getNewLayerName(Object.keys(this.layer_map));\n }\n\n // Create new group and add to DOM just after current_layer\n const currentGroup = this.current_layer.getGroup();\n const layer = new Layer(name, currentGroup, this.svgElem_);\n const group = layer.getGroup();\n\n // Clone children\n const children = [...currentGroup.childNodes];\n children.forEach((child) => {\n if (child.localName === 'title') { return; }\n group.append(this.copyElem(child));\n });\n\n if (hrService) {\n hrService.startBatchCommand('Duplicate Layer');\n hrService.insertElement(group);\n hrService.endBatchCommand();\n }\n\n // Update layer containers and current_layer.\n const index = this.all_layers.indexOf(this.current_layer);\n if (index >= 0) {\n this.all_layers.splice(index + 1, 0, layer);\n } else {\n this.all_layers.push(layer);\n }\n this.layer_map[name] = layer;\n this.current_layer = layer;\n return group;\n }\n\n /**\n * Returns whether the layer is visible. If the layer name is not valid,\n * then this function returns `false`.\n * @param {string} layerName - The name of the layer which you want to query.\n * @returns {boolean} The visibility state of the layer, or `false` if the layer name was invalid.\n */\n getLayerVisibility (layerName) {\n const layer = this.layer_map[layerName];\n return layer ? layer.isVisible() : false;\n }\n\n /**\n * Sets the visibility of the layer. If the layer name is not valid, this\n * function returns `null`, otherwise it returns the `SVGElement` representing\n * the layer. This is an undo-able action.\n * @param {string} layerName - The name of the layer to change the visibility\n * @param {boolean} bVisible - Whether the layer should be visible\n * @returns {?SVGGElement} The SVGGElement representing the layer if the\n * `layerName` was valid, otherwise `null`.\n */\n setLayerVisibility (layerName, bVisible) {\n if (typeof bVisible !== 'boolean') {\n return null;\n }\n const layer = this.layer_map[layerName];\n if (!layer) { return null; }\n layer.setVisible(bVisible);\n return layer.getGroup();\n }\n\n /**\n * Returns the opacity of the given layer. If the input name is not a layer, `null` is returned.\n * @param {string} layerName - name of the layer on which to get the opacity\n * @returns {?Float} The opacity value of the given layer. This will be a value between 0.0 and 1.0, or `null`\n * if `layerName` is not a valid layer\n */\n getLayerOpacity (layerName) {\n const layer = this.layer_map[layerName];\n if (!layer) { return null; }\n return layer.getOpacity();\n }\n\n /**\n * Sets the opacity of the given layer. If the input name is not a layer,\n * nothing happens. If opacity is not a value between 0.0 and 1.0, then\n * nothing happens.\n * NOTE: this function exists solely to apply a highlighting/de-emphasis\n * effect to a layer. When it is possible for a user to affect the opacity\n * of a layer, we will need to allow this function to produce an undo-able\n * action.\n * @param {string} layerName - Name of the layer on which to set the opacity\n * @param {Float} opacity - A float value in the range 0.0-1.0\n * @returns {void}\n */\n setLayerOpacity (layerName, opacity) {\n if (typeof opacity !== 'number' || opacity < 0.0 || opacity > 1.0) {\n return;\n }\n const layer = this.layer_map[layerName];\n if (layer) {\n layer.setOpacity(opacity);\n }\n }\n\n /**\n * Create a clone of an element, updating its ID and its children's IDs when needed.\n * @param {Element} el - DOM element to clone\n * @returns {Element}\n */\n copyElem (el) {\n const that = this;\n const getNextIdClosure = function () { return that.getNextId(); };\n return utilCopyElem(el, getNextIdClosure);\n }\n}\n\n/**\n * Called to ensure that drawings will or will not have randomized ids.\n * The currentDrawing will have its nonce set if it doesn't already.\n * @function module:draw.randomizeIds\n * @param {boolean} enableRandomization - flag indicating if documents should have randomized ids\n * @param {draw.Drawing} currentDrawing\n * @returns {void}\n */\nexport const randomizeIds = function (enableRandomization, currentDrawing) {\n randIds = enableRandomization === false\n ? RandomizeModes.NEVER_RANDOMIZE\n : RandomizeModes.ALWAYS_RANDOMIZE;\n\n if (randIds === RandomizeModes.ALWAYS_RANDOMIZE && !currentDrawing.getNonce()) {\n currentDrawing.setNonce(Math.floor(Math.random() * 100001));\n } else if (randIds === RandomizeModes.NEVER_RANDOMIZE && currentDrawing.getNonce()) {\n currentDrawing.clearNonce();\n }\n};\n\n// Layer API Functions\n\n/**\n* Group: Layers.\n*/\n\n/**\n * @see {@link https://api.jquery.com/jQuery.data/}\n * @name external:jQuery.data\n */\n\n/**\n * @interface module:draw.DrawCanvasInit\n * @property {module:path.pathActions} pathActions\n * @property {external:jQuery.data} elData\n * @property {module:history.UndoManager} undoMgr\n */\n/**\n * @function module:draw.DrawCanvasInit#getCurrentGroup\n * @returns {Element}\n */\n/**\n * @function module:draw.DrawCanvasInit#setCurrentGroup\n * @param {Element} cg\n * @returns {void}\n*/\n/**\n * @function module:draw.DrawCanvasInit#getSelectedElements\n * @returns {Element[]} the array with selected DOM elements\n*/\n/**\n * @function module:draw.DrawCanvasInit#getSVGContent\n * @returns {SVGSVGElement}\n */\n/**\n * @function module:draw.DrawCanvasInit#getCurrentDrawing\n * @returns {module:draw.Drawing}\n */\n/**\n * @function module:draw.DrawCanvasInit#clearSelection\n * @param {boolean} [noCall] - When `true`, does not call the \"selected\" handler\n * @returns {void}\n*/\n/**\n * Run the callback function associated with the given event.\n * @function module:draw.DrawCanvasInit#call\n * @param {\"changed\"|\"contextset\"} ev - String with the event name\n * @param {module:svgcanvas.SvgCanvas#event:changed|module:svgcanvas.SvgCanvas#event:contextset} arg - Argument to pass through to the callback\n * function. If the event is \"changed\", a (single-item) array of `Element`s is\n * passed. If the event is \"contextset\", the arg is `null` or `Element`.\n * @returns {void}\n */\n/**\n * @function module:draw.DrawCanvasInit#addCommandToHistory\n * @param {Command} cmd\n * @returns {void}\n*/\n/**\n * @function module:draw.DrawCanvasInit#changeSVGContent\n * @returns {void}\n */\n\nlet canvas_;\n/**\n* @function module:draw.init\n* @param {module:draw.DrawCanvasInit} canvas\n* @returns {void}\n*/\nexport const init = function (canvas) {\n canvas_ = canvas;\n};\n\n/**\n* Updates layer system.\n* @function module:draw.identifyLayers\n* @returns {void}\n*/\nexport const identifyLayers = function () {\n leaveContext();\n canvas_.getCurrentDrawing().identifyLayers();\n};\n\n/**\n* Creates a new top-level layer in the drawing with the given name, sets the current layer\n* to it, and then clears the selection. This function then calls the 'changed' handler.\n* This is an undoable action.\n* @function module:draw.createLayer\n* @param {string} name - The given name\n* @param {module:history.HistoryRecordingService} hrService\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\nexport const createLayer = function (name, hrService) {\n const newLayer = canvas_.getCurrentDrawing().createLayer(\n name,\n historyRecordingService(hrService)\n );\n canvas_.clearSelection();\n canvas_.call('changed', [newLayer]);\n};\n\n/**\n * Creates a new top-level layer in the drawing with the given name, copies all the current layer's contents\n * to it, and then clears the selection. This function then calls the 'changed' handler.\n * This is an undoable action.\n * @function module:draw.cloneLayer\n * @param {string} name - The given name. If the layer name exists, a new name will be generated.\n * @param {module:history.HistoryRecordingService} hrService - History recording service\n * @fires module:svgcanvas.SvgCanvas#event:changed\n * @returns {void}\n */\nexport const cloneLayer = function (name, hrService) {\n // Clone the current layer and make the cloned layer the new current layer\n const newLayer = canvas_.getCurrentDrawing().cloneLayer(name, historyRecordingService(hrService));\n\n canvas_.clearSelection();\n leaveContext();\n canvas_.call('changed', [newLayer]);\n};\n\n/**\n* Deletes the current layer from the drawing and then clears the selection. This function\n* then calls the 'changed' handler. This is an undoable action.\n* @function module:draw.deleteCurrentLayer\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {boolean} `true` if an old layer group was found to delete\n*/\nexport const deleteCurrentLayer = function () {\n let currentLayer = canvas_.getCurrentDrawing().getCurrentLayer();\n const {nextSibling} = currentLayer;\n const parent = currentLayer.parentNode;\n currentLayer = canvas_.getCurrentDrawing().deleteCurrentLayer();\n if (currentLayer) {\n const batchCmd = new BatchCommand('Delete Layer');\n // store in our Undo History\n batchCmd.addSubCommand(new RemoveElementCommand(currentLayer, nextSibling, parent));\n canvas_.addCommandToHistory(batchCmd);\n canvas_.clearSelection();\n canvas_.call('changed', [parent]);\n return true;\n }\n return false;\n};\n\n/**\n* Sets the current layer. If the name is not a valid layer name, then this function returns\n* false. Otherwise it returns true. This is not an undo-able action.\n* @function module:draw.setCurrentLayer\n* @param {string} name - The name of the layer you want to switch to.\n* @returns {boolean} true if the current layer was switched, otherwise false\n*/\nexport const setCurrentLayer = function (name) {\n const result = canvas_.getCurrentDrawing().setCurrentLayer(toXml(name));\n if (result) {\n canvas_.clearSelection();\n }\n return result;\n};\n\n/**\n* Renames the current layer. If the layer name is not valid (i.e. unique), then this function\n* does nothing and returns `false`, otherwise it returns `true`. This is an undo-able action.\n* @function module:draw.renameCurrentLayer\n* @param {string} newName - the new name you want to give the current layer. This name must\n* be unique among all layer names.\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {boolean} Whether the rename succeeded\n*/\nexport const renameCurrentLayer = function (newName) {\n const drawing = canvas_.getCurrentDrawing();\n const layer = drawing.getCurrentLayer();\n if (layer) {\n const result = drawing.setCurrentLayerName(newName, historyRecordingService());\n if (result) {\n canvas_.call('changed', [layer]);\n return true;\n }\n }\n return false;\n};\n\n/**\n* Changes the position of the current layer to the new value. If the new index is not valid,\n* this function does nothing and returns false, otherwise it returns true. This is an\n* undo-able action.\n* @function module:draw.setCurrentLayerPosition\n* @param {Integer} newPos - The zero-based index of the new position of the layer. This should be between\n* 0 and (number of layers - 1)\n* @returns {boolean} `true` if the current layer position was changed, `false` otherwise.\n*/\nexport const setCurrentLayerPosition = function (newPos) {\n const drawing = canvas_.getCurrentDrawing();\n const result = drawing.setCurrentLayerPosition(newPos);\n if (result) {\n canvas_.addCommandToHistory(new MoveElementCommand(result.currentGroup, result.oldNextSibling, canvas_.getSVGContent()));\n return true;\n }\n return false;\n};\n\n/**\n* Sets the visibility of the layer. If the layer name is not valid, this function return\n* `false`, otherwise it returns `true`. This is an undo-able action.\n* @function module:draw.setLayerVisibility\n* @param {string} layerName - The name of the layer to change the visibility\n* @param {boolean} bVisible - Whether the layer should be visible\n* @returns {boolean} true if the layer's visibility was set, false otherwise\n*/\nexport const setLayerVisibility = function (layerName, bVisible) {\n const drawing = canvas_.getCurrentDrawing();\n const prevVisibility = drawing.getLayerVisibility(layerName);\n const layer = drawing.setLayerVisibility(layerName, bVisible);\n if (layer) {\n const oldDisplay = prevVisibility ? 'inline' : 'none';\n canvas_.addCommandToHistory(new ChangeElementCommand(layer, {display: oldDisplay}, 'Layer Visibility'));\n } else {\n return false;\n }\n\n if (layer === drawing.getCurrentLayer()) {\n canvas_.clearSelection();\n canvas_.pathActions.clear();\n }\n // call('changed', [selected]);\n return true;\n};\n\n/**\n* Moves the selected elements to layerName. If the name is not a valid layer name, then `false`\n* is returned. Otherwise it returns `true`. This is an undo-able action.\n* @function module:draw.moveSelectedToLayer\n* @param {string} layerName - The name of the layer you want to which you want to move the selected elements\n* @returns {boolean} Whether the selected elements were moved to the layer.\n*/\nexport const moveSelectedToLayer = function (layerName) {\n // find the layer\n const drawing = canvas_.getCurrentDrawing();\n const layer = drawing.getLayerByName(layerName);\n if (!layer) { return false; }\n\n const batchCmd = new BatchCommand('Move Elements to Layer');\n\n // loop for each selected element and move it\n const selElems = canvas_.getSelectedElements();\n let i = selElems.length;\n while (i--) {\n const elem = selElems[i];\n if (!elem) { continue; }\n const oldNextSibling = elem.nextSibling;\n // TODO: this is pretty brittle!\n const oldLayer = elem.parentNode;\n layer.append(elem);\n batchCmd.addSubCommand(new MoveElementCommand(elem, oldNextSibling, oldLayer));\n }\n\n canvas_.addCommandToHistory(batchCmd);\n\n return true;\n};\n\n/**\n* @function module:draw.mergeLayer\n* @param {module:history.HistoryRecordingService} hrService\n* @returns {void}\n*/\nexport const mergeLayer = function (hrService) {\n canvas_.getCurrentDrawing().mergeLayer(historyRecordingService(hrService));\n canvas_.clearSelection();\n leaveContext();\n canvas_.changeSVGContent();\n};\n\n/**\n* @function module:draw.mergeAllLayers\n* @param {module:history.HistoryRecordingService} hrService\n* @returns {void}\n*/\nexport const mergeAllLayers = function (hrService) {\n canvas_.getCurrentDrawing().mergeAllLayers(historyRecordingService(hrService));\n canvas_.clearSelection();\n leaveContext();\n canvas_.changeSVGContent();\n};\n\n/**\n* Return from a group context to the regular kind, make any previously\n* disabled elements enabled again.\n* @function module:draw.leaveContext\n* @fires module:svgcanvas.SvgCanvas#event:contextset\n* @returns {void}\n*/\nexport const leaveContext = function () {\n const len = disabledElems.length;\n if (len) {\n for (let i = 0; i < len; i++) {\n const elem = disabledElems[i];\n const orig = canvas_.elData(elem, 'orig_opac');\n if (orig !== 1) {\n elem.setAttribute('opacity', orig);\n } else {\n elem.removeAttribute('opacity');\n }\n elem.setAttribute('style', 'pointer-events: inherit');\n }\n disabledElems = [];\n canvas_.clearSelection(true);\n canvas_.call('contextset', null);\n }\n canvas_.setCurrentGroup(null);\n};\n\n/**\n* Set the current context (for in-group editing).\n* @function module:draw.setContext\n* @param {Element} elem\n* @fires module:svgcanvas.SvgCanvas#event:contextset\n* @returns {void}\n*/\nexport const setContext = function (elem) {\n leaveContext();\n if (typeof elem === 'string') {\n elem = getElem(elem);\n }\n\n // Edit inside this group\n canvas_.setCurrentGroup(elem);\n\n // Disable other elements\n $(elem).parentsUntil('#svgcontent').andSelf().siblings().each(function () {\n const opac = this.getAttribute('opacity') || 1;\n // Store the original's opacity\n canvas_.elData(this, 'orig_opac', opac);\n this.setAttribute('opacity', opac * 0.33);\n this.setAttribute('style', 'pointer-events: none');\n disabledElems.push(this);\n });\n\n canvas_.clearSelection();\n canvas_.call('contextset', canvas_.getCurrentGroup());\n};\n\n/**\n* @memberof module:draw\n* @class Layer\n* @see {@link module:layer.Layer}\n*/\nexport {Layer};\n","/* globals jQuery */\n/**\n * Recalculate.\n * @module recalculate\n * @license MIT\n */\n\nimport jQueryPluginSVG from './jQuery.attr.js'; // Needed for SVG attribute setting and array form with `attr`\nimport {NS} from '../common/namespaces.js';\nimport {convertToNum} from '../common/units.js';\nimport {isWebkit} from '../common/browser.js';\nimport {getTransformList} from './svgtransformlist.js';\nimport {getRotationAngle, getHref, getBBox, getRefElem, isNullish} from './utilities.js';\nimport {BatchCommand, ChangeElementCommand} from './history.js';\nimport {remapElement} from './coords.js';\nimport {\n isIdentity, matrixMultiply, transformPoint, transformListToTransform,\n hasMatrixTransform\n} from './math.js';\n\nconst $ = jQueryPluginSVG(jQuery);\n\nlet context_;\n\n/**\n* @interface module:recalculate.EditorContext\n*/\n/**\n * @function module:recalculate.EditorContext#getSVGRoot\n * @returns {SVGSVGElement} The root DOM element\n */\n/**\n * @function module:recalculate.EditorContext#getStartTransform\n * @returns {string}\n*/\n/**\n * @function module:recalculate.EditorContext#setStartTransform\n * @param {string} transform\n * @returns {void}\n */\n\n/**\n* @function module:recalculate.init\n* @param {module:recalculate.EditorContext} editorContext\n* @returns {void}\n*/\nexport const init = function (editorContext) {\n context_ = editorContext;\n};\n\n/**\n* Updates a `<clipPath>`s values based on the given translation of an element.\n* @function module:recalculate.updateClipPath\n* @param {string} attr - The clip-path attribute value with the clipPath's ID\n* @param {Float} tx - The translation's x value\n* @param {Float} ty - The translation's y value\n* @returns {void}\n*/\nexport const updateClipPath = function (attr, tx, ty) {\n const path = getRefElem(attr).firstChild;\n const cpXform = getTransformList(path);\n const newxlate = context_.getSVGRoot().createSVGTransform();\n newxlate.setTranslate(tx, ty);\n\n cpXform.appendItem(newxlate);\n\n // Update clipPath's dimensions\n recalculateDimensions(path);\n};\n\n/**\n* Decides the course of action based on the element's transform list.\n* @function module:recalculate.recalculateDimensions\n* @param {Element} selected - The DOM element to recalculate\n* @returns {Command} Undo command object with the resulting change\n*/\nexport const recalculateDimensions = function (selected) {\n if (isNullish(selected)) { return null; }\n\n // Firefox Issue - 1081\n if (selected.nodeName === 'svg' && navigator.userAgent.includes('Firefox/20')) {\n return null;\n }\n\n const svgroot = context_.getSVGRoot();\n const tlist = getTransformList(selected);\n\n // remove any unnecessary transforms\n if (tlist && tlist.numberOfItems > 0) {\n let k = tlist.numberOfItems;\n const noi = k;\n while (k--) {\n const xform = tlist.getItem(k);\n if (xform.type === 0) {\n tlist.removeItem(k);\n // remove identity matrices\n } else if (xform.type === 1) {\n if (isIdentity(xform.matrix)) {\n if (noi === 1) {\n // Overcome Chrome bug (though only when noi is 1) with\n // `removeItem` preventing `removeAttribute` from\n // subsequently working\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=843901\n selected.removeAttribute('transform');\n return null;\n }\n tlist.removeItem(k);\n }\n // remove zero-degree rotations\n } else if (xform.type === 4 && xform.angle === 0) {\n tlist.removeItem(k);\n }\n }\n // End here if all it has is a rotation\n if (tlist.numberOfItems === 1 &&\n getRotationAngle(selected)) { return null; }\n }\n\n // if this element had no transforms, we are done\n if (!tlist || tlist.numberOfItems === 0) {\n // Chrome apparently had a bug that requires clearing the attribute first.\n selected.setAttribute('transform', '');\n // However, this still next line currently doesn't work at all in Chrome\n selected.removeAttribute('transform');\n // selected.transform.baseVal.clear(); // Didn't help for Chrome bug\n return null;\n }\n\n // TODO: Make this work for more than 2\n if (tlist) {\n let mxs = [];\n let k = tlist.numberOfItems;\n while (k--) {\n const xform = tlist.getItem(k);\n if (xform.type === 1) {\n mxs.push([xform.matrix, k]);\n } else if (mxs.length) {\n mxs = [];\n }\n }\n if (mxs.length === 2) {\n const mNew = svgroot.createSVGTransformFromMatrix(matrixMultiply(mxs[1][0], mxs[0][0]));\n tlist.removeItem(mxs[0][1]);\n tlist.removeItem(mxs[1][1]);\n tlist.insertItemBefore(mNew, mxs[1][1]);\n }\n\n // combine matrix + translate\n k = tlist.numberOfItems;\n if (k >= 2 && tlist.getItem(k - 2).type === 1 && tlist.getItem(k - 1).type === 2) {\n const mt = svgroot.createSVGTransform();\n\n const m = matrixMultiply(\n tlist.getItem(k - 2).matrix,\n tlist.getItem(k - 1).matrix\n );\n mt.setMatrix(m);\n tlist.removeItem(k - 2);\n tlist.removeItem(k - 2);\n tlist.appendItem(mt);\n }\n }\n\n // If it still has a single [M] or [R][M], return null too (prevents BatchCommand from being returned).\n switch (selected.tagName) {\n // Ignore these elements, as they can absorb the [M]\n case 'line':\n case 'polyline':\n case 'polygon':\n case 'path':\n break;\n default:\n if ((tlist.numberOfItems === 1 && tlist.getItem(0).type === 1) ||\n (tlist.numberOfItems === 2 && tlist.getItem(0).type === 1 && tlist.getItem(0).type === 4)) {\n return null;\n }\n }\n\n // Grouped SVG element\n const gsvg = $(selected).data('gsvg');\n\n // we know we have some transforms, so set up return variable\n const batchCmd = new BatchCommand('Transform');\n\n // store initial values that will be affected by reducing the transform list\n let changes = {};\n let initial = null;\n let attrs = [];\n switch (selected.tagName) {\n case 'line':\n attrs = ['x1', 'y1', 'x2', 'y2'];\n break;\n case 'circle':\n attrs = ['cx', 'cy', 'r'];\n break;\n case 'ellipse':\n attrs = ['cx', 'cy', 'rx', 'ry'];\n break;\n case 'foreignObject':\n case 'rect':\n case 'image':\n attrs = ['width', 'height', 'x', 'y'];\n break;\n case 'use':\n case 'text':\n case 'tspan':\n attrs = ['x', 'y'];\n break;\n case 'polygon':\n case 'polyline': {\n initial = {};\n initial.points = selected.getAttribute('points');\n const list = selected.points;\n const len = list.numberOfItems;\n changes.points = new Array(len);\n for (let i = 0; i < len; ++i) {\n const pt = list.getItem(i);\n changes.points[i] = {x: pt.x, y: pt.y};\n }\n break;\n } case 'path':\n initial = {};\n initial.d = selected.getAttribute('d');\n changes.d = selected.getAttribute('d');\n break;\n } // switch on element type to get initial values\n\n if (attrs.length) {\n changes = $(selected).attr(attrs);\n $.each(changes, function (attr, val) {\n changes[attr] = convertToNum(attr, val);\n });\n } else if (gsvg) {\n // GSVG exception\n changes = {\n x: $(gsvg).attr('x') || 0,\n y: $(gsvg).attr('y') || 0\n };\n }\n\n // if we haven't created an initial array in polygon/polyline/path, then\n // make a copy of initial values and include the transform\n if (isNullish(initial)) {\n initial = $.extend(true, {}, changes);\n $.each(initial, function (attr, val) {\n initial[attr] = convertToNum(attr, val);\n });\n }\n // save the start transform value too\n initial.transform = context_.getStartTransform() || '';\n\n let oldcenter, newcenter;\n\n // if it's a regular group, we have special processing to flatten transforms\n if ((selected.tagName === 'g' && !gsvg) || selected.tagName === 'a') {\n const box = getBBox(selected);\n\n oldcenter = {x: box.x + box.width / 2, y: box.y + box.height / 2};\n newcenter = transformPoint(\n box.x + box.width / 2,\n box.y + box.height / 2,\n transformListToTransform(tlist).matrix\n );\n // let m = svgroot.createSVGMatrix();\n\n // temporarily strip off the rotate and save the old center\n const gangle = getRotationAngle(selected);\n if (gangle) {\n const a = gangle * Math.PI / 180;\n const s = Math.abs(a) > (1.0e-10) ? Math.sin(a) / (1 - Math.cos(a)) : 2 / a;\n for (let i = 0; i < tlist.numberOfItems; ++i) {\n const xform = tlist.getItem(i);\n if (xform.type === 4) {\n // extract old center through mystical arts\n const rm = xform.matrix;\n oldcenter.y = (s * rm.e + rm.f) / 2;\n oldcenter.x = (rm.e - s * rm.f) / 2;\n tlist.removeItem(i);\n break;\n }\n }\n }\n const N = tlist.numberOfItems;\n let tx = 0, ty = 0, operation = 0;\n\n let firstM;\n if (N) {\n firstM = tlist.getItem(0).matrix;\n }\n\n let oldStartTransform;\n // first, if it was a scale then the second-last transform will be it\n if (N >= 3 && tlist.getItem(N - 2).type === 3 &&\n tlist.getItem(N - 3).type === 2 && tlist.getItem(N - 1).type === 2) {\n operation = 3; // scale\n\n // if the children are unrotated, pass the scale down directly\n // otherwise pass the equivalent matrix() down directly\n const tm = tlist.getItem(N - 3).matrix,\n sm = tlist.getItem(N - 2).matrix,\n tmn = tlist.getItem(N - 1).matrix;\n\n const children = selected.childNodes;\n let c = children.length;\n while (c--) {\n const child = children.item(c);\n tx = 0;\n ty = 0;\n if (child.nodeType === 1) {\n const childTlist = getTransformList(child);\n\n // some children might not have a transform (<metadata>, <defs>, etc)\n if (!childTlist) { continue; }\n\n const m = transformListToTransform(childTlist).matrix;\n\n // Convert a matrix to a scale if applicable\n // if (hasMatrixTransform(childTlist) && childTlist.numberOfItems == 1) {\n // if (m.b==0 && m.c==0 && m.e==0 && m.f==0) {\n // childTlist.removeItem(0);\n // const translateOrigin = svgroot.createSVGTransform(),\n // scale = svgroot.createSVGTransform(),\n // translateBack = svgroot.createSVGTransform();\n // translateOrigin.setTranslate(0, 0);\n // scale.setScale(m.a, m.d);\n // translateBack.setTranslate(0, 0);\n // childTlist.appendItem(translateBack);\n // childTlist.appendItem(scale);\n // childTlist.appendItem(translateOrigin);\n // }\n // }\n\n const angle = getRotationAngle(child);\n oldStartTransform = context_.getStartTransform();\n // const childxforms = [];\n context_.setStartTransform(child.getAttribute('transform'));\n if (angle || hasMatrixTransform(childTlist)) {\n const e2t = svgroot.createSVGTransform();\n e2t.setMatrix(matrixMultiply(tm, sm, tmn, m));\n childTlist.clear();\n childTlist.appendItem(e2t);\n // childxforms.push(e2t);\n // if not rotated or skewed, push the [T][S][-T] down to the child\n } else {\n // update the transform list with translate,scale,translate\n\n // slide the [T][S][-T] from the front to the back\n // [T][S][-T][M] = [M][T2][S2][-T2]\n\n // (only bringing [-T] to the right of [M])\n // [T][S][-T][M] = [T][S][M][-T2]\n // [-T2] = [M_inv][-T][M]\n const t2n = matrixMultiply(m.inverse(), tmn, m);\n // [T2] is always negative translation of [-T2]\n const t2 = svgroot.createSVGMatrix();\n t2.e = -t2n.e;\n t2.f = -t2n.f;\n\n // [T][S][-T][M] = [M][T2][S2][-T2]\n // [S2] = [T2_inv][M_inv][T][S][-T][M][-T2_inv]\n const s2 = matrixMultiply(t2.inverse(), m.inverse(), tm, sm, tmn, m, t2n.inverse());\n\n const translateOrigin = svgroot.createSVGTransform(),\n scale = svgroot.createSVGTransform(),\n translateBack = svgroot.createSVGTransform();\n translateOrigin.setTranslate(t2n.e, t2n.f);\n scale.setScale(s2.a, s2.d);\n translateBack.setTranslate(t2.e, t2.f);\n childTlist.appendItem(translateBack);\n childTlist.appendItem(scale);\n childTlist.appendItem(translateOrigin);\n // childxforms.push(translateBack);\n // childxforms.push(scale);\n // childxforms.push(translateOrigin);\n // logMatrix(translateBack.matrix);\n // logMatrix(scale.matrix);\n } // not rotated\n batchCmd.addSubCommand(recalculateDimensions(child));\n // TODO: If any <use> have this group as a parent and are\n // referencing this child, then we need to impose a reverse\n // scale on it so that when it won't get double-translated\n // const uses = selected.getElementsByTagNameNS(NS.SVG, 'use');\n // const href = '#' + child.id;\n // let u = uses.length;\n // while (u--) {\n // const useElem = uses.item(u);\n // if (href == getHref(useElem)) {\n // const usexlate = svgroot.createSVGTransform();\n // usexlate.setTranslate(-tx,-ty);\n // getTransformList(useElem).insertItemBefore(usexlate,0);\n // batchCmd.addSubCommand( recalculateDimensions(useElem) );\n // }\n // }\n context_.setStartTransform(oldStartTransform);\n } // element\n } // for each child\n // Remove these transforms from group\n tlist.removeItem(N - 1);\n tlist.removeItem(N - 2);\n tlist.removeItem(N - 3);\n } else if (N >= 3 && tlist.getItem(N - 1).type === 1) {\n operation = 3; // scale\n const m = transformListToTransform(tlist).matrix;\n const e2t = svgroot.createSVGTransform();\n e2t.setMatrix(m);\n tlist.clear();\n tlist.appendItem(e2t);\n // next, check if the first transform was a translate\n // if we had [ T1 ] [ M ] we want to transform this into [ M ] [ T2 ]\n // therefore [ T2 ] = [ M_inv ] [ T1 ] [ M ]\n } else if ((N === 1 || (N > 1 && tlist.getItem(1).type !== 3)) &&\n tlist.getItem(0).type === 2) {\n operation = 2; // translate\n const T_M = transformListToTransform(tlist).matrix;\n tlist.removeItem(0);\n const mInv = transformListToTransform(tlist).matrix.inverse();\n const M2 = matrixMultiply(mInv, T_M);\n\n tx = M2.e;\n ty = M2.f;\n\n if (tx !== 0 || ty !== 0) {\n // we pass the translates down to the individual children\n const children = selected.childNodes;\n let c = children.length;\n\n const clipPathsDone = [];\n while (c--) {\n const child = children.item(c);\n if (child.nodeType === 1) {\n // Check if child has clip-path\n if (child.getAttribute('clip-path')) {\n // tx, ty\n const attr = child.getAttribute('clip-path');\n if (!clipPathsDone.includes(attr)) {\n updateClipPath(attr, tx, ty);\n clipPathsDone.push(attr);\n }\n }\n\n oldStartTransform = context_.getStartTransform();\n context_.setStartTransform(child.getAttribute('transform'));\n\n const childTlist = getTransformList(child);\n // some children might not have a transform (<metadata>, <defs>, etc)\n if (childTlist) {\n const newxlate = svgroot.createSVGTransform();\n newxlate.setTranslate(tx, ty);\n if (childTlist.numberOfItems) {\n childTlist.insertItemBefore(newxlate, 0);\n } else {\n childTlist.appendItem(newxlate);\n }\n batchCmd.addSubCommand(recalculateDimensions(child));\n // If any <use> have this group as a parent and are\n // referencing this child, then impose a reverse translate on it\n // so that when it won't get double-translated\n const uses = selected.getElementsByTagNameNS(NS.SVG, 'use');\n const href = '#' + child.id;\n let u = uses.length;\n while (u--) {\n const useElem = uses.item(u);\n if (href === getHref(useElem)) {\n const usexlate = svgroot.createSVGTransform();\n usexlate.setTranslate(-tx, -ty);\n getTransformList(useElem).insertItemBefore(usexlate, 0);\n batchCmd.addSubCommand(recalculateDimensions(useElem));\n }\n }\n context_.setStartTransform(oldStartTransform);\n }\n }\n }\n context_.setStartTransform(oldStartTransform);\n }\n // else, a matrix imposition from a parent group\n // keep pushing it down to the children\n } else if (N === 1 && tlist.getItem(0).type === 1 && !gangle) {\n operation = 1;\n const m = tlist.getItem(0).matrix,\n children = selected.childNodes;\n let c = children.length;\n while (c--) {\n const child = children.item(c);\n if (child.nodeType === 1) {\n oldStartTransform = context_.getStartTransform();\n context_.setStartTransform(child.getAttribute('transform'));\n const childTlist = getTransformList(child);\n\n if (!childTlist) { continue; }\n\n const em = matrixMultiply(m, transformListToTransform(childTlist).matrix);\n const e2m = svgroot.createSVGTransform();\n e2m.setMatrix(em);\n childTlist.clear();\n childTlist.appendItem(e2m, 0);\n\n batchCmd.addSubCommand(recalculateDimensions(child));\n context_.setStartTransform(oldStartTransform);\n\n // Convert stroke\n // TODO: Find out if this should actually happen somewhere else\n const sw = child.getAttribute('stroke-width');\n if (child.getAttribute('stroke') !== 'none' && !isNaN(sw)) {\n const avg = (Math.abs(em.a) + Math.abs(em.d)) / 2;\n child.setAttribute('stroke-width', sw * avg);\n }\n }\n }\n tlist.clear();\n // else it was just a rotate\n } else {\n if (gangle) {\n const newRot = svgroot.createSVGTransform();\n newRot.setRotate(gangle, newcenter.x, newcenter.y);\n if (tlist.numberOfItems) {\n tlist.insertItemBefore(newRot, 0);\n } else {\n tlist.appendItem(newRot);\n }\n }\n if (tlist.numberOfItems === 0) {\n selected.removeAttribute('transform');\n }\n return null;\n }\n\n // if it was a translate, put back the rotate at the new center\n if (operation === 2) {\n if (gangle) {\n newcenter = {\n x: oldcenter.x + firstM.e,\n y: oldcenter.y + firstM.f\n };\n\n const newRot = svgroot.createSVGTransform();\n newRot.setRotate(gangle, newcenter.x, newcenter.y);\n if (tlist.numberOfItems) {\n tlist.insertItemBefore(newRot, 0);\n } else {\n tlist.appendItem(newRot);\n }\n }\n // if it was a resize\n } else if (operation === 3) {\n const m = transformListToTransform(tlist).matrix;\n const roldt = svgroot.createSVGTransform();\n roldt.setRotate(gangle, oldcenter.x, oldcenter.y);\n const rold = roldt.matrix;\n const rnew = svgroot.createSVGTransform();\n rnew.setRotate(gangle, newcenter.x, newcenter.y);\n const rnewInv = rnew.matrix.inverse(),\n mInv = m.inverse(),\n extrat = matrixMultiply(mInv, rnewInv, rold, m);\n\n tx = extrat.e;\n ty = extrat.f;\n\n if (tx !== 0 || ty !== 0) {\n // now push this transform down to the children\n // we pass the translates down to the individual children\n const children = selected.childNodes;\n let c = children.length;\n while (c--) {\n const child = children.item(c);\n if (child.nodeType === 1) {\n oldStartTransform = context_.getStartTransform();\n context_.setStartTransform(child.getAttribute('transform'));\n const childTlist = getTransformList(child);\n const newxlate = svgroot.createSVGTransform();\n newxlate.setTranslate(tx, ty);\n if (childTlist.numberOfItems) {\n childTlist.insertItemBefore(newxlate, 0);\n } else {\n childTlist.appendItem(newxlate);\n }\n\n batchCmd.addSubCommand(recalculateDimensions(child));\n context_.setStartTransform(oldStartTransform);\n }\n }\n }\n\n if (gangle) {\n if (tlist.numberOfItems) {\n tlist.insertItemBefore(rnew, 0);\n } else {\n tlist.appendItem(rnew);\n }\n }\n }\n // else, it's a non-group\n } else {\n // TODO: box might be null for some elements (<metadata> etc), need to handle this\n const box = getBBox(selected);\n\n // Paths (and possbly other shapes) will have no BBox while still in <defs>,\n // but we still may need to recalculate them (see issue 595).\n // TODO: Figure out how to get BBox from these elements in case they\n // have a rotation transform\n\n if (!box && selected.tagName !== 'path') return null;\n\n let m; // = svgroot.createSVGMatrix();\n // temporarily strip off the rotate and save the old center\n const angle = getRotationAngle(selected);\n if (angle) {\n oldcenter = {x: box.x + box.width / 2, y: box.y + box.height / 2};\n newcenter = transformPoint(\n box.x + box.width / 2,\n box.y + box.height / 2,\n transformListToTransform(tlist).matrix\n );\n\n const a = angle * Math.PI / 180;\n const s = (Math.abs(a) > (1.0e-10))\n ? Math.sin(a) / (1 - Math.cos(a))\n // TODO: This blows up if the angle is exactly 0!\n : 2 / a;\n\n for (let i = 0; i < tlist.numberOfItems; ++i) {\n const xform = tlist.getItem(i);\n if (xform.type === 4) {\n // extract old center through mystical arts\n const rm = xform.matrix;\n oldcenter.y = (s * rm.e + rm.f) / 2;\n oldcenter.x = (rm.e - s * rm.f) / 2;\n tlist.removeItem(i);\n break;\n }\n }\n }\n\n // 2 = translate, 3 = scale, 4 = rotate, 1 = matrix imposition\n let operation = 0;\n const N = tlist.numberOfItems;\n\n // Check if it has a gradient with userSpaceOnUse, in which case\n // adjust it by recalculating the matrix transform.\n // TODO: Make this work in Webkit using transformlist.SVGTransformList\n if (!isWebkit()) {\n const fill = selected.getAttribute('fill');\n if (fill && fill.startsWith('url(')) {\n const paint = getRefElem(fill);\n let type = 'pattern';\n if (paint.tagName !== type) type = 'gradient';\n const attrVal = paint.getAttribute(type + 'Units');\n if (attrVal === 'userSpaceOnUse') {\n // Update the userSpaceOnUse element\n m = transformListToTransform(tlist).matrix;\n const gtlist = getTransformList(paint);\n const gmatrix = transformListToTransform(gtlist).matrix;\n m = matrixMultiply(m, gmatrix);\n const mStr = 'matrix(' + [m.a, m.b, m.c, m.d, m.e, m.f].join(',') + ')';\n paint.setAttribute(type + 'Transform', mStr);\n }\n }\n }\n\n // first, if it was a scale of a non-skewed element, then the second-last\n // transform will be the [S]\n // if we had [M][T][S][T] we want to extract the matrix equivalent of\n // [T][S][T] and push it down to the element\n if (N >= 3 && tlist.getItem(N - 2).type === 3 &&\n tlist.getItem(N - 3).type === 2 && tlist.getItem(N - 1).type === 2) {\n // Removed this so a <use> with a given [T][S][T] would convert to a matrix.\n // Is that bad?\n // && selected.nodeName != 'use'\n operation = 3; // scale\n m = transformListToTransform(tlist, N - 3, N - 1).matrix;\n tlist.removeItem(N - 1);\n tlist.removeItem(N - 2);\n tlist.removeItem(N - 3);\n // if we had [T][S][-T][M], then this was a skewed element being resized\n // Thus, we simply combine it all into one matrix\n } else if (N === 4 && tlist.getItem(N - 1).type === 1) {\n operation = 3; // scale\n m = transformListToTransform(tlist).matrix;\n const e2t = svgroot.createSVGTransform();\n e2t.setMatrix(m);\n tlist.clear();\n tlist.appendItem(e2t);\n // reset the matrix so that the element is not re-mapped\n m = svgroot.createSVGMatrix();\n // if we had [R][T][S][-T][M], then this was a rotated matrix-element\n // if we had [T1][M] we want to transform this into [M][T2]\n // therefore [ T2 ] = [ M_inv ] [ T1 ] [ M ] and we can push [T2]\n // down to the element\n } else if ((N === 1 || (N > 1 && tlist.getItem(1).type !== 3)) &&\n tlist.getItem(0).type === 2) {\n operation = 2; // translate\n const oldxlate = tlist.getItem(0).matrix,\n meq = transformListToTransform(tlist, 1).matrix,\n meqInv = meq.inverse();\n m = matrixMultiply(meqInv, oldxlate, meq);\n tlist.removeItem(0);\n // else if this child now has a matrix imposition (from a parent group)\n // we might be able to simplify\n } else if (N === 1 && tlist.getItem(0).type === 1 && !angle) {\n // Remap all point-based elements\n m = transformListToTransform(tlist).matrix;\n switch (selected.tagName) {\n case 'line':\n changes = $(selected).attr(['x1', 'y1', 'x2', 'y2']);\n // Fallthrough\n case 'polyline':\n case 'polygon':\n changes.points = selected.getAttribute('points');\n if (changes.points) {\n const list = selected.points;\n const len = list.numberOfItems;\n changes.points = new Array(len);\n for (let i = 0; i < len; ++i) {\n const pt = list.getItem(i);\n changes.points[i] = {x: pt.x, y: pt.y};\n }\n }\n // Fallthrough\n case 'path':\n changes.d = selected.getAttribute('d');\n operation = 1;\n tlist.clear();\n break;\n default:\n break;\n }\n // if it was a rotation, put the rotate back and return without a command\n // (this function has zero work to do for a rotate())\n } else {\n // operation = 4; // rotation\n if (angle) {\n const newRot = svgroot.createSVGTransform();\n newRot.setRotate(angle, newcenter.x, newcenter.y);\n\n if (tlist.numberOfItems) {\n tlist.insertItemBefore(newRot, 0);\n } else {\n tlist.appendItem(newRot);\n }\n }\n if (tlist.numberOfItems === 0) {\n selected.removeAttribute('transform');\n }\n return null;\n }\n\n // if it was a translate or resize, we need to remap the element and absorb the xform\n if (operation === 1 || operation === 2 || operation === 3) {\n remapElement(selected, changes, m);\n } // if we are remapping\n\n // if it was a translate, put back the rotate at the new center\n if (operation === 2) {\n if (angle) {\n if (!hasMatrixTransform(tlist)) {\n newcenter = {\n x: oldcenter.x + m.e,\n y: oldcenter.y + m.f\n };\n }\n const newRot = svgroot.createSVGTransform();\n newRot.setRotate(angle, newcenter.x, newcenter.y);\n if (tlist.numberOfItems) {\n tlist.insertItemBefore(newRot, 0);\n } else {\n tlist.appendItem(newRot);\n }\n }\n // We have special processing for tspans: Tspans are not transformable\n // but they can have x,y coordinates (sigh). Thus, if this was a translate,\n // on a text element, also translate any tspan children.\n if (selected.tagName === 'text') {\n const children = selected.childNodes;\n let c = children.length;\n while (c--) {\n const child = children.item(c);\n if (child.tagName === 'tspan') {\n const tspanChanges = {\n x: $(child).attr('x') || 0,\n y: $(child).attr('y') || 0\n };\n remapElement(child, tspanChanges, m);\n }\n }\n }\n // [Rold][M][T][S][-T] became [Rold][M]\n // we want it to be [Rnew][M][Tr] where Tr is the\n // translation required to re-center it\n // Therefore, [Tr] = [M_inv][Rnew_inv][Rold][M]\n } else if (operation === 3 && angle) {\n const {matrix} = transformListToTransform(tlist);\n const roldt = svgroot.createSVGTransform();\n roldt.setRotate(angle, oldcenter.x, oldcenter.y);\n const rold = roldt.matrix;\n const rnew = svgroot.createSVGTransform();\n rnew.setRotate(angle, newcenter.x, newcenter.y);\n const rnewInv = rnew.matrix.inverse();\n const mInv = matrix.inverse();\n const extrat = matrixMultiply(mInv, rnewInv, rold, matrix);\n\n remapElement(selected, changes, extrat);\n if (angle) {\n if (tlist.numberOfItems) {\n tlist.insertItemBefore(rnew, 0);\n } else {\n tlist.appendItem(rnew);\n }\n }\n }\n } // a non-group\n\n // if the transform list has been emptied, remove it\n if (tlist.numberOfItems === 0) {\n selected.removeAttribute('transform');\n }\n\n batchCmd.addSubCommand(new ChangeElementCommand(selected, initial));\n\n return batchCmd;\n};\n","/* globals jQuery */\n\nimport jQueryPluginSVG from './jQuery.attr.js'; // Needed for SVG attribute setting and array form with `attr`\nimport {\n getStrokedBBoxDefaultVisible\n} from './utilities.js';\nimport * as hstry from './history.js';\n// Constants\nconst $ = jQueryPluginSVG(jQuery);\n\nconst {\n InsertElementCommand, BatchCommand\n} = hstry;\n\nlet pasteContext_ = null;\n\n/**\n* @function module:paste-elem.init\n* @param {module:paste-elem.pasteContext} pasteContext\n* @returns {void}\n*/\nexport const init = function (pasteContext) {\n pasteContext_ = pasteContext;\n};\n\n/**\n* @function module:svgcanvas.SvgCanvas#pasteElements\n* @param {\"in_place\"|\"point\"|void} type\n* @param {Integer|void} x Expected if type is \"point\"\n* @param {Integer|void} y Expected if type is \"point\"\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @fires module:svgcanvas.SvgCanvas#event:ext_IDsUpdated\n* @returns {void}\n*/\nexport const pasteElementsMethod = function (type, x, y) {\n let clipb = JSON.parse(sessionStorage.getItem(pasteContext_.getClipBoardID()));\n if (!clipb) return;\n let len = clipb.length;\n if (!len) return;\n\n const pasted = [];\n const batchCmd = new BatchCommand('Paste elements');\n // const drawing = getCurrentDrawing();\n /**\n* @typedef {PlainObject<string, string>} module:svgcanvas.ChangedIDs\n*/\n /**\n* @type {module:svgcanvas.ChangedIDs}\n*/\n const changedIDs = {};\n\n // Recursively replace IDs and record the changes\n /**\n*\n* @param {module:svgcanvas.SVGAsJSON} elem\n* @returns {void}\n*/\n function checkIDs (elem) {\n if (elem.attr && elem.attr.id) {\n changedIDs[elem.attr.id] = pasteContext_.getCanvas().getNextId();\n elem.attr.id = changedIDs[elem.attr.id];\n }\n if (elem.children) elem.children.forEach((child) => checkIDs(child));\n }\n clipb.forEach((elem) => checkIDs(elem));\n\n // Give extensions like the connector extension a chance to reflect new IDs and remove invalid elements\n /**\n* Triggered when `pasteElements` is called from a paste action (context menu or key).\n* @event module:svgcanvas.SvgCanvas#event:ext_IDsUpdated\n* @type {PlainObject}\n* @property {module:svgcanvas.SVGAsJSON[]} elems\n* @property {module:svgcanvas.ChangedIDs} changes Maps past ID (on attribute) to current ID\n*/\n pasteContext_.getCanvas().runExtensions(\n 'IDsUpdated',\n /** @type {module:svgcanvas.SvgCanvas#event:ext_IDsUpdated} */\n {elems: clipb, changes: changedIDs},\n true\n ).forEach(function (extChanges) {\n if (!extChanges || !('remove' in extChanges)) return;\n\n extChanges.remove.forEach(function (removeID) {\n clipb = clipb.filter(function (clipBoardItem) {\n return clipBoardItem.attr.id !== removeID;\n });\n });\n });\n\n // Move elements to lastClickPoint\n while (len--) {\n const elem = clipb[len];\n if (!elem) { continue; }\n\n const copy = pasteContext_.getCanvas().addSVGElementFromJson(elem);\n pasted.push(copy);\n batchCmd.addSubCommand(new InsertElementCommand(copy));\n\n pasteContext_.restoreRefElems(copy);\n }\n\n pasteContext_.getCanvas().selectOnly(pasted);\n\n if (type !== 'in_place') {\n let ctrX, ctrY;\n\n if (!type) {\n ctrX = pasteContext_.getLastClickPoint('x');\n ctrY = pasteContext_.getLastClickPoint('y');\n } else if (type === 'point') {\n ctrX = x;\n ctrY = y;\n }\n\n const bbox = getStrokedBBoxDefaultVisible(pasted);\n const cx = ctrX - (bbox.x + bbox.width / 2),\n cy = ctrY - (bbox.y + bbox.height / 2),\n dx = [],\n dy = [];\n\n $.each(pasted, function (i, item) {\n dx.push(cx);\n dy.push(cy);\n });\n\n const cmd = pasteContext_.getCanvas().moveSelectedElements(dx, dy, false);\n if (cmd) batchCmd.addSubCommand(cmd);\n }\n\n pasteContext_.addCommandToHistory(batchCmd);\n pasteContext_.getCanvas().call('changed', pasted);\n};\n","/**\n * Tools for undo.\n * @module undo\n * @license MIT\n * @copyright 2011 Jeff Schiller\n */\nimport * as draw from './draw.js';\nimport * as hstry from './history.js';\nimport {\n getRotationAngle, getBBox as utilsGetBBox, isNullish, setHref, getStrokedBBoxDefaultVisible\n} from './utilities.js';\nimport {\n isGecko\n} from '../common/browser.js';\nimport {\n transformPoint, transformListToTransform\n} from './math.js';\nimport {\n getTransformList\n} from './svgtransformlist.js';\n\nconst {\n UndoManager, HistoryEventTypes\n} = hstry;\n\nlet undoContext_ = null;\n\n/**\n* @function module:undo.init\n* @param {module:undo.undoContext} undoContext\n* @returns {void}\n*/\nexport const init = function (undoContext) {\n undoContext_ = undoContext;\n};\n\nexport const getUndoManager = function () {\n return new UndoManager({\n /**\n * @param {string} eventType One of the HistoryEvent types\n * @param {module:history.HistoryCommand} cmd Fulfills the HistoryCommand interface\n * @fires module:undo.SvgCanvas#event:changed\n * @returns {void}\n */\n handleHistoryEvent (eventType, cmd) {\n const EventTypes = HistoryEventTypes;\n // TODO: handle setBlurOffsets.\n if (eventType === EventTypes.BEFORE_UNAPPLY || eventType === EventTypes.BEFORE_APPLY) {\n undoContext_.getCanvas().clearSelection();\n } else if (eventType === EventTypes.AFTER_APPLY || eventType === EventTypes.AFTER_UNAPPLY) {\n const elems = cmd.elements();\n undoContext_.getCanvas().pathActions.clear();\n undoContext_.call('changed', elems);\n const cmdType = cmd.type();\n const isApply = (eventType === EventTypes.AFTER_APPLY);\n if (cmdType === 'MoveElementCommand') {\n const parent = isApply ? cmd.newParent : cmd.oldParent;\n if (parent === undoContext_.getSVGContent()) {\n draw.identifyLayers();\n }\n } else if (cmdType === 'InsertElementCommand' || cmdType === 'RemoveElementCommand') {\n if (cmd.parent === undoContext_.getSVGContent()) {\n draw.identifyLayers();\n }\n if (cmdType === 'InsertElementCommand') {\n if (isApply) {\n undoContext_.restoreRefElems(cmd.elem);\n }\n } else if (!isApply) {\n undoContext_.restoreRefElems(cmd.elem);\n }\n if (cmd.elem && cmd.elem.tagName === 'use') {\n undoContext_.getCanvas().setUseData(cmd.elem);\n }\n } else if (cmdType === 'ChangeElementCommand') {\n // if we are changing layer names, re-identify all layers\n if (cmd.elem.tagName === 'title' &&\n cmd.elem.parentNode.parentNode === undoContext_.getSVGContent()\n ) {\n draw.identifyLayers();\n }\n const values = isApply ? cmd.newValues : cmd.oldValues;\n // If stdDeviation was changed, update the blur.\n if (values.stdDeviation) {\n undoContext_.getCanvas().setBlurOffsets(cmd.elem.parentNode, values.stdDeviation);\n }\n // This is resolved in later versions of webkit, perhaps we should\n // have a featured detection for correct 'use' behavior?\n // ——————————\n // Remove & Re-add hack for Webkit (issue 775)\n // if (cmd.elem.tagName === 'use' && isWebkit()) {\n // const {elem} = cmd;\n // if (!elem.getAttribute('x') && !elem.getAttribute('y')) {\n // const parent = elem.parentNode;\n // const sib = elem.nextSibling;\n // elem.remove();\n // parent.insertBefore(elem, sib);\n // // Ok to replace above with this? `sib.before(elem);`\n // }\n // }\n }\n }\n }\n });\n};\n\n/**\n* Hack for Firefox bugs where text element features aren't updated or get\n* messed up. See issue 136 and issue 137.\n* This function clones the element and re-selects it.\n* @function module:svgcanvas~ffClone\n* @todo Test for this bug on load and add it to \"support\" object instead of\n* browser sniffing\n* @param {Element} elem - The (text) DOM element to clone\n* @returns {Element} Cloned element\n*/\nexport const ffClone = function (elem) {\n if (!isGecko()) { return elem; }\n const clone = elem.cloneNode(true);\n elem.before(clone);\n elem.remove();\n undoContext_.getCanvas().selectorManager.releaseSelector(elem);\n undoContext_.getCanvas().setSelectedElements(0, clone);\n undoContext_.getCanvas().selectorManager.requestSelector(clone).showGrips(true);\n return clone;\n};\n\n/**\n* This function makes the changes to the elements. It does not add the change\n* to the history stack.\n* @param {string} attr - Attribute name\n* @param {string|Float} newValue - String or number with the new attribute value\n* @param {Element[]} elems - The DOM elements to apply the change to\n* @returns {void}\n*/\nexport const changeSelectedAttributeNoUndoMethod = function (attr, newValue, elems) {\n const selectedElements = undoContext_.getSelectedElements();\n const currentZoom = undoContext_.getCurrentZoom();\n if (undoContext_.getCurrentMode() === 'pathedit') {\n // Editing node\n undoContext_.getCanvas().pathActions.moveNode(attr, newValue);\n }\n elems = elems || selectedElements;\n let i = elems.length;\n const noXYElems = ['g', 'polyline', 'path'];\n // const goodGAttrs = ['transform', 'opacity', 'filter'];\n\n while (i--) {\n let elem = elems[i];\n if (isNullish(elem)) { continue; }\n\n // Set x,y vals on elements that don't have them\n if ((attr === 'x' || attr === 'y') && noXYElems.includes(elem.tagName)) {\n const bbox = getStrokedBBoxDefaultVisible([elem]);\n const diffX = attr === 'x' ? newValue - bbox.x : 0;\n const diffY = attr === 'y' ? newValue - bbox.y : 0;\n undoContext_.getCanvas().moveSelectedElements(diffX * currentZoom, diffY * currentZoom, true);\n continue;\n }\n\n // only allow the transform/opacity/filter attribute to change on <g> elements, slightly hacky\n // TODO: Missing statement body\n // if (elem.tagName === 'g' && goodGAttrs.includes(attr)) {}\n let oldval = attr === '#text' ? elem.textContent : elem.getAttribute(attr);\n if (isNullish(oldval)) { oldval = ''; }\n if (oldval !== String(newValue)) {\n if (attr === '#text') {\n // const oldW = utilsGetBBox(elem).width;\n elem.textContent = newValue;\n\n // FF bug occurs on on rotated elements\n if ((/rotate/).test(elem.getAttribute('transform'))) {\n elem = ffClone(elem);\n }\n // Hoped to solve the issue of moving text with text-anchor=\"start\",\n // but this doesn't actually fix it. Hopefully on the right track, though. -Fyrd\n // const box = getBBox(elem), left = box.x, top = box.y, {width, height} = box,\n // dx = width - oldW, dy = 0;\n // const angle = getRotationAngle(elem, true);\n // if (angle) {\n // const r = Math.sqrt(dx * dx + dy * dy);\n // const theta = Math.atan2(dy, dx) - angle;\n // dx = r * Math.cos(theta);\n // dy = r * Math.sin(theta);\n //\n // elem.setAttribute('x', elem.getAttribute('x') - dx);\n // elem.setAttribute('y', elem.getAttribute('y') - dy);\n // }\n } else if (attr === '#href') {\n setHref(elem, newValue);\n } else if (newValue) {\n elem.setAttribute(attr, newValue);\n } else if (typeof newValue === 'number') {\n elem.setAttribute(attr, newValue);\n } else {\n elem.removeAttribute(attr);\n }\n\n // Go into \"select\" mode for text changes\n // NOTE: Important that this happens AFTER elem.setAttribute() or else attributes like\n // font-size can get reset to their old value, ultimately by svgEditor.updateContextPanel(),\n // after calling textActions.toSelectMode() below\n if (undoContext_.getCurrentMode() === 'textedit' && attr !== '#text' && elem.textContent.length) {\n undoContext_.getCanvas().textActions.toSelectMode(elem);\n }\n\n // if (i === 0) {\n // selectedBBoxes[0] = utilsGetBBox(elem);\n // }\n\n // Use the Firefox ffClone hack for text elements with gradients or\n // where other text attributes are changed.\n if (isGecko() &&\n elem.nodeName === 'text' &&\n (/rotate/).test(elem.getAttribute('transform')) &&\n (String(newValue).startsWith('url') || (['font-size', 'font-family', 'x', 'y'].includes(attr) && elem.textContent))) {\n elem = ffClone(elem);\n }\n // Timeout needed for Opera & Firefox\n // codedread: it is now possible for this function to be called with elements\n // that are not in the selectedElements array, we need to only request a\n // selector if the element is in that array\n if (selectedElements.includes(elem)) {\n // eslint-disable-next-line no-loop-func\n setTimeout(function () {\n // Due to element replacement, this element may no longer\n // be part of the DOM\n if (!elem.parentNode) { return; }\n undoContext_.getCanvas().selectorManager.requestSelector(elem).resize();\n }, 0);\n }\n // if this element was rotated, and we changed the position of this element\n // we need to update the rotational transform attribute\n const angle = getRotationAngle(elem);\n if (angle !== 0 && attr !== 'transform') {\n const tlist = getTransformList(elem);\n let n = tlist.numberOfItems;\n while (n--) {\n const xform = tlist.getItem(n);\n if (xform.type === 4) {\n // remove old rotate\n tlist.removeItem(n);\n\n const box = utilsGetBBox(elem);\n const center = transformPoint(\n box.x + box.width / 2, box.y + box.height / 2, transformListToTransform(tlist).matrix\n );\n const cx = center.x,\n cy = center.y;\n const newrot = undoContext_.getSVGRoot().createSVGTransform();\n newrot.setRotate(angle, cx, cy);\n tlist.insertItemBefore(newrot, n);\n break;\n }\n }\n }\n } // if oldValue != newValue\n } // for each elem\n};\n\n/**\n* Change the given/selected element and add the original value to the history stack.\n* If you want to change all `selectedElements`, ignore the `elems` argument.\n* If you want to change only a subset of `selectedElements`, then send the\n* subset to this function in the `elems` argument.\n* @function module:svgcanvas.SvgCanvas#changeSelectedAttribute\n* @param {string} attr - String with the attribute name\n* @param {string|Float} val - String or number with the new attribute value\n* @param {Element[]} elems - The DOM elements to apply the change to\n* @returns {void}\n*/\nexport const changeSelectedAttributeMethod = function (attr, val, elems) {\n const selectedElements = undoContext_.getSelectedElements();\n elems = elems || selectedElements;\n undoContext_.getCanvas().undoMgr.beginUndoableChange(attr, elems);\n // const i = elems.length;\n\n changeSelectedAttributeNoUndoMethod(attr, val, elems);\n\n const batchCmd = undoContext_.getCanvas().undoMgr.finishUndoableChange();\n if (!batchCmd.isEmpty()) {\n // undoContext_.addCommandToHistory(batchCmd);\n undoContext_.getCanvas().undoMgr.addCommandToHistory(batchCmd);\n }\n};\n","/* globals jQuery */\n/**\n * Tools for selection.\n * @module selection\n * @license MIT\n * @copyright 2011 Jeff Schiller\n */\n\nimport {NS} from '../common/namespaces.js';\nimport {\n isNullish, getBBox as utilsGetBBox, getStrokedBBoxDefaultVisible\n} from './utilities.js';\nimport {transformPoint, transformListToTransform, rectsIntersect} from './math.js';\nimport jQueryPluginSVG from './jQuery.attr.js';\nimport {\n getTransformList\n} from './svgtransformlist.js';\nimport * as hstry from './history.js';\n\nconst {BatchCommand} = hstry;\nconst $ = jQueryPluginSVG(jQuery);\nlet selectionContext_ = null;\n\n/**\n* @function module:selection.init\n* @param {module:selection.selectionContext} selectionContext\n* @returns {void}\n*/\nexport const init = function (selectionContext) {\n selectionContext_ = selectionContext;\n};\n\n/**\n* Clears the selection. The 'selected' handler is then optionally called.\n* This should really be an intersection applying to all types rather than a union.\n* @name module:selection.SvgCanvas#clearSelection\n* @type {module:draw.DrawCanvasInit#clearSelection|module:path.EditorContext#clearSelection}\n* @fires module:selection.SvgCanvas#event:selected\n*/\nexport const clearSelectionMethod = function (noCall) {\n const selectedElements = selectionContext_.getSelectedElements();\n selectedElements.forEach((elem) => {\n if (isNullish(elem)) {\n return;\n }\n selectionContext_.getCanvas().selectorManager.releaseSelector(elem);\n });\n selectionContext_.getCanvas().setEmptySelectedElements();\n\n if (!noCall) { selectionContext_.getCanvas().call('selected', selectionContext_.getSelectedElements()); }\n};\n\n/**\n* Adds a list of elements to the selection. The 'selected' handler is then called.\n* @name module:selection.SvgCanvas#addToSelection\n* @type {module:path.EditorContext#addToSelection}\n* @fires module:selection.SvgCanvas#event:selected\n*/\nexport const addToSelectionMethod = function (elemsToAdd, showGrips) {\n const selectedElements = selectionContext_.getSelectedElements();\n if (!elemsToAdd.length) { return; }\n // find the first null in our selectedElements array\n\n let j = 0;\n while (j < selectedElements.length) {\n if (isNullish(selectedElements[j])) {\n break;\n }\n ++j;\n }\n\n // now add each element consecutively\n let i = elemsToAdd.length;\n while (i--) {\n let elem = elemsToAdd[i];\n if (!elem) { continue; }\n const bbox = utilsGetBBox(elem);\n if (!bbox) { continue; }\n\n if (elem.tagName === 'a' && elem.childNodes.length === 1) {\n // Make \"a\" element's child be the selected element\n elem = elem.firstChild;\n }\n\n // if it's not already there, add it\n if (!selectedElements.includes(elem)) {\n selectedElements[j] = elem;\n\n // only the first selectedBBoxes element is ever used in the codebase these days\n // if (j === 0) selectedBBoxes[0] = utilsGetBBox(elem);\n j++;\n const sel = selectionContext_.getCanvas().selectorManager.requestSelector(elem, bbox);\n\n if (selectedElements.length > 1) {\n sel.showGrips(false);\n }\n }\n }\n if (!selectedElements.length) {\n return;\n }\n selectionContext_.getCanvas().call('selected', selectedElements);\n\n if (selectedElements.length === 1) {\n selectionContext_.getCanvas().selectorManager.requestSelector(selectedElements[0]).showGrips(showGrips);\n }\n\n // make sure the elements are in the correct order\n // See: https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-compareDocumentPosition\n\n selectedElements.sort(function (a, b) {\n if (a && b && a.compareDocumentPosition) {\n return 3 - (b.compareDocumentPosition(a) & 6); // eslint-disable-line no-bitwise\n }\n if (isNullish(a)) {\n return 1;\n }\n return 0;\n });\n\n // Make sure first elements are not null\n while (isNullish(selectedElements[0])) {\n selectedElements.shift(0);\n }\n};\n/**\n* @name module:svgcanvas.SvgCanvas#getMouseTarget\n* @type {module:path.EditorContext#getMouseTarget}\n*/\nexport const getMouseTargetMethod = function (evt) {\n if (isNullish(evt)) {\n return null;\n }\n let mouseTarget = evt.target;\n\n // if it was a <use>, Opera and WebKit return the SVGElementInstance\n if (mouseTarget.correspondingUseElement) { mouseTarget = mouseTarget.correspondingUseElement; }\n\n // for foreign content, go up until we find the foreignObject\n // WebKit browsers set the mouse target to the svgcanvas div\n if ([NS.MATH, NS.HTML].includes(mouseTarget.namespaceURI) &&\nmouseTarget.id !== 'svgcanvas'\n ) {\n while (mouseTarget.nodeName !== 'foreignObject') {\n mouseTarget = mouseTarget.parentNode;\n if (!mouseTarget) { return selectionContext_.getSVGRoot(); }\n }\n }\n\n // Get the desired mouseTarget with jQuery selector-fu\n // If it's root-like, select the root\n const currentLayer = selectionContext_.getCanvas().getCurrentDrawing().getCurrentLayer();\n const svgRoot = selectionContext_.getSVGRoot();\n const container = selectionContext_.getDOMContainer();\n const content = selectionContext_.getSVGContent();\n if ([svgRoot, container, content, currentLayer].includes(mouseTarget)) {\n return selectionContext_.getSVGRoot();\n }\n\n const $target = $(mouseTarget);\n\n // If it's a selection grip, return the grip parent\n if ($target.closest('#selectorParentGroup').length) {\n // While we could instead have just returned mouseTarget,\n // this makes it easier to indentify as being a selector grip\n return selectionContext_.getCanvas().selectorManager.selectorParentGroup;\n }\n\n while (mouseTarget.parentNode !== (selectionContext_.getCurrentGroup() || currentLayer)) {\n mouseTarget = mouseTarget.parentNode;\n }\n\n //\n // // go up until we hit a child of a layer\n // while (mouseTarget.parentNode.parentNode.tagName == 'g') {\n // mouseTarget = mouseTarget.parentNode;\n // }\n // Webkit bubbles the mouse event all the way up to the div, so we\n // set the mouseTarget to the svgroot like the other browsers\n // if (mouseTarget.nodeName.toLowerCase() == 'div') {\n // mouseTarget = svgroot;\n // }\n\n return mouseTarget;\n};\n/**\n* @typedef {module:svgcanvas.ExtensionMouseDownStatus|module:svgcanvas.ExtensionMouseUpStatus|module:svgcanvas.ExtensionIDsUpdatedStatus|module:locale.ExtensionLocaleData[]|void} module:svgcanvas.ExtensionStatus\n* @tutorial ExtensionDocs\n*/\n/**\n* @callback module:svgcanvas.ExtensionVarBuilder\n* @param {string} name The name of the extension\n* @returns {module:svgcanvas.SvgCanvas#event:ext_addLangData}\n*/\n/**\n* @callback module:svgcanvas.ExtensionNameFilter\n* @param {string} name\n* @returns {boolean}\n*/\n/**\n* @todo Consider: Should this return an array by default, so extension results aren't overwritten?\n* @todo Would be easier to document if passing in object with key of action and vars as value; could then define an interface which tied both together\n* @function module:svgcanvas.SvgCanvas#runExtensions\n* @param {\"mouseDown\"|\"mouseMove\"|\"mouseUp\"|\"zoomChanged\"|\"IDsUpdated\"|\"canvasUpdated\"|\"toolButtonStateUpdate\"|\"selectedChanged\"|\"elementTransition\"|\"elementChanged\"|\"langReady\"|\"langChanged\"|\"addLangData\"|\"onNewDocument\"|\"workareaResized\"} action\n* @param {module:svgcanvas.SvgCanvas#event:ext_mouseDown|module:svgcanvas.SvgCanvas#event:ext_mouseMove|module:svgcanvas.SvgCanvas#event:ext_mouseUp|module:svgcanvas.SvgCanvas#event:ext_zoomChanged|module:svgcanvas.SvgCanvas#event:ext_IDsUpdated|module:svgcanvas.SvgCanvas#event:ext_canvasUpdated|module:svgcanvas.SvgCanvas#event:ext_toolButtonStateUpdate|module:svgcanvas.SvgCanvas#event:ext_selectedChanged|module:svgcanvas.SvgCanvas#event:ext_elementTransition|module:svgcanvas.SvgCanvas#event:ext_elementChanged|module:svgcanvas.SvgCanvas#event:ext_langReady|module:svgcanvas.SvgCanvas#event:ext_langChanged|module:svgcanvas.SvgCanvas#event:ext_addLangData|module:svgcanvas.SvgCanvas#event:ext_onNewDocument|module:svgcanvas.SvgCanvas#event:ext_workareaResized|module:svgcanvas.ExtensionVarBuilder} [vars]\n* @param {boolean} [returnArray]\n* @param {module:svgcanvas.ExtensionNameFilter} nameFilter\n* @returns {GenericArray<module:svgcanvas.ExtensionStatus>|module:svgcanvas.ExtensionStatus|false} See {@tutorial ExtensionDocs} on the ExtensionStatus.\n*/\nexport const runExtensionsMethod = function (action, vars, returnArray, nameFilter) {\n let result = returnArray ? [] : false;\n $.each(selectionContext_.getExtensions(), function (name, ext) {\n if (nameFilter && !nameFilter(name)) {\n return;\n }\n if (ext && action in ext) {\n if (typeof vars === 'function') {\n vars = vars(name); // ext, action\n }\n if (returnArray) {\n result.push(ext[action](vars));\n } else {\n result = ext[action](vars);\n }\n }\n });\n return result;\n};\n\n/**\n* Get all elements that have a BBox (excludes `<defs>`, `<title>`, etc).\n* Note that 0-opacity, off-screen etc elements are still considered \"visible\"\n* for this function.\n* @function module:svgcanvas.SvgCanvas#getVisibleElementsAndBBoxes\n* @param {Element} parent - The parent DOM element to search within\n* @returns {ElementAndBBox[]} An array with objects that include:\n*/\nexport const getVisibleElementsAndBBoxes = function (parent) {\n if (!parent) {\n parent = $(selectionContext_.getSVGContent()).children(); // Prevent layers from being included\n }\n const contentElems = [];\n $(parent).children().each(function (i, elem) {\n if (elem.getBBox) {\n contentElems.push({elem, bbox: getStrokedBBoxDefaultVisible([elem])});\n }\n });\n return contentElems.reverse();\n};\n\n/**\n* This method sends back an array or a NodeList full of elements that\n* intersect the multi-select rubber-band-box on the currentLayer only.\n*\n* We brute-force `getIntersectionList` for browsers that do not support it (Firefox).\n*\n* Reference:\n* Firefox does not implement `getIntersectionList()`, see {@link https://bugzilla.mozilla.org/show_bug.cgi?id=501421}.\n* @function module:svgcanvas.SvgCanvas#getIntersectionList\n* @param {SVGRect} rect\n* @returns {Element[]|NodeList} Bbox elements\n*/\nexport const getIntersectionListMethod = function (rect) {\n const currentZoom = selectionContext_.getCurrentZoom();\n if (isNullish(selectionContext_.getRubberBox())) { return null; }\n\n const parent = selectionContext_.getCurrentGroup() || selectionContext_.getCanvas().getCurrentDrawing().getCurrentLayer();\n\n let rubberBBox;\n if (!rect) {\n rubberBBox = selectionContext_.getRubberBox().getBBox();\n const bb = selectionContext_.getSVGContent().createSVGRect();\n\n ['x', 'y', 'width', 'height', 'top', 'right', 'bottom', 'left'].forEach((o) => {\n bb[o] = rubberBBox[o] / currentZoom;\n });\n rubberBBox = bb;\n } else {\n rubberBBox = selectionContext_.getSVGContent().createSVGRect();\n rubberBBox.x = rect.x;\n rubberBBox.y = rect.y;\n rubberBBox.width = rect.width;\n rubberBBox.height = rect.height;\n }\n\n let resultList = null;\n\n if (isNullish(resultList) || typeof resultList.item !== 'function') {\n resultList = [];\n\n if (!selectionContext_.getCurBBoxes().length) {\n // Cache all bboxes\n selectionContext_.setCurBBoxes(getVisibleElementsAndBBoxes(parent));\n }\n let i = selectionContext_.getCurBBoxes().length;\n while (i--) {\n const curBBoxes = selectionContext_.getCurBBoxes();\n if (!rubberBBox.width) { continue; }\n if (rectsIntersect(rubberBBox, curBBoxes[i].bbox)) {\n resultList.push(curBBoxes[i].elem);\n }\n }\n }\n\n // addToSelection expects an array, but it's ok to pass a NodeList\n // because using square-bracket notation is allowed:\n // https://www.w3.org/TR/DOM-Level-2-Core/ecma-script-binding.html\n return resultList;\n};\n\n/**\n* @typedef {PlainObject} ElementAndBBox\n* @property {Element} elem - The element\n* @property {module:utilities.BBoxObject} bbox - The element's BBox as retrieved from `getStrokedBBoxDefaultVisible`\n*/\n\n/**\n* Wrap an SVG element into a group element, mark the group as 'gsvg'.\n* @function module:svgcanvas.SvgCanvas#groupSvgElem\n* @param {Element} elem - SVG element to wrap\n* @returns {void}\n*/\nexport const groupSvgElem = function (elem) {\n const g = document.createElementNS(NS.SVG, 'g');\n elem.replaceWith(g);\n $(g).append(elem).data('gsvg', elem)[0].id = selectionContext_.getCanvas().getNextId();\n};\n\n/**\n* Runs the SVG Document through the sanitizer and then updates its paths.\n* @function module:svgcanvas.SvgCanvas#prepareSvg\n* @param {XMLDocument} newDoc - The SVG DOM document\n* @returns {void}\n*/\nexport const prepareSvg = function (newDoc) {\n selectionContext_.getCanvas().sanitizeSvg(newDoc.documentElement);\n\n // convert paths into absolute commands\n const paths = [...newDoc.getElementsByTagNameNS(NS.SVG, 'path')];\n paths.forEach((path) => {\n path.setAttribute('d', selectionContext_.getCanvas().pathActions.convertPath(path));\n selectionContext_.getCanvas().pathActions.fixEnd(path);\n });\n};\n// `this.each` is deprecated, if any extension used this it can be recreated by doing this:\n// * @example $(canvas.getRootElem()).children().each(...)\n// * @function module:svgcanvas.SvgCanvas#each\n// this.each = function (cb) {\n// $(svgroot).children().each(cb);\n// };\n\n/**\n* Removes any old rotations if present, prepends a new rotation at the\n* transformed center.\n* @function module:svgcanvas.SvgCanvas#setRotationAngle\n* @param {string|Float} val - The new rotation angle in degrees\n* @param {boolean} preventUndo - Indicates whether the action should be undoable or not\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\nexport const setRotationAngle = function (val, preventUndo) {\n const selectedElements = selectionContext_.getSelectedElements();\n // ensure val is the proper type\n val = Number.parseFloat(val);\n const elem = selectedElements[0];\n const oldTransform = elem.getAttribute('transform');\n const bbox = utilsGetBBox(elem);\n const cx = bbox.x + bbox.width / 2, cy = bbox.y + bbox.height / 2;\n const tlist = getTransformList(elem);\n\n // only remove the real rotational transform if present (i.e. at index=0)\n if (tlist.numberOfItems > 0) {\n const xform = tlist.getItem(0);\n if (xform.type === 4) {\n tlist.removeItem(0);\n }\n }\n // find Rnc and insert it\n if (val !== 0) {\n const center = transformPoint(cx, cy, transformListToTransform(tlist).matrix);\n const Rnc = selectionContext_.getSVGRoot().createSVGTransform();\n Rnc.setRotate(val, center.x, center.y);\n if (tlist.numberOfItems) {\n tlist.insertItemBefore(Rnc, 0);\n } else {\n tlist.appendItem(Rnc);\n }\n } else if (tlist.numberOfItems === 0) {\n elem.removeAttribute('transform');\n }\n\n if (!preventUndo) {\n // we need to undo it, then redo it so it can be undo-able! :)\n // TODO: figure out how to make changes to transform list undo-able cross-browser?\n const newTransform = elem.getAttribute('transform');\n if (oldTransform) {\n elem.setAttribute('transform', oldTransform);\n } else {\n elem.removeAttribute('transform');\n }\n selectionContext_.getCanvas().changeSelectedAttribute('transform', newTransform, selectedElements);\n selectionContext_.getCanvas().call('changed', selectedElements);\n }\n // const pointGripContainer = getElem('pathpointgrip_container');\n // if (elem.nodeName === 'path' && pointGripContainer) {\n // pathActions.setPointContainerTransform(elem.getAttribute('transform'));\n // }\n const selector = selectionContext_.getCanvas().selectorManager.requestSelector(selectedElements[0]);\n selector.resize();\n selectionContext_.getSelector().updateGripCursors(val);\n};\n\n/**\n* Runs `recalculateDimensions` on the selected elements,\n* adding the changes to a single batch command.\n* @function module:svgcanvas.SvgCanvas#recalculateAllSelectedDimensions\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\nexport const recalculateAllSelectedDimensions = function () {\n const selectedElements = selectionContext_.getSelectedElements();\n const text = (selectionContext_.getCurrentResizeMode() === 'none' ? 'position' : 'size');\n const batchCmd = new BatchCommand(text);\n\n let i = selectedElements.length;\n while (i--) {\n const elem = selectedElements[i];\n // if (getRotationAngle(elem) && !hasMatrixTransform(getTransformList(elem))) { continue; }\n const cmd = selectionContext_.getCanvas().recalculateDimensions(elem);\n if (cmd) {\n batchCmd.addSubCommand(cmd);\n }\n }\n\n if (!batchCmd.isEmpty()) {\n selectionContext_.addCommandToHistory(batchCmd);\n selectionContext_.getCanvas().call('changed', selectedElements);\n }\n};\n","/* globals jQuery */\n/**\n * @module text-actions Tools for Text edit functions\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria, 2010 Jeff Schiller\n */\n\nimport jQueryPluginSVG from './jQuery.attr.js';\nimport {NS} from '../common/namespaces.js';\nimport {\n transformPoint, getMatrix\n} from './math.js';\nimport {\n assignAttributes, getElem, getBBox as utilsGetBBox\n} from './utilities.js';\nimport {\n supportsGoodTextCharPos\n} from '../common/browser.js';\n\nconst $ = jQueryPluginSVG(jQuery);\n\nlet textActionsContext_ = null;\n\n/**\n* @function module:text-actions.init\n* @param {module:text-actions.textActionsContext_} textActionsContext\n* @returns {void}\n*/\nexport const init = function (textActionsContext) {\n textActionsContext_ = textActionsContext;\n};\n\n/**\n* Group: Text edit functions\n* Functions relating to editing text elements.\n* @namespace {PlainObject} textActions\n* @memberof module:svgcanvas.SvgCanvas#\n*/\nexport const textActionsMethod = (function () {\n let curtext;\n let textinput;\n let cursor;\n let selblock;\n let blinker;\n let chardata = [];\n let textbb; // , transbb;\n let matrix;\n let lastX, lastY;\n let allowDbl;\n\n /**\n*\n* @param {Integer} index\n* @returns {void}\n*/\n function setCursor (index) {\n const empty = (textinput.value === '');\n $(textinput).focus();\n\n if (!arguments.length) {\n if (empty) {\n index = 0;\n } else {\n if (textinput.selectionEnd !== textinput.selectionStart) { return; }\n index = textinput.selectionEnd;\n }\n }\n\n const charbb = chardata[index];\n if (!empty) {\n textinput.setSelectionRange(index, index);\n }\n cursor = getElem('text_cursor');\n if (!cursor) {\n cursor = document.createElementNS(NS.SVG, 'line');\n assignAttributes(cursor, {\n id: 'text_cursor',\n stroke: '#333',\n 'stroke-width': 1\n });\n getElem('selectorParentGroup').append(cursor);\n }\n\n if (!blinker) {\n blinker = setInterval(function () {\n const show = (cursor.getAttribute('display') === 'none');\n cursor.setAttribute('display', show ? 'inline' : 'none');\n }, 600);\n }\n\n const startPt = ptToScreen(charbb.x, textbb.y);\n const endPt = ptToScreen(charbb.x, (textbb.y + textbb.height));\n\n assignAttributes(cursor, {\n x1: startPt.x,\n y1: startPt.y,\n x2: endPt.x,\n y2: endPt.y,\n visibility: 'visible',\n display: 'inline'\n });\n\n if (selblock) { selblock.setAttribute('d', ''); }\n }\n\n /**\n*\n* @param {Integer} start\n* @param {Integer} end\n* @param {boolean} skipInput\n* @returns {void}\n*/\n function setSelection (start, end, skipInput) {\n if (start === end) {\n setCursor(end);\n return;\n }\n\n if (!skipInput) {\n textinput.setSelectionRange(start, end);\n }\n\n selblock = getElem('text_selectblock');\n if (!selblock) {\n selblock = document.createElementNS(NS.SVG, 'path');\n assignAttributes(selblock, {\n id: 'text_selectblock',\n fill: 'green',\n opacity: 0.5,\n style: 'pointer-events:none'\n });\n getElem('selectorParentGroup').append(selblock);\n }\n\n const startbb = chardata[start];\n const endbb = chardata[end];\n\n cursor.setAttribute('visibility', 'hidden');\n\n const tl = ptToScreen(startbb.x, textbb.y),\n tr = ptToScreen(startbb.x + (endbb.x - startbb.x), textbb.y),\n bl = ptToScreen(startbb.x, textbb.y + textbb.height),\n br = ptToScreen(startbb.x + (endbb.x - startbb.x), textbb.y + textbb.height);\n\n const dstr = 'M' + tl.x + ',' + tl.y +\n' L' + tr.x + ',' + tr.y +\n' ' + br.x + ',' + br.y +\n' ' + bl.x + ',' + bl.y + 'z';\n\n assignAttributes(selblock, {\n d: dstr,\n display: 'inline'\n });\n }\n\n /**\n*\n* @param {Float} mouseX\n* @param {Float} mouseY\n* @returns {Integer}\n*/\n function getIndexFromPoint (mouseX, mouseY) {\n // Position cursor here\n const pt = textActionsContext_.getSVGRoot().createSVGPoint();\n pt.x = mouseX;\n pt.y = mouseY;\n\n // No content, so return 0\n if (chardata.length === 1) { return 0; }\n // Determine if cursor should be on left or right of character\n let charpos = curtext.getCharNumAtPosition(pt);\n if (charpos < 0) {\n // Out of text range, look at mouse coords\n charpos = chardata.length - 2;\n if (mouseX <= chardata[0].x) {\n charpos = 0;\n }\n } else if (charpos >= chardata.length - 2) {\n charpos = chardata.length - 2;\n }\n const charbb = chardata[charpos];\n const mid = charbb.x + (charbb.width / 2);\n if (mouseX > mid) {\n charpos++;\n }\n return charpos;\n }\n\n /**\n*\n* @param {Float} mouseX\n* @param {Float} mouseY\n* @returns {void}\n*/\n function setCursorFromPoint (mouseX, mouseY) {\n setCursor(getIndexFromPoint(mouseX, mouseY));\n }\n\n /**\n*\n* @param {Float} x\n* @param {Float} y\n* @param {boolean} apply\n* @returns {void}\n*/\n function setEndSelectionFromPoint (x, y, apply) {\n const i1 = textinput.selectionStart;\n const i2 = getIndexFromPoint(x, y);\n\n const start = Math.min(i1, i2);\n const end = Math.max(i1, i2);\n setSelection(start, end, !apply);\n }\n\n /**\n*\n* @param {Float} xIn\n* @param {Float} yIn\n* @returns {module:math.XYObject}\n*/\n function screenToPt (xIn, yIn) {\n const out = {\n x: xIn,\n y: yIn\n };\n const currentZoom = textActionsContext_.getCurrentZoom();\n out.x /= currentZoom;\n out.y /= currentZoom;\n\n if (matrix) {\n const pt = transformPoint(out.x, out.y, matrix.inverse());\n out.x = pt.x;\n out.y = pt.y;\n }\n\n return out;\n }\n\n /**\n*\n* @param {Float} xIn\n* @param {Float} yIn\n* @returns {module:math.XYObject}\n*/\n function ptToScreen (xIn, yIn) {\n const out = {\n x: xIn,\n y: yIn\n };\n\n if (matrix) {\n const pt = transformPoint(out.x, out.y, matrix);\n out.x = pt.x;\n out.y = pt.y;\n }\n const currentZoom = textActionsContext_.getCurrentZoom();\n out.x *= currentZoom;\n out.y *= currentZoom;\n\n return out;\n }\n\n /**\n*\n* @param {Event} evt\n* @returns {void}\n*/\n function selectAll (evt) {\n setSelection(0, curtext.textContent.length);\n $(this).unbind(evt);\n }\n\n /**\n*\n* @param {Event} evt\n* @returns {void}\n*/\n function selectWord (evt) {\n if (!allowDbl || !curtext) { return; }\n const currentZoom = textActionsContext_.getCurrentZoom();\n const ept = transformPoint(evt.pageX, evt.pageY, textActionsContext_.getrootSctm()),\n mouseX = ept.x * currentZoom,\n mouseY = ept.y * currentZoom;\n const pt = screenToPt(mouseX, mouseY);\n\n const index = getIndexFromPoint(pt.x, pt.y);\n const str = curtext.textContent;\n const first = str.substr(0, index).replace(/[a-z\\d]+$/i, '').length;\n const m = str.substr(index).match(/^[a-z\\d]+/i);\n const last = (m ? m[0].length : 0) + index;\n setSelection(first, last);\n\n // Set tripleclick\n $(evt.target).click(selectAll);\n setTimeout(function () {\n $(evt.target).unbind('click', selectAll);\n }, 300);\n }\n\n return /** @lends module:svgcanvas.SvgCanvas#textActions */ {\n /**\n* @param {Element} target\n* @param {Float} x\n* @param {Float} y\n* @returns {void}\n*/\n select (target, x, y) {\n curtext = target;\n textActionsContext_.getCanvas().textActions.toEditMode(x, y);\n },\n /**\n* @param {Element} elem\n* @returns {void}\n*/\n start (elem) {\n curtext = elem;\n textActionsContext_.getCanvas().textActions.toEditMode();\n },\n /**\n* @param {external:MouseEvent} evt\n* @param {Element} mouseTarget\n* @param {Float} startX\n* @param {Float} startY\n* @returns {void}\n*/\n mouseDown (evt, mouseTarget, startX, startY) {\n const pt = screenToPt(startX, startY);\n\n textinput.focus();\n setCursorFromPoint(pt.x, pt.y);\n lastX = startX;\n lastY = startY;\n\n // TODO: Find way to block native selection\n },\n /**\n* @param {Float} mouseX\n* @param {Float} mouseY\n* @returns {void}\n*/\n mouseMove (mouseX, mouseY) {\n const pt = screenToPt(mouseX, mouseY);\n setEndSelectionFromPoint(pt.x, pt.y);\n },\n /**\n* @param {external:MouseEvent} evt\n* @param {Float} mouseX\n* @param {Float} mouseY\n* @returns {void}\n*/\n mouseUp (evt, mouseX, mouseY) {\n const pt = screenToPt(mouseX, mouseY);\n\n setEndSelectionFromPoint(pt.x, pt.y, true);\n\n // TODO: Find a way to make this work: Use transformed BBox instead of evt.target\n // if (lastX === mouseX && lastY === mouseY\n // && !rectsIntersect(transbb, {x: pt.x, y: pt.y, width: 0, height: 0})) {\n // textActionsContext_.getCanvas().textActions.toSelectMode(true);\n // }\n\n if (\n evt.target !== curtext &&\n mouseX < lastX + 2 &&\n mouseX > lastX - 2 &&\n mouseY < lastY + 2 &&\n mouseY > lastY - 2\n ) {\n textActionsContext_.getCanvas().textActions.toSelectMode(true);\n }\n },\n /**\n* @function\n* @param {Integer} index\n* @returns {void}\n*/\n setCursor,\n /**\n* @param {Float} x\n* @param {Float} y\n* @returns {void}\n*/\n toEditMode (x, y) {\n allowDbl = false;\n textActionsContext_.setCurrentMode('textedit');\n textActionsContext_.getCanvas().selectorManager.requestSelector(curtext).showGrips(false);\n // Make selector group accept clicks\n /* const selector = */ textActionsContext_.getCanvas().selectorManager.requestSelector(curtext); // Do we need this? Has side effect of setting lock, so keeping for now, but next line wasn't being used\n // const sel = selector.selectorRect;\n\n textActionsContext_.getCanvas().textActions.init();\n\n $(curtext).css('cursor', 'text');\n\n // if (supportsEditableText()) {\n // curtext.setAttribute('editable', 'simple');\n // return;\n // }\n\n if (!arguments.length) {\n setCursor();\n } else {\n const pt = screenToPt(x, y);\n setCursorFromPoint(pt.x, pt.y);\n }\n\n setTimeout(function () {\n allowDbl = true;\n }, 300);\n },\n /**\n* @param {boolean|Element} selectElem\n* @fires module:svgcanvas.SvgCanvas#event:selected\n* @returns {void}\n*/\n toSelectMode (selectElem) {\n textActionsContext_.setCurrentMode('select');\n clearInterval(blinker);\n blinker = null;\n if (selblock) { $(selblock).attr('display', 'none'); }\n if (cursor) { $(cursor).attr('visibility', 'hidden'); }\n $(curtext).css('cursor', 'move');\n\n if (selectElem) {\n textActionsContext_.getCanvas().clearSelection();\n $(curtext).css('cursor', 'move');\n\n textActionsContext_.call('selected', [curtext]);\n textActionsContext_.getCanvas().addToSelection([curtext], true);\n }\n if (curtext && !curtext.textContent.length) {\n // No content, so delete\n textActionsContext_.getCanvas().deleteSelectedElements();\n }\n\n $(textinput).blur();\n\n curtext = false;\n\n // if (supportsEditableText()) {\n // curtext.removeAttribute('editable');\n // }\n },\n /**\n* @param {Element} elem\n* @returns {void}\n*/\n setInputElem (elem) {\n textinput = elem;\n // $(textinput).blur(hideCursor);\n },\n /**\n* @returns {void}\n*/\n clear () {\n if (textActionsContext_.getCurrentMode() === 'textedit') {\n textActionsContext_.getCanvas().textActions.toSelectMode();\n }\n },\n /**\n* @param {Element} _inputElem Not in use\n* @returns {void}\n*/\n init (_inputElem) {\n if (!curtext) { return; }\n let i, end;\n // if (supportsEditableText()) {\n // curtext.select();\n // return;\n // }\n\n if (!curtext.parentNode) {\n // Result of the ffClone, need to get correct element\n const selectedElements = textActionsContext_.getSelectedElements();\n curtext = selectedElements[0];\n textActionsContext_.getCanvas().selectorManager.requestSelector(curtext).showGrips(false);\n }\n\n const str = curtext.textContent;\n const len = str.length;\n\n const xform = curtext.getAttribute('transform');\n\n textbb = utilsGetBBox(curtext);\n\n matrix = xform ? getMatrix(curtext) : null;\n\n chardata = [];\n chardata.length = len;\n textinput.focus();\n\n $(curtext).unbind('dblclick', selectWord).dblclick(selectWord);\n\n if (!len) {\n end = {x: textbb.x + (textbb.width / 2), width: 0};\n }\n\n for (i = 0; i < len; i++) {\n const start = curtext.getStartPositionOfChar(i);\n end = curtext.getEndPositionOfChar(i);\n\n if (!supportsGoodTextCharPos()) {\n const currentZoom = textActionsContext_.getCurrentZoom();\n const offset = textActionsContext_.getCanvas().contentW * currentZoom;\n start.x -= offset;\n end.x -= offset;\n\n start.x /= currentZoom;\n end.x /= currentZoom;\n }\n\n // Get a \"bbox\" equivalent for each character. Uses the\n // bbox data of the actual text for y, height purposes\n\n // TODO: Decide if y, width and height are actually necessary\n chardata[i] = {\n x: start.x,\n y: textbb.y, // start.y?\n width: end.x - start.x,\n height: textbb.height\n };\n }\n\n // Add a last bbox for cursor at end of text\n chardata.push({\n x: end.x,\n width: 0\n });\n setSelection(textinput.selectionStart, textinput.selectionEnd, true);\n }\n };\n}());\n","/* globals jQuery */\n/**\n * Tools for event.\n * @module event\n * @license MIT\n * @copyright 2011 Jeff Schiller\n */\nimport jQueryPluginSVG from './jQuery.attr.js'; // Needed for SVG attribute\nimport {\n assignAttributes, cleanupElement, getElem, getRotationAngle, snapToGrid, walkTree,\n getBBox as utilsGetBBox, isNullish, preventClickDefault, setHref\n} from './utilities.js';\nimport {\n convertAttrs\n} from '../common/units.js';\nimport {\n transformPoint, hasMatrixTransform, getMatrix, snapToAngle\n} from './math.js';\nimport {\n getTransformList\n} from './svgtransformlist.js';\nimport {\n supportsNonScalingStroke, isWebkit\n} from '../common/browser.js';\nimport * as draw from './draw.js';\nimport * as pathModule from './path.js';\nimport * as hstry from './history.js';\n\nconst {\n InsertElementCommand\n} = hstry;\n\nconst $ = jQueryPluginSVG(jQuery);\nlet eventContext_ = null;\n\n/**\n* @function module:undo.init\n* @param {module:undo.eventContext} eventContext\n* @returns {void}\n*/\nexport const init = function (eventContext) {\n eventContext_ = eventContext;\n};\n\nexport const getBsplinePoint = function (t) {\n const spline = {x: 0, y: 0},\n p0 = {x: eventContext_.getControllPoint2('x'), y: eventContext_.getControllPoint2('y')},\n p1 = {x: eventContext_.getControllPoint1('x'), y: eventContext_.getControllPoint1('y')},\n p2 = {x: eventContext_.getStart('x'), y: eventContext_.getStart('y')},\n p3 = {x: eventContext_.getEnd('x'), y: eventContext_.getEnd('y')},\n S = 1.0 / 6.0,\n t2 = t * t,\n t3 = t2 * t;\n\n const m = [\n [-1, 3, -3, 1],\n [3, -6, 3, 0],\n [-3, 0, 3, 0],\n [1, 4, 1, 0]\n ];\n\n spline.x = S * (\n (p0.x * m[0][0] + p1.x * m[0][1] + p2.x * m[0][2] + p3.x * m[0][3]) * t3 +\n(p0.x * m[1][0] + p1.x * m[1][1] + p2.x * m[1][2] + p3.x * m[1][3]) * t2 +\n(p0.x * m[2][0] + p1.x * m[2][1] + p2.x * m[2][2] + p3.x * m[2][3]) * t +\n(p0.x * m[3][0] + p1.x * m[3][1] + p2.x * m[3][2] + p3.x * m[3][3])\n );\n spline.y = S * (\n (p0.y * m[0][0] + p1.y * m[0][1] + p2.y * m[0][2] + p3.y * m[0][3]) * t3 +\n(p0.y * m[1][0] + p1.y * m[1][1] + p2.y * m[1][2] + p3.y * m[1][3]) * t2 +\n(p0.y * m[2][0] + p1.y * m[2][1] + p2.y * m[2][2] + p3.y * m[2][3]) * t +\n(p0.y * m[3][0] + p1.y * m[3][1] + p2.y * m[3][2] + p3.y * m[3][3])\n );\n\n return {\n x: spline.x,\n y: spline.y\n };\n};\n\n/**\n *\n * @param {MouseEvent} evt\n * @fires module:svgcanvas.SvgCanvas#event:transition\n * @fires module:svgcanvas.SvgCanvas#event:ext_mouseMove\n * @returns {void}\n */\nexport const mouseMoveEvent = function (evt) {\n const selectedElements = eventContext_.getSelectedElements();\n const currentZoom = eventContext_.getCurrentZoom();\n if (!eventContext_.getStarted()) { return; }\n if (evt.button === 1 || eventContext_.getCanvas().spaceKey) { return; }\n\n let i, xya, c, cx, cy, dx, dy, len, angle, box,\n selected = selectedElements[0];\n const\n pt = transformPoint(evt.pageX, evt.pageY, eventContext_.getrootSctm()),\n\n mouseX = pt.x * currentZoom,\n mouseY = pt.y * currentZoom,\n shape = getElem(eventContext_.getId());\n\n let realX = mouseX / currentZoom;\n let x = realX;\n let realY = mouseY / currentZoom;\n let y = realY;\n\n if (eventContext_.getCurConfig().gridSnapping) {\n x = snapToGrid(x);\n y = snapToGrid(y);\n }\n\n evt.preventDefault();\n let tlist;\n switch (eventContext_.getCurrentMode()) {\n case 'select': {\n // we temporarily use a translate on the element(s) being dragged\n // this transform is removed upon mousing up and the element is\n // relocated to the new location\n if (selectedElements[0] !== null) {\n dx = x - eventContext_.getStartX();\n dy = y - eventContext_.getStartY();\n if (eventContext_.getCurConfig().gridSnapping) {\n dx = snapToGrid(dx);\n dy = snapToGrid(dy);\n }\n\n if (dx !== 0 || dy !== 0) {\n len = selectedElements.length;\n for (i = 0; i < len; ++i) {\n selected = selectedElements[i];\n if (isNullish(selected)) { break; }\n // if (i === 0) {\n // const box = utilsGetBBox(selected);\n // selectedBBoxes[i].x = box.x + dx;\n // selectedBBoxes[i].y = box.y + dy;\n // }\n\n // update the dummy transform in our transform list\n // to be a translate\n const xform = eventContext_.getSVGRoot().createSVGTransform();\n tlist = getTransformList(selected);\n // Note that if Webkit and there's no ID for this\n // element, the dummy transform may have gotten lost.\n // This results in unexpected behaviour\n\n xform.setTranslate(dx, dy);\n if (tlist.numberOfItems) {\n tlist.replaceItem(xform, 0);\n } else {\n tlist.appendItem(xform);\n }\n\n // update our internal bbox that we're tracking while dragging\n eventContext_.getCanvas().selectorManager.requestSelector(selected).resize();\n }\n\n eventContext_.getCanvas().call('transition', selectedElements);\n }\n }\n break;\n } case 'multiselect': {\n realX *= currentZoom;\n realY *= currentZoom;\n assignAttributes(eventContext_.getRubberBox(), {\n x: Math.min(eventContext_.getRStartX(), realX),\n y: Math.min(eventContext_.getRStartY(), realY),\n width: Math.abs(realX - eventContext_.getRStartX()),\n height: Math.abs(realY - eventContext_.getRStartY())\n }, 100);\n\n // for each selected:\n // - if newList contains selected, do nothing\n // - if newList doesn't contain selected, remove it from selected\n // - for any newList that was not in selectedElements, add it to selected\n const elemsToRemove = selectedElements.slice(), elemsToAdd = [],\n newList = eventContext_.getIntersectionList();\n\n // For every element in the intersection, add if not present in selectedElements.\n len = newList.length;\n for (i = 0; i < len; ++i) {\n const intElem = newList[i];\n // Found an element that was not selected before, so we should add it.\n if (!selectedElements.includes(intElem)) {\n elemsToAdd.push(intElem);\n }\n // Found an element that was already selected, so we shouldn't remove it.\n const foundInd = elemsToRemove.indexOf(intElem);\n if (foundInd !== -1) {\n elemsToRemove.splice(foundInd, 1);\n }\n }\n\n if (elemsToRemove.length > 0) {\n eventContext_.getCanvas().removeFromSelection(elemsToRemove);\n }\n\n if (elemsToAdd.length > 0) {\n eventContext_.getCanvas().addToSelection(elemsToAdd);\n }\n\n break;\n } case 'resize': {\n // we track the resize bounding box and translate/scale the selected element\n // while the mouse is down, when mouse goes up, we use this to recalculate\n // the shape's coordinates\n tlist = getTransformList(selected);\n const hasMatrix = hasMatrixTransform(tlist);\n box = hasMatrix ? eventContext_.getInitBbox() : utilsGetBBox(selected);\n let left = box.x,\n top = box.y,\n {width, height} = box;\n dx = (x - eventContext_.getStartX());\n dy = (y - eventContext_.getStartY());\n\n if (eventContext_.getCurConfig().gridSnapping) {\n dx = snapToGrid(dx);\n dy = snapToGrid(dy);\n height = snapToGrid(height);\n width = snapToGrid(width);\n }\n\n // if rotated, adjust the dx,dy values\n angle = getRotationAngle(selected);\n if (angle) {\n const r = Math.sqrt(dx * dx + dy * dy),\n theta = Math.atan2(dy, dx) - angle * Math.PI / 180.0;\n dx = r * Math.cos(theta);\n dy = r * Math.sin(theta);\n }\n\n // if not stretching in y direction, set dy to 0\n // if not stretching in x direction, set dx to 0\n if (!eventContext_.getCurrentResizeMode().includes('n') && !eventContext_.getCurrentResizeMode().includes('s')) {\n dy = 0;\n }\n if (!eventContext_.getCurrentResizeMode().includes('e') && !eventContext_.getCurrentResizeMode().includes('w')) {\n dx = 0;\n }\n\n let // ts = null,\n tx = 0, ty = 0,\n sy = height ? (height + dy) / height : 1,\n sx = width ? (width + dx) / width : 1;\n // if we are dragging on the north side, then adjust the scale factor and ty\n if (eventContext_.getCurrentResizeMode().includes('n')) {\n sy = height ? (height - dy) / height : 1;\n ty = height;\n }\n\n // if we dragging on the east side, then adjust the scale factor and tx\n if (eventContext_.getCurrentResizeMode().includes('w')) {\n sx = width ? (width - dx) / width : 1;\n tx = width;\n }\n\n // update the transform list with translate,scale,translate\n const translateOrigin = eventContext_.getSVGRoot().createSVGTransform(),\n scale = eventContext_.getSVGRoot().createSVGTransform(),\n translateBack = eventContext_.getSVGRoot().createSVGTransform();\n\n if (eventContext_.getCurConfig().gridSnapping) {\n left = snapToGrid(left);\n tx = snapToGrid(tx);\n top = snapToGrid(top);\n ty = snapToGrid(ty);\n }\n\n translateOrigin.setTranslate(-(left + tx), -(top + ty));\n if (evt.shiftKey) {\n if (sx === 1) {\n sx = sy;\n } else { sy = sx; }\n }\n scale.setScale(sx, sy);\n\n translateBack.setTranslate(left + tx, top + ty);\n if (hasMatrix) {\n const diff = angle ? 1 : 0;\n tlist.replaceItem(translateOrigin, 2 + diff);\n tlist.replaceItem(scale, 1 + diff);\n tlist.replaceItem(translateBack, Number(diff));\n } else {\n const N = tlist.numberOfItems;\n tlist.replaceItem(translateBack, N - 3);\n tlist.replaceItem(scale, N - 2);\n tlist.replaceItem(translateOrigin, N - 1);\n }\n\n eventContext_.getCanvas().selectorManager.requestSelector(selected).resize();\n eventContext_.getCanvas().call('transition', selectedElements);\n\n break;\n } case 'zoom': {\n realX *= currentZoom;\n realY *= currentZoom;\n assignAttributes(eventContext_.getRubberBox(), {\n x: Math.min(eventContext_.getRStartX() * currentZoom, realX),\n y: Math.min(eventContext_.getRStartY() * currentZoom, realY),\n width: Math.abs(realX - eventContext_.getRStartX() * currentZoom),\n height: Math.abs(realY - eventContext_.getRStartY() * currentZoom)\n }, 100);\n break;\n } case 'text': {\n assignAttributes(shape, {\n x,\n y\n }, 1000);\n break;\n } case 'line': {\n if (eventContext_.getCurConfig().gridSnapping) {\n x = snapToGrid(x);\n y = snapToGrid(y);\n }\n\n let x2 = x;\n let y2 = y;\n\n if (evt.shiftKey) {\n xya = snapToAngle(eventContext_.getStartX(), eventContext_.getStartY(), x2, y2);\n x2 = xya.x;\n y2 = xya.y;\n }\n\n shape.setAttribute('x2', x2);\n shape.setAttribute('y2', y2);\n break;\n } case 'foreignObject':\n // fall through\n case 'square':\n // fall through\n case 'rect':\n // fall through\n case 'image': {\n const square = (eventContext_.getCurrentMode() === 'square') || evt.shiftKey;\n let\n w = Math.abs(x - eventContext_.getStartX()),\n h = Math.abs(y - eventContext_.getStartY());\n let newX, newY;\n if (square) {\n w = h = Math.max(w, h);\n newX = eventContext_.getStartX() < x ? eventContext_.getStartX() : eventContext_.getStartX() - w;\n newY = eventContext_.getStartY() < y ? eventContext_.getStartY() : eventContext_.getStartY() - h;\n } else {\n newX = Math.min(eventContext_.getStartX(), x);\n newY = Math.min(eventContext_.getStartY(), y);\n }\n\n if (eventContext_.getCurConfig().gridSnapping) {\n w = snapToGrid(w);\n h = snapToGrid(h);\n newX = snapToGrid(newX);\n newY = snapToGrid(newY);\n }\n\n assignAttributes(shape, {\n width: w,\n height: h,\n x: newX,\n y: newY\n }, 1000);\n\n break;\n } case 'circle': {\n c = $(shape).attr(['cx', 'cy']);\n ({cx, cy} = c);\n let rad = Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy));\n if (eventContext_.getCurConfig().gridSnapping) {\n rad = snapToGrid(rad);\n }\n shape.setAttribute('r', rad);\n break;\n } case 'ellipse': {\n c = $(shape).attr(['cx', 'cy']);\n ({cx, cy} = c);\n if (eventContext_.getCurConfig().gridSnapping) {\n x = snapToGrid(x);\n cx = snapToGrid(cx);\n y = snapToGrid(y);\n cy = snapToGrid(cy);\n }\n shape.setAttribute('rx', Math.abs(x - cx));\n const ry = Math.abs(evt.shiftKey ? (x - cx) : (y - cy));\n shape.setAttribute('ry', ry);\n break;\n }\n case 'fhellipse':\n case 'fhrect': {\n eventContext_.setFreehand('minx', Math.min(realX, eventContext_.getFreehand('minx')));\n eventContext_.setFreehand('maxx', Math.max(realX, eventContext_.getFreehand('maxx')));\n eventContext_.setFreehand('miny', Math.min(realY, eventContext_.getFreehand('miny')));\n eventContext_.setFreehand('maxy', Math.max(realY, eventContext_.getFreehand('maxy')));\n }\n // Fallthrough\n case 'fhpath': {\n // dAttr += + realX + ',' + realY + ' ';\n // shape.setAttribute('points', dAttr);\n eventContext_.setEnd('x', realX);\n eventContext_.setEnd('y', realY);\n if (eventContext_.getControllPoint2('x') && eventContext_.getControllPoint2('y')) {\n for (i = 0; i < eventContext_.getStepCount() - 1; i++) {\n eventContext_.setParameter(i / eventContext_.getStepCount());\n eventContext_.setNextParameter((i + 1) / eventContext_.getStepCount());\n eventContext_.setbSpline(getBsplinePoint(eventContext_.getNextParameter()));\n eventContext_.setNextPos({x: eventContext_.getbSpline('x'), y: eventContext_.getbSpline('y')});\n eventContext_.setbSpline(getBsplinePoint(eventContext_.getParameter()));\n eventContext_.setSumDistance(\n eventContext_.getSumDistance() + Math.sqrt((eventContext_.getNextPos('x') -\n eventContext_.getbSpline('x')) * (eventContext_.getNextPos('x') -\n eventContext_.getbSpline('x')) + (eventContext_.getNextPos('y') -\n eventContext_.getbSpline('y')) * (eventContext_.getNextPos('y') - eventContext_.getbSpline('y')))\n );\n if (eventContext_.getSumDistance() > eventContext_.getThreSholdDist()) {\n eventContext_.setSumDistance(eventContext_.getSumDistance() - eventContext_.getThreSholdDist());\n\n // Faster than completely re-writing the points attribute.\n const point = eventContext_.getSVGContent().createSVGPoint();\n point.x = eventContext_.getbSpline('x');\n point.y = eventContext_.getbSpline('y');\n shape.points.appendItem(point);\n }\n }\n }\n eventContext_.setControllPoint2('x', eventContext_.getControllPoint1('x'));\n eventContext_.setControllPoint2('y', eventContext_.getControllPoint1('y'));\n eventContext_.setControllPoint1('x', eventContext_.getStart('x'));\n eventContext_.setControllPoint1('y', eventContext_.getStart('y'));\n eventContext_.setStart({x: eventContext_.getEnd('x'), y: eventContext_.getEnd('y')});\n break;\n // update path stretch line coordinates\n } case 'path':\n // fall through\n case 'pathedit': {\n x *= currentZoom;\n y *= currentZoom;\n\n if (eventContext_.getCurConfig().gridSnapping) {\n x = snapToGrid(x);\n y = snapToGrid(y);\n eventContext_.setStartX(snapToGrid(eventContext_.getStartX()));\n eventContext_.setStartY(snapToGrid(eventContext_.getStartY()));\n }\n if (evt.shiftKey) {\n const {path} = pathModule;\n let x1, y1;\n if (path) {\n x1 = path.dragging ? path.dragging[0] : eventContext_.getStartX();\n y1 = path.dragging ? path.dragging[1] : eventContext_.getStartY();\n } else {\n x1 = eventContext_.getStartX();\n y1 = eventContext_.getStartY();\n }\n xya = snapToAngle(x1, y1, x, y);\n ({x, y} = xya);\n }\n\n if (eventContext_.getRubberBox() && eventContext_.getRubberBox().getAttribute('display') !== 'none') {\n realX *= currentZoom;\n realY *= currentZoom;\n assignAttributes(eventContext_.getRubberBox(), {\n x: Math.min(eventContext_.getRStartX() * currentZoom, realX),\n y: Math.min(eventContext_.getRStartY() * currentZoom, realY),\n width: Math.abs(realX - eventContext_.getRStartX() * currentZoom),\n height: Math.abs(realY - eventContext_.getRStartY() * currentZoom)\n }, 100);\n }\n eventContext_.getCanvas().pathActions.mouseMove(x, y);\n\n break;\n } case 'textedit': {\n x *= currentZoom;\n y *= currentZoom;\n // if (eventContext_.getRubberBox() && eventContext_.getRubberBox().getAttribute('display') !== 'none') {\n // assignAttributes(eventContext_.getRubberBox(), {\n // x: Math.min(eventContext_.getStartX(), x),\n // y: Math.min(eventContext_.getStartY(), y),\n // width: Math.abs(x - eventContext_.getStartX()),\n // height: Math.abs(y - eventContext_.getStartY())\n // }, 100);\n // }\n\n eventContext_.getCanvas().textActions.mouseMove(mouseX, mouseY);\n\n break;\n } case 'rotate': {\n box = utilsGetBBox(selected);\n cx = box.x + box.width / 2;\n cy = box.y + box.height / 2;\n const m = getMatrix(selected),\n center = transformPoint(cx, cy, m);\n cx = center.x;\n cy = center.y;\n angle = ((Math.atan2(cy - y, cx - x) * (180 / Math.PI)) - 90) % 360;\n if (eventContext_.getCurConfig().gridSnapping) {\n angle = snapToGrid(angle);\n }\n if (evt.shiftKey) { // restrict rotations to nice angles (WRS)\n const snap = 45;\n angle = Math.round(angle / snap) * snap;\n }\n\n eventContext_.getCanvas().setRotationAngle(angle < -180 ? (360 + angle) : angle, true);\n eventContext_.getCanvas().call('transition', selectedElements);\n break;\n } default:\n break;\n }\n\n /**\n* The mouse has moved on the canvas area.\n* @event module:svgcanvas.SvgCanvas#event:ext_mouseMove\n* @type {PlainObject}\n* @property {MouseEvent} event The event object\n* @property {Float} mouse_x x coordinate on canvas\n* @property {Float} mouse_y y coordinate on canvas\n* @property {Element} selected Refers to the first selected element\n*/\n eventContext_.getCanvas().runExtensions('mouseMove', /** @type {module:svgcanvas.SvgCanvas#event:ext_mouseMove} */ {\n event: evt,\n mouse_x: mouseX,\n mouse_y: mouseY,\n selected\n });\n}; // mouseMove()\n\n// - in create mode, the element's opacity is set properly, we create an InsertElementCommand\n// and store it on the Undo stack\n// - in move/resize mode, the element's attributes which were affected by the move/resize are\n// identified, a ChangeElementCommand is created and stored on the stack for those attrs\n// this is done in when we recalculate the selected dimensions()\n/**\n*\n* @param {MouseEvent} evt\n* @fires module:svgcanvas.SvgCanvas#event:zoomed\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @fires module:svgcanvas.SvgCanvas#event:ext_mouseUp\n* @returns {void}\n*/\nexport const mouseUpEvent = function (evt) {\n const selectedElements = eventContext_.getSelectedElements();\n const currentZoom = eventContext_.getCurrentZoom();\n if (evt.button === 2) { return; }\n const tempJustSelected = eventContext_.getJustSelected();\n eventContext_.setJustSelected(null);\n if (!eventContext_.getStarted()) { return; }\n const pt = transformPoint(evt.pageX, evt.pageY, eventContext_.getrootSctm()),\n mouseX = pt.x * currentZoom,\n mouseY = pt.y * currentZoom,\n x = mouseX / currentZoom,\n y = mouseY / currentZoom;\n\n let element = getElem(eventContext_.getId());\n let keep = false;\n\n const realX = x;\n const realY = y;\n\n // TODO: Make true when in multi-unit mode\n const useUnit = false; // (eventContext_.getCurConfig().baseUnit !== 'px');\n eventContext_.setStarted(false);\n let attrs, t;\n switch (eventContext_.getCurrentMode()) {\n // intentionally fall-through to select here\n case 'resize':\n case 'multiselect':\n if (!isNullish(eventContext_.getRubberBox())) {\n eventContext_.getRubberBox().setAttribute('display', 'none');\n eventContext_.setCurBBoxes([]);\n }\n eventContext_.setCurrentMode('select');\n // Fallthrough\n case 'select':\n if (!isNullish(selectedElements[0])) {\n // if we only have one selected element\n if (isNullish(selectedElements[1])) {\n // set our current stroke/fill properties to the element's\n const selected = selectedElements[0];\n switch (selected.tagName) {\n case 'g':\n case 'use':\n case 'image':\n case 'foreignObject':\n break;\n default:\n eventContext_.setCurProperties('fill', selected.getAttribute('fill'));\n eventContext_.setCurProperties('fill_opacity', selected.getAttribute('fill-opacity'));\n eventContext_.setCurProperties('stroke', selected.getAttribute('stroke'));\n eventContext_.setCurProperties('stroke_opacity', selected.getAttribute('stroke-opacity'));\n eventContext_.setCurProperties('stroke_width', selected.getAttribute('stroke-width'));\n eventContext_.setCurProperties('stroke_dasharray', selected.getAttribute('stroke-dasharray'));\n eventContext_.setCurProperties('stroke_linejoin', selected.getAttribute('stroke-linejoin'));\n eventContext_.setCurProperties('stroke_linecap', selected.getAttribute('stroke-linecap'));\n }\n\n if (selected.tagName === 'text') {\n eventContext_.setCurText('font_size', selected.getAttribute('font-size'));\n eventContext_.setCurText('font_family', selected.getAttribute('font-family'));\n }\n eventContext_.getCanvas().selectorManager.requestSelector(selected).showGrips(true);\n\n // This shouldn't be necessary as it was done on mouseDown...\n // eventContext_.getCanvas().call('selected', [selected]);\n }\n // always recalculate dimensions to strip off stray identity transforms\n eventContext_.getCanvas().recalculateAllSelectedDimensions();\n // if it was being dragged/resized\n if (realX !== eventContext_.getRStartX() || realY !== eventContext_.getRStartY()) {\n const len = selectedElements.length;\n for (let i = 0; i < len; ++i) {\n if (isNullish(selectedElements[i])) { break; }\n if (!selectedElements[i].firstChild) {\n // Not needed for groups (incorrectly resizes elems), possibly not needed at all?\n eventContext_.getCanvas().selectorManager.requestSelector(selectedElements[i]).resize();\n }\n }\n // no change in position/size, so maybe we should move to pathedit\n } else {\n t = evt.target;\n if (selectedElements[0].nodeName === 'path' && isNullish(selectedElements[1])) {\n eventContext_.getCanvas().pathActions.select(selectedElements[0]);\n // if it was a path\n // else, if it was selected and this is a shift-click, remove it from selection\n } else if (evt.shiftKey && tempJustSelected !== t) {\n eventContext_.getCanvas().removeFromSelection([t]);\n }\n } // no change in mouse position\n\n // Remove non-scaling stroke\n if (supportsNonScalingStroke()) {\n const elem = selectedElements[0];\n if (elem) {\n elem.removeAttribute('style');\n walkTree(elem, function (el) {\n el.removeAttribute('style');\n });\n }\n }\n }\n return;\n case 'zoom': {\n if (!isNullish(eventContext_.getRubberBox())) {\n eventContext_.getRubberBox().setAttribute('display', 'none');\n }\n const factor = evt.shiftKey ? 0.5 : 2;\n eventContext_.getCanvas().call('zoomed', {\n x: Math.min(eventContext_.getRStartX(), realX),\n y: Math.min(eventContext_.getRStartY(), realY),\n width: Math.abs(realX - eventContext_.getRStartX()),\n height: Math.abs(realY - eventContext_.getRStartY()),\n factor\n });\n return;\n } case 'fhpath': {\n // Check that the path contains at least 2 points; a degenerate one-point path\n // causes problems.\n // Webkit ignores how we set the points attribute with commas and uses space\n // to separate all coordinates, see https://bugs.webkit.org/show_bug.cgi?id=29870\n eventContext_.setSumDistance(0);\n eventContext_.setControllPoint2('x', 0);\n eventContext_.setControllPoint2('y', 0);\n eventContext_.setControllPoint1('x', 0);\n eventContext_.setControllPoint1('y', 0);\n eventContext_.setStart({x: 0, y: 0});\n eventContext_.setEnd('x', 0);\n eventContext_.setEnd('y', 0);\n const coords = element.getAttribute('points');\n const commaIndex = coords.indexOf(',');\n keep = commaIndex >= 0 ? coords.includes(',', commaIndex + 1) : coords.includes(' ', coords.indexOf(' ') + 1);\n if (keep) {\n element = eventContext_.getCanvas().pathActions.smoothPolylineIntoPath(element);\n }\n break;\n } case 'line':\n attrs = $(element).attr(['x1', 'x2', 'y1', 'y2']);\n keep = (attrs.x1 !== attrs.x2 || attrs.y1 !== attrs.y2);\n break;\n case 'foreignObject':\n case 'square':\n case 'rect':\n case 'image':\n attrs = $(element).attr(['width', 'height']);\n // Image should be kept regardless of size (use inherit dimensions later)\n keep = (attrs.width || attrs.height) || eventContext_.getCurrentMode() === 'image';\n break;\n case 'circle':\n keep = (element.getAttribute('r') !== '0');\n break;\n case 'ellipse':\n attrs = $(element).attr(['rx', 'ry']);\n keep = (attrs.rx || attrs.ry);\n break;\n case 'fhellipse':\n if ((eventContext_.getFreehand('maxx') - eventContext_.getFreehand('minx')) > 0 &&\n(eventContext_.getFreehand('maxy') - eventContext_.getFreehand('miny')) > 0) {\n element = eventContext_.getCanvas().addSVGElementFromJson({\n element: 'ellipse',\n curStyles: true,\n attr: {\n cx: (eventContext_.getFreehand('minx') + eventContext_.getFreehand('maxx')) / 2,\n cy: (eventContext_.getFreehand('miny') + eventContext_.getFreehand('maxy')) / 2,\n rx: (eventContext_.getFreehand('maxx') - eventContext_.getFreehand('minx')) / 2,\n ry: (eventContext_.getFreehand('maxy') - eventContext_.getFreehand('miny')) / 2,\n id: eventContext_.getId()\n }\n });\n eventContext_.getCanvas().call('changed', [element]);\n keep = true;\n }\n break;\n case 'fhrect':\n if ((eventContext_.getFreehand('maxx') - eventContext_.getFreehand('minx')) > 0 &&\n(eventContext_.getFreehand('maxy') - eventContext_.getFreehand('miny')) > 0) {\n element = eventContext_.getCanvas().addSVGElementFromJson({\n element: 'rect',\n curStyles: true,\n attr: {\n x: eventContext_.getFreehand('minx'),\n y: eventContext_.getFreehand('miny'),\n width: (eventContext_.getFreehand('maxx') - eventContext_.getFreehand('minx')),\n height: (eventContext_.getFreehand('maxy') - eventContext_.getFreehand('miny')),\n id: eventContext_.getId()\n }\n });\n eventContext_.getCanvas().call('changed', [element]);\n keep = true;\n }\n break;\n case 'text':\n keep = true;\n eventContext_.getCanvas().selectOnly([element]);\n eventContext_.getCanvas().textActions.start(element);\n break;\n case 'path': {\n // set element to null here so that it is not removed nor finalized\n element = null;\n // continue to be set to true so that mouseMove happens\n eventContext_.setStarted(true);\n\n const res = eventContext_.getCanvas().pathActions.mouseUp(evt, element, mouseX, mouseY);\n ({element} = res);\n ({keep} = res);\n break;\n } case 'pathedit':\n keep = true;\n element = null;\n eventContext_.getCanvas().pathActions.mouseUp(evt);\n break;\n case 'textedit':\n keep = false;\n element = null;\n eventContext_.getCanvas().textActions.mouseUp(evt, mouseX, mouseY);\n break;\n case 'rotate': {\n keep = true;\n element = null;\n eventContext_.setCurrentMode('select');\n const batchCmd = eventContext_.getCanvas().undoMgr.finishUndoableChange();\n if (!batchCmd.isEmpty()) {\n eventContext_.addCommandToHistory(batchCmd);\n }\n // perform recalculation to weed out any stray identity transforms that might get stuck\n eventContext_.getCanvas().recalculateAllSelectedDimensions();\n eventContext_.getCanvas().call('changed', selectedElements);\n break;\n } default:\n // This could occur in an extension\n break;\n }\n\n /**\n* The main (left) mouse button is released (anywhere).\n* @event module:svgcanvas.SvgCanvas#event:ext_mouseUp\n* @type {PlainObject}\n* @property {MouseEvent} event The event object\n* @property {Float} mouse_x x coordinate on canvas\n* @property {Float} mouse_y y coordinate on canvas\n*/\n const extResult = eventContext_.getCanvas().runExtensions('mouseUp', {\n event: evt,\n mouse_x: mouseX,\n mouse_y: mouseY\n }, true);\n\n $.each(extResult, function (i, r) {\n if (r) {\n keep = r.keep || keep;\n ({element} = r);\n eventContext_.setStarted(r.started || eventContext_.getStarted());\n }\n });\n\n if (!keep && !isNullish(element)) {\n eventContext_.getCanvas().getCurrentDrawing().releaseId(eventContext_.getId());\n element.remove();\n element = null;\n\n t = evt.target;\n\n // if this element is in a group, go up until we reach the top-level group\n // just below the layer groups\n // TODO: once we implement links, we also would have to check for <a> elements\n while (t && t.parentNode && t.parentNode.parentNode && t.parentNode.parentNode.tagName === 'g') {\n t = t.parentNode;\n }\n // if we are not in the middle of creating a path, and we've clicked on some shape,\n // then go to Select mode.\n // WebKit returns <div> when the canvas is clicked, Firefox/Opera return <svg>\n if ((eventContext_.getCurrentMode() !== 'path' || !eventContext_.getDrawnPath()) &&\nt && t.parentNode &&\nt.parentNode.id !== 'selectorParentGroup' &&\nt.id !== 'svgcanvas' && t.id !== 'svgroot'\n ) {\n // switch into \"select\" mode if we've clicked on an element\n eventContext_.getCanvas().setMode('select');\n eventContext_.getCanvas().selectOnly([t], true);\n }\n } else if (!isNullish(element)) {\n /**\n* @name module:svgcanvas.SvgCanvas#addedNew\n* @type {boolean}\n*/\n eventContext_.getCanvas().addedNew = true;\n\n if (useUnit) { convertAttrs(element); }\n\n let aniDur = 0.2;\n let cAni;\n const curShape = eventContext_.getCanvas().getStyle();\n const opacAni = eventContext_.getOpacAni();\n if (opacAni.beginElement && Number.parseFloat(element.getAttribute('opacity')) !== curShape.opacity) {\n cAni = $(opacAni).clone().attr({\n to: curShape.opacity,\n dur: aniDur\n }).appendTo(element);\n try {\n // Fails in FF4 on foreignObject\n cAni[0].beginElement();\n } catch (e) {/* empty fn */}\n } else {\n aniDur = 0;\n }\n\n // Ideally this would be done on the endEvent of the animation,\n // but that doesn't seem to be supported in Webkit\n setTimeout(function () {\n if (cAni) { cAni.remove(); }\n element.setAttribute('opacity', curShape.opacity);\n element.setAttribute('style', 'pointer-events:inherit');\n cleanupElement(element);\n if (eventContext_.getCurrentMode() === 'path') {\n eventContext_.getCanvas().pathActions.toEditMode(element);\n } else if (eventContext_.getCurConfig().selectNew) {\n eventContext_.getCanvas().selectOnly([element], true);\n }\n // we create the insert command that is stored on the stack\n // undo means to call cmd.unapply(), redo means to call cmd.apply()\n eventContext_.addCommandToHistory(new InsertElementCommand(element));\n eventContext_.getCanvas().call('changed', [element]);\n }, aniDur * 1000);\n }\n eventContext_.setStartTransform(null);\n};\n\nexport const dblClickEvent = function (evt) {\n const selectedElements = eventContext_.getSelectedElements();\n const evtTarget = evt.target;\n const parent = evtTarget.parentNode;\n\n let mouseTarget = eventContext_.getCanvas().getMouseTarget(evt);\n const {tagName} = mouseTarget;\n\n if (tagName === 'text' && eventContext_.getCurrentMode() !== 'textedit') {\n const pt = transformPoint(evt.pageX, evt.pageY, eventContext_.getrootSctm());\n eventContext_.getCanvas().textActions.select(mouseTarget, pt.x, pt.y);\n }\n\n // Do nothing if already in current group\n if (parent === eventContext_.getCurrentGroup()) { return; }\n\n if ((tagName === 'g' || tagName === 'a') && getRotationAngle(mouseTarget)) {\n // TODO: Allow method of in-group editing without having to do\n // this (similar to editing rotated paths)\n\n // Ungroup and regroup\n eventContext_.getCanvas().pushGroupProperties(mouseTarget);\n mouseTarget = selectedElements[0];\n eventContext_.getCanvas().clearSelection(true);\n }\n // Reset context\n if (eventContext_.getCurrentGroup()) {\n draw.leaveContext();\n }\n\n if ((parent.tagName !== 'g' && parent.tagName !== 'a') ||\nparent === eventContext_.getCanvas().getCurrentDrawing().getCurrentLayer() ||\nmouseTarget === eventContext_.getCanvas().selectorManager.selectorParentGroup\n ) {\n // Escape from in-group edit\n return;\n }\n draw.setContext(mouseTarget);\n};\n\n/**\n * Follows these conditions:\n * - When we are in a create mode, the element is added to the canvas but the\n * action is not recorded until mousing up.\n * - When we are in select mode, select the element, remember the position\n * and do nothing else.\n * @param {MouseEvent} evt\n * @fires module:svgcanvas.SvgCanvas#event:ext_mouseDown\n * @returns {void}\n */\nexport const mouseDownEvent = function (evt) {\n const selectedElements = eventContext_.getSelectedElements();\n const currentZoom = eventContext_.getCurrentZoom();\n const curShape = eventContext_.getCanvas().getStyle();\n if (eventContext_.getCanvas().spaceKey || evt.button === 1) { return; }\n\n const rightClick = evt.button === 2;\n\n if (evt.altKey) { // duplicate when dragging\n eventContext_.getCanvas().cloneSelectedElements(0, 0);\n }\n\n eventContext_.setRootSctm($('#svgcontent g')[0].getScreenCTM().inverse());\n\n const pt = transformPoint(evt.pageX, evt.pageY, eventContext_.getrootSctm()),\n mouseX = pt.x * currentZoom,\n mouseY = pt.y * currentZoom;\n\n evt.preventDefault();\n\n if (rightClick) {\n eventContext_.setCurrentMode('select');\n eventContext_.setLastClickPoint(pt);\n }\n\n // This would seem to be unnecessary...\n // if (!['select', 'resize'].includes(currentMode)) {\n // setGradient();\n // }\n\n let x = mouseX / currentZoom,\n y = mouseY / currentZoom;\n let mouseTarget = eventContext_.getCanvas().getMouseTarget(evt);\n\n if (mouseTarget.tagName === 'a' && mouseTarget.childNodes.length === 1) {\n mouseTarget = mouseTarget.firstChild;\n }\n\n // realX/y ignores grid-snap value\n const realX = x;\n eventContext_.setStartX(x);\n eventContext_.setRStartX(x);\n const realY = y;\n eventContext_.setStartY(y);\n eventContext_.setRStartY(y);\n\n if (eventContext_.getCurConfig().gridSnapping) {\n x = snapToGrid(x);\n y = snapToGrid(y);\n eventContext_.setStartX(snapToGrid(eventContext_.getStartX()));\n eventContext_.setStartY(snapToGrid(eventContext_.getStartY()));\n }\n\n // if it is a selector grip, then it must be a single element selected,\n // set the mouseTarget to that and update the mode to rotate/resize\n\n if (mouseTarget === eventContext_.getCanvas().selectorManager.selectorParentGroup && !isNullish(selectedElements[0])) {\n const grip = evt.target;\n const griptype = eventContext_.elData(grip, 'type');\n // rotating\n if (griptype === 'rotate') {\n eventContext_.setCurrentMode('rotate');\n // resizing\n } else if (griptype === 'resize') {\n eventContext_.setCurrentMode('resize');\n eventContext_.setCurrentResizeMode(eventContext_.elData(grip, 'dir'));\n }\n mouseTarget = selectedElements[0];\n }\n\n eventContext_.setStartTransform(mouseTarget.getAttribute('transform'));\n\n const tlist = getTransformList(mouseTarget);\n switch (eventContext_.getCurrentMode()) {\n case 'select':\n eventContext_.setStarted(true);\n eventContext_.setCurrentResizeMode('none');\n if (rightClick) { eventContext_.setStarted(false); }\n\n if (mouseTarget !== eventContext_.getSVGRoot()) {\n // if this element is not yet selected, clear selection and select it\n if (!selectedElements.includes(mouseTarget)) {\n // only clear selection if shift is not pressed (otherwise, add\n // element to selection)\n if (!evt.shiftKey) {\n // No need to do the call here as it will be done on addToSelection\n eventContext_.getCanvas().clearSelection(true);\n }\n eventContext_.getCanvas().addToSelection([mouseTarget]);\n eventContext_.setJustSelected(mouseTarget);\n eventContext_.getCanvas().pathActions.clear();\n }\n // else if it's a path, go into pathedit mode in mouseup\n\n if (!rightClick) {\n // insert a dummy transform so if the element(s) are moved it will have\n // a transform to use for its translate\n for (const selectedElement of selectedElements) {\n if (isNullish(selectedElement)) { continue; }\n const slist = getTransformList(selectedElement);\n if (slist.numberOfItems) {\n slist.insertItemBefore(eventContext_.getSVGRoot().createSVGTransform(), 0);\n } else {\n slist.appendItem(eventContext_.getSVGRoot().createSVGTransform());\n }\n }\n }\n } else if (!rightClick) {\n eventContext_.getCanvas().clearSelection();\n eventContext_.setCurrentMode('multiselect');\n if (isNullish(eventContext_.getRubberBox())) {\n eventContext_.setRubberBox(eventContext_.getCanvas().selectorManager.getRubberBandBox());\n }\n eventContext_.setRStartX(eventContext_.getRStartX() * currentZoom);\n eventContext_.setRStartY(eventContext_.getRStartY() * currentZoom);\n // console.log('p',[evt.pageX, evt.pageY]);\n // console.log('c',[evt.clientX, evt.clientY]);\n // console.log('o',[evt.offsetX, evt.offsetY]);\n // console.log('s',[startX, startY]);\n\n assignAttributes(eventContext_.getRubberBox(), {\n x: eventContext_.getRStartX(),\n y: eventContext_.getRStartY(),\n width: 0,\n height: 0,\n display: 'inline'\n }, 100);\n }\n break;\n case 'zoom':\n eventContext_.setStarted(true);\n if (isNullish(eventContext_.getRubberBox())) {\n eventContext_.setRubberBox(eventContext_.getCanvas().selectorManager.getRubberBandBox());\n }\n assignAttributes(eventContext_.getRubberBox(), {\n x: realX * currentZoom,\n y: realX * currentZoom,\n width: 0,\n height: 0,\n display: 'inline'\n }, 100);\n break;\n case 'resize': {\n eventContext_.setStarted(true);\n eventContext_.setStartX(x);\n eventContext_.setStartY(y);\n\n // Getting the BBox from the selection box, since we know we\n // want to orient around it\n eventContext_.setInitBbox(utilsGetBBox($('#selectedBox0')[0]));\n const bb = {};\n $.each(eventContext_.getInitBbox(), function (key, val) {\n bb[key] = val / currentZoom;\n });\n eventContext_.setInitBbox(bb);\n\n // append three dummy transforms to the tlist so that\n // we can translate,scale,translate in mousemove\n const pos = getRotationAngle(mouseTarget) ? 1 : 0;\n\n if (hasMatrixTransform(tlist)) {\n tlist.insertItemBefore(eventContext_.getSVGRoot().createSVGTransform(), pos);\n tlist.insertItemBefore(eventContext_.getSVGRoot().createSVGTransform(), pos);\n tlist.insertItemBefore(eventContext_.getSVGRoot().createSVGTransform(), pos);\n } else {\n tlist.appendItem(eventContext_.getSVGRoot().createSVGTransform());\n tlist.appendItem(eventContext_.getSVGRoot().createSVGTransform());\n tlist.appendItem(eventContext_.getSVGRoot().createSVGTransform());\n\n if (supportsNonScalingStroke()) {\n // Handle crash for newer Chrome and Safari 6 (Mobile and Desktop):\n // https://code.google.com/p/svg-edit/issues/detail?id=904\n // Chromium issue: https://code.google.com/p/chromium/issues/detail?id=114625\n // TODO: Remove this workaround once vendor fixes the issue\n const iswebkit = isWebkit();\n\n let delayedStroke;\n if (iswebkit) {\n delayedStroke = function (ele) {\n const stroke_ = ele.getAttribute('stroke');\n ele.removeAttribute('stroke');\n // Re-apply stroke after delay. Anything higher than 1 seems to cause flicker\n if (stroke_ !== null) setTimeout(function () { ele.setAttribute('stroke', stroke_); }, 0);\n };\n }\n mouseTarget.style.vectorEffect = 'non-scaling-stroke';\n if (iswebkit) { delayedStroke(mouseTarget); }\n\n const all = mouseTarget.getElementsByTagName('*'),\n len = all.length;\n for (let i = 0; i < len; i++) {\n if (!all[i].style) { // mathML\n continue;\n }\n all[i].style.vectorEffect = 'non-scaling-stroke';\n if (iswebkit) { delayedStroke(all[i]); }\n }\n }\n }\n break;\n }\n case 'fhellipse':\n case 'fhrect':\n case 'fhpath':\n eventContext_.setStart({x: realX, y: realY});\n eventContext_.setControllPoint1('x', 0);\n eventContext_.setControllPoint1('y', 0);\n eventContext_.setControllPoint2('x', 0);\n eventContext_.setControllPoint2('y', 0);\n eventContext_.setStarted(true);\n eventContext_.setDAttr(realX + ',' + realY + ' ');\n // Commented out as doing nothing now:\n // strokeW = parseFloat(curShape.stroke_width) === 0 ? 1 : curShape.stroke_width;\n eventContext_.getCanvas().addSVGElementFromJson({\n element: 'polyline',\n curStyles: true,\n attr: {\n points: eventContext_.getDAttr(),\n id: eventContext_.getCanvas().getNextId(),\n fill: 'none',\n opacity: curShape.opacity / 2,\n 'stroke-linecap': 'round',\n style: 'pointer-events:none'\n }\n });\n eventContext_.setFreehand('minx', realX);\n eventContext_.setFreehand('maxx', realX);\n eventContext_.setFreehand('miny', realY);\n eventContext_.setFreehand('maxy', realY);\n break;\n case 'image': {\n eventContext_.setStarted(true);\n const newImage = eventContext_.getCanvas().addSVGElementFromJson({\n element: 'image',\n attr: {\n x,\n y,\n width: 0,\n height: 0,\n id: eventContext_.getCanvas().getNextId(),\n opacity: curShape.opacity / 2,\n style: 'pointer-events:inherit'\n }\n });\n setHref(newImage, eventContext_.getLastGoodImgUrl());\n preventClickDefault(newImage);\n break;\n } case 'square':\n // TODO: once we create the rect, we lose information that this was a square\n // (for resizing purposes this could be important)\n // Fallthrough\n case 'rect':\n eventContext_.setStarted(true);\n eventContext_.setStartX(x);\n eventContext_.setStartY(y);\n eventContext_.getCanvas().addSVGElementFromJson({\n element: 'rect',\n curStyles: true,\n attr: {\n x,\n y,\n width: 0,\n height: 0,\n id: eventContext_.getCanvas().getNextId(),\n opacity: curShape.opacity / 2\n }\n });\n break;\n case 'line': {\n eventContext_.setStarted(true);\n const strokeW = Number(curShape.stroke_width) === 0 ? 1 : curShape.stroke_width;\n eventContext_.getCanvas().addSVGElementFromJson({\n element: 'line',\n curStyles: true,\n attr: {\n x1: x,\n y1: y,\n x2: x,\n y2: y,\n id: eventContext_.getCanvas().getNextId(),\n stroke: curShape.stroke,\n 'stroke-width': strokeW,\n 'stroke-dasharray': curShape.stroke_dasharray,\n 'stroke-linejoin': curShape.stroke_linejoin,\n 'stroke-linecap': curShape.stroke_linecap,\n 'stroke-opacity': curShape.stroke_opacity,\n fill: 'none',\n opacity: curShape.opacity / 2,\n style: 'pointer-events:none'\n }\n });\n break;\n } case 'circle':\n eventContext_.setStarted(true);\n eventContext_.getCanvas().addSVGElementFromJson({\n element: 'circle',\n curStyles: true,\n attr: {\n cx: x,\n cy: y,\n r: 0,\n id: eventContext_.getCanvas().getNextId(),\n opacity: curShape.opacity / 2\n }\n });\n break;\n case 'ellipse':\n eventContext_.setStarted(true);\n eventContext_.getCanvas().addSVGElementFromJson({\n element: 'ellipse',\n curStyles: true,\n attr: {\n cx: x,\n cy: y,\n rx: 0,\n ry: 0,\n id: eventContext_.getCanvas().getNextId(),\n opacity: curShape.opacity / 2\n }\n });\n break;\n case 'text':\n eventContext_.setStarted(true);\n /* const newText = */ eventContext_.getCanvas().addSVGElementFromJson({\n element: 'text',\n curStyles: true,\n attr: {\n x,\n y,\n id: eventContext_.getCanvas().getNextId(),\n fill: eventContext_.getCurText('fill'),\n 'stroke-width': eventContext_.getCurText('stroke_width'),\n 'font-size': eventContext_.getCurText('font_size'),\n 'font-family': eventContext_.getCurText('font_family'),\n 'text-anchor': 'middle',\n 'xml:space': 'preserve',\n opacity: curShape.opacity\n }\n });\n // newText.textContent = 'text';\n break;\n case 'path':\n // Fall through\n case 'pathedit':\n eventContext_.setStartX(eventContext_.getStartX() * currentZoom);\n eventContext_.setStartY(eventContext_.getStartY() * currentZoom);\n eventContext_.getCanvas().pathActions.mouseDown(evt, mouseTarget, eventContext_.getStartX(), eventContext_.getStartY());\n eventContext_.setStarted(true);\n break;\n case 'textedit':\n eventContext_.setStartX(eventContext_.getStartX() * currentZoom);\n eventContext_.setStartY(eventContext_.getStartY() * currentZoom);\n eventContext_.getCanvas().textActions.mouseDown(evt, mouseTarget, eventContext_.getStartX(), eventContext_.getStartY());\n eventContext_.setStarted(true);\n break;\n case 'rotate':\n eventContext_.setStarted(true);\n // we are starting an undoable change (a drag-rotation)\n eventContext_.getCanvas().undoMgr.beginUndoableChange('transform', selectedElements);\n break;\n default:\n // This could occur in an extension\n break;\n }\n\n /**\n* The main (left) mouse button is held down on the canvas area.\n* @event module:svgcanvas.SvgCanvas#event:ext_mouseDown\n* @type {PlainObject}\n* @property {MouseEvent} event The event object\n* @property {Float} start_x x coordinate on canvas\n* @property {Float} start_y y coordinate on canvas\n* @property {Element[]} selectedElements An array of the selected Elements\n*/\n const extResult = eventContext_.getCanvas().runExtensions('mouseDown', {\n event: evt,\n start_x: eventContext_.getStartX(),\n start_y: eventContext_.getStartY(),\n selectedElements\n }, true);\n\n $.each(extResult, function (i, r) {\n if (r && r.started) {\n eventContext_.setStarted(true);\n }\n });\n};\n/**\n * @param {Event} e\n * @fires module:event.SvgCanvas#event:updateCanvas\n * @fires module:event.SvgCanvas#event:zoomDone\n * @returns {void}\n */\nexport const DOMMouseScrollEvent = function (e) {\n const currentZoom = eventContext_.getCurrentZoom();\n if (!e.shiftKey) { return; }\n\n e.preventDefault();\n const evt = e.originalEvent;\n\n eventContext_.setRootSctm($('#svgcontent g')[0].getScreenCTM().inverse());\n\n const workarea = $('#workarea');\n const scrbar = 15;\n const rulerwidth = eventContext_.getCurConfig().showRulers ? 16 : 0;\n\n // mouse relative to content area in content pixels\n const pt = transformPoint(evt.pageX, evt.pageY, eventContext_.getrootSctm());\n\n // full work area width in screen pixels\n const editorFullW = workarea.width();\n const editorFullH = workarea.height();\n\n // work area width minus scroll and ruler in screen pixels\n const editorW = editorFullW - scrbar - rulerwidth;\n const editorH = editorFullH - scrbar - rulerwidth;\n\n // work area width in content pixels\n const workareaViewW = editorW * eventContext_.getrootSctm().a;\n const workareaViewH = editorH * eventContext_.getrootSctm().d;\n\n // content offset from canvas in screen pixels\n const wOffset = workarea.offset();\n const wOffsetLeft = wOffset.left + rulerwidth;\n const wOffsetTop = wOffset.top + rulerwidth;\n\n const delta = (evt.wheelDelta) ? evt.wheelDelta : (evt.detail) ? -evt.detail : 0;\n if (!delta) { return; }\n\n let factor = Math.max(3 / 4, Math.min(4 / 3, (delta)));\n\n let wZoom, hZoom;\n if (factor > 1) {\n wZoom = Math.ceil(editorW / workareaViewW * factor * 100) / 100;\n hZoom = Math.ceil(editorH / workareaViewH * factor * 100) / 100;\n } else {\n wZoom = Math.floor(editorW / workareaViewW * factor * 100) / 100;\n hZoom = Math.floor(editorH / workareaViewH * factor * 100) / 100;\n }\n let zoomlevel = Math.min(wZoom, hZoom);\n zoomlevel = Math.min(10, Math.max(0.01, zoomlevel));\n if (zoomlevel === currentZoom) {\n return;\n }\n factor = zoomlevel / currentZoom;\n\n // top left of workarea in content pixels before zoom\n const topLeftOld = transformPoint(wOffsetLeft, wOffsetTop, eventContext_.getrootSctm());\n\n // top left of workarea in content pixels after zoom\n const topLeftNew = {\n x: pt.x - (pt.x - topLeftOld.x) / factor,\n y: pt.y - (pt.y - topLeftOld.y) / factor\n };\n\n // top left of workarea in canvas pixels relative to content after zoom\n const topLeftNewCanvas = {\n x: topLeftNew.x * zoomlevel,\n y: topLeftNew.y * zoomlevel\n };\n\n // new center in canvas pixels\n const newCtr = {\n x: topLeftNewCanvas.x - rulerwidth + editorFullW / 2,\n y: topLeftNewCanvas.y - rulerwidth + editorFullH / 2\n };\n\n eventContext_.getCanvas().setZoom(zoomlevel);\n document.getElementById('zoom').value = ((zoomlevel * 100).toFixed(1));\n\n eventContext_.getCanvas().call('updateCanvas', {center: false, newCtr});\n eventContext_.getCanvas().call('zoomDone');\n};\n","/**\n * Tools for SVG handle on JSON format.\n * @module svgcanvas\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria, 2010 Jeff Schiller\n */\nimport {getElem, assignAttributes, cleanupElement} from './utilities.js';\nimport {NS} from '../common/namespaces.js';\n\nlet jsonContext_ = null;\nlet svgdoc_ = null;\n\n/**\n * @function module:json.jsonContext#getSelectedElements\n * @returns {Element[]} the array with selected DOM elements\n*/\n/**\n * @function module:json.jsonContext#getDOMDocument\n * @returns {HTMLDocument}\n*/\n\n/**\n* @function module:json.init\n* @param {module:json.jsonContext} jsonContext\n* @returns {void}\n*/\nexport const init = function (jsonContext) {\n jsonContext_ = jsonContext;\n svgdoc_ = jsonContext.getDOMDocument();\n};\n/**\n* @function module:json.getJsonFromSvgElements Iterate element and return json format\n* @param {ArgumentsArray} data - element\n* @returns {svgRootElement}\n*/\nexport const getJsonFromSvgElements = (data) => {\n // Text node\n if (data.nodeType === 3) return data.nodeValue;\n\n const retval = {\n element: data.tagName,\n // namespace: nsMap[data.namespaceURI],\n attr: {},\n children: []\n };\n\n // Iterate attributes\n for (let i = 0, attr; (attr = data.attributes[i]); i++) {\n retval.attr[attr.name] = attr.value;\n }\n\n // Iterate children\n for (let i = 0, node; (node = data.childNodes[i]); i++) {\n retval.children[i] = getJsonFromSvgElements(node);\n }\n\n return retval;\n};\n\n/**\n* This should really be an intersection implementing all rather than a union.\n* @name module:json.addSVGElementsFromJson\n* @type {module:utilities.EditorContext#addSVGElementsFromJson|module:path.EditorContext#addSVGElementFromJson}\n*/\n\nexport const addSVGElementsFromJson = function (data) {\n if (typeof data === 'string') return svgdoc_.createTextNode(data);\n\n let shape = getElem(data.attr.id);\n // if shape is a path but we need to create a rect/ellipse, then remove the path\n const currentLayer = jsonContext_.getDrawing().getCurrentLayer();\n if (shape && data.element !== shape.tagName) {\n shape.remove();\n shape = null;\n }\n if (!shape) {\n const ns = data.namespace || NS.SVG;\n shape = svgdoc_.createElementNS(ns, data.element);\n if (currentLayer) {\n (jsonContext_.getCurrentGroup() || currentLayer).append(shape);\n }\n }\n const curShape = jsonContext_.getCurShape();\n if (data.curStyles) {\n assignAttributes(shape, {\n fill: curShape.fill,\n stroke: curShape.stroke,\n 'stroke-width': curShape.stroke_width,\n 'stroke-dasharray': curShape.stroke_dasharray,\n 'stroke-linejoin': curShape.stroke_linejoin,\n 'stroke-linecap': curShape.stroke_linecap,\n 'stroke-opacity': curShape.stroke_opacity,\n 'fill-opacity': curShape.fill_opacity,\n opacity: curShape.opacity / 2,\n style: 'pointer-events:inherit'\n }, 100);\n }\n assignAttributes(shape, data.attr, 100);\n cleanupElement(shape);\n\n // Children\n if (data.children) {\n data.children.forEach((child) => {\n shape.append(addSVGElementsFromJson(child));\n });\n }\n\n return shape;\n};\n","/**\n * @module elem-get-set get and set methods.\n * @license MIT\n * @copyright 2011 Jeff Schiller\n */\n\n/* globals jQuery */\nimport {jGraduate} from '../editor/components/jgraduate/jQuery.jGraduate.js';\n\nimport * as hstry from './history.js';\nimport jQueryPluginSVG from './jQuery.attr.js';\nimport {NS} from '../common/namespaces.js';\nimport {\n getVisibleElements, getStrokedBBoxDefaultVisible, findDefs,\n walkTree, isNullish, getHref, setHref, getElem\n} from './utilities.js';\nimport {\n convertToNum\n} from '../common/units.js';\n\nconst $ = jQueryPluginSVG(jQuery);\n\nconst {\n InsertElementCommand, RemoveElementCommand,\n ChangeElementCommand, BatchCommand\n} = hstry;\n\nlet elemContext_ = null;\n\n/**\n* @function module:elem-get-set.init\n* @param {module:elem-get-set.elemContext} elemContext\n* @returns {void}\n*/\nexport const init = function (elemContext) {\n elemContext_ = elemContext;\n};\n\n/**\n* @function module:elem-get-set.SvgCanvas#getResolution\n* @returns {DimensionsAndZoom} The current dimensions and zoom level in an object\n*/\nexport const getResolutionMethod = function () {\n const currentZoom = elemContext_.getCurrentZoom();\n const w = elemContext_.getSVGContent().getAttribute('width') / currentZoom;\n const h = elemContext_.getSVGContent().getAttribute('height') / currentZoom;\n\n return {\n w,\n h,\n zoom: currentZoom\n };\n};\n\n/**\n* @function module:elem-get-set.SvgCanvas#getTitle\n* @param {Element} [elem]\n* @returns {string|void} the current group/SVG's title contents or\n* `undefined` if no element is passed nd there are no selected elements.\n*/\nexport const getTitleMethod = function (elem) {\n const selectedElements = elemContext_.getSelectedElements();\n elem = elem || selectedElements[0];\n if (!elem) { return undefined; }\n elem = $(elem).data('gsvg') || $(elem).data('symbol') || elem;\n const childs = elem.childNodes;\n for (const child of childs) {\n if (child.nodeName === 'title') {\n return child.textContent;\n }\n }\n return '';\n};\n\n/**\n* Sets the group/SVG's title content.\n* @function module:elem-get-set.SvgCanvas#setGroupTitle\n* @param {string} val\n* @todo Combine this with `setDocumentTitle`\n* @returns {void}\n*/\nexport const setGroupTitleMethod = function (val) {\n const selectedElements = elemContext_.getSelectedElements();\n let elem = selectedElements[0];\n elem = $(elem).data('gsvg') || elem;\n\n const ts = $(elem).children('title');\n\n const batchCmd = new BatchCommand('Set Label');\n\n let title;\n if (!val.length) {\n // Remove title element\n const tsNextSibling = ts.nextSibling;\n batchCmd.addSubCommand(new RemoveElementCommand(ts[0], tsNextSibling, elem));\n ts.remove();\n } else if (ts.length) {\n // Change title contents\n title = ts[0];\n batchCmd.addSubCommand(new ChangeElementCommand(title, {'#text': title.textContent}));\n title.textContent = val;\n } else {\n // Add title element\n title = elemContext_.getDOMDocument().createElementNS(NS.SVG, 'title');\n title.textContent = val;\n $(elem).prepend(title);\n batchCmd.addSubCommand(new InsertElementCommand(title));\n }\n\n elemContext_.addCommandToHistory(batchCmd);\n};\n\n/**\n* Adds/updates a title element for the document with the given name.\n* This is an undoable action.\n* @function module:elem-get-set.SvgCanvas#setDocumentTitle\n* @param {string} newTitle - String with the new title\n* @returns {void}\n*/\nexport const setDocumentTitleMethod = function (newTitle) {\n const childs = elemContext_.getSVGContent().childNodes;\n let docTitle = false, oldTitle = '';\n\n const batchCmd = new BatchCommand('Change Image Title');\n\n for (const child of childs) {\n if (child.nodeName === 'title') {\n docTitle = child;\n oldTitle = docTitle.textContent;\n break;\n }\n }\n if (!docTitle) {\n docTitle = elemContext_.getDOMDocument().createElementNS(NS.SVG, 'title');\n elemContext_.getSVGContent().insertBefore(docTitle, elemContext_.getSVGContent().firstChild);\n // svgcontent.firstChild.before(docTitle); // Ok to replace above with this?\n }\n\n if (newTitle.length) {\n docTitle.textContent = newTitle;\n } else {\n // No title given, so element is not necessary\n docTitle.remove();\n }\n batchCmd.addSubCommand(new ChangeElementCommand(docTitle, {'#text': oldTitle}));\n elemContext_.addCommandToHistory(batchCmd);\n};\n\n/**\n* Changes the document's dimensions to the given size.\n* @function module:elem-get-set.SvgCanvas#setResolution\n* @param {Float|\"fit\"} x - Number with the width of the new dimensions in user units.\n* Can also be the string \"fit\" to indicate \"fit to content\".\n* @param {Float} y - Number with the height of the new dimensions in user units.\n* @fires module:elem-get-set.SvgCanvas#event:changed\n* @returns {boolean} Indicates if resolution change was successful.\n* It will fail on \"fit to content\" option with no content to fit to.\n*/\nexport const setResolutionMethod = function (x, y) {\n const currentZoom = elemContext_.getCurrentZoom();\n const res = elemContext_.getCanvas().getResolution();\n const {w, h} = res;\n let batchCmd;\n\n if (x === 'fit') {\n // Get bounding box\n const bbox = getStrokedBBoxDefaultVisible();\n\n if (bbox) {\n batchCmd = new BatchCommand('Fit Canvas to Content');\n const visEls = getVisibleElements();\n elemContext_.getCanvas().addToSelection(visEls);\n const dx = [], dy = [];\n $.each(visEls, function (_i, _item) {\n dx.push(bbox.x * -1);\n dy.push(bbox.y * -1);\n });\n\n const cmd = elemContext_.getCanvas().moveSelectedElements(dx, dy, true);\n batchCmd.addSubCommand(cmd);\n elemContext_.getCanvas().clearSelection();\n\n x = Math.round(bbox.width);\n y = Math.round(bbox.height);\n } else {\n return false;\n }\n }\n if (x !== w || y !== h) {\n if (!batchCmd) {\n batchCmd = new BatchCommand('Change Image Dimensions');\n }\n\n x = convertToNum('width', x);\n y = convertToNum('height', y);\n\n elemContext_.getSVGContent().setAttribute('width', x);\n elemContext_.getSVGContent().setAttribute('height', y);\n\n this.contentW = x;\n this.contentH = y;\n batchCmd.addSubCommand(new ChangeElementCommand(elemContext_.getSVGContent(), {width: w, height: h}));\n\n elemContext_.getSVGContent().setAttribute('viewBox', [0, 0, x / currentZoom, y / currentZoom].join(' '));\n batchCmd.addSubCommand(new ChangeElementCommand(elemContext_.getSVGContent(), {viewBox: ['0 0', w, h].join(' ')}));\n\n elemContext_.addCommandToHistory(batchCmd);\n elemContext_.call('changed', [elemContext_.getSVGContent()]);\n }\n return true;\n};\n\n/**\n* Returns the editor's namespace URL, optionally adding it to the root element.\n* @function module:elem-get-set.SvgCanvas#getEditorNS\n* @param {boolean} [add] - Indicates whether or not to add the namespace value\n* @returns {string} The editor's namespace URL\n*/\nexport const getEditorNSMethod = function (add) {\n if (add) {\n elemContext_.getSVGContent().setAttribute('xmlns:se', NS.SE);\n }\n return NS.SE;\n};\n\n/**\n * @typedef {PlainObject} module:elem-get-set.ZoomAndBBox\n * @property {Float} zoom\n * @property {module:utilities.BBoxObject} bbox\n */\n/**\n* Sets the zoom level on the canvas-side based on the given value.\n* @function module:elem-get-set.SvgCanvas#setBBoxZoom\n* @param {\"selection\"|\"canvas\"|\"content\"|\"layer\"|module:SVGEditor.BBoxObjectWithFactor} val - Bounding box object to zoom to or string indicating zoom option. Note: the object value type is defined in `svg-editor.js`\n* @param {Integer} editorW - The editor's workarea box's width\n* @param {Integer} editorH - The editor's workarea box's height\n* @returns {module:elem-get-set.ZoomAndBBox|void}\n*/\nexport const setBBoxZoomMethod = function (val, editorW, editorH) {\n const currentZoom = elemContext_.getCurrentZoom();\n const selectedElements = elemContext_.getSelectedElements();\n let spacer = 0.85;\n let bb;\n const calcZoom = function (bb) {\n if (!bb) { return false; }\n const wZoom = Math.round((editorW / bb.width) * 100 * spacer) / 100;\n const hZoom = Math.round((editorH / bb.height) * 100 * spacer) / 100;\n const zoom = Math.min(wZoom, hZoom);\n elemContext_.getCanvas().setZoom(zoom);\n return {zoom, bbox: bb};\n };\n\n if (typeof val === 'object') {\n bb = val;\n if (bb.width === 0 || bb.height === 0) {\n const newzoom = bb.zoom ? bb.zoom : currentZoom * bb.factor;\n elemContext_.getCanvas().setZoom(newzoom);\n return {zoom: currentZoom, bbox: bb};\n }\n return calcZoom(bb);\n }\n\n switch (val) {\n case 'selection': {\n if (!selectedElements[0]) { return undefined; }\n const selectedElems = $.map(selectedElements, function (n) {\n if (n) {\n return n;\n }\n return undefined;\n });\n bb = getStrokedBBoxDefaultVisible(selectedElems);\n break;\n } case 'canvas': {\n const res = elemContext_.getCanvas().getResolution();\n spacer = 0.95;\n bb = {width: res.w, height: res.h, x: 0, y: 0};\n break;\n } case 'content':\n bb = getStrokedBBoxDefaultVisible();\n break;\n case 'layer':\n bb = getStrokedBBoxDefaultVisible(getVisibleElements(elemContext_.getCanvas().getCurrentDrawing().getCurrentLayer()));\n break;\n default:\n return undefined;\n }\n return calcZoom(bb);\n};\n\n/**\n* Sets the zoom to the given level.\n* @function module:elem-get-set.SvgCanvas#setZoom\n* @param {Float} zoomLevel - Float indicating the zoom level to change to\n* @fires module:elem-get-set.SvgCanvas#event:ext_zoomChanged\n* @returns {void}\n*/\nexport const setZoomMethod = function (zoomLevel) {\n const selectedElements = elemContext_.getSelectedElements();\n const res = elemContext_.getCanvas().getResolution();\n elemContext_.getSVGContent().setAttribute('viewBox', '0 0 ' + res.w / zoomLevel + ' ' + res.h / zoomLevel);\n elemContext_.setCurrentZoom(zoomLevel);\n $.each(selectedElements, function (i, elem) {\n if (!elem) { return; }\n elemContext_.getCanvas().selectorManager.requestSelector(elem).resize();\n });\n elemContext_.getCanvas().pathActions.zoomChange();\n elemContext_.getCanvas().runExtensions('zoomChanged', zoomLevel);\n};\n\n/**\n* Change the current stroke/fill color/gradient value.\n* @function module:elem-get-set.SvgCanvas#setColor\n* @param {string} type - String indicating fill or stroke\n* @param {string} val - The value to set the stroke attribute to\n* @param {boolean} preventUndo - Boolean indicating whether or not this should be an undoable option\n* @fires module:elem-get-set.SvgCanvas#event:changed\n* @returns {void}\n*/\nexport const setColorMethod = function (type, val, preventUndo) {\n const selectedElements = elemContext_.getSelectedElements();\n elemContext_.setCurShape(type, val);\n elemContext_.setCurProperties(type + '_paint', {type: 'solidColor'});\n const elems = [];\n /**\n*\n* @param {Element} e\n* @returns {void}\n*/\n function addNonG (e) {\n if (e.nodeName !== 'g') {\n elems.push(e);\n }\n }\n let i = selectedElements.length;\n while (i--) {\n const elem = selectedElements[i];\n if (elem) {\n if (elem.tagName === 'g') {\n walkTree(elem, addNonG);\n } else if (type === 'fill') {\n if (elem.tagName !== 'polyline' && elem.tagName !== 'line') {\n elems.push(elem);\n }\n } else {\n elems.push(elem);\n }\n }\n }\n if (elems.length > 0) {\n if (!preventUndo) {\n elemContext_.getCanvas().changeSelectedAttribute(type, val, elems);\n elemContext_.call('changed', elems);\n } else {\n elemContext_.changeSelectedAttributeNoUndoMethod(type, val, elems);\n }\n }\n};\n\n/**\n* Apply the current gradient to selected element's fill or stroke.\n* @function module:elem-get-set.SvgCanvas#setGradient\n* @param {\"fill\"|\"stroke\"} type - String indicating \"fill\" or \"stroke\" to apply to an element\n* @returns {void}\n*/\nexport const setGradientMethod = function (type) {\n if (!elemContext_.getCurProperties(type + '_paint') ||\n elemContext_.getCurProperties(type + '_paint').type === 'solidColor') { return; }\n const canvas = elemContext_.getCanvas();\n let grad = canvas[type + 'Grad'];\n // find out if there is a duplicate gradient already in the defs\n const duplicateGrad = findDuplicateGradient(grad);\n const defs = findDefs();\n // no duplicate found, so import gradient into defs\n if (!duplicateGrad) {\n // const origGrad = grad;\n grad = elemContext_.getDOMDocument().importNode(grad, true);\n defs.append(grad);\n // get next id and set it on the grad\n grad.id = elemContext_.getCanvas().getNextId();\n } else { // use existing gradient\n grad = duplicateGrad;\n }\n elemContext_.getCanvas().setColor(type, 'url(#' + grad.id + ')');\n};\n\n/**\n* Check if exact gradient already exists.\n* @function module:svgcanvas~findDuplicateGradient\n* @param {SVGGradientElement} grad - The gradient DOM element to compare to others\n* @returns {SVGGradientElement} The existing gradient if found, `null` if not\n*/\nexport const findDuplicateGradient = function (grad) {\n const defs = findDefs();\n const existingGrads = $(defs).find('linearGradient, radialGradient');\n let i = existingGrads.length;\n const radAttrs = ['r', 'cx', 'cy', 'fx', 'fy'];\n while (i--) {\n const og = existingGrads[i];\n if (grad.tagName === 'linearGradient') {\n if (grad.getAttribute('x1') !== og.getAttribute('x1') ||\n grad.getAttribute('y1') !== og.getAttribute('y1') ||\n grad.getAttribute('x2') !== og.getAttribute('x2') ||\n grad.getAttribute('y2') !== og.getAttribute('y2')\n ) {\n continue;\n }\n } else {\n const gradAttrs = $(grad).attr(radAttrs);\n const ogAttrs = $(og).attr(radAttrs);\n\n let diff = false;\n $.each(radAttrs, function (j, attr) {\n if (gradAttrs[attr] !== ogAttrs[attr]) { diff = true; }\n });\n\n if (diff) { continue; }\n }\n\n // else could be a duplicate, iterate through stops\n const stops = grad.getElementsByTagNameNS(NS.SVG, 'stop');\n const ostops = og.getElementsByTagNameNS(NS.SVG, 'stop');\n\n if (stops.length !== ostops.length) {\n continue;\n }\n\n let j = stops.length;\n while (j--) {\n const stop = stops[j];\n const ostop = ostops[j];\n\n if (stop.getAttribute('offset') !== ostop.getAttribute('offset') ||\n stop.getAttribute('stop-opacity') !== ostop.getAttribute('stop-opacity') ||\n stop.getAttribute('stop-color') !== ostop.getAttribute('stop-color')) {\n break;\n }\n }\n\n if (j === -1) {\n return og;\n }\n } // for each gradient in defs\n\n return null;\n};\n\n/**\n* Set a color/gradient to a fill/stroke.\n* @function module:elem-get-set.SvgCanvas#setPaint\n* @param {\"fill\"|\"stroke\"} type - String with \"fill\" or \"stroke\"\n* @param {module:jGraduate.jGraduatePaintOptions} paint - The jGraduate paint object to apply\n* @returns {void}\n*/\nexport const setPaintMethod = function (type, paint) {\n // make a copy\n const p = new jGraduate.Paint(paint);\n this.setPaintOpacity(type, p.alpha / 100, true);\n\n // now set the current paint object\n elemContext_.setCurProperties(type + '_paint', p);\n switch (p.type) {\n case 'solidColor':\n this.setColor(type, p.solidColor !== 'none' ? '#' + p.solidColor : 'none');\n break;\n case 'linearGradient':\n case 'radialGradient':\n elemContext_.setCanvas(type + 'Grad', p[p.type]);\n elemContext_.getCanvas().setGradient(type);\n break;\n }\n};\n/**\n* Sets the stroke width for the current selected elements.\n* When attempting to set a line's width to 0, this changes it to 1 instead.\n* @function module:elem-get-set.SvgCanvas#setStrokeWidth\n* @param {Float} val - A Float indicating the new stroke width value\n* @fires module:elem-get-set.SvgCanvas#event:changed\n* @returns {void}\n*/\nexport const setStrokeWidthMethod = function (val) {\n const selectedElements = elemContext_.getSelectedElements();\n if (val === 0 && ['line', 'path'].includes(elemContext_.getCanvas().getMode())) {\n elemContext_.getCanvas().setStrokeWidth(1);\n return;\n }\n elemContext_.setCurProperties('stroke_width', val);\n\n const elems = [];\n /**\n*\n* @param {Element} e\n* @returns {void}\n*/\n function addNonG (e) {\n if (e.nodeName !== 'g') {\n elems.push(e);\n }\n }\n let i = selectedElements.length;\n while (i--) {\n const elem = selectedElements[i];\n if (elem) {\n if (elem.tagName === 'g') {\n walkTree(elem, addNonG);\n } else {\n elems.push(elem);\n }\n }\n }\n if (elems.length > 0) {\n elemContext_.getCanvas().changeSelectedAttribute('stroke-width', val, elems);\n elemContext_.call('changed', selectedElements);\n }\n};\n\n/**\n* Set the given stroke-related attribute the given value for selected elements.\n* @function module:elem-get-set.SvgCanvas#setStrokeAttr\n* @param {string} attr - String with the attribute name\n* @param {string|Float} val - String or number with the attribute value\n* @fires module:elem-get-set.SvgCanvas#event:changed\n* @returns {void}\n*/\nexport const setStrokeAttrMethod = function (attr, val) {\n const selectedElements = elemContext_.getSelectedElements();\n elemContext_.setCurShape(attr.replace('-', '_'), val);\n const elems = [];\n\n let i = selectedElements.length;\n while (i--) {\n const elem = selectedElements[i];\n if (elem) {\n if (elem.tagName === 'g') {\n walkTree(elem, function (e) { if (e.nodeName !== 'g') { elems.push(e); } });\n } else {\n elems.push(elem);\n }\n }\n }\n if (elems.length > 0) {\n elemContext_.getCanvas().changeSelectedAttribute(attr, val, elems);\n elemContext_.call('changed', selectedElements);\n }\n};\n/**\n* Check whether selected element is bold or not.\n* @function module:svgcanvas.SvgCanvas#getBold\n* @returns {boolean} Indicates whether or not element is bold\n*/\nexport const getBoldMethod = function () {\n const selectedElements = elemContext_.getSelectedElements();\n // should only have one element selected\n const selected = selectedElements[0];\n if (!isNullish(selected) && selected.tagName === 'text' &&\nisNullish(selectedElements[1])) {\n return (selected.getAttribute('font-weight') === 'bold');\n }\n return false;\n};\n\n/**\n* Make the selected element bold or normal.\n* @function module:svgcanvas.SvgCanvas#setBold\n* @param {boolean} b - Indicates bold (`true`) or normal (`false`)\n* @returns {void}\n*/\nexport const setBoldMethod = function (b) {\n const selectedElements = elemContext_.getSelectedElements();\n const selected = selectedElements[0];\n if (!isNullish(selected) && selected.tagName === 'text' &&\nisNullish(selectedElements[1])) {\n elemContext_.getCanvas().changeSelectedAttribute('font-weight', b ? 'bold' : 'normal');\n }\n if (!selectedElements[0].textContent) {\n elemContext_.getCanvas().textActions.setCursor();\n }\n};\n\n/**\n* Check whether selected element is in italics or not.\n* @function module:svgcanvas.SvgCanvas#getItalic\n* @returns {boolean} Indicates whether or not element is italic\n*/\nexport const getItalicMethod = function () {\n const selectedElements = elemContext_.getSelectedElements();\n const selected = selectedElements[0];\n if (!isNullish(selected) && selected.tagName === 'text' &&\nisNullish(selectedElements[1])) {\n return (selected.getAttribute('font-style') === 'italic');\n }\n return false;\n};\n\n/**\n* Make the selected element italic or normal.\n* @function module:svgcanvas.SvgCanvas#setItalic\n* @param {boolean} i - Indicates italic (`true`) or normal (`false`)\n* @returns {void}\n*/\nexport const setItalicMethod = function (i) {\n const selectedElements = elemContext_.getSelectedElements();\n const selected = selectedElements[0];\n if (!isNullish(selected) && selected.tagName === 'text' &&\nisNullish(selectedElements[1])) {\n elemContext_.getCanvas().changeSelectedAttribute('font-style', i ? 'italic' : 'normal');\n }\n if (!selectedElements[0].textContent) {\n elemContext_.getCanvas().textActions.setCursor();\n }\n};\n\n/**\n * @function module:svgcanvas.SvgCanvas#setTextAnchorMethod Set the new text anchor\n * @param {string} value - The text anchor value (start, middle or end)\n * @returns {void}\n */\nexport const setTextAnchorMethod = function (value) {\n const selectedElements = elemContext_.getSelectedElements();\n const selected = selectedElements[0];\n if (!isNullish(selected) && selected.tagName === 'text' &&\n isNullish(selectedElements[1])) {\n elemContext_.getCanvas().changeSelectedAttribute('text-anchor', value);\n }\n if (!selectedElements[0].textContent) {\n elemContext_.getCanvas().textActions.setCursor();\n }\n};\n\n/**\n* @function module:svgcanvas.SvgCanvas#getFontFamily\n* @returns {string} The current font family\n*/\nexport const getFontFamilyMethod = function () {\n return elemContext_.getCurText('font_family');\n};\n\n/**\n* Set the new font family.\n* @function module:svgcanvas.SvgCanvas#setFontFamily\n* @param {string} val - String with the new font family\n* @returns {void}\n*/\nexport const setFontFamilyMethod = function (val) {\n const selectedElements = elemContext_.getSelectedElements();\n elemContext_.setCurText('font_family', val);\n elemContext_.getCanvas().changeSelectedAttribute('font-family', val);\n if (selectedElements[0] && !selectedElements[0].textContent) {\n elemContext_.getCanvas().textActions.setCursor();\n }\n};\n\n/**\n* Set the new font color.\n* @function module:svgcanvas.SvgCanvas#setFontColor\n* @param {string} val - String with the new font color\n* @returns {void}\n*/\nexport const setFontColorMethod = function (val) {\n elemContext_.setCurText('fill', val);\n elemContext_.getCanvas().changeSelectedAttribute('fill', val);\n};\n\n/**\n* @function module:svgcanvas.SvgCanvas#getFontColor\n* @returns {string} The current font color\n*/\nexport const getFontColorMethod = function () {\n return elemContext_.getCurText('fill');\n};\n\n/**\n* @function module:svgcanvas.SvgCanvas#getFontSize\n* @returns {Float} The current font size\n*/\nexport const getFontSizeMethod = function () {\n return elemContext_.getCurText('font_size');\n};\n\n/**\n* Applies the given font size to the selected element.\n* @function module:svgcanvas.SvgCanvas#setFontSize\n* @param {Float} val - Float with the new font size\n* @returns {void}\n*/\nexport const setFontSizeMethod = function (val) {\n const selectedElements = elemContext_.getSelectedElements();\n elemContext_.setCurText('font_size', val);\n elemContext_.getCanvas().changeSelectedAttribute('font-size', val);\n if (!selectedElements[0].textContent) {\n elemContext_.getCanvas().textActions.setCursor();\n }\n};\n\n/**\n* @function module:svgcanvas.SvgCanvas#getText\n* @returns {string} The current text (`textContent`) of the selected element\n*/\nexport const getTextMethod = function () {\n const selectedElements = elemContext_.getSelectedElements();\n const selected = selectedElements[0];\n if (isNullish(selected)) { return ''; }\n return selected.textContent;\n};\n\n/**\n* Updates the text element with the given string.\n* @function module:svgcanvas.SvgCanvas#setTextContent\n* @param {string} val - String with the new text\n* @returns {void}\n*/\nexport const setTextContentMethod = function (val) {\n elemContext_.getCanvas().changeSelectedAttribute('#text', val);\n elemContext_.getCanvas().textActions.init(val);\n elemContext_.getCanvas().textActions.setCursor();\n};\n\n/**\n* Sets the new image URL for the selected image element. Updates its size if\n* a new URL is given.\n* @function module:svgcanvas.SvgCanvas#setImageURL\n* @param {string} val - String with the image URL/path\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\nexport const setImageURLMethod = function (val) {\n const selectedElements = elemContext_.getSelectedElements();\n const elem = selectedElements[0];\n if (!elem) { return; }\n\n const attrs = $(elem).attr(['width', 'height']);\n const setsize = (!attrs.width || !attrs.height);\n\n const curHref = getHref(elem);\n\n // Do nothing if no URL change or size change\n if (curHref === val && !setsize) {\n return;\n }\n\n const batchCmd = new BatchCommand('Change Image URL');\n\n setHref(elem, val);\n batchCmd.addSubCommand(new ChangeElementCommand(elem, {\n '#href': curHref\n }));\n\n $(new Image()).load(function () {\n const changes = $(elem).attr(['width', 'height']);\n\n $(elem).attr({\n width: this.width,\n height: this.height\n });\n\n elemContext_.getCanvas().selectorManager.requestSelector(elem).resize();\n\n batchCmd.addSubCommand(new ChangeElementCommand(elem, changes));\n elemContext_.addCommandToHistory(batchCmd);\n elemContext_.call('changed', [elem]);\n }).attr('src', val);\n};\n\n/**\n* Sets the new link URL for the selected anchor element.\n* @function module:svgcanvas.SvgCanvas#setLinkURL\n* @param {string} val - String with the link URL/path\n* @returns {void}\n*/\nexport const setLinkURLMethod = function (val) {\n const selectedElements = elemContext_.getSelectedElements();\n let elem = selectedElements[0];\n if (!elem) { return; }\n if (elem.tagName !== 'a') {\n // See if parent is an anchor\n const parentsA = $(elem).parents('a');\n if (parentsA.length) {\n elem = parentsA[0];\n } else {\n return;\n }\n }\n\n const curHref = getHref(elem);\n\n if (curHref === val) { return; }\n\n const batchCmd = new BatchCommand('Change Link URL');\n\n setHref(elem, val);\n batchCmd.addSubCommand(new ChangeElementCommand(elem, {\n '#href': curHref\n }));\n\n elemContext_.addCommandToHistory(batchCmd);\n};\n\n/**\n* Sets the `rx` and `ry` values to the selected `rect` element\n* to change its corner radius.\n* @function module:svgcanvas.SvgCanvas#setRectRadius\n* @param {string|Float} val - The new radius\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\nexport const setRectRadiusMethod = function (val) {\n const selectedElements = elemContext_.getSelectedElements();\n const selected = selectedElements[0];\n if (!isNullish(selected) && selected.tagName === 'rect') {\n const r = selected.getAttribute('rx');\n if (r !== String(val)) {\n selected.setAttribute('rx', val);\n selected.setAttribute('ry', val);\n elemContext_.addCommandToHistory(new ChangeElementCommand(selected, {rx: r, ry: r}, 'Radius'));\n elemContext_.call('changed', [selected]);\n }\n }\n};\n\n/**\n* Wraps the selected element(s) in an anchor element or converts group to one.\n* @function module:svgcanvas.SvgCanvas#makeHyperlink\n* @param {string} url\n* @returns {void}\n*/\nexport const makeHyperlinkMethod = function (url) {\n elemContext_.getCanvas().groupSelectedElements('a', url);\n\n // TODO: If element is a single \"g\", convert to \"a\"\n // if (selectedElements.length > 1 && selectedElements[1]) {\n};\n\n/**\n* @function module:svgcanvas.SvgCanvas#removeHyperlink\n* @returns {void}\n*/\nexport const removeHyperlinkMethod = function () {\n elemContext_.getCanvas().ungroupSelectedElement();\n};\n\n/**\n* Group: Element manipulation.\n*/\n\n/**\n* Sets the new segment type to the selected segment(s).\n* @function module:svgcanvas.SvgCanvas#setSegType\n* @param {Integer} newType - New segment type. See {@link https://www.w3.org/TR/SVG/paths.html#InterfaceSVGPathSeg} for list\n* @returns {void}\n*/\nexport const setSegTypeMethod = function (newType) {\n elemContext_.getCanvas().pathActions.setSegType(newType);\n};\n\n/**\n* Set the background of the editor (NOT the actual document).\n* @function module:svgcanvas.SvgCanvas#setBackground\n* @param {string} color - String with fill color to apply\n* @param {string} url - URL or path to image to use\n* @returns {void}\n*/\nexport const setBackgroundMethod = function (color, url) {\n const bg = getElem('canvasBackground');\n const border = $(bg).find('rect')[0];\n let bgImg = getElem('background_image');\n let bgPattern = getElem('background_pattern');\n border.setAttribute('fill', color === 'chessboard' ? '#fff' : color);\n if (color === 'chessboard') {\n if (!bgPattern) {\n bgPattern = elemContext_.getDOMDocument().createElementNS(NS.SVG, 'foreignObject');\n elemContext_.getCanvas().assignAttributes(bgPattern, {\n id: 'background_pattern',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMinYMin',\n style: 'pointer-events:none'\n });\n const div = document.createElement('div');\n elemContext_.getCanvas().assignAttributes(div, {\n style: 'pointer-events:none;width:100%;height:100%;' +\n 'background-image:url(data:image/gif;base64,' +\n 'R0lGODlhEAAQAIAAAP///9bW1iH5BAAAAAAALAAAAAAQABAAAAIfjG+' +\n 'gq4jM3IFLJgpswNly/XkcBpIiVaInlLJr9FZWAQA7);'\n });\n bgPattern.append(div);\n bg.append(bgPattern);\n }\n } else if (bgPattern) {\n bgPattern.remove();\n }\n if (url) {\n if (!bgImg) {\n bgImg = elemContext_.getDOMDocument().createElementNS(NS.SVG, 'image');\n elemContext_.getCanvas().assignAttributes(bgImg, {\n id: 'background_image',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMinYMin',\n style: 'pointer-events:none'\n });\n }\n setHref(bgImg, url);\n bg.append(bgImg);\n } else if (bgImg) {\n bgImg.remove();\n }\n};\n","/* globals jQuery */\n/**\n * Manipulating coordinates.\n * @module coords\n * @license MIT\n */\n\nimport {\n snapToGrid, assignAttributes, getBBox, getRefElem, findDefs\n} from './utilities.js';\nimport {\n transformPoint, transformListToTransform, matrixMultiply, transformBox\n} from './math.js';\nimport {getTransformList} from './svgtransformlist.js';\n\nconst $ = jQuery;\n\n// this is how we map paths to our preferred relative segment types\nconst pathMap = [\n 0, 'z', 'M', 'm', 'L', 'l', 'C', 'c', 'Q', 'q', 'A', 'a',\n 'H', 'h', 'V', 'v', 'S', 's', 'T', 't'\n];\n\n/**\n * @interface module:coords.EditorContext\n */\n/**\n * @function module:coords.EditorContext#getGridSnapping\n * @returns {boolean}\n */\n/**\n * @function module:coords.EditorContext#getDrawing\n * @returns {module:draw.Drawing}\n*/\n/**\n * @function module:coords.EditorContext#getSVGRoot\n * @returns {SVGSVGElement}\n*/\n\nlet editorContext_ = null;\n\n/**\n* @function module:coords.init\n* @param {module:svgcanvas.SvgCanvas#event:pointsAdded} editorContext\n* @returns {void}\n*/\nexport const init = function (editorContext) {\n editorContext_ = editorContext;\n};\n\n/**\n * Applies coordinate changes to an element based on the given matrix.\n * @name module:coords.remapElement\n * @type {module:path.EditorContext#remapElement}\n*/\nexport const remapElement = function (selected, changes, m) {\n const remap = function (x, y) { return transformPoint(x, y, m); },\n scalew = function (w) { return m.a * w; },\n scaleh = function (h) { return m.d * h; },\n doSnapping = editorContext_.getGridSnapping() && selected.parentNode.parentNode.localName === 'svg',\n finishUp = function () {\n if (doSnapping) {\n Object.entries(changes).forEach(([o, value]) => {\n changes[o] = snapToGrid(value);\n });\n }\n assignAttributes(selected, changes, 1000, true);\n },\n box = getBBox(selected);\n\n for (let i = 0; i < 2; i++) {\n const type = i === 0 ? 'fill' : 'stroke';\n const attrVal = selected.getAttribute(type);\n if (attrVal && attrVal.startsWith('url(') && (m.a < 0 || m.d < 0)) {\n const grad = getRefElem(attrVal);\n const newgrad = grad.cloneNode(true);\n if (m.a < 0) {\n // flip x\n const x1 = newgrad.getAttribute('x1');\n const x2 = newgrad.getAttribute('x2');\n newgrad.setAttribute('x1', -(x1 - 1));\n newgrad.setAttribute('x2', -(x2 - 1));\n }\n\n if (m.d < 0) {\n // flip y\n const y1 = newgrad.getAttribute('y1');\n const y2 = newgrad.getAttribute('y2');\n newgrad.setAttribute('y1', -(y1 - 1));\n newgrad.setAttribute('y2', -(y2 - 1));\n }\n newgrad.id = editorContext_.getDrawing().getNextId();\n findDefs().append(newgrad);\n selected.setAttribute(type, 'url(#' + newgrad.id + ')');\n }\n }\n\n const elName = selected.tagName;\n if (elName === 'g' || elName === 'text' || elName === 'tspan' || elName === 'use') {\n // if it was a translate, then just update x,y\n if (m.a === 1 && m.b === 0 && m.c === 0 && m.d === 1 && (m.e !== 0 || m.f !== 0)) {\n // [T][M] = [M][T']\n // therefore [T'] = [M_inv][T][M]\n const existing = transformListToTransform(selected).matrix,\n tNew = matrixMultiply(existing.inverse(), m, existing);\n changes.x = Number.parseFloat(changes.x) + tNew.e;\n changes.y = Number.parseFloat(changes.y) + tNew.f;\n } else {\n // we just absorb all matrices into the element and don't do any remapping\n const chlist = getTransformList(selected);\n const mt = editorContext_.getSVGRoot().createSVGTransform();\n mt.setMatrix(matrixMultiply(transformListToTransform(chlist).matrix, m));\n chlist.clear();\n chlist.appendItem(mt);\n }\n }\n\n // now we have a set of changes and an applied reduced transform list\n // we apply the changes directly to the DOM\n switch (elName) {\n case 'foreignObject':\n case 'rect':\n case 'image': {\n // Allow images to be inverted (give them matrix when flipped)\n if (elName === 'image' && (m.a < 0 || m.d < 0)) {\n // Convert to matrix\n const chlist = getTransformList(selected);\n const mt = editorContext_.getSVGRoot().createSVGTransform();\n mt.setMatrix(matrixMultiply(transformListToTransform(chlist).matrix, m));\n chlist.clear();\n chlist.appendItem(mt);\n } else {\n const pt1 = remap(changes.x, changes.y);\n changes.width = scalew(changes.width);\n changes.height = scaleh(changes.height);\n changes.x = pt1.x + Math.min(0, changes.width);\n changes.y = pt1.y + Math.min(0, changes.height);\n changes.width = Math.abs(changes.width);\n changes.height = Math.abs(changes.height);\n }\n finishUp();\n break;\n } case 'ellipse': {\n const c = remap(changes.cx, changes.cy);\n changes.cx = c.x;\n changes.cy = c.y;\n changes.rx = scalew(changes.rx);\n changes.ry = scaleh(changes.ry);\n changes.rx = Math.abs(changes.rx);\n changes.ry = Math.abs(changes.ry);\n finishUp();\n break;\n } case 'circle': {\n const c = remap(changes.cx, changes.cy);\n changes.cx = c.x;\n changes.cy = c.y;\n // take the minimum of the new selected box's dimensions for the new circle radius\n const tbox = transformBox(box.x, box.y, box.width, box.height, m);\n const w = tbox.tr.x - tbox.tl.x, h = tbox.bl.y - tbox.tl.y;\n changes.r = Math.min(w / 2, h / 2);\n\n if (changes.r) { changes.r = Math.abs(changes.r); }\n finishUp();\n break;\n } case 'line': {\n const pt1 = remap(changes.x1, changes.y1);\n const pt2 = remap(changes.x2, changes.y2);\n changes.x1 = pt1.x;\n changes.y1 = pt1.y;\n changes.x2 = pt2.x;\n changes.y2 = pt2.y;\n } // Fallthrough\n case 'text':\n case 'tspan':\n case 'use': {\n finishUp();\n break;\n } case 'g': {\n const gsvg = $(selected).data('gsvg');\n if (gsvg) {\n assignAttributes(gsvg, changes, 1000, true);\n }\n break;\n } case 'polyline':\n case 'polygon': {\n const len = changes.points.length;\n for (let i = 0; i < len; ++i) {\n const pt = changes.points[i];\n const {x, y} = remap(pt.x, pt.y);\n changes.points[i].x = x;\n changes.points[i].y = y;\n }\n\n // const len = changes.points.length;\n let pstr = '';\n for (let i = 0; i < len; ++i) {\n const pt = changes.points[i];\n pstr += pt.x + ',' + pt.y + ' ';\n }\n selected.setAttribute('points', pstr);\n break;\n } case 'path': {\n const segList = selected.pathSegList;\n let len = segList.numberOfItems;\n changes.d = [];\n for (let i = 0; i < len; ++i) {\n const seg = segList.getItem(i);\n changes.d[i] = {\n type: seg.pathSegType,\n x: seg.x,\n y: seg.y,\n x1: seg.x1,\n y1: seg.y1,\n x2: seg.x2,\n y2: seg.y2,\n r1: seg.r1,\n r2: seg.r2,\n angle: seg.angle,\n largeArcFlag: seg.largeArcFlag,\n sweepFlag: seg.sweepFlag\n };\n }\n\n len = changes.d.length;\n const firstseg = changes.d[0],\n currentpt = remap(firstseg.x, firstseg.y);\n changes.d[0].x = currentpt.x;\n changes.d[0].y = currentpt.y;\n for (let i = 1; i < len; ++i) {\n const seg = changes.d[i];\n const {type} = seg;\n // if absolute or first segment, we want to remap x, y, x1, y1, x2, y2\n // if relative, we want to scalew, scaleh\n if (type % 2 === 0) { // absolute\n const thisx = (seg.x !== undefined) ? seg.x : currentpt.x, // for V commands\n thisy = (seg.y !== undefined) ? seg.y : currentpt.y; // for H commands\n const pt = remap(thisx, thisy);\n const pt1 = remap(seg.x1, seg.y1);\n const pt2 = remap(seg.x2, seg.y2);\n seg.x = pt.x;\n seg.y = pt.y;\n seg.x1 = pt1.x;\n seg.y1 = pt1.y;\n seg.x2 = pt2.x;\n seg.y2 = pt2.y;\n seg.r1 = scalew(seg.r1);\n seg.r2 = scaleh(seg.r2);\n } else { // relative\n seg.x = scalew(seg.x);\n seg.y = scaleh(seg.y);\n seg.x1 = scalew(seg.x1);\n seg.y1 = scaleh(seg.y1);\n seg.x2 = scalew(seg.x2);\n seg.y2 = scaleh(seg.y2);\n seg.r1 = scalew(seg.r1);\n seg.r2 = scaleh(seg.r2);\n }\n } // for each segment\n\n let dstr = '';\n len = changes.d.length;\n for (let i = 0; i < len; ++i) {\n const seg = changes.d[i];\n const {type} = seg;\n dstr += pathMap[type];\n switch (type) {\n case 13: // relative horizontal line (h)\n case 12: // absolute horizontal line (H)\n dstr += seg.x + ' ';\n break;\n case 15: // relative vertical line (v)\n case 14: // absolute vertical line (V)\n dstr += seg.y + ' ';\n break;\n case 3: // relative move (m)\n case 5: // relative line (l)\n case 19: // relative smooth quad (t)\n case 2: // absolute move (M)\n case 4: // absolute line (L)\n case 18: // absolute smooth quad (T)\n dstr += seg.x + ',' + seg.y + ' ';\n break;\n case 7: // relative cubic (c)\n case 6: // absolute cubic (C)\n dstr += seg.x1 + ',' + seg.y1 + ' ' + seg.x2 + ',' + seg.y2 + ' ' +\n seg.x + ',' + seg.y + ' ';\n break;\n case 9: // relative quad (q)\n case 8: // absolute quad (Q)\n dstr += seg.x1 + ',' + seg.y1 + ' ' + seg.x + ',' + seg.y + ' ';\n break;\n case 11: // relative elliptical arc (a)\n case 10: // absolute elliptical arc (A)\n dstr += seg.r1 + ',' + seg.r2 + ' ' + seg.angle + ' ' + Number(seg.largeArcFlag) +\n ' ' + Number(seg.sweepFlag) + ' ' + seg.x + ',' + seg.y + ' ';\n break;\n case 17: // relative smooth cubic (s)\n case 16: // absolute smooth cubic (S)\n dstr += seg.x2 + ',' + seg.y2 + ' ' + seg.x + ',' + seg.y + ' ';\n break;\n }\n }\n\n selected.setAttribute('d', dstr);\n break;\n }\n }\n};\n","/* globals jQuery */\n/**\n * Tools for SVG selected element operation.\n * @module selected-elem\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria, 2010 Jeff Schiller\n */\nimport jQueryPluginSVG from './jQuery.attr.js'; // Needed for SVG attribute\nimport {NS} from '../common/namespaces.js';\nimport * as hstry from './history.js';\nimport * as pathModule from './path.js';\nimport {\n isNullish, getStrokedBBoxDefaultVisible, setHref, getElem, getHref, getVisibleElements,\n findDefs, getRotationAngle, getRefElem, getBBox as utilsGetBBox, walkTreePost, assignAttributes\n} from './utilities.js';\nimport {\n transformPoint, matrixMultiply, transformListToTransform\n} from './math.js';\nimport {\n getTransformList\n} from './svgtransformlist.js';\nimport {\n recalculateDimensions\n} from './recalculate.js';\nimport {\n isGecko\n} from '../common/browser.js'; // , supportsEditableText\n\nconst {\n MoveElementCommand, BatchCommand, InsertElementCommand, RemoveElementCommand, ChangeElementCommand\n} = hstry;\nconst $ = jQueryPluginSVG(jQuery);\n\nlet elementContext_ = null;\n\n/**\n* @function module:selected-elem.init\n* @param {module:selected-elem.elementContext} elementContext\n* @returns {void}\n*/\nexport const init = function (elementContext) {\n elementContext_ = elementContext;\n};\n\n/**\n* Repositions the selected element to the bottom in the DOM to appear on top of\n* other elements.\n* @function module:selected-elem.SvgCanvas#moveToTopSelectedElem\n* @fires module:selected-elem.SvgCanvas#event:changed\n* @returns {void}\n*/\nexport const moveToTopSelectedElem = function () {\n const [selected] = elementContext_.getSelectedElements();\n if (!isNullish(selected)) {\n const t = selected;\n const oldParent = t.parentNode;\n const oldNextSibling = t.nextSibling;\n t.parentNode.append(t);\n // If the element actually moved position, add the command and fire the changed\n // event handler.\n if (oldNextSibling !== t.nextSibling) {\n elementContext_.addCommandToHistory(new MoveElementCommand(t, oldNextSibling, oldParent, 'top'));\n elementContext_.call('changed', [t]);\n }\n }\n};\n\n/**\n* Repositions the selected element to the top in the DOM to appear under\n* other elements.\n* @function module:selected-elem.SvgCanvas#moveToBottomSelectedElement\n* @fires module:selected-elem.SvgCanvas#event:changed\n* @returns {void}\n*/\nexport const moveToBottomSelectedElem = function () {\n const [selected] = elementContext_.getSelectedElements();\n if (!isNullish(selected)) {\n let t = selected;\n const oldParent = t.parentNode;\n const oldNextSibling = t.nextSibling;\n let {firstChild} = t.parentNode;\n if (firstChild.tagName === 'title') {\n firstChild = firstChild.nextSibling;\n }\n // This can probably be removed, as the defs should not ever apppear\n // inside a layer group\n if (firstChild.tagName === 'defs') {\n firstChild = firstChild.nextSibling;\n }\n t = t.parentNode.insertBefore(t, firstChild);\n // If the element actually moved position, add the command and fire the changed\n // event handler.\n if (oldNextSibling !== t.nextSibling) {\n elementContext_.addCommandToHistory(new MoveElementCommand(t, oldNextSibling, oldParent, 'bottom'));\n elementContext_.call('changed', [t]);\n }\n }\n};\n\n/**\n* Moves the select element up or down the stack, based on the visibly\n* intersecting elements.\n* @function module:selected-elem.SvgCanvas#moveUpDownSelected\n* @param {\"Up\"|\"Down\"} dir - String that's either 'Up' or 'Down'\n* @fires module:selected-elem.SvgCanvas#event:changed\n* @returns {void}\n*/\nexport const moveUpDownSelected = function (dir) {\n const selectedElements = elementContext_.getSelectedElements();\n const selected = selectedElements[0];\n if (!selected) { return; }\n\n elementContext_.setCurBBoxes([]);\n // curBBoxes = [];\n let closest, foundCur;\n // jQuery sorts this list\n const list = $(elementContext_.getIntersectionList(getStrokedBBoxDefaultVisible([selected]))).toArray();\n if (dir === 'Down') { list.reverse(); }\n\n $.each(list, function () {\n if (!foundCur) {\n if (this === selected) {\n foundCur = true;\n }\n return true;\n }\n closest = this;\n return false;\n });\n if (!closest) { return; }\n\n const t = selected;\n const oldParent = t.parentNode;\n const oldNextSibling = t.nextSibling;\n $(closest)[dir === 'Down' ? 'before' : 'after'](t);\n // If the element actually moved position, add the command and fire the changed\n // event handler.\n if (oldNextSibling !== t.nextSibling) {\n elementContext_.addCommandToHistory(new MoveElementCommand(t, oldNextSibling, oldParent, 'Move ' + dir));\n elementContext_.call('changed', [t]);\n }\n};\n\n/**\n* Moves selected elements on the X/Y axis.\n* @function module:selected-elem.SvgCanvas#moveSelectedElements\n* @param {Float} dx - Float with the distance to move on the x-axis\n* @param {Float} dy - Float with the distance to move on the y-axis\n* @param {boolean} undoable - Boolean indicating whether or not the action should be undoable\n* @fires module:selected-elem.SvgCanvas#event:changed\n* @returns {BatchCommand|void} Batch command for the move\n*/\n\nexport const moveSelectedElements = function (dx, dy, undoable) {\n const selectedElements = elementContext_.getSelectedElements();\n const currentZoom = elementContext_.getCurrentZoom();\n // if undoable is not sent, default to true\n // if single values, scale them to the zoom\n if (dx.constructor !== Array) {\n dx /= currentZoom;\n dy /= currentZoom;\n }\n undoable = undoable || true;\n const batchCmd = new BatchCommand('position');\n let i = selectedElements.length;\n while (i--) {\n const selected = selectedElements[i];\n if (!isNullish(selected)) {\n // if (i === 0) {\n // selectedBBoxes[0] = utilsGetBBox(selected);\n // }\n // const b = {};\n // for (const j in selectedBBoxes[i]) b[j] = selectedBBoxes[i][j];\n // selectedBBoxes[i] = b;\n\n const xform = elementContext_.getSVGRoot().createSVGTransform();\n const tlist = getTransformList(selected);\n\n // dx and dy could be arrays\n if (dx.constructor === Array) {\n // if (i === 0) {\n // selectedBBoxes[0].x += dx[0];\n // selectedBBoxes[0].y += dy[0];\n // }\n xform.setTranslate(dx[i], dy[i]);\n } else {\n // if (i === 0) {\n // selectedBBoxes[0].x += dx;\n // selectedBBoxes[0].y += dy;\n // }\n xform.setTranslate(dx, dy);\n }\n\n if (tlist.numberOfItems) {\n tlist.insertItemBefore(xform, 0);\n } else {\n tlist.appendItem(xform);\n }\n\n const cmd = recalculateDimensions(selected);\n if (cmd) {\n batchCmd.addSubCommand(cmd);\n }\n\n elementContext_.gettingSelectorManager().requestSelector(selected).resize();\n }\n }\n if (!batchCmd.isEmpty()) {\n if (undoable) {\n elementContext_.addCommandToHistory(batchCmd);\n }\n elementContext_.call('changed', selectedElements);\n return batchCmd;\n }\n return undefined;\n};\n\n/**\n* Create deep DOM copies (clones) of all selected elements and move them slightly\n* from their originals.\n* @function module:selected-elem.SvgCanvas#cloneSelectedElements\n* @param {Float} x Float with the distance to move on the x-axis\n* @param {Float} y Float with the distance to move on the y-axis\n* @returns {void}\n*/\nexport const cloneSelectedElements = function (x, y) {\n const selectedElements = elementContext_.getSelectedElements();\n const currentGroup = elementContext_.getCurrentGroup();\n let i, elem;\n const batchCmd = new BatchCommand('Clone Elements');\n // find all the elements selected (stop at first null)\n const len = selectedElements.length;\n /**\n* Sorts an array numerically and ascending.\n* @param {Element} a\n* @param {Element} b\n* @returns {Integer}\n*/\n function sortfunction (a, b) {\n return ($(b).index() - $(a).index());\n }\n selectedElements.sort(sortfunction);\n for (i = 0; i < len; ++i) {\n elem = selectedElements[i];\n if (isNullish(elem)) { break; }\n }\n // use slice to quickly get the subset of elements we need\n const copiedElements = selectedElements.slice(0, i);\n this.clearSelection(true);\n // note that we loop in the reverse way because of the way elements are added\n // to the selectedElements array (top-first)\n const drawing = elementContext_.getDrawing();\n i = copiedElements.length;\n while (i--) {\n // clone each element and replace it within copiedElements\n elem = copiedElements[i] = drawing.copyElem(copiedElements[i]);\n (currentGroup || drawing.getCurrentLayer()).append(elem);\n batchCmd.addSubCommand(new InsertElementCommand(elem));\n }\n\n if (!batchCmd.isEmpty()) {\n elementContext_.addToSelection(copiedElements.reverse()); // Need to reverse for correct selection-adding\n moveSelectedElements(x, y, false);\n elementContext_.addCommandToHistory(batchCmd);\n }\n};\n/**\n* Aligns selected elements.\n* @function module:selected-elem.SvgCanvas#alignSelectedElements\n* @param {string} type - String with single character indicating the alignment type\n* @param {\"selected\"|\"largest\"|\"smallest\"|\"page\"} relativeTo\n* @returns {void}\n*/\nexport const alignSelectedElements = function (type, relativeTo) {\n const selectedElements = elementContext_.getSelectedElements();\n const bboxes = []; // angles = [];\n const len = selectedElements.length;\n if (!len) { return; }\n let minx = Number.MAX_VALUE, maxx = Number.MIN_VALUE,\n miny = Number.MAX_VALUE, maxy = Number.MIN_VALUE;\n let curwidth = Number.MIN_VALUE, curheight = Number.MIN_VALUE;\n for (let i = 0; i < len; ++i) {\n if (isNullish(selectedElements[i])) { break; }\n const elem = selectedElements[i];\n bboxes[i] = getStrokedBBoxDefaultVisible([elem]);\n\n // now bbox is axis-aligned and handles rotation\n switch (relativeTo) {\n case 'smallest':\n if (((type === 'l' || type === 'c' || type === 'r' || type === 'left' || type === 'center' || type === 'right') &&\n (curwidth === Number.MIN_VALUE || curwidth > bboxes[i].width)) ||\n ((type === 't' || type === 'm' || type === 'b' || type === 'top' || type === 'middle' || type === 'bottom') &&\n (curheight === Number.MIN_VALUE || curheight > bboxes[i].height))\n ) {\n minx = bboxes[i].x;\n miny = bboxes[i].y;\n maxx = bboxes[i].x + bboxes[i].width;\n maxy = bboxes[i].y + bboxes[i].height;\n curwidth = bboxes[i].width;\n curheight = bboxes[i].height;\n }\n break;\n case 'largest':\n if (((type === 'l' || type === 'c' || type === 'r' || type === 'left' || type === 'center' || type === 'right') &&\n (curwidth === Number.MIN_VALUE || curwidth < bboxes[i].width)) ||\n ((type === 't' || type === 'm' || type === 'b' || type === 'top' || type === 'middle' || type === 'bottom') &&\n (curheight === Number.MIN_VALUE || curheight < bboxes[i].height))\n ) {\n minx = bboxes[i].x;\n miny = bboxes[i].y;\n maxx = bboxes[i].x + bboxes[i].width;\n maxy = bboxes[i].y + bboxes[i].height;\n curwidth = bboxes[i].width;\n curheight = bboxes[i].height;\n }\n break;\n default: // 'selected'\n if (bboxes[i].x < minx) { minx = bboxes[i].x; }\n if (bboxes[i].y < miny) { miny = bboxes[i].y; }\n if (bboxes[i].x + bboxes[i].width > maxx) { maxx = bboxes[i].x + bboxes[i].width; }\n if (bboxes[i].y + bboxes[i].height > maxy) { maxy = bboxes[i].y + bboxes[i].height; }\n break;\n }\n } // loop for each element to find the bbox and adjust min/max\n\n if (relativeTo === 'page') {\n minx = 0;\n miny = 0;\n maxx = elementContext_.getContentW();\n maxy = elementContext_.getContentH();\n }\n\n const dx = new Array(len);\n const dy = new Array(len);\n for (let i = 0; i < len; ++i) {\n if (isNullish(selectedElements[i])) { break; }\n // const elem = selectedElements[i];\n const bbox = bboxes[i];\n dx[i] = 0;\n dy[i] = 0;\n switch (type) {\n case 'l': // left (horizontal)\n case 'left': // left (horizontal)\n dx[i] = minx - bbox.x;\n break;\n case 'c': // center (horizontal)\n case 'center': // center (horizontal)\n dx[i] = (minx + maxx) / 2 - (bbox.x + bbox.width / 2);\n break;\n case 'r': // right (horizontal)\n case 'right': // right (horizontal)\n dx[i] = maxx - (bbox.x + bbox.width);\n break;\n case 't': // top (vertical)\n case 'top': // top (vertical)\n dy[i] = miny - bbox.y;\n break;\n case 'm': // middle (vertical)\n case 'middle': // middle (vertical)\n dy[i] = (miny + maxy) / 2 - (bbox.y + bbox.height / 2);\n break;\n case 'b': // bottom (vertical)\n case 'bottom': // bottom (vertical)\n dy[i] = maxy - (bbox.y + bbox.height);\n break;\n }\n }\n moveSelectedElements(dx, dy);\n};\n\n/**\n* Removes all selected elements from the DOM and adds the change to the\n* history stack.\n* @function module:selected-elem.SvgCanvas#deleteSelectedElements\n* @fires module:selected-elem.SvgCanvas#event:changed\n* @returns {void}\n*/\nexport const deleteSelectedElements = function () {\n const selectedElements = elementContext_.getSelectedElements();\n const batchCmd = new BatchCommand('Delete Elements');\n const len = selectedElements.length;\n const selectedCopy = []; // selectedElements is being deleted\n\n for (let i = 0; i < len; ++i) {\n const selected = selectedElements[i];\n if (isNullish(selected)) { break; }\n\n let parent = selected.parentNode;\n let t = selected;\n\n // this will unselect the element and remove the selectedOutline\n elementContext_.gettingSelectorManager().releaseSelector(t);\n\n // Remove the path if present.\n pathModule.removePath_(t.id);\n\n // Get the parent if it's a single-child anchor\n if (parent.tagName === 'a' && parent.childNodes.length === 1) {\n t = parent;\n parent = parent.parentNode;\n }\n\n const {nextSibling} = t;\n t.remove();\n const elem = t;\n selectedCopy.push(selected); // for the copy\n batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, parent));\n }\n elementContext_.getCanvas().setEmptySelectedElements();\n\n if (!batchCmd.isEmpty()) { elementContext_.addCommandToHistory(batchCmd); }\n elementContext_.call('changed', selectedCopy);\n elementContext_.clearSelection();\n};\n\n/**\n* Remembers the current selected elements on the clipboard.\n* @function module:selected-elem.SvgCanvas#copySelectedElements\n* @returns {void}\n*/\nexport const copySelectedElements = function () {\n const selectedElements = elementContext_.getSelectedElements();\n const data =\n JSON.stringify(selectedElements.map((x) => elementContext_.getJsonFromSvgElement(x)));\n // Use sessionStorage for the clipboard data.\n sessionStorage.setItem(elementContext_.getClipboardID(), data);\n elementContext_.flashStorage();\n\n // Context menu might not exist (it is provided by editor.js).\n const canvMenu = document.getElementById('se-cmenu_canvas');\n canvMenu.setAttribute('enablemenuitems', '#paste,#paste_in_place');\n};\n\n/**\n* Wraps all the selected elements in a group (`g`) element.\n* @function module:selected-elem.SvgCanvas#groupSelectedElements\n* @param {\"a\"|\"g\"} [type=\"g\"] - type of element to group into, defaults to `<g>`\n* @param {string} [urlArg]\n* @returns {void}\n*/\nexport const groupSelectedElements = function (type, urlArg) {\n const selectedElements = elementContext_.getSelectedElements();\n if (!type) { type = 'g'; }\n let cmdStr = '';\n let url;\n\n switch (type) {\n case 'a': {\n cmdStr = 'Make hyperlink';\n url = urlArg || '';\n break;\n } default: {\n type = 'g';\n cmdStr = 'Group Elements';\n break;\n }\n }\n\n const batchCmd = new BatchCommand(cmdStr);\n\n // create and insert the group element\n const g = elementContext_.addSVGElementFromJson({\n element: type,\n attr: {\n id: elementContext_.getNextId()\n }\n });\n if (type === 'a') {\n setHref(g, url);\n }\n batchCmd.addSubCommand(new InsertElementCommand(g));\n\n // now move all children into the group\n let i = selectedElements.length;\n while (i--) {\n let elem = selectedElements[i];\n if (isNullish(elem)) { continue; }\n\n if (elem.parentNode.tagName === 'a' && elem.parentNode.childNodes.length === 1) {\n elem = elem.parentNode;\n }\n\n const oldNextSibling = elem.nextSibling;\n const oldParent = elem.parentNode;\n g.append(elem);\n batchCmd.addSubCommand(new MoveElementCommand(elem, oldNextSibling, oldParent));\n }\n if (!batchCmd.isEmpty()) { elementContext_.addCommandToHistory(batchCmd); }\n\n // update selection\n elementContext_.selectOnly([g], true);\n};\n\n/**\n* Pushes all appropriate parent group properties down to its children, then\n* removes them from the group.\n* @function module:selected-elem.SvgCanvas#pushGroupProperty\n* @param {SVGAElement|SVGGElement} g\n* @param {boolean} undoable\n* @returns {BatchCommand|void}\n*/\nexport const pushGroupProperty = function (g, undoable) {\n const children = g.childNodes;\n const len = children.length;\n const xform = g.getAttribute('transform');\n\n const glist = getTransformList(g);\n const m = transformListToTransform(glist).matrix;\n\n const batchCmd = new BatchCommand('Push group properties');\n\n // TODO: get all fill/stroke properties from the group that we are about to destroy\n // \"fill\", \"fill-opacity\", \"fill-rule\", \"stroke\", \"stroke-dasharray\", \"stroke-dashoffset\",\n // \"stroke-linecap\", \"stroke-linejoin\", \"stroke-miterlimit\", \"stroke-opacity\",\n // \"stroke-width\"\n // and then for each child, if they do not have the attribute (or the value is 'inherit')\n // then set the child's attribute\n\n const gangle = getRotationAngle(g);\n\n const gattrs = $(g).attr(['filter', 'opacity']);\n let gfilter, gblur, changes;\n const drawing = elementContext_.getDrawing();\n\n for (let i = 0; i < len; i++) {\n const elem = children[i];\n\n if (elem.nodeType !== 1) { continue; }\n\n if (gattrs.opacity !== null && gattrs.opacity !== 1) {\n // const c_opac = elem.getAttribute('opacity') || 1;\n const newOpac = Math.round((elem.getAttribute('opacity') || 1) * gattrs.opacity * 100) / 100;\n elementContext_.changeSelectedAttribute('opacity', newOpac, [elem]);\n }\n\n if (gattrs.filter) {\n let cblur = this.getBlur(elem);\n const origCblur = cblur;\n if (!gblur) { gblur = this.getBlur(g); }\n if (cblur) {\n // Is this formula correct?\n cblur = Number(gblur) + Number(cblur);\n } else if (cblur === 0) {\n cblur = gblur;\n }\n\n // If child has no current filter, get group's filter or clone it.\n if (!origCblur) {\n // Set group's filter to use first child's ID\n if (!gfilter) {\n gfilter = getRefElem(gattrs.filter);\n } else {\n // Clone the group's filter\n gfilter = drawing.copyElem(gfilter);\n findDefs().append(gfilter);\n }\n } else {\n gfilter = getRefElem(elem.getAttribute('filter'));\n }\n\n // Change this in future for different filters\n const suffix = (gfilter.firstChild.tagName === 'feGaussianBlur') ? 'blur' : 'filter';\n gfilter.id = elem.id + '_' + suffix;\n elementContext_.changeSelectedAttribute('filter', 'url(#' + gfilter.id + ')', [elem]);\n\n // Update blur value\n if (cblur) {\n elementContext_.changeSelectedAttribute('stdDeviation', cblur, [gfilter.firstChild]);\n elementContext_.getCanvas().setBlurOffsets(gfilter, cblur);\n }\n }\n\n let chtlist = getTransformList(elem);\n\n // Don't process gradient transforms\n if (elem.tagName.includes('Gradient')) { chtlist = null; }\n\n // Hopefully not a problem to add this. Necessary for elements like <desc/>\n if (!chtlist) { continue; }\n\n // Apparently <defs> can get get a transformlist, but we don't want it to have one!\n if (elem.tagName === 'defs') { continue; }\n\n if (glist.numberOfItems) {\n // TODO: if the group's transform is just a rotate, we can always transfer the\n // rotate() down to the children (collapsing consecutive rotates and factoring\n // out any translates)\n if (gangle && glist.numberOfItems === 1) {\n // [Rg] [Rc] [Mc]\n // we want [Tr] [Rc2] [Mc] where:\n // - [Rc2] is at the child's current center but has the\n // sum of the group and child's rotation angles\n // - [Tr] is the equivalent translation that this child\n // undergoes if the group wasn't there\n\n // [Tr] = [Rg] [Rc] [Rc2_inv]\n\n // get group's rotation matrix (Rg)\n const rgm = glist.getItem(0).matrix;\n\n // get child's rotation matrix (Rc)\n let rcm = elementContext_.getSVGRoot().createSVGMatrix();\n const cangle = getRotationAngle(elem);\n if (cangle) {\n rcm = chtlist.getItem(0).matrix;\n }\n\n // get child's old center of rotation\n const cbox = utilsGetBBox(elem);\n const ceqm = transformListToTransform(chtlist).matrix;\n const coldc = transformPoint(cbox.x + cbox.width / 2, cbox.y + cbox.height / 2, ceqm);\n\n // sum group and child's angles\n const sangle = gangle + cangle;\n\n // get child's rotation at the old center (Rc2_inv)\n const r2 = elementContext_.getSVGRoot().createSVGTransform();\n r2.setRotate(sangle, coldc.x, coldc.y);\n\n // calculate equivalent translate\n const trm = matrixMultiply(rgm, rcm, r2.matrix.inverse());\n\n // set up tlist\n if (cangle) {\n chtlist.removeItem(0);\n }\n\n if (sangle) {\n if (chtlist.numberOfItems) {\n chtlist.insertItemBefore(r2, 0);\n } else {\n chtlist.appendItem(r2);\n }\n }\n\n if (trm.e || trm.f) {\n const tr = elementContext_.getSVGRoot().createSVGTransform();\n tr.setTranslate(trm.e, trm.f);\n if (chtlist.numberOfItems) {\n chtlist.insertItemBefore(tr, 0);\n } else {\n chtlist.appendItem(tr);\n }\n }\n } else { // more complicated than just a rotate\n // transfer the group's transform down to each child and then\n // call recalculateDimensions()\n const oldxform = elem.getAttribute('transform');\n changes = {};\n changes.transform = oldxform || '';\n\n const newxform = elementContext_.getSVGRoot().createSVGTransform();\n\n // [ gm ] [ chm ] = [ chm ] [ gm' ]\n // [ gm' ] = [ chmInv ] [ gm ] [ chm ]\n const chm = transformListToTransform(chtlist).matrix,\n chmInv = chm.inverse();\n const gm = matrixMultiply(chmInv, m, chm);\n newxform.setMatrix(gm);\n chtlist.appendItem(newxform);\n }\n const cmd = recalculateDimensions(elem);\n if (cmd) { batchCmd.addSubCommand(cmd); }\n }\n }\n\n // remove transform and make it undo-able\n if (xform) {\n changes = {};\n changes.transform = xform;\n g.setAttribute('transform', '');\n g.removeAttribute('transform');\n batchCmd.addSubCommand(new ChangeElementCommand(g, changes));\n }\n\n if (undoable && !batchCmd.isEmpty()) {\n return batchCmd;\n }\n return undefined;\n};\n\n/**\n* Converts selected/given `<use>` or child SVG element to a group.\n* @function module:selected-elem.SvgCanvas#convertToGroup\n* @param {Element} elem\n* @fires module:selected-elem.SvgCanvas#event:selected\n* @returns {void}\n*/\nexport const convertToGroup = function (elem) {\n const selectedElements = elementContext_.getSelectedElements();\n if (!elem) {\n elem = selectedElements[0];\n }\n const $elem = $(elem);\n const batchCmd = new BatchCommand();\n let ts;\n\n if ($elem.data('gsvg')) {\n // Use the gsvg as the new group\n const svg = elem.firstChild;\n const pt = $(svg).attr(['x', 'y']);\n\n $(elem.firstChild.firstChild).unwrap();\n $(elem).removeData('gsvg');\n\n const tlist = getTransformList(elem);\n const xform = elementContext_.getSVGRoot().createSVGTransform();\n xform.setTranslate(pt.x, pt.y);\n tlist.appendItem(xform);\n recalculateDimensions(elem);\n elementContext_.call('selected', [elem]);\n } else if ($elem.data('symbol')) {\n elem = $elem.data('symbol');\n\n ts = $elem.attr('transform');\n const pos = $elem.attr(['x', 'y']);\n\n const vb = elem.getAttribute('viewBox');\n\n if (vb) {\n const nums = vb.split(' ');\n pos.x -= Number(nums[0]);\n pos.y -= Number(nums[1]);\n }\n\n // Not ideal, but works\n ts += ' translate(' + (pos.x || 0) + ',' + (pos.y || 0) + ')';\n\n const prev = $elem.prev();\n\n // Remove <use> element\n batchCmd.addSubCommand(new RemoveElementCommand($elem[0], $elem[0].nextSibling, $elem[0].parentNode));\n $elem.remove();\n\n // See if other elements reference this symbol\n const svgcontent = elementContext_.getSVGContent();\n const hasMore = $(svgcontent).find('use:data(symbol)').length;\n\n const g = elementContext_.getDOMDocument().createElementNS(NS.SVG, 'g');\n const childs = elem.childNodes;\n\n let i;\n for (i = 0; i < childs.length; i++) {\n g.append(childs[i].cloneNode(true));\n }\n\n // Duplicate the gradients for Gecko, since they weren't included in the <symbol>\n if (isGecko()) {\n const dupeGrads = $(findDefs()).children('linearGradient,radialGradient,pattern').clone();\n $(g).append(dupeGrads);\n }\n\n if (ts) {\n g.setAttribute('transform', ts);\n }\n\n const parent = elem.parentNode;\n\n elementContext_.uniquifyElems(g);\n\n // Put the dupe gradients back into <defs> (after uniquifying them)\n if (isGecko()) {\n $(findDefs()).append($(g).find('linearGradient,radialGradient,pattern'));\n }\n\n // now give the g itself a new id\n g.id = elementContext_.getNextId();\n\n prev.after(g);\n\n if (parent) {\n if (!hasMore) {\n // remove symbol/svg element\n const {nextSibling} = elem;\n elem.remove();\n batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, parent));\n }\n batchCmd.addSubCommand(new InsertElementCommand(g));\n }\n\n elementContext_.setUseData(g);\n\n if (isGecko()) {\n elementContext_.convertGradients(findDefs());\n } else {\n elementContext_.convertGradients(g);\n }\n\n // recalculate dimensions on the top-level children so that unnecessary transforms\n // are removed\n walkTreePost(g, function (n) {\n try {\n recalculateDimensions(n);\n } catch (e) {\n console.log(e); \n }\n });\n\n // Give ID for any visible element missing one\n $(g).find(elementContext_.getVisElems()).each(function () {\n if (!this.id) { this.id = elementContext_.getNextId(); }\n });\n\n elementContext_.selectOnly([g]);\n\n const cm = pushGroupProperty(g, true);\n if (cm) {\n batchCmd.addSubCommand(cm);\n }\n\n elementContext_.addCommandToHistory(batchCmd);\n } else {\n console.log('Unexpected element to ungroup:', elem); \n }\n};\n\n/**\n* Unwraps all the elements in a selected group (`g`) element. This requires\n* significant recalculations to apply group's transforms, etc. to its children.\n* @function module:selected-elem.SvgCanvas#ungroupSelectedElement\n* @returns {void}\n*/\nexport const ungroupSelectedElement = function () {\n const selectedElements = elementContext_.getSelectedElements();\n let g = selectedElements[0];\n if (!g) {\n return;\n }\n if ($(g).data('gsvg') || $(g).data('symbol')) {\n // Is svg, so actually convert to group\n convertToGroup(g);\n return;\n }\n if (g.tagName === 'use') {\n // Somehow doesn't have data set, so retrieve\n const symbol = getElem(getHref(g).substr(1));\n $(g).data('symbol', symbol).data('ref', symbol);\n convertToGroup(g);\n return;\n }\n const parentsA = $(g).parents('a');\n if (parentsA.length) {\n g = parentsA[0];\n }\n\n // Look for parent \"a\"\n if (g.tagName === 'g' || g.tagName === 'a') {\n const batchCmd = new BatchCommand('Ungroup Elements');\n const cmd = pushGroupProperty(g, true);\n if (cmd) { batchCmd.addSubCommand(cmd); }\n\n const parent = g.parentNode;\n const anchor = g.nextSibling;\n const children = new Array(g.childNodes.length);\n\n let i = 0;\n while (g.firstChild) {\n const elem = g.firstChild;\n const oldNextSibling = elem.nextSibling;\n const oldParent = elem.parentNode;\n\n // Remove child title elements\n if (elem.tagName === 'title') {\n const {nextSibling} = elem;\n batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, oldParent));\n elem.remove();\n continue;\n }\n\n if (anchor) {\n anchor.before(elem);\n } else {\n g.after(elem);\n }\n children[i++] = elem;\n batchCmd.addSubCommand(new MoveElementCommand(elem, oldNextSibling, oldParent));\n }\n\n // remove the group from the selection\n elementContext_.clearSelection();\n\n // delete the group element (but make undo-able)\n const gNextSibling = g.nextSibling;\n g.remove();\n batchCmd.addSubCommand(new RemoveElementCommand(g, gNextSibling, parent));\n\n if (!batchCmd.isEmpty()) { elementContext_.addCommandToHistory(batchCmd); }\n\n // update selection\n elementContext_.addToSelection(children);\n }\n};\n/**\n* Updates the editor canvas width/height/position after a zoom has occurred.\n* @function module:svgcanvas.SvgCanvas#updateCanvas\n* @param {Float} w - Float with the new width\n* @param {Float} h - Float with the new height\n* @fires module:svgcanvas.SvgCanvas#event:ext_canvasUpdated\n* @returns {module:svgcanvas.CanvasInfo}\n*/\nexport const updateCanvas = function (w, h) {\n elementContext_.getSVGRoot().setAttribute('width', w);\n elementContext_.getSVGRoot().setAttribute('height', h);\n const currentZoom = elementContext_.getCurrentZoom();\n const bg = $('#canvasBackground')[0];\n const oldX = elementContext_.getSVGContent().getAttribute('x');\n const oldY = elementContext_.getSVGContent().getAttribute('y');\n const x = ((w - this.contentW * currentZoom) / 2);\n const y = ((h - this.contentH * currentZoom) / 2);\n\n assignAttributes(elementContext_.getSVGContent(), {\n width: this.contentW * currentZoom,\n height: this.contentH * currentZoom,\n x,\n y,\n viewBox: '0 0 ' + this.contentW + ' ' + this.contentH\n });\n\n assignAttributes(bg, {\n width: elementContext_.getSVGContent().getAttribute('width'),\n height: elementContext_.getSVGContent().getAttribute('height'),\n x,\n y\n });\n\n const bgImg = getElem('background_image');\n if (bgImg) {\n assignAttributes(bgImg, {\n width: '100%',\n height: '100%'\n });\n }\n\n elementContext_.getCanvas().selectorManager.selectorParentGroup.setAttribute('transform', 'translate(' + x + ',' + y + ')');\n\n /**\n* Invoked upon updates to the canvas.\n* @event module:svgcanvas.SvgCanvas#event:ext_canvasUpdated\n* @type {PlainObject}\n* @property {Integer} new_x\n* @property {Integer} new_y\n* @property {string} old_x (Of Integer)\n* @property {string} old_y (Of Integer)\n* @property {Integer} d_x\n* @property {Integer} d_y\n*/\n elementContext_.getCanvas().runExtensions(\n 'canvasUpdated',\n /**\n * @type {module:svgcanvas.SvgCanvas#event:ext_canvasUpdated}\n */\n {new_x: x, new_y: y, old_x: oldX, old_y: oldY, d_x: x - oldX, d_y: y - oldY}\n );\n return {x, y, old_x: oldX, old_y: oldY, d_x: x - oldX, d_y: y - oldY};\n};\n/**\n* Select the next/previous element within the current layer.\n* @function module:svgcanvas.SvgCanvas#cycleElement\n* @param {boolean} next - true = next and false = previous element\n* @fires module:svgcanvas.SvgCanvas#event:selected\n* @returns {void}\n*/\nexport const cycleElement = function (next) {\n const selectedElements = elementContext_.getSelectedElements();\n const currentGroup = elementContext_.getCurrentGroup();\n let num;\n const curElem = selectedElements[0];\n let elem = false;\n const allElems = getVisibleElements(currentGroup || elementContext_.getCanvas().getCurrentDrawing().getCurrentLayer());\n if (!allElems.length) { return; }\n if (isNullish(curElem)) {\n num = next ? allElems.length - 1 : 0;\n elem = allElems[num];\n } else {\n let i = allElems.length;\n while (i--) {\n if (allElems[i] === curElem) {\n num = next ? i - 1 : i + 1;\n if (num >= allElems.length) {\n num = 0;\n } else if (num < 0) {\n num = allElems.length - 1;\n }\n elem = allElems[num];\n break;\n }\n }\n }\n elementContext_.getCanvas().selectOnly([elem], true);\n elementContext_.call('selected', selectedElements);\n};\n","/**\n * Tools for blur event.\n * @module blur\n * @license MIT\n * @copyright 2011 Jeff Schiller\n */\nimport * as hstry from './history.js';\n\nconst {\n InsertElementCommand, ChangeElementCommand, BatchCommand\n} = hstry;\n\nlet blurContext_ = null;\n\n/**\n* @function module:blur.init\n* @param {module:blur.blurContext} blurContext\n* @returns {void}\n*/\nexport const init = function (blurContext) {\n blurContext_ = blurContext;\n};\n\n/**\n* Sets the `stdDeviation` blur value on the selected element without being undoable.\n* @function module:svgcanvas.SvgCanvas#setBlurNoUndo\n* @param {Float} val - The new `stdDeviation` value\n* @returns {void}\n*/\nexport const setBlurNoUndo = function (val) {\n const selectedElements = blurContext_.getSelectedElements();\n if (!blurContext_.getFilter()) {\n blurContext_.getCanvas().setBlur(val);\n return;\n }\n if (val === 0) {\n // Don't change the StdDev, as that will hide the element.\n // Instead, just remove the value for \"filter\"\n blurContext_.changeSelectedAttributeNoUndoMethod('filter', '');\n blurContext_.setFilterHidden(true);\n } else {\n const elem = selectedElements[0];\n if (blurContext_.getFilterHidden()) {\n blurContext_.changeSelectedAttributeNoUndoMethod('filter', 'url(#' + elem.id + '_blur)');\n }\n if (blurContext_.isWebkit()) {\n // console.log('e', elem); \n elem.removeAttribute('filter');\n elem.setAttribute('filter', 'url(#' + elem.id + '_blur)');\n }\n const filter = blurContext_.getFilter();\n blurContext_.changeSelectedAttributeNoUndoMethod('stdDeviation', val, [filter.firstChild]);\n blurContext_.getCanvas().setBlurOffsets(filter, val);\n }\n};\n\n/**\n*\n* @returns {void}\n*/\nfunction finishChange () {\n const bCmd = blurContext_.getCanvas().undoMgr.finishUndoableChange();\n blurContext_.getCurCommand().addSubCommand(bCmd);\n blurContext_.addCommandToHistory(blurContext_.getCurCommand());\n blurContext_.setCurCommand(null);\n blurContext_.setFilter(null);\n}\n\n/**\n* Sets the `x`, `y`, `width`, `height` values of the filter element in order to\n* make the blur not be clipped. Removes them if not neeeded.\n* @function module:svgcanvas.SvgCanvas#setBlurOffsets\n* @param {Element} filterElem - The filter DOM element to update\n* @param {Float} stdDev - The standard deviation value on which to base the offset size\n* @returns {void}\n*/\nexport const setBlurOffsets = function (filterElem, stdDev) {\n if (stdDev > 3) {\n // TODO: Create algorithm here where size is based on expected blur\n blurContext_.getCanvas().assignAttributes(filterElem, {\n x: '-50%',\n y: '-50%',\n width: '200%',\n height: '200%'\n }, 100);\n // Removing these attributes hides text in Chrome (see Issue 579)\n } else if (!blurContext_.isWebkit()) {\n filterElem.removeAttribute('x');\n filterElem.removeAttribute('y');\n filterElem.removeAttribute('width');\n filterElem.removeAttribute('height');\n }\n};\n\n/**\n* Adds/updates the blur filter to the selected element.\n* @function module:svgcanvas.SvgCanvas#setBlur\n* @param {Float} val - Float with the new `stdDeviation` blur value\n* @param {boolean} complete - Whether or not the action should be completed (to add to the undo manager)\n* @returns {void}\n*/\nexport const setBlur = function (val, complete) {\n const selectedElements = blurContext_.getSelectedElements();\n if (blurContext_.getCurCommand()) {\n finishChange();\n return;\n }\n\n // Looks for associated blur, creates one if not found\n const elem = selectedElements[0];\n const elemId = elem.id;\n blurContext_.setFilter(blurContext_.getCanvas().getElem(elemId + '_blur'));\n\n val -= 0;\n\n const batchCmd = new BatchCommand();\n\n // Blur found!\n if (blurContext_.getFilter()) {\n if (val === 0) {\n blurContext_.setFilter(null);\n }\n } else {\n // Not found, so create\n const newblur = blurContext_.getCanvas().addSVGElementFromJson({element: 'feGaussianBlur',\n attr: {\n in: 'SourceGraphic',\n stdDeviation: val\n }\n });\n\n blurContext_.setFilter(blurContext_.getCanvas().addSVGElementFromJson({element: 'filter',\n attr: {\n id: elemId + '_blur'\n }\n }));\n blurContext_.getFilter().append(newblur);\n blurContext_.getCanvas().findDefs().append(blurContext_.getFilter());\n\n batchCmd.addSubCommand(new InsertElementCommand(blurContext_.getFilter()));\n }\n\n const changes = {filter: elem.getAttribute('filter')};\n\n if (val === 0) {\n elem.removeAttribute('filter');\n batchCmd.addSubCommand(new ChangeElementCommand(elem, changes));\n return;\n }\n\n blurContext_.changeSelectedAttributeMethod('filter', 'url(#' + elemId + '_blur)');\n batchCmd.addSubCommand(new ChangeElementCommand(elem, changes));\n blurContext_.getCanvas().setBlurOffsets(blurContext_.getFilter(), val);\n const filter = blurContext_.getFilter();\n blurContext_.setCurCommand(batchCmd);\n blurContext_.getCanvas().undoMgr.beginUndoableChange('stdDeviation', [filter ? filter.firstChild : null]);\n if (complete) {\n blurContext_.getCanvas().setBlurNoUndo(val);\n finishChange();\n }\n};\n","/**\n * Tools for SVG sanitization.\n * @module sanitize\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria, 2010 Jeff Schiller\n */\n\nimport {getReverseNS, NS} from '../common/namespaces.js';\nimport {isGecko} from '../common/browser.js';\nimport {getHref, setHref, getUrlFromAttr} from './utilities.js';\n\nconst REVERSE_NS = getReverseNS();\n\n// Todo: Split out into core attributes, presentation attributes, etc. so consistent\n/**\n * This defines which elements and attributes that we support (or at least\n * don't remove).\n * @type {PlainObject}\n */\n/* eslint-disable max-len */\nconst svgWhiteList_ = {\n // SVG Elements\n a: ['class', 'clip-path', 'clip-rule', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'id', 'mask', 'opacity', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemLanguage', 'transform', 'xlink:href', 'xlink:title'],\n circle: ['class', 'clip-path', 'clip-rule', 'cx', 'cy', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'id', 'mask', 'opacity', 'r', 'requiredFeatures', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemLanguage', 'transform'],\n clipPath: ['class', 'clipPathUnits', 'id'],\n defs: [],\n style: ['type'],\n desc: [],\n ellipse: ['class', 'clip-path', 'clip-rule', 'cx', 'cy', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'id', 'mask', 'opacity', 'requiredFeatures', 'rx', 'ry', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemLanguage', 'transform'],\n feGaussianBlur: ['class', 'color-interpolation-filters', 'id', 'requiredFeatures', 'stdDeviation'],\n feMorphology: ['class', 'in', 'operator', 'radius'],\n filter: ['class', 'color-interpolation-filters', 'filterRes', 'filterUnits', 'height', 'id', 'primitiveUnits', 'requiredFeatures', 'width', 'x', 'xlink:href', 'y'],\n foreignObject: ['class', 'font-size', 'height', 'id', 'opacity', 'requiredFeatures', 'style', 'transform', 'width', 'x', 'y'],\n g: ['class', 'clip-path', 'clip-rule', 'id', 'display', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'mask', 'opacity', 'requiredFeatures', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemLanguage', 'transform', 'font-family', 'font-size', 'font-style', 'font-weight', 'text-anchor'],\n image: ['class', 'clip-path', 'clip-rule', 'filter', 'height', 'id', 'mask', 'opacity', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:href', 'xlink:title', 'y'],\n line: ['class', 'clip-path', 'clip-rule', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'id', 'marker-end', 'marker-mid', 'marker-start', 'mask', 'opacity', 'requiredFeatures', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemLanguage', 'transform', 'x1', 'x2', 'y1', 'y2'],\n linearGradient: ['class', 'id', 'gradientTransform', 'gradientUnits', 'requiredFeatures', 'spreadMethod', 'systemLanguage', 'x1', 'x2', 'xlink:href', 'y1', 'y2'],\n marker: ['id', 'class', 'markerHeight', 'markerUnits', 'markerWidth', 'orient', 'preserveAspectRatio', 'refX', 'refY', 'systemLanguage', 'viewBox'],\n mask: ['class', 'height', 'id', 'maskContentUnits', 'maskUnits', 'width', 'x', 'y'],\n metadata: ['class', 'id'],\n path: ['class', 'clip-path', 'clip-rule', 'd', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'id', 'marker-end', 'marker-mid', 'marker-start', 'mask', 'opacity', 'requiredFeatures', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemLanguage', 'transform'],\n pattern: ['class', 'height', 'id', 'patternContentUnits', 'patternTransform', 'patternUnits', 'requiredFeatures', 'style', 'systemLanguage', 'viewBox', 'width', 'x', 'xlink:href', 'y'],\n polygon: ['class', 'clip-path', 'clip-rule', 'id', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'id', 'class', 'marker-end', 'marker-mid', 'marker-start', 'mask', 'opacity', 'points', 'requiredFeatures', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemLanguage', 'transform'],\n polyline: ['class', 'clip-path', 'clip-rule', 'id', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'marker-end', 'marker-mid', 'marker-start', 'mask', 'opacity', 'points', 'requiredFeatures', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemLanguage', 'transform'],\n radialGradient: ['class', 'cx', 'cy', 'fx', 'fy', 'gradientTransform', 'gradientUnits', 'id', 'r', 'requiredFeatures', 'spreadMethod', 'systemLanguage', 'xlink:href'],\n rect: ['class', 'clip-path', 'clip-rule', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'height', 'id', 'mask', 'opacity', 'requiredFeatures', 'rx', 'ry', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemLanguage', 'transform', 'width', 'x', 'y'],\n stop: ['class', 'id', 'offset', 'requiredFeatures', 'stop-color', 'stop-opacity', 'style', 'systemLanguage'],\n svg: ['class', 'clip-path', 'clip-rule', 'filter', 'id', 'height', 'mask', 'preserveAspectRatio', 'requiredFeatures', 'style', 'systemLanguage', 'viewBox', 'width', 'x', 'xmlns', 'xmlns:se', 'xmlns:xlink', 'y'],\n switch: ['class', 'id', 'requiredFeatures', 'systemLanguage'],\n symbol: ['class', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'font-family', 'font-size', 'font-style', 'font-weight', 'id', 'opacity', 'preserveAspectRatio', 'requiredFeatures', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemLanguage', 'transform', 'viewBox'],\n text: ['class', 'clip-path', 'clip-rule', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'font-family', 'font-size', 'font-style', 'font-weight', 'id', 'mask', 'opacity', 'requiredFeatures', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemLanguage', 'text-anchor', 'transform', 'x', 'xml:space', 'y'],\n textPath: ['class', 'id', 'method', 'requiredFeatures', 'spacing', 'startOffset', 'style', 'systemLanguage', 'transform', 'xlink:href'],\n title: [],\n tspan: ['class', 'clip-path', 'clip-rule', 'dx', 'dy', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'font-family', 'font-size', 'font-style', 'font-weight', 'id', 'mask', 'opacity', 'requiredFeatures', 'rotate', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'systemLanguage', 'text-anchor', 'textLength', 'transform', 'x', 'xml:space', 'y'],\n use: ['class', 'clip-path', 'clip-rule', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'height', 'id', 'mask', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'style', 'transform', 'width', 'x', 'xlink:href', 'y'],\n\n // MathML Elements\n annotation: ['encoding'],\n 'annotation-xml': ['encoding'],\n maction: ['actiontype', 'other', 'selection'],\n math: ['class', 'id', 'display', 'xmlns'],\n menclose: ['notation'],\n merror: [],\n mfrac: ['linethickness'],\n mi: ['mathvariant'],\n mmultiscripts: [],\n mn: [],\n mo: ['fence', 'lspace', 'maxsize', 'minsize', 'rspace', 'stretchy'],\n mover: [],\n mpadded: ['lspace', 'width', 'height', 'depth', 'voffset'],\n mphantom: [],\n mprescripts: [],\n mroot: [],\n mrow: ['xlink:href', 'xlink:type', 'xmlns:xlink'],\n mspace: ['depth', 'height', 'width'],\n msqrt: [],\n mstyle: ['displaystyle', 'mathbackground', 'mathcolor', 'mathvariant', 'scriptlevel'],\n msub: [],\n msubsup: [],\n msup: [],\n mtable: ['align', 'columnalign', 'columnlines', 'columnspacing', 'displaystyle', 'equalcolumns', 'equalrows', 'frame', 'rowalign', 'rowlines', 'rowspacing', 'width'],\n mtd: ['columnalign', 'columnspan', 'rowalign', 'rowspan'],\n mtext: [],\n mtr: ['columnalign', 'rowalign'],\n munder: [],\n munderover: [],\n none: [],\n semantics: []\n};\n/* eslint-enable max-len */\n\n// Produce a Namespace-aware version of svgWhitelist\nconst svgWhiteListNS_ = {};\nObject.entries(svgWhiteList_).forEach(function ([elt, atts]) {\n const attNS = {};\n Object.entries(atts).forEach(function ([_i, att]) {\n if (att.includes(':')) {\n const v = att.split(':');\n attNS[v[1]] = NS[(v[0]).toUpperCase()];\n } else {\n attNS[att] = att === 'xmlns' ? NS.XMLNS : null;\n }\n });\n svgWhiteListNS_[elt] = attNS;\n});\n\n/**\n* Sanitizes the input node and its children.\n* It only keeps what is allowed from our whitelist defined above.\n* @function module:sanitize.sanitizeSvg\n* @param {Text|Element} node - The DOM element to be checked (we'll also check its children) or text node to be cleaned up\n* @returns {void}\n*/\nexport const sanitizeSvg = function (node) {\n // Cleanup text nodes\n if (node.nodeType === 3) { // 3 === TEXT_NODE\n // Trim whitespace\n node.nodeValue = node.nodeValue.replace(/^\\s+|\\s+$/g, '');\n // Remove if empty\n if (!node.nodeValue.length) {\n node.remove();\n }\n }\n\n // We only care about element nodes.\n // Automatically return for all non-element nodes, such as comments, etc.\n if (node.nodeType !== 1) { // 1 == ELEMENT_NODE\n return;\n }\n\n const doc = node.ownerDocument;\n const parent = node.parentNode;\n // can parent ever be null here? I think the root node's parent is the document...\n if (!doc || !parent) {\n return;\n }\n\n const allowedAttrs = svgWhiteList_[node.nodeName];\n const allowedAttrsNS = svgWhiteListNS_[node.nodeName];\n // if this element is supported, sanitize it\n if (typeof allowedAttrs !== 'undefined') {\n const seAttrs = [];\n let i = node.attributes.length;\n while (i--) {\n // if the attribute is not in our whitelist, then remove it\n // could use jQuery's inArray(), but I don't know if that's any better\n const attr = node.attributes.item(i);\n const attrName = attr.nodeName;\n const attrLocalName = attr.localName;\n const attrNsURI = attr.namespaceURI;\n // Check that an attribute with the correct localName in the correct namespace is on\n // our whitelist or is a namespace declaration for one of our allowed namespaces\n if (!({}.hasOwnProperty.call(allowedAttrsNS, attrLocalName) &&\n attrNsURI === allowedAttrsNS[attrLocalName] && attrNsURI !== NS.XMLNS\n ) &&\n !(attrNsURI === NS.XMLNS && REVERSE_NS[attr.value])) {\n // TODO(codedread): Programmatically add the se: attributes to the NS-aware whitelist.\n // Bypassing the whitelist to allow se: prefixes.\n // Is there a more appropriate way to do this?\n if (attrName.startsWith('se:') || attrName.startsWith('data-')) {\n seAttrs.push([attrName, attr.value]);\n }\n node.removeAttributeNS(attrNsURI, attrLocalName);\n }\n\n // Add spaces before negative signs where necessary\n if (isGecko()) {\n switch (attrName) {\n case 'transform':\n case 'gradientTransform':\n case 'patternTransform': {\n const val = attr.value.replace(/(\\d)-/g, '$1 -');\n // const val = attr.value.replace(/(?<digit>\\d)-/g, '$<digit> -');\n node.setAttribute(attrName, val);\n break;\n }\n }\n }\n\n // For the style attribute, rewrite it in terms of XML presentational attributes\n if (attrName === 'style') {\n const props = attr.value.split(';');\n let p = props.length;\n while (p--) {\n const [name, val] = props[p].split(':');\n const styleAttrName = (name || '').trim();\n const styleAttrVal = (val || '').trim();\n // Now check that this attribute is supported\n if (allowedAttrs.includes(styleAttrName)) {\n node.setAttribute(styleAttrName, styleAttrVal);\n }\n }\n node.removeAttribute('style');\n }\n }\n\n Object.values(seAttrs).forEach(([att, val]) => {\n node.setAttributeNS(NS.SE, att, val);\n });\n\n // for some elements that have a xlink:href, ensure the URI refers to a local element\n // (but not for links)\n const href = getHref(node);\n if (href &&\n ['filter', 'linearGradient', 'pattern',\n 'radialGradient', 'textPath', 'use'].includes(node.nodeName) && href[0] !== '#') {\n // remove the attribute (but keep the element)\n setHref(node, '');\n node.removeAttributeNS(NS.XLINK, 'href');\n }\n\n // Safari crashes on a <use> without a xlink:href, so we just remove the node here\n if (node.nodeName === 'use' && !getHref(node)) {\n node.remove();\n return;\n }\n // if the element has attributes pointing to a non-local reference,\n // need to remove the attribute\n Object.values(['clip-path', 'fill', 'filter', 'marker-end', 'marker-mid', 'marker-start', 'mask', 'stroke'], function (attr) {\n let val = node.getAttribute(attr);\n if (val) {\n val = getUrlFromAttr(val);\n // simply check for first character being a '#'\n if (val && val[0] !== '#') {\n node.setAttribute(attr, '');\n node.removeAttribute(attr);\n }\n }\n });\n\n // recurse to children\n i = node.childNodes.length;\n while (i--) { sanitizeSvg(node.childNodes.item(i)); }\n // else (element not supported), remove it\n } else {\n // remove all children from this node and insert them before this node\n // TODO: in the case of animation elements this will hardly ever be correct\n const children = [];\n while (node.hasChildNodes()) {\n children.push(parent.insertBefore(node.firstChild, node));\n }\n\n // remove this node from the document altogether\n node.remove();\n\n // call sanitizeSvg on each of those children\n let i = children.length;\n while (i--) { sanitizeSvg(children[i]); }\n }\n};\n","export default (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar arrayBufferModule = require('../internals/array-buffer');\nvar setSpecies = require('../internals/set-species');\n\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\n\n// `ArrayBuffer` constructor\n// https://tc39.es/ecma262/#sec-arraybuffer-constructor\n$({ global: true, forced: NativeArrayBuffer !== ArrayBuffer }, {\n ArrayBuffer: ArrayBuffer\n});\n\nsetSpecies(ARRAY_BUFFER);\n","var $ = require('../internals/export');\n\n// `Number.MIN_SAFE_INTEGER` constant\n// https://tc39.es/ecma262/#sec-number.min_safe_integer\n$({ target: 'Number', stat: true }, {\n MIN_SAFE_INTEGER: -0x1FFFFFFFFFFFFF\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectDefinePropertyModule = require('../internals/object-define-property');\nvar regExpFlags = require('../internals/regexp-flags');\nvar UNSUPPORTED_Y = require('../internals/regexp-sticky-helpers').UNSUPPORTED_Y;\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (DESCRIPTORS && (/./g.flags != 'g' || UNSUPPORTED_Y)) {\n objectDefinePropertyModule.f(RegExp.prototype, 'flags', {\n configurable: true,\n get: regExpFlags\n });\n}\n","var $ = require('../internals/export');\nvar isInteger = require('../internals/is-integer');\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n isInteger: isInteger\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint32', function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int8', function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8ClampedArray` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int16', function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint16', function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int32', function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Float32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float32', function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Float64Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float64', function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.link` method\n// https://tc39.es/ecma262/#sec-string.prototype.link\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {\n link: function link(url) {\n return createHTML(this, 'a', 'href', url);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trimStart = require('../internals/string-trim').start;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\nvar FORCED = forcedStringTrimMethod('trimStart');\n\nvar trimStart = FORCED ? function trimStart() {\n return $trimStart(this);\n} : ''.trimStart;\n\n// `String.prototype.{ trimStart, trimLeft }` methods\n// https://tc39.es/ecma262/#sec-string.prototype.trimstart\n// https://tc39.es/ecma262/#String.prototype.trimleft\n$({ target: 'String', proto: true, forced: FORCED }, {\n trimStart: trimStart,\n trimLeft: trimStart\n});\n","var $ = require('../internals/export');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\n\n// `DataView` constructor\n// https://tc39.es/ecma262/#sec-dataview-constructor\n$({ global: true, forced: !NATIVE_ARRAY_BUFFER }, {\n DataView: ArrayBufferModule.DataView\n});\n","var $ = require('../internals/export');\nvar lastIndexOf = require('../internals/array-last-index-of');\n\n// `Array.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\n$({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, {\n lastIndexOf: lastIndexOf\n});\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Much of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// Many optimizations have been made, so the bundle size is ultimately smaller but performance is similar.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var u = ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([c], { type: 'text/javascript' })));\n var w = new Worker(u);\n w.onerror = function (e) { return cb(e.error, null); };\n w.onmessage = function (e) { return cb(null, e.data); };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i)\n co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) >> 0;\n return ((d[o] | (d[o + 1] << 8)) >>> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) >> 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >>> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p / 8) >> 0) + (p & 7 && 1); };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n // source length\n var sl = dat.length;\n // have to estimate size\n var noBuf = !buf || st;\n // no state\n var noSt = !st || st.i;\n if (!st)\n st = {};\n // Assumes roughly 33% compression ratio average\n if (!buf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n st.f = final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n // ensure size\n if (noBuf)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n if (!noSt && pos + tl * (clb + 7) > tbts)\n break;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >>> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n throw 'invalid block type';\n if (pos > tbts)\n throw 'unexpected EOF';\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17;\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var mxa = lbt + dbt + 18;\n while (noSt || pos + mxa < tbts) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts)\n throw 'unexpected EOF';\n if (!c)\n throw 'invalid length/literal';\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw 'invalid distance';\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n }\n if (pos > tbts)\n throw 'unexpected EOF';\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = pos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) >> 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) >> 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [new u8(0), 0];\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = (syms[i] >>> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n // end\n var e = i + 65535;\n if (e < s) {\n // write full block\n pos = wfblk(w, pos, dat.subarray(i, e));\n }\n else {\n // write final block\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n }\n else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new u32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx bitpos\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768\n var imod = i & 32767;\n // previous index with this value\n var pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = (i - dif + j + 32768) & 32767;\n var pti = prev[ti];\n var cd = (ti - pti + 32768) & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += (imod - pimod + 32768) & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one Uint32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n // this is the easiest way to avoid needing to maintain state\n if (!lst)\n pos = wfblk(w, pos, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new u32(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && 0xEDB88320) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = 0xFFFFFFFF;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return c ^ 0xFFFFFFFF; }\n };\n};\n// Alder32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 5552, l);\n for (; i < e; ++i)\n n += d[i], m += n;\n n %= 65521, m %= 65521;\n }\n a = n, b = m;\n },\n d: function () { return ((a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8)) + ((a & 255) << 23) * 2; }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/ /g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return [fnStr, td];\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k] instanceof u8 || v[k] instanceof u16 || v[k] instanceof u32)\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n var _a;\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n _a = wcln(fns[i], fnStr, td_1), fnStr = _a[0], td_1 = _a[1];\n ch[id] = wcln(fns[m], fnStr, td_1);\n }\n var td = mrg({}, ch[id][1]);\n return wk(ch[id][0] + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, u32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, hMap, max, bits, bits16, shft, slc, inflt, inflateSync, pbf, gu8]; };\nvar bDflt = function () { return [u8, u16, u32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zlv]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get u8\nvar gu8 = function (o) { return o && o.size && new u8(o.size); };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n if (!opts.consume)\n dat = new u8(dat);\n w.postMessage([dat, opts], [dat.buffer]);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.push = function (d, f) {\n if (t)\n throw 'stream finished';\n if (!strm.ondata)\n throw 'no stream handler';\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16)) + (d[b + 3] << 23) * 2; };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n throw 'invalid gzip data';\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += d[10] | (d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) + (2 * (d[l - 1] << 23));\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + ((o.filename && (o.filename.length + 1)) || 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n throw 'invalid zlib data';\n if (d[1] & 32)\n throw 'invalid zlib data: preset dictionaries not supported';\n};\nfunction AsyncCmpStrm(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n// zlib footer: -4 to -0 is Adler32\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, !f), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n this.d = final;\n this.p(chunk, final || false);\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n return dopt(data, opts, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n /**\n * Creates an inflation stream\n * @param cb The callback to call whenever data is inflated\n */\n function Inflate(cb) {\n this.s = {};\n this.p = new u8(0);\n this.ondata = cb;\n }\n Inflate.prototype.e = function (c) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n var l = this.p.length;\n var n = new u8(l + c.length);\n n.set(this.p), n.set(c, l), this.p = n;\n };\n Inflate.prototype.c = function (final) {\n this.d = this.s.i = final || false;\n var bts = this.s.b;\n var dt = inflt(this.p, this.o, this.s);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) >> 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous inflation stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncInflate(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, 0, function () {\n var strm = new Inflate();\n onmessage = astrm(strm);\n }, 7);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gu8(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, out) {\n return inflt(data, out);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n this.c.p(c);\n this.l += c.length;\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, !f);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n /**\n * Creates a GUNZIP stream\n * @param cb The callback to call whenever data is inflated\n */\n function Gunzip(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n var s = gzs(this.p);\n if (s >= this.p.length && !final)\n return;\n this.p = this.p.subarray(s), this.v = 0;\n }\n if (final) {\n if (this.p.length < 8)\n throw 'invalid gzip stream';\n this.p = this.p.subarray(0, -8);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous GUNZIP stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncGunzip(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, 0, function () {\n var strm = new Gunzip();\n onmessage = astrm(strm);\n }, 9);\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, out) {\n return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n this.c.p(c);\n var raw = dopt(c, this.o, this.v && 2, f && 4, !f);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n /**\n * Creates a Zlib decompression stream\n * @param cb The callback to call whenever data is inflated\n */\n function Unzlib(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 2 && !final)\n return;\n this.p = this.p.subarray(2), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n throw 'invalid zlib stream';\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous Zlib decompression stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncUnzlib(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, 0, function () {\n var strm = new Unzlib();\n onmessage = astrm(strm);\n }, 11);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gu8(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n /**\n * Creates a decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function Decompress(cb) {\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no stream handler';\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n var _this_1 = this;\n var cb = function () { _this_1.ondata.apply(_this_1, arguments); };\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(cb)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(cb)\n : new this.Z(cb);\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function AsyncDecompress(cb) {\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, out) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, out)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, out)\n : unzlibSync(data, out);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k;\n if (val instanceof u8)\n t[n] = [val, o];\n else if (Array.isArray(val))\n t[n] = [val[0], mrg(o, val[1])];\n else\n fltn(val, n + '/', t, o);\n }\n};\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n var l = str.length;\n if (!latin1 && typeof TextEncoder != 'undefined')\n return new TextEncoder().encode(str);\n var ar = new u8(str.length + (str.length >>> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >>> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >>> 18)), w(128 | ((c >>> 12) & 63)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >>> 12)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n var r = '';\n if (!latin1 && typeof TextDecoder != 'undefined')\n return new TextDecoder().decode(dat);\n for (var i = 0; i < dat.length;) {\n var c = dat[i++];\n if (c < 128 || latin1)\n r += String.fromCharCode(c);\n else if (c < 224)\n r += String.fromCharCode((c & 31) << 6 | (dat[i++] & 63));\n else if (c < 240)\n r += String.fromCharCode((c & 15) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63));\n else\n c = ((c & 15) << 18 | (dat[i++] & 63) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n return r;\n}\n;\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;\n var _a = z ? z64e(d, es) : [b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b4(d, b + 12), b4(d, b + 4), b4(d, b + 20)];\n};\n// write zip header\nvar wzh = function (d, b, c, cmp, su, fn, u, o, ce, t) {\n var fl = fn.length, l = cmp.length;\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b] = 20, b += 2;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (t == 8 && (o.level == 1 ? 6 : o.level < 6 ? 4 : o.level == 9 ? 2 : 0)), d[b++] = u && 8;\n d[b] = t, b += 2;\n var dt = new Date(o.mtime || Date.now()), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n throw 'date not in range 1980-2099';\n wbytes(d, b, ((y << 24) * 2) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1));\n b += 4;\n wbytes(d, b, c);\n wbytes(d, b + 4, l);\n wbytes(d, b + 8, su);\n wbytes(d, b + 12, fl), b += 16; // skip extra field, comment\n if (ce != null)\n wbytes(d, b += 10, ce), b += 4;\n d.set(fn, b);\n b += fl;\n if (ce == null)\n d.set(cmp, b);\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n wzh(out, tot, f.c, f.d, f.m, f.n, f.u, f.p, null, f.t);\n wzh(out, o, f.c, f.d, f.m, f.n, f.u, f.p, tot, f.t), o += 46 + f.n.length, tot += 30 + f.n.length + f.d.length;\n }\n catch (e) {\n return cb(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cb(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), m = file.length;\n c.p(file);\n var n = strToU8(fn), s = n.length;\n var t = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n var l = d.length;\n files[i] = {\n t: t,\n d: d,\n m: m,\n c: c.d(),\n u: fn.length != l,\n n: n,\n p: p\n };\n o += 30 + s + l;\n tot += 76 + 2 * s + l;\n if (!--lft)\n cbf();\n }\n };\n if (n.length > 65535)\n cbl('filename too long', null);\n if (!t)\n cbl(null, file);\n else if (m < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var t = p.level == 0 ? 0 : 8;\n var n = strToU8(fn), s = n.length;\n if (n.length > 65535)\n throw 'filename too long';\n var d = t ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push({\n t: t,\n d: d,\n m: file.length,\n c: c.d(),\n u: fn.length != s,\n n: n,\n o: o,\n p: p\n });\n o += 30 + s + l;\n tot += 76 + 2 * s + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f.c, f.d, f.m, f.n, f.u, f.p, null, f.t);\n wzh(out, o, f.c, f.d, f.m, f.n, f.u, f.p, f.o, f.t), o += 46 + f.n.length;\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Asynchronously decompresses a ZIP archive\n * @param data The raw compressed ZIP file\n * @param cb The callback to call with the decompressed files\n * @returns A function that can be used to immediately terminate the unzipping\n */\nexport function unzip(data, cb) {\n if (typeof cb != 'function')\n throw 'no callback';\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cb('invalid zip file', null);\n return;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (!lft)\n cb(null, {});\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50)\n throw 'invalid zip file';\n c = lft = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n var _loop_2 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n files[fn] = d;\n if (!--lft)\n cb(null, files);\n }\n };\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n if (sc < 320000) {\n try {\n cbl(null, inflateSync(infl, new u8(su)));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl('unknown compression type ' + c_1, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_2(i);\n }\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @returns The decompressed files\n */\nexport function unzipSync(data) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n throw 'invalid zip file';\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50)\n throw 'invalid zip file';\n c = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su));\n else\n throw 'unknown compression type ' + c_2;\n }\n return files;\n}\n","/** @license\n *\n * jsPDF - PDF Document creation from JavaScript\n * Version 2.3.0 Built on 2021-01-15T15:15:16.557Z\n * CommitID 00000000\n *\n * Copyright (c) 2010-2020 James Hall <james@parall.ax>, https://github.com/MrRio/jsPDF\n * 2015-2020 yWorks GmbH, http://www.yworks.com\n * 2015-2020 Lukas Holländer <lukas.hollaender@yworks.com>, https://github.com/HackbrettXXX\n * 2016-2018 Aras Abbasi <aras.abbasi@gmail.com>\n * 2010 Aaron Spike, https://github.com/acspike\n * 2012 Willow Systems Corporation, willow-systems.com\n * 2012 Pablo Hess, https://github.com/pablohess\n * 2012 Florian Jenett, https://github.com/fjenett\n * 2013 Warren Weckesser, https://github.com/warrenweckesser\n * 2013 Youssef Beddad, https://github.com/lifof\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2013 Stefan Slonevskiy, https://github.com/stefslon\n * 2013 Jeremy Morel, https://github.com/jmorel\n * 2013 Christoph Hartmann, https://github.com/chris-rock\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Makes, https://github.com/dollaruw\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 Steven Spungin, https://github.com/Flamenco\n * 2014 Kenneth Glassey, https://github.com/Gavvers\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * Contributor(s):\n * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango,\n * kim3er, mfo, alnorth, Flamenco\n */\n\nimport{zlibSync as t,unzlibSync as e}from\"fflate\";var r=function(){return\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this}();function n(){r.console&&\"function\"==typeof r.console.log&&r.console.log.apply(r.console,arguments)}var i={log:n,warn:function(t){r.console&&(\"function\"==typeof r.console.warn?r.console.warn.apply(r.console,arguments):n.call(null,arguments))},error:function(t){r.console&&(\"function\"==typeof r.console.error?r.console.error.apply(r.console,arguments):n(t))}};\n/**\n * @license\n * FileSaver.js\n * A saveAs() FileSaver implementation.\n *\n * By Eli Grey, http://eligrey.com\n *\n * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n * source : http://purl.eligrey.com/github/FileSaver.js\n */function a(t,e,r){var n=new XMLHttpRequest;n.open(\"GET\",t),n.responseType=\"blob\",n.onload=function(){l(n.response,e,r)},n.onerror=function(){i.error(\"could not download file\")},n.send()}function o(t){var e=new XMLHttpRequest;e.open(\"HEAD\",t,!1);try{e.send()}catch(t){}return e.status>=200&&e.status<=299}function s(t){try{t.dispatchEvent(new MouseEvent(\"click\"))}catch(r){var e=document.createEvent(\"MouseEvents\");e.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(e)}}var u,c,l=r.saveAs||(\"object\"!=typeof window||window!==r?function(){}:\"download\"in HTMLAnchorElement.prototype?function(t,e,n){var i=r.URL||r.webkitURL,u=document.createElement(\"a\");e=e||t.name||\"download\",u.download=e,u.rel=\"noopener\",\"string\"==typeof t?(u.href=t,u.origin!==location.origin?o(u.href)?a(t,e,n):s(u,u.target=\"_blank\"):s(u)):(u.href=i.createObjectURL(t),setTimeout((function(){i.revokeObjectURL(u.href)}),4e4),setTimeout((function(){s(u)}),0))}:\"msSaveOrOpenBlob\"in navigator?function(t,e,r){if(e=e||t.name||\"download\",\"string\"==typeof t)if(o(t))a(t,e,r);else{var n=document.createElement(\"a\");n.href=t,n.target=\"_blank\",setTimeout((function(){s(n)}))}else navigator.msSaveOrOpenBlob(function(t,e){return void 0===e?e={autoBom:!1}:\"object\"!=typeof e&&(i.warn(\"Deprecated: Expected third argument to be a object\"),e={autoBom:!e}),e.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(t.type)?new Blob([String.fromCharCode(65279),t],{type:t.type}):t}(t,r),e)}:function(t,e,n,i){if((i=i||open(\"\",\"_blank\"))&&(i.document.title=i.document.body.innerText=\"downloading...\"),\"string\"==typeof t)return a(t,e,n);var o=\"application/octet-stream\"===t.type,s=/constructor/i.test(r.HTMLElement)||r.safari,u=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((u||o&&s)&&\"object\"==typeof FileReader){var c=new FileReader;c.onloadend=function(){var t=c.result;t=u?t:t.replace(/^data:[^;]*;/,\"data:attachment/file;\"),i?i.location.href=t:location=t,i=null},c.readAsDataURL(t)}else{var l=r.URL||r.webkitURL,h=l.createObjectURL(t);i?i.location=h:location.href=h,i=null,setTimeout((function(){l.revokeObjectURL(h)}),4e4)}});\n/**\n * A class to parse color values\n * @author Stoyan Stefanov <sstoo@gmail.com>\n * {@link http://www.phpied.com/rgb-color-parser-in-javascript/}\n * @license Use it if you like it\n */function h(t){var e;t=t||\"\",this.ok=!1,\"#\"==t.charAt(0)&&(t=t.substr(1,6));t={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dodgerblue:\"1e90ff\",feldspar:\"d19275\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslateblue:\"8470ff\",lightslategray:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",violetred:\"d02090\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"}[t=(t=t.replace(/ /g,\"\")).toLowerCase()]||t;for(var r=[{re:/^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,example:[\"rgb(123, 234, 45)\",\"rgb(255,234,245)\"],process:function(t){return[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]}},{re:/^(\\w{2})(\\w{2})(\\w{2})$/,example:[\"#00ff00\",\"336699\"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^(\\w{1})(\\w{1})(\\w{1})$/,example:[\"#fb0\",\"f0f\"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}],n=0;n<r.length;n++){var i=r[n].re,a=r[n].process,o=i.exec(t);o&&(e=a(o),this.r=e[0],this.g=e[1],this.b=e[2],this.ok=!0)}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return\"rgb(\"+this.r+\", \"+this.g+\", \"+this.b+\")\"},this.toHex=function(){var t=this.r.toString(16),e=this.g.toString(16),r=this.b.toString(16);return 1==t.length&&(t=\"0\"+t),1==e.length&&(e=\"0\"+e),1==r.length&&(r=\"0\"+r),\"#\"+t+e+r}}\n/**\n * @license\n * Joseph Myers does not specify a particular license for his work.\n *\n * Author: Joseph Myers\n * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js\n *\n * Modified by: Owen Leong\n */\nfunction f(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];r=p(r,n,i,a,e[0],7,-680876936),a=p(a,r,n,i,e[1],12,-389564586),i=p(i,a,r,n,e[2],17,606105819),n=p(n,i,a,r,e[3],22,-1044525330),r=p(r,n,i,a,e[4],7,-176418897),a=p(a,r,n,i,e[5],12,1200080426),i=p(i,a,r,n,e[6],17,-1473231341),n=p(n,i,a,r,e[7],22,-45705983),r=p(r,n,i,a,e[8],7,1770035416),a=p(a,r,n,i,e[9],12,-1958414417),i=p(i,a,r,n,e[10],17,-42063),n=p(n,i,a,r,e[11],22,-1990404162),r=p(r,n,i,a,e[12],7,1804603682),a=p(a,r,n,i,e[13],12,-40341101),i=p(i,a,r,n,e[14],17,-1502002290),r=g(r,n=p(n,i,a,r,e[15],22,1236535329),i,a,e[1],5,-165796510),a=g(a,r,n,i,e[6],9,-1069501632),i=g(i,a,r,n,e[11],14,643717713),n=g(n,i,a,r,e[0],20,-373897302),r=g(r,n,i,a,e[5],5,-701558691),a=g(a,r,n,i,e[10],9,38016083),i=g(i,a,r,n,e[15],14,-660478335),n=g(n,i,a,r,e[4],20,-405537848),r=g(r,n,i,a,e[9],5,568446438),a=g(a,r,n,i,e[14],9,-1019803690),i=g(i,a,r,n,e[3],14,-187363961),n=g(n,i,a,r,e[8],20,1163531501),r=g(r,n,i,a,e[13],5,-1444681467),a=g(a,r,n,i,e[2],9,-51403784),i=g(i,a,r,n,e[7],14,1735328473),r=m(r,n=g(n,i,a,r,e[12],20,-1926607734),i,a,e[5],4,-378558),a=m(a,r,n,i,e[8],11,-2022574463),i=m(i,a,r,n,e[11],16,1839030562),n=m(n,i,a,r,e[14],23,-35309556),r=m(r,n,i,a,e[1],4,-1530992060),a=m(a,r,n,i,e[4],11,1272893353),i=m(i,a,r,n,e[7],16,-155497632),n=m(n,i,a,r,e[10],23,-1094730640),r=m(r,n,i,a,e[13],4,681279174),a=m(a,r,n,i,e[0],11,-358537222),i=m(i,a,r,n,e[3],16,-722521979),n=m(n,i,a,r,e[6],23,76029189),r=m(r,n,i,a,e[9],4,-640364487),a=m(a,r,n,i,e[12],11,-421815835),i=m(i,a,r,n,e[15],16,530742520),r=v(r,n=m(n,i,a,r,e[2],23,-995338651),i,a,e[0],6,-198630844),a=v(a,r,n,i,e[7],10,1126891415),i=v(i,a,r,n,e[14],15,-1416354905),n=v(n,i,a,r,e[5],21,-57434055),r=v(r,n,i,a,e[12],6,1700485571),a=v(a,r,n,i,e[3],10,-1894986606),i=v(i,a,r,n,e[10],15,-1051523),n=v(n,i,a,r,e[1],21,-2054922799),r=v(r,n,i,a,e[8],6,1873313359),a=v(a,r,n,i,e[15],10,-30611744),i=v(i,a,r,n,e[6],15,-1560198380),n=v(n,i,a,r,e[13],21,1309151649),r=v(r,n,i,a,e[4],6,-145523070),a=v(a,r,n,i,e[11],10,-1120210379),i=v(i,a,r,n,e[2],15,718787259),n=v(n,i,a,r,e[9],21,-343485551),t[0]=x(r,t[0]),t[1]=x(n,t[1]),t[2]=x(i,t[2]),t[3]=x(a,t[3])}function d(t,e,r,n,i,a){return e=x(x(e,t),x(n,a)),x(e<<i|e>>>32-i,r)}function p(t,e,r,n,i,a,o){return d(e&r|~e&n,t,e,i,a,o)}function g(t,e,r,n,i,a,o){return d(e&n|r&~n,t,e,i,a,o)}function m(t,e,r,n,i,a,o){return d(e^r^n,t,e,i,a,o)}function v(t,e,r,n,i,a,o){return d(r^(e|~n),t,e,i,a,o)}function b(t){var e,r=t.length,n=[1732584193,-271733879,-1732584194,271733878];for(e=64;e<=t.length;e+=64)f(n,y(t.substring(e-64,e)));t=t.substring(e-64);var i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(e=0;e<t.length;e++)i[e>>2]|=t.charCodeAt(e)<<(e%4<<3);if(i[e>>2]|=128<<(e%4<<3),e>55)for(f(n,i),e=0;e<16;e++)i[e]=0;return i[14]=8*r,f(n,i),n}function y(t){var e,r=[];for(e=0;e<64;e+=4)r[e>>2]=t.charCodeAt(e)+(t.charCodeAt(e+1)<<8)+(t.charCodeAt(e+2)<<16)+(t.charCodeAt(e+3)<<24);return r}u=r.atob.bind(r),c=r.btoa.bind(r);var w=\"0123456789abcdef\".split(\"\");function N(t){for(var e=\"\",r=0;r<4;r++)e+=w[t>>8*r+4&15]+w[t>>8*r&15];return e}function L(t){return String.fromCharCode((255&t)>>0,(65280&t)>>8,(16711680&t)>>16,(4278190080&t)>>24)}function A(t){return b(t).map(L).join(\"\")}function x(t,e){return t+e&4294967295}if(\"5d41402abc4b2a76b9719d911017c592\"!=function(t){for(var e=0;e<t.length;e++)t[e]=N(t[e]);return t.join(\"\")}(b(\"hello\"))){function x(t,e){var r=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(r>>16)<<16|65535&r}}\n/**\n * @license\n * FPDF is released under a permissive license: there is no usage restriction.\n * You may embed it freely in your application (commercial or not), with or\n * without modifications.\n *\n * Reference: http://www.fpdf.org/en/script/script37.php\n */function S(t,e){var r,n,i,a;if(t!==r){for(var o=(i=t,a=1+(256/t.length>>0),new Array(a+1).join(i)),s=[],u=0;u<256;u++)s[u]=u;var c=0;for(u=0;u<256;u++){var l=s[u];c=(c+l+o.charCodeAt(u))%256,s[u]=s[c],s[c]=l}r=t,n=s}else s=n;var h=e.length,f=0,d=0,p=\"\";for(u=0;u<h;u++)d=(d+(l=s[f=(f+1)%256]))%256,s[f]=s[d],s[d]=l,o=s[(s[f]+s[d])%256],p+=String.fromCharCode(e.charCodeAt(u)^o);return p}\n/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n * Author: Owen Leong (@owenl131)\n * Date: 15 Oct 2020\n * References:\n * https://www.cs.cmu.edu/~dst/Adobe/Gallery/anon21jul01-pdf-encryption.txt\n * https://github.com/foliojs/pdfkit/blob/master/lib/security.js\n * http://www.fpdf.org/en/script/script37.php\n */var _={print:4,modify:8,copy:16,\"annot-forms\":32};function P(t,e,r,n){this.v=1,this.r=2;let i=192;t.forEach((function(t){if(void 0!==_.perm)throw new Error(\"Invalid permission: \"+t);i+=_[t]})),this.padding=\"(¿N^NuŠAd\\0NVÿú\u0001\\b..\\0¶Ðh>€/\\f©þdSiz\";let a=(e+this.padding).substr(0,32),o=(r+this.padding).substr(0,32);this.O=this.processOwnerPassword(a,o),this.P=-(1+(255^i)),this.encryptionKey=A(a+this.O+this.lsbFirstWord(this.P)+this.hexToBytes(n)).substr(0,5),this.U=S(this.encryptionKey,this.padding)}function k(t){if(\"object\"!=typeof t)throw new Error(\"Invalid Context passed to initialize PubSub (jsPDF-module)\");var e={};this.subscribe=function(t,r,n){if(n=n||!1,\"string\"!=typeof t||\"function\"!=typeof r||\"boolean\"!=typeof n)throw new Error(\"Invalid arguments passed to PubSub.subscribe (jsPDF-module)\");e.hasOwnProperty(t)||(e[t]={});var i=Math.random().toString(35);return e[t][i]=[r,!!n],i},this.unsubscribe=function(t){for(var r in e)if(e[r][t])return delete e[r][t],0===Object.keys(e[r]).length&&delete e[r],!0;return!1},this.publish=function(n){if(e.hasOwnProperty(n)){var a=Array.prototype.slice.call(arguments,1),o=[];for(var s in e[n]){var u=e[n][s];try{u[0].apply(t,a)}catch(t){r.console&&i.error(\"jsPDF PubSub Error\",t.message,t)}u[1]&&o.push(s)}o.length&&o.forEach(this.unsubscribe)}},this.getTopics=function(){return e}}function I(t){if(!(this instanceof I))return new I(t);var e=\"opacity,stroke-opacity\".split(\",\");for(var r in t)t.hasOwnProperty(r)&&e.indexOf(r)>=0&&(this[r]=t[r]);this.id=\"\",this.objectNumber=-1}function F(t,e){this.gState=t,this.matrix=e,this.id=\"\",this.objectNumber=-1}function C(t,e,r,n,i){if(!(this instanceof C))return new C(t,e,r,n,i);this.type=\"axial\"===t?2:3,this.coords=e,this.colors=r,F.call(this,n,i)}function j(t,e,r,n,i){if(!(this instanceof j))return new j(t,e,r,n,i);this.boundingBox=t,this.xStep=e,this.yStep=r,this.stream=\"\",this.cloneIndex=0,F.call(this,n,i)}function O(t){var e,n=\"string\"==typeof arguments[0]?arguments[0]:\"p\",a=arguments[1],o=arguments[2],s=arguments[3],u=[],f=1,d=16,p=\"S\",g=null;\"object\"==typeof(t=t||{})&&(n=t.orientation,a=t.unit||a,o=t.format||o,s=t.compress||t.compressPdf||s,null!==(g=t.encryption||null)&&(g.userPassword=g.userPassword||\"\",g.ownerPassword=g.ownerPassword||\"\",g.userPermissions=g.userPermissions||[]),f=\"number\"==typeof t.userUnit?Math.abs(t.userUnit):1,void 0!==t.precision&&(e=t.precision),void 0!==t.floatPrecision&&(d=t.floatPrecision),p=t.defaultPathOperation||\"S\"),u=t.filters||(!0===s?[\"FlateEncode\"]:u),a=a||\"mm\",n=(\"\"+(n||\"P\")).toLowerCase();var m=t.putOnlyUsedFonts||!1,v={},b={internal:{},__private__:{}};b.__private__.PubSub=k;var y=\"1.3\",w=b.__private__.getPdfVersion=function(){return y};b.__private__.setPdfVersion=function(t){y=t};var N={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};b.__private__.getPageFormats=function(){return N};var L=b.__private__.getPageFormat=function(t){return N[t]};o=o||\"a4\";var A={COMPAT:\"compat\",ADVANCED:\"advanced\"},x=A.COMPAT;function S(){this.saveGraphicsState(),ct(new Ht(xt,0,0,-xt,0,Er()*xt).toString()+\" cm\"),this.setFontSize(this.getFontSize()/xt),p=\"n\",x=A.ADVANCED}function _(){this.restoreGraphicsState(),p=\"S\",x=A.COMPAT}var F=function(t,e){if(\"bold\"==t&&\"normal\"==e||\"bold\"==t&&400==e||\"normal\"==t&&\"italic\"==e||\"bold\"==t&&\"italic\"==e)throw new Error(\"Invalid Combination of fontweight and fontstyle\");return e&&t!==e&&(t=400==e?\"italic\"==t?\"italic\":\"normal\":700==e&&\"italic\"!==t?\"bold\":t+\"\"+e),t};b.advancedAPI=function(t){var e=x===A.COMPAT;return e&&S.call(this),\"function\"!=typeof t||(t(this),e&&_.call(this)),this},b.compatAPI=function(t){var e=x===A.ADVANCED;return e&&_.call(this),\"function\"!=typeof t||(t(this),e&&S.call(this)),this},b.isAdvancedAPI=function(){return x===A.ADVANCED};var B,M=function(t){if(x!==A.ADVANCED)throw new Error(t+\" is only available in 'advanced' API mode. You need to call advancedAPI() first.\")},E=b.roundToPrecision=b.__private__.roundToPrecision=function(t,r){var n=e||r;if(isNaN(t)||isNaN(n))throw new Error(\"Invalid argument passed to jsPDF.roundToPrecision\");return t.toFixed(n).replace(/0+$/,\"\")};B=b.hpf=b.__private__.hpf=\"number\"==typeof d?function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return E(t,d)}:\"smart\"===d?function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return E(t,t>-1&&t<1?16:5)}:function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return E(t,16)};var q=b.f2=b.__private__.f2=function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.f2\");return E(t,2)},R=b.__private__.f3=function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.f3\");return E(t,3)},D=b.scale=b.__private__.scale=function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.scale\");return x===A.COMPAT?t*xt:x===A.ADVANCED?t:void 0},T=function(t){return x===A.COMPAT?Er()-t:x===A.ADVANCED?t:void 0},U=function(t){return D(T(t))};b.__private__.setPrecision=b.setPrecision=function(t){\"number\"==typeof parseInt(t,10)&&(e=parseInt(t,10))};var z,H=\"00000000000000000000000000000000\",V=b.__private__.getFileId=function(){return H},W=b.__private__.setFileId=function(t){return H=void 0!==t&&/^[a-fA-F0-9]{32}$/.test(t)?t.toUpperCase():H.split(\"\").map((function(){return\"ABCDEF0123456789\".charAt(Math.floor(16*Math.random()))})).join(\"\"),null!==g&&(We=new P(g.userPermissions,g.userPassword,g.ownerPassword,H)),H};b.setFileId=function(t){return W(t),this},b.getFileId=function(){return V()};var G=b.__private__.convertDateToPDFDate=function(t){var e=t.getTimezoneOffset(),r=e<0?\"+\":\"-\",n=Math.floor(Math.abs(e/60)),i=Math.abs(e%60),a=[r,Z(n),\"'\",Z(i),\"'\"].join(\"\");return[\"D:\",t.getFullYear(),Z(t.getMonth()+1),Z(t.getDate()),Z(t.getHours()),Z(t.getMinutes()),Z(t.getSeconds()),a].join(\"\")},Y=b.__private__.convertPDFDateToDate=function(t){var e=parseInt(t.substr(2,4),10),r=parseInt(t.substr(6,2),10)-1,n=parseInt(t.substr(8,2),10),i=parseInt(t.substr(10,2),10),a=parseInt(t.substr(12,2),10),o=parseInt(t.substr(14,2),10);return new Date(e,r,n,i,a,o,0)},J=b.__private__.setCreationDate=function(t){var e;if(void 0===t&&(t=new Date),t instanceof Date)e=G(t);else{if(!/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\\+0[0-9]|\\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/.test(t))throw new Error(\"Invalid argument passed to jsPDF.setCreationDate\");e=t}return z=e},X=b.__private__.getCreationDate=function(t){var e=z;return\"jsDate\"===t&&(e=Y(z)),e};b.setCreationDate=function(t){return J(t),this},b.getCreationDate=function(t){return X(t)};var K,Z=b.__private__.padd2=function(t){return(\"0\"+parseInt(t)).slice(-2)},$=b.__private__.padd2Hex=function(t){return(\"00\"+(t=t.toString())).substr(t.length)},Q=0,tt=[],et=[],rt=0,nt=[],it=[],at=!1,ot=et,st=function(){Q=0,rt=0,et=[],tt=[],nt=[],Zt=Jt(),$t=Jt()};b.__private__.setCustomOutputDestination=function(t){at=!0,ot=t};var ut=function(t){at||(ot=t)};b.__private__.resetCustomOutputDestination=function(){at=!1,ot=et};var ct=b.__private__.out=function(t){return t=t.toString(),rt+=t.length+1,ot.push(t),ot},lt=b.__private__.write=function(t){return ct(1===arguments.length?t.toString():Array.prototype.join.call(arguments,\" \"))},ht=b.__private__.getArrayBuffer=function(t){for(var e=t.length,r=new ArrayBuffer(e),n=new Uint8Array(r);e--;)n[e]=t.charCodeAt(e);return r},ft=[[\"Helvetica\",\"helvetica\",\"normal\",\"WinAnsiEncoding\"],[\"Helvetica-Bold\",\"helvetica\",\"bold\",\"WinAnsiEncoding\"],[\"Helvetica-Oblique\",\"helvetica\",\"italic\",\"WinAnsiEncoding\"],[\"Helvetica-BoldOblique\",\"helvetica\",\"bolditalic\",\"WinAnsiEncoding\"],[\"Courier\",\"courier\",\"normal\",\"WinAnsiEncoding\"],[\"Courier-Bold\",\"courier\",\"bold\",\"WinAnsiEncoding\"],[\"Courier-Oblique\",\"courier\",\"italic\",\"WinAnsiEncoding\"],[\"Courier-BoldOblique\",\"courier\",\"bolditalic\",\"WinAnsiEncoding\"],[\"Times-Roman\",\"times\",\"normal\",\"WinAnsiEncoding\"],[\"Times-Bold\",\"times\",\"bold\",\"WinAnsiEncoding\"],[\"Times-Italic\",\"times\",\"italic\",\"WinAnsiEncoding\"],[\"Times-BoldItalic\",\"times\",\"bolditalic\",\"WinAnsiEncoding\"],[\"ZapfDingbats\",\"zapfdingbats\",\"normal\",null],[\"Symbol\",\"symbol\",\"normal\",null]];b.__private__.getStandardFonts=function(){return ft};var dt=t.fontSize||16;b.__private__.setFontSize=b.setFontSize=function(t){return dt=x===A.ADVANCED?t/xt:t,this};var pt,gt=b.__private__.getFontSize=b.getFontSize=function(){return x===A.COMPAT?dt:dt*xt},mt=t.R2L||!1;b.__private__.setR2L=b.setR2L=function(t){return mt=t,this},b.__private__.getR2L=b.getR2L=function(){return mt};var vt,bt=b.__private__.setZoomMode=function(t){var e=[void 0,null,\"fullwidth\",\"fullheight\",\"fullpage\",\"original\"];if(/^\\d*\\.?\\d*%$/.test(t))pt=t;else if(isNaN(t)){if(-1===e.indexOf(t))throw new Error('zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. \"'+t+'\" is not recognized.');pt=t}else pt=parseInt(t,10)};b.__private__.getZoomMode=function(){return pt};var yt,wt=b.__private__.setPageMode=function(t){if(-1==[void 0,null,\"UseNone\",\"UseOutlines\",\"UseThumbs\",\"FullScreen\"].indexOf(t))throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. \"'+t+'\" is not recognized.');vt=t};b.__private__.getPageMode=function(){return vt};var Nt=b.__private__.setLayoutMode=function(t){if(-1==[void 0,null,\"continuous\",\"single\",\"twoleft\",\"tworight\",\"two\"].indexOf(t))throw new Error('Layout mode must be one of continuous, single, twoleft, tworight. \"'+t+'\" is not recognized.');yt=t};b.__private__.getLayoutMode=function(){return yt},b.__private__.setDisplayMode=b.setDisplayMode=function(t,e,r){return bt(t),Nt(e),wt(r),this};var Lt={title:\"\",subject:\"\",author:\"\",keywords:\"\",creator:\"\"};b.__private__.getDocumentProperty=function(t){if(-1===Object.keys(Lt).indexOf(t))throw new Error(\"Invalid argument passed to jsPDF.getDocumentProperty\");return Lt[t]},b.__private__.getDocumentProperties=function(){return Lt},b.__private__.setDocumentProperties=b.setProperties=b.setDocumentProperties=function(t){for(var e in Lt)Lt.hasOwnProperty(e)&&t[e]&&(Lt[e]=t[e]);return this},b.__private__.setDocumentProperty=function(t,e){if(-1===Object.keys(Lt).indexOf(t))throw new Error(\"Invalid arguments passed to jsPDF.setDocumentProperty\");return Lt[t]=e};var At,xt,St,_t,Pt,kt={},It={},Ft=[],Ct={},jt={},Ot={},Bt={},Mt=null,Et=0,qt=[],Rt=new k(b),Dt=t.hotfixes||[],Tt={},Ut={},zt=[],Ht=function(t,e,r,n,i,a){if(!(this instanceof Ht))return new Ht(t,e,r,n,i,a);isNaN(t)&&(t=1),isNaN(e)&&(e=0),isNaN(r)&&(r=0),isNaN(n)&&(n=1),isNaN(i)&&(i=0),isNaN(a)&&(a=0),this._matrix=[t,e,r,n,i,a]};Object.defineProperty(Ht.prototype,\"sx\",{get:function(){return this._matrix[0]},set:function(t){this._matrix[0]=t}}),Object.defineProperty(Ht.prototype,\"shy\",{get:function(){return this._matrix[1]},set:function(t){this._matrix[1]=t}}),Object.defineProperty(Ht.prototype,\"shx\",{get:function(){return this._matrix[2]},set:function(t){this._matrix[2]=t}}),Object.defineProperty(Ht.prototype,\"sy\",{get:function(){return this._matrix[3]},set:function(t){this._matrix[3]=t}}),Object.defineProperty(Ht.prototype,\"tx\",{get:function(){return this._matrix[4]},set:function(t){this._matrix[4]=t}}),Object.defineProperty(Ht.prototype,\"ty\",{get:function(){return this._matrix[5]},set:function(t){this._matrix[5]=t}}),Object.defineProperty(Ht.prototype,\"a\",{get:function(){return this._matrix[0]},set:function(t){this._matrix[0]=t}}),Object.defineProperty(Ht.prototype,\"b\",{get:function(){return this._matrix[1]},set:function(t){this._matrix[1]=t}}),Object.defineProperty(Ht.prototype,\"c\",{get:function(){return this._matrix[2]},set:function(t){this._matrix[2]=t}}),Object.defineProperty(Ht.prototype,\"d\",{get:function(){return this._matrix[3]},set:function(t){this._matrix[3]=t}}),Object.defineProperty(Ht.prototype,\"e\",{get:function(){return this._matrix[4]},set:function(t){this._matrix[4]=t}}),Object.defineProperty(Ht.prototype,\"f\",{get:function(){return this._matrix[5]},set:function(t){this._matrix[5]=t}}),Object.defineProperty(Ht.prototype,\"rotation\",{get:function(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(Ht.prototype,\"scaleX\",{get:function(){return this.decompose().scale.sx}}),Object.defineProperty(Ht.prototype,\"scaleY\",{get:function(){return this.decompose().scale.sy}}),Object.defineProperty(Ht.prototype,\"isIdentity\",{get:function(){return 1===this.sx&&(0===this.shy&&(0===this.shx&&(1===this.sy&&(0===this.tx&&0===this.ty))))}}),Ht.prototype.join=function(t){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(B).join(t)},Ht.prototype.multiply=function(t){var e=t.sx*this.sx+t.shy*this.shx,r=t.sx*this.shy+t.shy*this.sy,n=t.shx*this.sx+t.sy*this.shx,i=t.shx*this.shy+t.sy*this.sy,a=t.tx*this.sx+t.ty*this.shx+this.tx,o=t.tx*this.shy+t.ty*this.sy+this.ty;return new Ht(e,r,n,i,a,o)},Ht.prototype.decompose=function(){var t=this.sx,e=this.shy,r=this.shx,n=this.sy,i=this.tx,a=this.ty,o=Math.sqrt(t*t+e*e),s=(t/=o)*r+(e/=o)*n;r-=t*s,n-=e*s;var u=Math.sqrt(r*r+n*n);return s/=u,t*(n/=u)<e*(r/=u)&&(t=-t,e=-e,s=-s,o=-o),{scale:new Ht(o,0,0,u,0,0),translate:new Ht(1,0,0,1,i,a),rotate:new Ht(t,e,-e,t,0,0),skew:new Ht(1,0,s,1,0,0)}},Ht.prototype.toString=function(t){return this.join(\" \")},Ht.prototype.inversed=function(){var t=this.sx,e=this.shy,r=this.shx,n=this.sy,i=this.tx,a=this.ty,o=1/(t*n-e*r),s=n*o,u=-e*o,c=-r*o,l=t*o;return new Ht(s,u,c,l,-s*i-c*a,-u*i-l*a)},Ht.prototype.applyToPoint=function(t){var e=t.x*this.sx+t.y*this.shx+this.tx,r=t.x*this.shy+t.y*this.sy+this.ty;return new kr(e,r)},Ht.prototype.applyToRectangle=function(t){var e=this.applyToPoint(t),r=this.applyToPoint(new kr(t.x+t.w,t.y+t.h));return new Ir(e.x,e.y,r.x-e.x,r.y-e.y)},Ht.prototype.clone=function(){var t=this.sx,e=this.shy,r=this.shx,n=this.sy,i=this.tx,a=this.ty;return new Ht(t,e,r,n,i,a)},b.Matrix=Ht;var Vt=b.matrixMult=function(t,e){return e.multiply(t)},Wt=new Ht(1,0,0,1,0,0);b.unitMatrix=b.identityMatrix=Wt;var Gt=function(t,e){if(!jt[t]){var r=(e instanceof C?\"Sh\":\"P\")+(Object.keys(Ct).length+1).toString(10);e.id=r,jt[t]=r,Ct[r]=e,Rt.publish(\"addPattern\",e)}};b.ShadingPattern=C,b.TilingPattern=j,b.addShadingPattern=function(t,e){return M(\"addShadingPattern()\"),Gt(t,e),this},b.beginTilingPattern=function(t){M(\"beginTilingPattern()\"),Cr(t.boundingBox[0],t.boundingBox[1],t.boundingBox[2]-t.boundingBox[0],t.boundingBox[3]-t.boundingBox[1],t.matrix)},b.endTilingPattern=function(t,e){M(\"endTilingPattern()\"),e.stream=it[K].join(\"\\n\"),Gt(t,e),Rt.publish(\"endTilingPattern\",e),zt.pop().restore()};var Yt=b.__private__.newObject=function(){var t=Jt();return Xt(t,!0),t},Jt=b.__private__.newObjectDeferred=function(){return Q++,tt[Q]=function(){return rt},Q},Xt=function(t,e){return e=\"boolean\"==typeof e&&e,tt[t]=rt,e&&ct(t+\" 0 obj\"),t},Kt=b.__private__.newAdditionalObject=function(){var t={objId:Jt(),content:\"\"};return nt.push(t),t},Zt=Jt(),$t=Jt(),Qt=b.__private__.decodeColorString=function(t){var e=t.split(\" \");if(2!==e.length||\"g\"!==e[1]&&\"G\"!==e[1]){if(5===e.length&&(\"k\"===e[4]||\"K\"===e[4])){e=[(1-e[0])*(1-e[3]),(1-e[1])*(1-e[3]),(1-e[2])*(1-e[3]),\"r\"]}}else{var r=parseFloat(e[0]);e=[r,r,r,\"r\"]}for(var n=\"#\",i=0;i<3;i++)n+=(\"0\"+Math.floor(255*parseFloat(e[i])).toString(16)).slice(-2);return n},te=b.__private__.encodeColorString=function(t){var e;\"string\"==typeof t&&(t={ch1:t});var r=t.ch1,n=t.ch2,i=t.ch3,a=t.ch4,o=\"draw\"===t.pdfColorType?[\"G\",\"RG\",\"K\"]:[\"g\",\"rg\",\"k\"];if(\"string\"==typeof r&&\"#\"!==r.charAt(0)){var s=new h(r);if(s.ok)r=s.toHex();else if(!/^\\d*\\.?\\d*$/.test(r))throw new Error('Invalid color \"'+r+'\" passed to jsPDF.encodeColorString.')}if(\"string\"==typeof r&&/^#[0-9A-Fa-f]{3}$/.test(r)&&(r=\"#\"+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]),\"string\"==typeof r&&/^#[0-9A-Fa-f]{6}$/.test(r)){var u=parseInt(r.substr(1),16);r=u>>16&255,n=u>>8&255,i=255&u}if(void 0===n||void 0===a&&r===n&&n===i)if(\"string\"==typeof r)e=r+\" \"+o[0];else switch(t.precision){case 2:e=q(r/255)+\" \"+o[0];break;case 3:default:e=R(r/255)+\" \"+o[0]}else if(void 0===a||\"object\"==typeof a){if(a&&!isNaN(a.a)&&0===a.a)return e=[\"1.\",\"1.\",\"1.\",o[1]].join(\" \");if(\"string\"==typeof r)e=[r,n,i,o[1]].join(\" \");else switch(t.precision){case 2:e=[q(r/255),q(n/255),q(i/255),o[1]].join(\" \");break;default:case 3:e=[R(r/255),R(n/255),R(i/255),o[1]].join(\" \")}}else if(\"string\"==typeof r)e=[r,n,i,a,o[2]].join(\" \");else switch(t.precision){case 2:e=[q(r),q(n),q(i),q(a),o[2]].join(\" \");break;case 3:default:e=[R(r),R(n),R(i),R(a),o[2]].join(\" \")}return e},ee=b.__private__.getFilters=function(){return u},re=b.__private__.putStream=function(t){var e=(t=t||{}).data||\"\",r=t.filters||ee(),n=t.alreadyAppliedFilters||[],i=t.addLength1||!1,a=e.length,o=t.objectId,s=function(t){return t};if(null!==g&&void 0===o)throw new Error(\"ObjectId must be passed to putStream for file encryption\");null!==g&&(s=We.encryptor(o,0));var u={};!0===r&&(r=[\"FlateEncode\"]);var c=t.additionalKeyValues||[],l=(u=void 0!==O.API.processDataByFilters?O.API.processDataByFilters(e,r):{data:e,reverseChain:[]}).reverseChain+(Array.isArray(n)?n.join(\" \"):n.toString());if(0!==u.data.length&&(c.push({key:\"Length\",value:u.data.length}),!0===i&&c.push({key:\"Length1\",value:a})),0!=l.length)if(l.split(\"/\").length-1==1)c.push({key:\"Filter\",value:l});else{c.push({key:\"Filter\",value:\"[\"+l+\"]\"});for(var h=0;h<c.length;h+=1)if(\"DecodeParms\"===c[h].key){for(var f=[],d=0;d<u.reverseChain.split(\"/\").length-1;d+=1)f.push(\"null\");f.push(c[h].value),c[h].value=\"[\"+f.join(\" \")+\"]\"}}ct(\"<<\");for(var p=0;p<c.length;p++)ct(\"/\"+c[p].key+\" \"+c[p].value);ct(\">>\"),0!==u.data.length&&(ct(\"stream\"),ct(s(u.data)),ct(\"endstream\"))},ne=b.__private__.putPage=function(t){var e=t.number,r=t.data,n=t.objId,i=t.contentsObjId;Xt(n,!0),ct(\"<</Type /Page\"),ct(\"/Parent \"+t.rootDictionaryObjId+\" 0 R\"),ct(\"/Resources \"+t.resourceDictionaryObjId+\" 0 R\"),ct(\"/MediaBox [\"+parseFloat(B(t.mediaBox.bottomLeftX))+\" \"+parseFloat(B(t.mediaBox.bottomLeftY))+\" \"+B(t.mediaBox.topRightX)+\" \"+B(t.mediaBox.topRightY)+\"]\"),null!==t.cropBox&&ct(\"/CropBox [\"+B(t.cropBox.bottomLeftX)+\" \"+B(t.cropBox.bottomLeftY)+\" \"+B(t.cropBox.topRightX)+\" \"+B(t.cropBox.topRightY)+\"]\"),null!==t.bleedBox&&ct(\"/BleedBox [\"+B(t.bleedBox.bottomLeftX)+\" \"+B(t.bleedBox.bottomLeftY)+\" \"+B(t.bleedBox.topRightX)+\" \"+B(t.bleedBox.topRightY)+\"]\"),null!==t.trimBox&&ct(\"/TrimBox [\"+B(t.trimBox.bottomLeftX)+\" \"+B(t.trimBox.bottomLeftY)+\" \"+B(t.trimBox.topRightX)+\" \"+B(t.trimBox.topRightY)+\"]\"),null!==t.artBox&&ct(\"/ArtBox [\"+B(t.artBox.bottomLeftX)+\" \"+B(t.artBox.bottomLeftY)+\" \"+B(t.artBox.topRightX)+\" \"+B(t.artBox.topRightY)+\"]\"),\"number\"==typeof t.userUnit&&1!==t.userUnit&&ct(\"/UserUnit \"+t.userUnit),Rt.publish(\"putPage\",{objId:n,pageContext:qt[e],pageNumber:e,page:r}),ct(\"/Contents \"+i+\" 0 R\"),ct(\">>\"),ct(\"endobj\");var a=r.join(\"\\n\");return x===A.ADVANCED&&(a+=\"\\nQ\"),Xt(i,!0),re({data:a,filters:ee(),objectId:i}),ct(\"endobj\"),n},ie=b.__private__.putPages=function(){var t,e,r=[];for(t=1;t<=Et;t++)qt[t].objId=Jt(),qt[t].contentsObjId=Jt();for(t=1;t<=Et;t++)r.push(ne({number:t,data:it[t],objId:qt[t].objId,contentsObjId:qt[t].contentsObjId,mediaBox:qt[t].mediaBox,cropBox:qt[t].cropBox,bleedBox:qt[t].bleedBox,trimBox:qt[t].trimBox,artBox:qt[t].artBox,userUnit:qt[t].userUnit,rootDictionaryObjId:Zt,resourceDictionaryObjId:$t}));Xt(Zt,!0),ct(\"<</Type /Pages\");var n=\"/Kids [\";for(e=0;e<Et;e++)n+=r[e]+\" 0 R \";ct(n+\"]\"),ct(\"/Count \"+Et),ct(\">>\"),ct(\"endobj\"),Rt.publish(\"postPutPages\")},ae=function(t){var e=function(t,e){return-1!==t.indexOf(\" \")?\"(\"+Ie(t,e)+\")\":Ie(t,e)};Rt.publish(\"putFont\",{font:t,out:ct,newObject:Yt,putStream:re,pdfEscapeWithNeededParanthesis:e}),!0!==t.isAlreadyPutted&&(t.objectNumber=Yt(),ct(\"<<\"),ct(\"/Type /Font\"),ct(\"/BaseFont /\"+e(t.postScriptName)),ct(\"/Subtype /Type1\"),\"string\"==typeof t.encoding&&ct(\"/Encoding /\"+t.encoding),ct(\"/FirstChar 32\"),ct(\"/LastChar 255\"),ct(\">>\"),ct(\"endobj\"))},oe=function(){for(var t in kt)kt.hasOwnProperty(t)&&(!1===m||!0===m&&v.hasOwnProperty(t))&&ae(kt[t])},se=function(t){t.objectNumber=Yt();var e=[];e.push({key:\"Type\",value:\"/XObject\"}),e.push({key:\"Subtype\",value:\"/Form\"}),e.push({key:\"BBox\",value:\"[\"+[B(t.x),B(t.y),B(t.x+t.width),B(t.y+t.height)].join(\" \")+\"]\"}),e.push({key:\"Matrix\",value:\"[\"+t.matrix.toString()+\"]\"});var r=t.pages[1].join(\"\\n\");re({data:r,additionalKeyValues:e,objectId:t.objectNumber}),ct(\"endobj\")},ue=function(){for(var t in Tt)Tt.hasOwnProperty(t)&&se(Tt[t])},ce=function(t,e){var r,n=[],i=1/(e-1);for(r=0;r<1;r+=i)n.push(r);if(n.push(1),0!=t[0].offset){var a={offset:0,color:t[0].color};t.unshift(a)}if(1!=t[t.length-1].offset){var o={offset:1,color:t[t.length-1].color};t.push(o)}for(var s=\"\",u=0,c=0;c<n.length;c++){for(r=n[c];r>t[u+1].offset;)u++;var l=t[u].offset,h=(r-l)/(t[u+1].offset-l),f=t[u].color,d=t[u+1].color;s+=$(Math.round((1-h)*f[0]+h*d[0]).toString(16))+$(Math.round((1-h)*f[1]+h*d[1]).toString(16))+$(Math.round((1-h)*f[2]+h*d[2]).toString(16))}return s.trim()},le=function(t,e){e||(e=21);var r=Yt(),n=ce(t.colors,e),i=[];i.push({key:\"FunctionType\",value:\"0\"}),i.push({key:\"Domain\",value:\"[0.0 1.0]\"}),i.push({key:\"Size\",value:\"[\"+e+\"]\"}),i.push({key:\"BitsPerSample\",value:\"8\"}),i.push({key:\"Range\",value:\"[0.0 1.0 0.0 1.0 0.0 1.0]\"}),i.push({key:\"Decode\",value:\"[0.0 1.0 0.0 1.0 0.0 1.0]\"}),re({data:n,additionalKeyValues:i,alreadyAppliedFilters:[\"/ASCIIHexDecode\"],objectId:r}),ct(\"endobj\"),t.objectNumber=Yt(),ct(\"<< /ShadingType \"+t.type),ct(\"/ColorSpace /DeviceRGB\");var a=\"/Coords [\"+B(parseFloat(t.coords[0]))+\" \"+B(parseFloat(t.coords[1]))+\" \";2===t.type?a+=B(parseFloat(t.coords[2]))+\" \"+B(parseFloat(t.coords[3])):a+=B(parseFloat(t.coords[2]))+\" \"+B(parseFloat(t.coords[3]))+\" \"+B(parseFloat(t.coords[4]))+\" \"+B(parseFloat(t.coords[5])),ct(a+=\"]\"),t.matrix&&ct(\"/Matrix [\"+t.matrix.toString()+\"]\"),ct(\"/Function \"+r+\" 0 R\"),ct(\"/Extend [true true]\"),ct(\">>\"),ct(\"endobj\")},he=function(t,e){var r=Jt(),n=Yt();e.push({resourcesOid:r,objectOid:n}),t.objectNumber=n;var i=[];i.push({key:\"Type\",value:\"/Pattern\"}),i.push({key:\"PatternType\",value:\"1\"}),i.push({key:\"PaintType\",value:\"1\"}),i.push({key:\"TilingType\",value:\"1\"}),i.push({key:\"BBox\",value:\"[\"+t.boundingBox.map(B).join(\" \")+\"]\"}),i.push({key:\"XStep\",value:B(t.xStep)}),i.push({key:\"YStep\",value:B(t.yStep)}),i.push({key:\"Resources\",value:r+\" 0 R\"}),t.matrix&&i.push({key:\"Matrix\",value:\"[\"+t.matrix.toString()+\"]\"}),re({data:t.stream,additionalKeyValues:i,objectId:t.objectNumber}),ct(\"endobj\")},fe=function(t){var e;for(e in Ct)Ct.hasOwnProperty(e)&&(Ct[e]instanceof C?le(Ct[e]):Ct[e]instanceof j&&he(Ct[e],t))},de=function(t){for(var e in t.objectNumber=Yt(),ct(\"<<\"),t)switch(e){case\"opacity\":ct(\"/ca \"+q(t[e]));break;case\"stroke-opacity\":ct(\"/CA \"+q(t[e]))}ct(\">>\"),ct(\"endobj\")},pe=function(){var t;for(t in Ot)Ot.hasOwnProperty(t)&&de(Ot[t])},ge=function(){for(var t in ct(\"/XObject <<\"),Tt)Tt.hasOwnProperty(t)&&Tt[t].objectNumber>=0&&ct(\"/\"+t+\" \"+Tt[t].objectNumber+\" 0 R\");Rt.publish(\"putXobjectDict\"),ct(\">>\")},me=function(){We.oid=Yt(),ct(\"<<\"),ct(\"/Filter /Standard\"),ct(\"/V \"+We.v),ct(\"/R \"+We.r),ct(\"/U <\"+We.toHexString(We.U)+\">\"),ct(\"/O <\"+We.toHexString(We.O)+\">\"),ct(\"/P \"+We.P),ct(\">>\"),ct(\"endobj\")},ve=function(){for(var t in ct(\"/Font <<\"),kt)kt.hasOwnProperty(t)&&(!1===m||!0===m&&v.hasOwnProperty(t))&&ct(\"/\"+t+\" \"+kt[t].objectNumber+\" 0 R\");ct(\">>\")},be=function(){if(Object.keys(Ct).length>0){for(var t in ct(\"/Shading <<\"),Ct)Ct.hasOwnProperty(t)&&Ct[t]instanceof C&&Ct[t].objectNumber>=0&&ct(\"/\"+t+\" \"+Ct[t].objectNumber+\" 0 R\");Rt.publish(\"putShadingPatternDict\"),ct(\">>\")}},ye=function(t){if(Object.keys(Ct).length>0){for(var e in ct(\"/Pattern <<\"),Ct)Ct.hasOwnProperty(e)&&Ct[e]instanceof b.TilingPattern&&Ct[e].objectNumber>=0&&Ct[e].objectNumber<t&&ct(\"/\"+e+\" \"+Ct[e].objectNumber+\" 0 R\");Rt.publish(\"putTilingPatternDict\"),ct(\">>\")}},we=function(){if(Object.keys(Ot).length>0){var t;for(t in ct(\"/ExtGState <<\"),Ot)Ot.hasOwnProperty(t)&&Ot[t].objectNumber>=0&&ct(\"/\"+t+\" \"+Ot[t].objectNumber+\" 0 R\");Rt.publish(\"putGStateDict\"),ct(\">>\")}},Ne=function(t){Xt(t.resourcesOid,!0),ct(\"<<\"),ct(\"/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\"),ve(),be(),ye(t.objectOid),we(),ge(),ct(\">>\"),ct(\"endobj\")},Le=function(){var t=[];oe(),pe(),ue(),fe(t),Rt.publish(\"putResources\"),t.forEach(Ne),Ne({resourcesOid:$t,objectOid:Number.MAX_SAFE_INTEGER}),Rt.publish(\"postPutResources\")},Ae=function(){Rt.publish(\"putAdditionalObjects\");for(var t=0;t<nt.length;t++){var e=nt[t];Xt(e.objId,!0),ct(e.content),ct(\"endobj\")}Rt.publish(\"postPutAdditionalObjects\")},xe=function(t){It[t.fontName]=It[t.fontName]||{},It[t.fontName][t.fontStyle]=t.id},Se=function(t,e,r,n,i){var a={id:\"F\"+(Object.keys(kt).length+1).toString(10),postScriptName:t,fontName:e,fontStyle:r,encoding:n,isStandardFont:i||!1,metadata:{}};return Rt.publish(\"addFont\",{font:a,instance:this}),kt[a.id]=a,xe(a),a.id},_e=function(t){for(var e=0,r=ft.length;e<r;e++){var n=Se.call(this,t[e][0],t[e][1],t[e][2],ft[e][3],!0);!1===m&&(v[n]=!0);var i=t[e][0].split(\"-\");xe({id:n,fontName:i[0],fontStyle:i[1]||\"\"})}Rt.publish(\"addFonts\",{fonts:kt,dictionary:It})},Pe=function(t){return t.foo=function(){try{return t.apply(this,arguments)}catch(t){var e=t.stack||\"\";~e.indexOf(\" at \")&&(e=e.split(\" at \")[1]);var n=\"Error in function \"+e.split(\"\\n\")[0].split(\"<\")[0]+\": \"+t.message;if(!r.console)throw new Error(n);r.console.error(n,t),r.alert&&alert(n)}},t.foo.bar=t,t.foo},ke=function(t,e){var r,n,i,a,o,s,u,c,l;if(i=(e=e||{}).sourceEncoding||\"Unicode\",o=e.outputEncoding,(e.autoencode||o)&&kt[At].metadata&&kt[At].metadata[i]&&kt[At].metadata[i].encoding&&(a=kt[At].metadata[i].encoding,!o&&kt[At].encoding&&(o=kt[At].encoding),!o&&a.codePages&&(o=a.codePages[0]),\"string\"==typeof o&&(o=a[o]),o)){for(u=!1,s=[],r=0,n=t.length;r<n;r++)(c=o[t.charCodeAt(r)])?s.push(String.fromCharCode(c)):s.push(t[r]),s[r].charCodeAt(0)>>8&&(u=!0);t=s.join(\"\")}for(r=t.length;void 0===u&&0!==r;)t.charCodeAt(r-1)>>8&&(u=!0),r--;if(!u)return t;for(s=e.noBOM?[]:[254,255],r=0,n=t.length;r<n;r++){if((l=(c=t.charCodeAt(r))>>8)>>8)throw new Error(\"Character at position \"+r+\" of string '\"+t+\"' exceeds 16bits. Cannot be encoded into UCS-2 BE\");s.push(l),s.push(c-(l<<8))}return String.fromCharCode.apply(void 0,s)},Ie=b.__private__.pdfEscape=b.pdfEscape=function(t,e){return ke(t,e).replace(/\\\\/g,\"\\\\\\\\\").replace(/\\(/g,\"\\\\(\").replace(/\\)/g,\"\\\\)\")},Fe=b.__private__.beginPage=function(t){it[++Et]=[],qt[Et]={objId:0,contentsObjId:0,userUnit:Number(f),artBox:null,bleedBox:null,cropBox:null,trimBox:null,mediaBox:{bottomLeftX:0,bottomLeftY:0,topRightX:Number(t[0]),topRightY:Number(t[1])}},Oe(Et),ut(it[K])},Ce=function(t,e){var r,a,s;switch(n=e||n,\"string\"==typeof t&&(r=L(t.toLowerCase()),Array.isArray(r)&&(a=r[0],s=r[1])),Array.isArray(t)&&(a=t[0]*xt,s=t[1]*xt),isNaN(a)&&(a=o[0],s=o[1]),(a>14400||s>14400)&&(i.warn(\"A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400\"),a=Math.min(14400,a),s=Math.min(14400,s)),o=[a,s],n.substr(0,1)){case\"l\":s>a&&(o=[s,a]);break;case\"p\":a>s&&(o=[s,a])}Fe(o),hr(lr),ct(yr),0!==Sr&&ct(Sr+\" J\"),0!==_r&&ct(_r+\" j\"),Rt.publish(\"addPage\",{pageNumber:Et})},je=function(t){t>0&&t<=Et&&(it.splice(t,1),qt.splice(t,1),Et--,K>Et&&(K=Et),this.setPage(K))},Oe=function(t){t>0&&t<=Et&&(K=t)},Be=b.__private__.getNumberOfPages=b.getNumberOfPages=function(){return it.length-1},Me=function(t,e,r){var n,a=void 0;return r=r||{},t=void 0!==t?t:kt[At].fontName,e=void 0!==e?e:kt[At].fontStyle,n=t.toLowerCase(),void 0!==It[n]&&void 0!==It[n][e]?a=It[n][e]:void 0!==It[t]&&void 0!==It[t][e]?a=It[t][e]:!1===r.disableWarning&&i.warn(\"Unable to look up font label for font '\"+t+\"', '\"+e+\"'. Refer to getFontList() for available fonts.\"),a||r.noFallback||null==(a=It.times[e])&&(a=It.times.normal),a},Ee=b.__private__.putInfo=function(){var t=Yt(),e=function(t){return t};for(var r in null!==g&&(e=We.encryptor(t,0)),ct(\"<<\"),ct(\"/Producer (\"+Ie(e(\"jsPDF \"+O.version))+\")\"),Lt)Lt.hasOwnProperty(r)&&Lt[r]&&ct(\"/\"+r.substr(0,1).toUpperCase()+r.substr(1)+\" (\"+Ie(e(Lt[r]))+\")\");ct(\"/CreationDate (\"+Ie(e(z))+\")\"),ct(\">>\"),ct(\"endobj\")},qe=b.__private__.putCatalog=function(t){var e=(t=t||{}).rootDictionaryObjId||Zt;switch(Yt(),ct(\"<<\"),ct(\"/Type /Catalog\"),ct(\"/Pages \"+e+\" 0 R\"),pt||(pt=\"fullwidth\"),pt){case\"fullwidth\":ct(\"/OpenAction [3 0 R /FitH null]\");break;case\"fullheight\":ct(\"/OpenAction [3 0 R /FitV null]\");break;case\"fullpage\":ct(\"/OpenAction [3 0 R /Fit]\");break;case\"original\":ct(\"/OpenAction [3 0 R /XYZ null null 1]\");break;default:var r=\"\"+pt;\"%\"===r.substr(r.length-1)&&(pt=parseInt(pt)/100),\"number\"==typeof pt&&ct(\"/OpenAction [3 0 R /XYZ null null \"+q(pt)+\"]\")}switch(yt||(yt=\"continuous\"),yt){case\"continuous\":ct(\"/PageLayout /OneColumn\");break;case\"single\":ct(\"/PageLayout /SinglePage\");break;case\"two\":case\"twoleft\":ct(\"/PageLayout /TwoColumnLeft\");break;case\"tworight\":ct(\"/PageLayout /TwoColumnRight\")}vt&&ct(\"/PageMode /\"+vt),Rt.publish(\"putCatalog\"),ct(\">>\"),ct(\"endobj\")},Re=b.__private__.putTrailer=function(){ct(\"trailer\"),ct(\"<<\"),ct(\"/Size \"+(Q+1)),ct(\"/Root \"+Q+\" 0 R\"),ct(\"/Info \"+(Q-1)+\" 0 R\"),null!==g&&ct(\"/Encrypt \"+We.oid+\" 0 R\"),ct(\"/ID [ <\"+H+\"> <\"+H+\"> ]\"),ct(\">>\")},De=b.__private__.putHeader=function(){ct(\"%PDF-\"+y),ct(\"%ºß¬à\")},Te=b.__private__.putXRef=function(){var t=\"0000000000\";ct(\"xref\"),ct(\"0 \"+(Q+1)),ct(\"0000000000 65535 f \");for(var e=1;e<=Q;e++){\"function\"==typeof tt[e]?ct((t+tt[e]()).slice(-10)+\" 00000 n \"):void 0!==tt[e]?ct((t+tt[e]).slice(-10)+\" 00000 n \"):ct(\"0000000000 00000 n \")}},Ue=b.__private__.buildDocument=function(){st(),ut(et),Rt.publish(\"buildDocument\"),De(),ie(),Ae(),Le(),null!==g&&me(),Ee(),qe();var t=rt;return Te(),Re(),ct(\"startxref\"),ct(\"\"+t),ct(\"%%EOF\"),ut(it[K]),et.join(\"\\n\")},ze=b.__private__.getBlob=function(t){return new Blob([ht(t)],{type:\"application/pdf\"})},He=b.output=b.__private__.output=Pe((function(t,e){switch(\"string\"==typeof(e=e||{})?e={filename:e}:e.filename=e.filename||\"generated.pdf\",t){case void 0:return Ue();case\"save\":b.save(e.filename);break;case\"arraybuffer\":return ht(Ue());case\"blob\":return ze(Ue());case\"bloburi\":case\"bloburl\":if(void 0!==r.URL&&\"function\"==typeof r.URL.createObjectURL)return r.URL&&r.URL.createObjectURL(ze(Ue()))||void 0;i.warn(\"bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.\");break;case\"datauristring\":case\"dataurlstring\":var n=\"\",a=Ue();try{n=c(a)}catch(t){n=c(unescape(encodeURIComponent(a)))}return\"data:application/pdf;filename=\"+e.filename+\";base64,\"+n;case\"pdfobjectnewwindow\":if(\"[object Window]\"===Object.prototype.toString.call(r)){var o='<html><style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;} </style><body><script src=\"'+(e.pdfObjectUrl||\"https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js\")+'\"><\\/script><script >PDFObject.embed(\"'+this.output(\"dataurlstring\")+'\", '+JSON.stringify(e)+\");<\\/script></body></html>\",s=r.open();return null!==s&&s.document.write(o),s}throw new Error(\"The option pdfobjectnewwindow just works in a browser-environment.\");case\"pdfjsnewwindow\":if(\"[object Window]\"===Object.prototype.toString.call(r)){var u='<html><style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;} </style><body><iframe id=\"pdfViewer\" src=\"'+(e.pdfJsUrl||\"examples/PDF.js/web/viewer.html\")+\"?file=&downloadName=\"+e.filename+'\" width=\"500px\" height=\"400px\" /></body></html>',l=r.open();if(null!==l){l.document.write(u);var h=this;l.document.documentElement.querySelector(\"#pdfViewer\").onload=function(){l.document.title=e.filename,l.document.documentElement.querySelector(\"#pdfViewer\").contentWindow.PDFViewerApplication.open(h.output(\"bloburl\"))}}return l}throw new Error(\"The option pdfjsnewwindow just works in a browser-environment.\");case\"dataurlnewwindow\":if(\"[object Window]\"!==Object.prototype.toString.call(r))throw new Error(\"The option dataurlnewwindow just works in a browser-environment.\");var f='<html><style>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;} </style><body><iframe src=\"'+this.output(\"datauristring\",e)+'\"></iframe></body></html>',d=r.open();if(null!==d&&(d.document.write(f),d.document.title=e.filename),d||\"undefined\"==typeof safari)return d;break;case\"datauri\":case\"dataurl\":return r.document.location.href=this.output(\"datauristring\",e);default:return null}})),Ve=function(t){return!0===Array.isArray(Dt)&&Dt.indexOf(t)>-1};switch(a){case\"pt\":xt=1;break;case\"mm\":xt=72/25.4;break;case\"cm\":xt=72/2.54;break;case\"in\":xt=72;break;case\"px\":xt=1==Ve(\"px_scaling\")?.75:96/72;break;case\"pc\":case\"em\":xt=12;break;case\"ex\":xt=6;break;default:throw new Error(\"Invalid unit: \"+a)}var We=null;J(),W();var Ge=function(t){return null!==g?We.encryptor(t,0):function(t){return t}},Ye=b.__private__.getPageInfo=b.getPageInfo=function(t){if(isNaN(t)||t%1!=0)throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");return{objId:qt[t].objId,pageNumber:t,pageContext:qt[t]}},Je=b.__private__.getPageInfoByObjId=function(t){if(isNaN(t)||t%1!=0)throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");for(var e in qt)if(qt[e].objId===t)break;return Ye(e)},Xe=b.__private__.getCurrentPageInfo=b.getCurrentPageInfo=function(){return{objId:qt[K].objId,pageNumber:K,pageContext:qt[K]}};b.addPage=function(){return Ce.apply(this,arguments),this},b.setPage=function(){return Oe.apply(this,arguments),ut.call(this,it[K]),this},b.insertPage=function(t){return this.addPage(),this.movePage(K,t),this},b.movePage=function(t,e){var r,n;if(t>e){r=it[t],n=qt[t];for(var i=t;i>e;i--)it[i]=it[i-1],qt[i]=qt[i-1];it[e]=r,qt[e]=n,this.setPage(e)}else if(t<e){r=it[t],n=qt[t];for(var a=t;a<e;a++)it[a]=it[a+1],qt[a]=qt[a+1];it[e]=r,qt[e]=n,this.setPage(e)}return this},b.deletePage=function(){return je.apply(this,arguments),this},b.__private__.text=b.text=function(t,e,r,n,i){var a,o,s,u,c,l,h,f,d=(n=n||{}).scope||this;if(\"number\"==typeof t&&\"number\"==typeof e&&(\"string\"==typeof r||Array.isArray(r))){var p=r;r=e,e=t,t=p}if(arguments[3]instanceof Ht==!1?(s=arguments[4],u=arguments[5],\"object\"==typeof(h=arguments[3])&&null!==h||(\"string\"==typeof s&&(u=s,s=null),\"string\"==typeof h&&(u=h,h=null),\"number\"==typeof h&&(s=h,h=null),n={flags:h,angle:s,align:u})):(M(\"The transform parameter of text() with a Matrix value\"),f=i),isNaN(e)||isNaN(r)||null==t)throw new Error(\"Invalid arguments passed to jsPDF.text\");if(0===t.length)return d;var g=\"\",m=!1,b=\"number\"==typeof n.lineHeightFactor?n.lineHeightFactor:cr,y=d.internal.scaleFactor;function w(t){return t=t.split(\"\\t\").join(Array(n.TabLen||9).join(\" \")),Ie(t,h)}function N(t){for(var e,r=t.concat(),n=[],i=r.length;i--;)\"string\"==typeof(e=r.shift())?n.push(e):Array.isArray(t)&&(1===e.length||void 0===e[1]&&void 0===e[2])?n.push(e[0]):n.push([e[0],e[1],e[2]]);return n}function L(t,e){var r;if(\"string\"==typeof t)r=e(t)[0];else if(Array.isArray(t)){for(var n,i,a=t.concat(),o=[],s=a.length;s--;)\"string\"==typeof(n=a.shift())?o.push(e(n)[0]):Array.isArray(n)&&\"string\"==typeof n[0]&&(i=e(n[0],n[1],n[2]),o.push([i[0],i[1],i[2]]));r=o}return r}var S=!1,_=!0;if(\"string\"==typeof t)S=!0;else if(Array.isArray(t)){var P=t.concat();o=[];for(var k,I=P.length;I--;)(\"string\"!=typeof(k=P.shift())||Array.isArray(k)&&\"string\"!=typeof k[0])&&(_=!1);S=_}if(!1===S)throw new Error('Type of text must be string or Array. \"'+t+'\" is not recognized.');\"string\"==typeof t&&(t=t.match(/[\\r?\\n]/)?t.split(/\\r\\n|\\r|\\n/g):[t]);var F=dt/d.internal.scaleFactor,C=F*(cr-1);switch(n.baseline){case\"bottom\":r-=C;break;case\"top\":r+=F-C;break;case\"hanging\":r+=F-2*C;break;case\"middle\":r+=F/2-C}if((l=n.maxWidth||0)>0&&(\"string\"==typeof t?t=d.splitTextToSize(t,l):\"[object Array]\"===Object.prototype.toString.call(t)&&(t=t.reduce((function(t,e){return t.concat(d.splitTextToSize(e,l))}),[]))),a={text:t,x:e,y:r,options:n,mutex:{pdfEscape:Ie,activeFontKey:At,fonts:kt,activeFontSize:dt}},Rt.publish(\"preProcessText\",a),t=a.text,s=(n=a.options).angle,f instanceof Ht==!1&&s&&\"number\"==typeof s){s*=Math.PI/180,0===n.rotationDirection&&(s=-s),x===A.ADVANCED&&(s=-s);var j=Math.cos(s),O=Math.sin(s);f=new Ht(j,O,-O,j,0,0)}else s&&s instanceof Ht&&(f=s);x!==A.ADVANCED||f||(f=Wt),void 0!==(c=n.charSpace||Ar)&&(g+=B(D(c))+\" Tc\\n\",this.setCharSpace(this.getCharSpace()||0));n.lang;var E=-1,q=void 0!==n.renderingMode?n.renderingMode:n.stroke,R=d.internal.getCurrentPageInfo().pageContext;switch(q){case 0:case!1:case\"fill\":E=0;break;case 1:case!0:case\"stroke\":E=1;break;case 2:case\"fillThenStroke\":E=2;break;case 3:case\"invisible\":E=3;break;case 4:case\"fillAndAddForClipping\":E=4;break;case 5:case\"strokeAndAddPathForClipping\":E=5;break;case 6:case\"fillThenStrokeAndAddToPathForClipping\":E=6;break;case 7:case\"addToPathForClipping\":E=7}var T=void 0!==R.usedRenderingMode?R.usedRenderingMode:-1;-1!==E?g+=E+\" Tr\\n\":-1!==T&&(g+=\"0 Tr\\n\"),-1!==E&&(R.usedRenderingMode=E),u=n.align||\"left\";var U,z=dt*b,H=d.internal.pageSize.getWidth(),V=kt[At];c=n.charSpace||Ar,l=n.maxWidth||0,h=Object.assign({autoencode:!0,noBOM:!0},n.flags);var W=[];if(\"[object Array]\"===Object.prototype.toString.call(t)){var G;o=N(t),\"left\"!==u&&(U=o.map((function(t){return d.getStringUnitWidth(t,{font:V,charSpace:c,fontSize:dt,doKerning:!1})*dt/y})));var Y,J=0;if(\"right\"===u){e-=U[0],t=[],I=o.length;for(var X=0;X<I;X++)0===X?(Y=gr(e),G=mr(r)):(Y=D(J-U[X]),G=-z),t.push([o[X],Y,G]),J=U[X]}else if(\"center\"===u){e-=U[0]/2,t=[],I=o.length;for(var K=0;K<I;K++)0===K?(Y=gr(e),G=mr(r)):(Y=D((J-U[K])/2),G=-z),t.push([o[K],Y,G]),J=U[K]}else if(\"left\"===u){t=[],I=o.length;for(var Z=0;Z<I;Z++)t.push(o[Z])}else{if(\"justify\"!==u)throw new Error('Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".');t=[],I=o.length,l=0!==l?l:H;for(var $=0;$<I;$++)G=0===$?mr(r):-z,Y=0===$?gr(e):0,$<I-1&&W.push(B(D((l-U[$])/(o[$].split(\" \").length-1)))),t.push([o[$],Y,G])}}var Q=\"boolean\"==typeof n.R2L?n.R2L:mt;!0===Q&&(t=L(t,(function(t,e,r){return[t.split(\"\").reverse().join(\"\"),e,r]}))),a={text:t,x:e,y:r,options:n,mutex:{pdfEscape:Ie,activeFontKey:At,fonts:kt,activeFontSize:dt}},Rt.publish(\"postProcessText\",a),t=a.text,m=a.mutex.isHex||!1;var tt=kt[At].encoding;\"WinAnsiEncoding\"!==tt&&\"StandardEncoding\"!==tt||(t=L(t,(function(t,e,r){return[w(t),e,r]}))),o=N(t),t=[];for(var et,rt,nt,it=0,at=1,ot=Array.isArray(o[0])?at:it,st=\"\",ut=function(t,e,r){var i=\"\";return r instanceof Ht?(r=\"number\"==typeof n.angle?Vt(r,new Ht(1,0,0,1,t,e)):Vt(new Ht(1,0,0,1,t,e),r),x===A.ADVANCED&&(r=Vt(new Ht(1,0,0,-1,0,0),r)),i=r.join(\" \")+\" Tm\\n\"):i=B(t)+\" \"+B(e)+\" Td\\n\",i},lt=0;lt<o.length;lt++){switch(st=\"\",ot){case at:nt=(m?\"<\":\"(\")+o[lt][0]+(m?\">\":\")\"),et=parseFloat(o[lt][1]),rt=parseFloat(o[lt][2]);break;case it:nt=(m?\"<\":\"(\")+o[lt]+(m?\">\":\")\"),et=gr(e),rt=mr(r)}void 0!==W&&void 0!==W[lt]&&(st=W[lt]+\" Tw\\n\"),0===lt?t.push(st+ut(et,rt,f)+nt):ot===it?t.push(st+nt):ot===at&&t.push(st+ut(et,rt,f)+nt)}t=ot===it?t.join(\" Tj\\nT* \"):t.join(\" Tj\\n\"),t+=\" Tj\\n\";var ht=\"BT\\n/\";return ht+=At+\" \"+dt+\" Tf\\n\",ht+=B(dt*b)+\" TL\\n\",ht+=Nr+\"\\n\",ht+=g,ht+=t,ct(ht+=\"ET\"),v[At]=!0,d};var Ke=b.__private__.clip=b.clip=function(t){return ct(\"evenodd\"===t?\"W*\":\"W\"),this};b.clipEvenOdd=function(){return Ke(\"evenodd\")},b.__private__.discardPath=b.discardPath=function(){return ct(\"n\"),this};var Ze=b.__private__.isValidStyle=function(t){var e=!1;return-1!==[void 0,null,\"S\",\"D\",\"F\",\"DF\",\"FD\",\"f\",\"f*\",\"B\",\"B*\",\"n\"].indexOf(t)&&(e=!0),e};b.__private__.setDefaultPathOperation=b.setDefaultPathOperation=function(t){return Ze(t)&&(p=t),this};var $e=b.__private__.getStyle=b.getStyle=function(t){var e=p;switch(t){case\"D\":case\"S\":e=\"S\";break;case\"F\":e=\"f\";break;case\"FD\":case\"DF\":e=\"B\";break;case\"f\":case\"f*\":case\"B\":case\"B*\":e=t}return e},Qe=b.close=function(){return ct(\"h\"),this};b.stroke=function(){return ct(\"S\"),this},b.fill=function(t){return tr(\"f\",t),this},b.fillEvenOdd=function(t){return tr(\"f*\",t),this},b.fillStroke=function(t){return tr(\"B\",t),this},b.fillStrokeEvenOdd=function(t){return tr(\"B*\",t),this};var tr=function(t,e){\"object\"==typeof e?nr(e,t):ct(t)},er=function(t){null===t||x===A.ADVANCED&&void 0===t||(t=$e(t),ct(t))};function rr(t,e,r,n,i){var a=new j(e||this.boundingBox,r||this.xStep,n||this.yStep,this.gState,i||this.matrix);a.stream=this.stream;var o=t+\"$$\"+this.cloneIndex+++\"$$\";return Gt(o,a),a}var nr=function(t,e){var r=jt[t.key],n=Ct[r];if(n instanceof C)ct(\"q\"),ct(ir(e)),n.gState&&b.setGState(n.gState),ct(t.matrix.toString()+\" cm\"),ct(\"/\"+r+\" sh\"),ct(\"Q\");else if(n instanceof j){var i=new Ht(1,0,0,-1,0,Er());t.matrix&&(i=i.multiply(t.matrix||Wt),r=rr.call(n,t.key,t.boundingBox,t.xStep,t.yStep,i).id),ct(\"q\"),ct(\"/Pattern cs\"),ct(\"/\"+r+\" scn\"),n.gState&&b.setGState(n.gState),ct(e),ct(\"Q\")}},ir=function(t){switch(t){case\"f\":case\"F\":return\"W n\";case\"f*\":return\"W* n\";case\"B\":return\"W S\";case\"B*\":return\"W* S\";case\"S\":return\"W S\";case\"n\":return\"W n\"}},ar=b.moveTo=function(t,e){return ct(B(D(t))+\" \"+B(U(e))+\" m\"),this},or=b.lineTo=function(t,e){return ct(B(D(t))+\" \"+B(U(e))+\" l\"),this},sr=b.curveTo=function(t,e,r,n,i,a){return ct([B(D(t)),B(U(e)),B(D(r)),B(U(n)),B(D(i)),B(U(a)),\"c\"].join(\" \")),this};b.__private__.line=b.line=function(t,e,r,n,i){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||!Ze(i))throw new Error(\"Invalid arguments passed to jsPDF.line\");return x===A.COMPAT?this.lines([[r-t,n-e]],t,e,[1,1],i||\"S\"):this.lines([[r-t,n-e]],t,e,[1,1]).stroke()},b.__private__.lines=b.lines=function(t,e,r,n,i,a){var o,s,u,c,l,h,f,d,p,g,m,v;if(\"number\"==typeof t&&(v=r,r=e,e=t,t=v),n=n||[1,1],a=a||!1,isNaN(e)||isNaN(r)||!Array.isArray(t)||!Array.isArray(n)||!Ze(i)||\"boolean\"!=typeof a)throw new Error(\"Invalid arguments passed to jsPDF.lines\");for(ar(e,r),o=n[0],s=n[1],c=t.length,g=e,m=r,u=0;u<c;u++)2===(l=t[u]).length?(g=l[0]*o+g,m=l[1]*s+m,or(g,m)):(h=l[0]*o+g,f=l[1]*s+m,d=l[2]*o+g,p=l[3]*s+m,g=l[4]*o+g,m=l[5]*s+m,sr(h,f,d,p,g,m));return a&&Qe(),er(i),this},b.path=function(t){for(var e=0;e<t.length;e++){var r=t[e],n=r.c;switch(r.op){case\"m\":ar(n[0],n[1]);break;case\"l\":or(n[0],n[1]);break;case\"c\":sr.apply(this,n);break;case\"h\":Qe()}}return this},b.__private__.rect=b.rect=function(t,e,r,n,i){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||!Ze(i))throw new Error(\"Invalid arguments passed to jsPDF.rect\");return x===A.COMPAT&&(n=-n),ct([B(D(t)),B(U(e)),B(D(r)),B(D(n)),\"re\"].join(\" \")),er(i),this},b.__private__.triangle=b.triangle=function(t,e,r,n,i,a,o){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||isNaN(i)||isNaN(a)||!Ze(o))throw new Error(\"Invalid arguments passed to jsPDF.triangle\");return this.lines([[r-t,n-e],[i-r,a-n],[t-i,e-a]],t,e,[1,1],o,!0),this},b.__private__.roundedRect=b.roundedRect=function(t,e,r,n,i,a,o){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||isNaN(i)||isNaN(a)||!Ze(o))throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");var s=4/3*(Math.SQRT2-1);return i=Math.min(i,.5*r),a=Math.min(a,.5*n),this.lines([[r-2*i,0],[i*s,0,i,a-a*s,i,a],[0,n-2*a],[0,a*s,-i*s,a,-i,a],[2*i-r,0],[-i*s,0,-i,-a*s,-i,-a],[0,2*a-n],[0,-a*s,i*s,-a,i,-a]],t+i,e,[1,1],o,!0),this},b.__private__.ellipse=b.ellipse=function(t,e,r,n,i){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||!Ze(i))throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");var a=4/3*(Math.SQRT2-1)*r,o=4/3*(Math.SQRT2-1)*n;return ar(t+r,e),sr(t+r,e-o,t+a,e-n,t,e-n),sr(t-a,e-n,t-r,e-o,t-r,e),sr(t-r,e+o,t-a,e+n,t,e+n),sr(t+a,e+n,t+r,e+o,t+r,e),er(i),this},b.__private__.circle=b.circle=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||!Ze(n))throw new Error(\"Invalid arguments passed to jsPDF.circle\");return this.ellipse(t,e,r,r,n)},b.setFont=function(t,e,r){return r&&(e=F(e,r)),At=Me(t,e,{disableWarning:!1}),this};var ur=b.__private__.getFont=b.getFont=function(){return kt[Me.apply(b,arguments)]};b.__private__.getFontList=b.getFontList=function(){var t,e,r={};for(t in It)if(It.hasOwnProperty(t))for(e in r[t]=[],It[t])It[t].hasOwnProperty(e)&&r[t].push(e);return r},b.addFont=function(t,e,r,n,i){var a=[\"StandardEncoding\",\"MacRomanEncoding\",\"Identity-H\",\"WinAnsiEncoding\"];return arguments[3]&&-1!==a.indexOf(arguments[3])?i=arguments[3]:arguments[3]&&-1==a.indexOf(arguments[3])&&(r=F(r,n)),i=i||\"Identity-H\",Se.call(this,t,e,r,i)};var cr,lr=t.lineWidth||.200025,hr=b.__private__.setLineWidth=b.setLineWidth=function(t){return ct(B(D(t))+\" w\"),this};b.__private__.setLineDash=O.API.setLineDash=O.API.setLineDashPattern=function(t,e){if(t=t||[],e=e||0,isNaN(e)||!Array.isArray(t))throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");return t=t.map((function(t){return B(D(t))})).join(\" \"),e=B(D(e)),ct(\"[\"+t+\"] \"+e+\" d\"),this};var fr=b.__private__.getLineHeight=b.getLineHeight=function(){return dt*cr};b.__private__.getLineHeight=b.getLineHeight=function(){return dt*cr};var dr=b.__private__.setLineHeightFactor=b.setLineHeightFactor=function(t){return\"number\"==typeof(t=t||1.15)&&(cr=t),this},pr=b.__private__.getLineHeightFactor=b.getLineHeightFactor=function(){return cr};dr(t.lineHeight);var gr=b.__private__.getHorizontalCoordinate=function(t){return D(t)},mr=b.__private__.getVerticalCoordinate=function(t){return x===A.ADVANCED?t:qt[K].mediaBox.topRightY-qt[K].mediaBox.bottomLeftY-D(t)},vr=b.__private__.getHorizontalCoordinateString=b.getHorizontalCoordinateString=function(t){return B(gr(t))},br=b.__private__.getVerticalCoordinateString=b.getVerticalCoordinateString=function(t){return B(mr(t))},yr=t.strokeColor||\"0 G\";b.__private__.getStrokeColor=b.getDrawColor=function(){return Qt(yr)},b.__private__.setStrokeColor=b.setDrawColor=function(t,e,r,n){return yr=te({ch1:t,ch2:e,ch3:r,ch4:n,pdfColorType:\"draw\",precision:2}),ct(yr),this};var wr=t.fillColor||\"0 g\";b.__private__.getFillColor=b.getFillColor=function(){return Qt(wr)},b.__private__.setFillColor=b.setFillColor=function(t,e,r,n){return wr=te({ch1:t,ch2:e,ch3:r,ch4:n,pdfColorType:\"fill\",precision:2}),ct(wr),this};var Nr=t.textColor||\"0 g\",Lr=b.__private__.getTextColor=b.getTextColor=function(){return Qt(Nr)};b.__private__.setTextColor=b.setTextColor=function(t,e,r,n){return Nr=te({ch1:t,ch2:e,ch3:r,ch4:n,pdfColorType:\"text\",precision:3}),this};var Ar=t.charSpace,xr=b.__private__.getCharSpace=b.getCharSpace=function(){return parseFloat(Ar||0)};b.__private__.setCharSpace=b.setCharSpace=function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");return Ar=t,this};var Sr=0;b.CapJoinStyles={0:0,butt:0,but:0,miter:0,1:1,round:1,rounded:1,circle:1,2:2,projecting:2,project:2,square:2,bevel:2},b.__private__.setLineCap=b.setLineCap=function(t){var e=b.CapJoinStyles[t];if(void 0===e)throw new Error(\"Line cap style of '\"+t+\"' is not recognized. See or extend .CapJoinStyles property for valid styles\");return Sr=e,ct(e+\" J\"),this};var _r=0;b.__private__.setLineJoin=b.setLineJoin=function(t){var e=b.CapJoinStyles[t];if(void 0===e)throw new Error(\"Line join style of '\"+t+\"' is not recognized. See or extend .CapJoinStyles property for valid styles\");return _r=e,ct(e+\" j\"),this},b.__private__.setLineMiterLimit=b.__private__.setMiterLimit=b.setLineMiterLimit=b.setMiterLimit=function(t){if(t=t||0,isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");return ct(B(D(t))+\" M\"),this},b.GState=I,b.setGState=function(t){(t=\"string\"==typeof t?Ot[Bt[t]]:Pr(null,t)).equals(Mt)||(ct(\"/\"+t.id+\" gs\"),Mt=t)};var Pr=function(t,e){if(!t||!Bt[t]){var r=!1;for(var n in Ot)if(Ot.hasOwnProperty(n)&&Ot[n].equals(e)){r=!0;break}if(r)e=Ot[n];else{var i=\"GS\"+(Object.keys(Ot).length+1).toString(10);Ot[i]=e,e.id=i}return t&&(Bt[t]=e.id),Rt.publish(\"addGState\",e),e}};b.addGState=function(t,e){return Pr(t,e),this},b.saveGraphicsState=function(){return ct(\"q\"),Ft.push({key:At,size:dt,color:Nr}),this},b.restoreGraphicsState=function(){ct(\"Q\");var t=Ft.pop();return At=t.key,dt=t.size,Nr=t.color,Mt=null,this},b.setCurrentTransformationMatrix=function(t){return ct(t.toString()+\" cm\"),this},b.comment=function(t){return ct(\"#\"+t),this};var kr=function(t,e){var r=t||0;Object.defineProperty(this,\"x\",{enumerable:!0,get:function(){return r},set:function(t){isNaN(t)||(r=parseFloat(t))}});var n=e||0;Object.defineProperty(this,\"y\",{enumerable:!0,get:function(){return n},set:function(t){isNaN(t)||(n=parseFloat(t))}});var i=\"pt\";return Object.defineProperty(this,\"type\",{enumerable:!0,get:function(){return i},set:function(t){i=t.toString()}}),this},Ir=function(t,e,r,n){kr.call(this,t,e),this.type=\"rect\";var i=r||0;Object.defineProperty(this,\"w\",{enumerable:!0,get:function(){return i},set:function(t){isNaN(t)||(i=parseFloat(t))}});var a=n||0;return Object.defineProperty(this,\"h\",{enumerable:!0,get:function(){return a},set:function(t){isNaN(t)||(a=parseFloat(t))}}),this},Fr=function(){this.page=Et,this.currentPage=K,this.pages=it.slice(0),this.pagesContext=qt.slice(0),this.x=St,this.y=_t,this.matrix=Pt,this.width=Br(K),this.height=Er(K),this.outputDestination=ot,this.id=\"\",this.objectNumber=-1};Fr.prototype.restore=function(){Et=this.page,K=this.currentPage,qt=this.pagesContext,it=this.pages,St=this.x,_t=this.y,Pt=this.matrix,Mr(K,this.width),qr(K,this.height),ot=this.outputDestination};var Cr=function(t,e,r,n,i){zt.push(new Fr),Et=K=0,it=[],St=t,_t=e,Pt=i,Fe([r,n])},jr=function(t){if(!Ut[t]){var e=new Fr,r=\"Xo\"+(Object.keys(Tt).length+1).toString(10);e.id=r,Ut[t]=r,Tt[r]=e,Rt.publish(\"addFormObject\",e),zt.pop().restore()}};for(var Or in b.beginFormObject=function(t,e,r,n,i){return Cr(t,e,r,n,i),this},b.endFormObject=function(t){return jr(t),this},b.doFormObject=function(t,e){var r=Tt[Ut[t]];return ct(\"q\"),ct(e.toString()+\" cm\"),ct(\"/\"+r.id+\" Do\"),ct(\"Q\"),this},b.getFormObject=function(t){var e=Tt[Ut[t]];return{x:e.x,y:e.y,width:e.width,height:e.height,matrix:e.matrix}},b.save=function(t,e){return t=t||\"generated.pdf\",(e=e||{}).returnPromise=e.returnPromise||!1,!1===e.returnPromise?(l(ze(Ue()),t),\"function\"==typeof l.unload&&r.setTimeout&&setTimeout(l.unload,911),this):new Promise((function(e,n){try{var i=l(ze(Ue()),t);\"function\"==typeof l.unload&&r.setTimeout&&setTimeout(l.unload,911),e(i)}catch(t){n(t.message)}}))},O.API)O.API.hasOwnProperty(Or)&&(\"events\"===Or&&O.API.events.length?function(t,e){var r,n,i;for(i=e.length-1;-1!==i;i--)r=e[i][0],n=e[i][1],t.subscribe.apply(t,[r].concat(\"function\"==typeof n?[n]:n))}(Rt,O.API.events):b[Or]=O.API[Or]);var Br=b.getPageWidth=function(t){return(qt[t=t||K].mediaBox.topRightX-qt[t].mediaBox.bottomLeftX)/xt},Mr=b.setPageWidth=function(t,e){qt[t].mediaBox.topRightX=e*xt+qt[t].mediaBox.bottomLeftX},Er=b.getPageHeight=function(t){return(qt[t=t||K].mediaBox.topRightY-qt[t].mediaBox.bottomLeftY)/xt},qr=b.setPageHeight=function(t,e){qt[t].mediaBox.topRightY=e*xt+qt[t].mediaBox.bottomLeftY};return b.internal={pdfEscape:Ie,getStyle:$e,getFont:ur,getFontSize:gt,getCharSpace:xr,getTextColor:Lr,getLineHeight:fr,getLineHeightFactor:pr,write:lt,getHorizontalCoordinate:gr,getVerticalCoordinate:mr,getCoordinateString:vr,getVerticalCoordinateString:br,collections:{},newObject:Yt,newAdditionalObject:Kt,newObjectDeferred:Jt,newObjectDeferredBegin:Xt,getFilters:ee,putStream:re,events:Rt,scaleFactor:xt,pageSize:{getWidth:function(){return Br(K)},setWidth:function(t){Mr(K,t)},getHeight:function(){return Er(K)},setHeight:function(t){qr(K,t)}},encryptionOptions:g,encryption:We,getEncryptor:Ge,output:He,getNumberOfPages:Be,pages:it,out:ct,f2:q,f3:R,getPageInfo:Ye,getPageInfoByObjId:Je,getCurrentPageInfo:Xe,getPDFVersion:w,Point:kr,Rectangle:Ir,Matrix:Ht,hasHotfix:Ve},Object.defineProperty(b.internal.pageSize,\"width\",{get:function(){return Br(K)},set:function(t){Mr(K,t)},enumerable:!0,configurable:!0}),Object.defineProperty(b.internal.pageSize,\"height\",{get:function(){return Er(K)},set:function(t){qr(K,t)},enumerable:!0,configurable:!0}),_e.call(b,ft),At=\"F1\",Ce(o,n),Rt.publish(\"initialized\"),b}P.prototype.lsbFirstWord=function(t){return String.fromCharCode(t>>0&255,t>>8&255,t>>16&255,t>>24&255)},P.prototype.toHexString=function(t){return t.split(\"\").map((function(t){return(\"0\"+(255&t.charCodeAt(0)).toString(16)).slice(-2)})).join(\"\")},P.prototype.hexToBytes=function(t){for(var e=[],r=0;r<t.length;r+=2)e.push(String.fromCharCode(parseInt(t.substr(r,2),16)));return e.join(\"\")},P.prototype.processOwnerPassword=function(t,e){return S(A(e).substr(0,5),t)},P.prototype.encryptor=function(t,e){let r=A(this.encryptionKey+String.fromCharCode(255&t,t>>8&255,t>>16&255,255&e,e>>8&255)).substr(0,10);return function(t){return S(r,t)}},I.prototype.equals=function(t){var e,r=\"id,objectNumber,equals\";if(!t||typeof t!=typeof this)return!1;var n=0;for(e in this)if(!(r.indexOf(e)>=0)){if(this.hasOwnProperty(e)&&!t.hasOwnProperty(e))return!1;if(this[e]!==t[e])return!1;n++}for(e in t)t.hasOwnProperty(e)&&r.indexOf(e)<0&&n--;return 0===n},O.API={events:[]},O.version=\"2.3.0\";var B=O.API,M=1,E=function(t){return t.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\(/g,\"\\\\(\").replace(/\\)/g,\"\\\\)\")},q=function(t){return t.replace(/\\\\\\\\/g,\"\\\\\").replace(/\\\\\\(/g,\"(\").replace(/\\\\\\)/g,\")\")},R=function(t){return t.toFixed(2)},D=function(t){return t.toFixed(5)};B.__acroform__={};var T=function(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t},U=function(t){return t*M},z=function(t){var e=new ot,r=wt.internal.getHeight(t)||0,n=wt.internal.getWidth(t)||0;return e.BBox=[0,0,Number(R(n)),Number(R(r))],e},H=B.__acroform__.setBit=function(t,e){if(t=t||0,e=e||0,isNaN(t)||isNaN(e))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.setBit\");return t|=1<<e},V=B.__acroform__.clearBit=function(t,e){if(t=t||0,e=e||0,isNaN(t)||isNaN(e))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\");return t&=~(1<<e)},W=B.__acroform__.getBit=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.getBit\");return 0==(t&1<<e)?0:1},G=B.__acroform__.getBitForPdf=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\");return W(t,e-1)},Y=B.__acroform__.setBitForPdf=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\");return H(t,e-1)},J=B.__acroform__.clearBitForPdf=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\");return V(t,e-1)},X=B.__acroform__.calculateCoordinates=function(t,e){var r=e.internal.getHorizontalCoordinate,n=e.internal.getVerticalCoordinate,i=t[0],a=t[1],o=t[2],s=t[3],u={};return u.lowerLeft_X=r(i)||0,u.lowerLeft_Y=n(a+s)||0,u.upperRight_X=r(i+o)||0,u.upperRight_Y=n(a)||0,[Number(R(u.lowerLeft_X)),Number(R(u.lowerLeft_Y)),Number(R(u.upperRight_X)),Number(R(u.upperRight_Y))]},K=function(t){if(t.appearanceStreamContent)return t.appearanceStreamContent;if(t.V||t.DV){var e=[],r=t._V||t.DV,n=Z(t,r),i=t.scope.internal.getFont(t.fontName,t.fontStyle).id;e.push(\"/Tx BMC\"),e.push(\"q\"),e.push(\"BT\"),e.push(t.scope.__private__.encodeColorString(t.color)),e.push(\"/\"+i+\" \"+R(n.fontSize)+\" Tf\"),e.push(\"1 0 0 1 0 0 Tm\"),e.push(n.text),e.push(\"ET\"),e.push(\"Q\"),e.push(\"EMC\");var a=z(t);return a.scope=t.scope,a.stream=e.join(\"\\n\"),a}},Z=function(t,e){var r=0===t.fontSize?t.maxFontSize:t.fontSize,n={text:\"\",fontSize:\"\"},i=(e=\")\"==(e=\"(\"==e.substr(0,1)?e.substr(1):e).substr(e.length-1)?e.substr(0,e.length-1):e).split(\" \"),a=r,o=wt.internal.getHeight(t)||0;o=o<0?-o:o;var s=wt.internal.getWidth(t)||0;s=s<0?-s:s;var u=function(e,r,n){if(e+1<i.length){var a=r+\" \"+i[e+1];return $(a,t,n).width<=s-4}return!1};a++;t:for(;a>0;){e=\"\",a--;var c,l,h=$(\"3\",t,a).height,f=t.multiline?o-a:(o-h)/2,d=f+=2,p=0,g=0;if(a<=0){e=\"(...) Tj\\n\",e+=\"% Width of Text: \"+$(e,t,a=12).width+\", FieldWidth:\"+s+\"\\n\";break}var m=\"\",v=0;for(var b in i)if(i.hasOwnProperty(b)){m=\" \"==(m+=i[b]+\" \").substr(m.length-1)?m.substr(0,m.length-1):m;var y=parseInt(b),w=u(y,m,a),N=b>=i.length-1;if(w&&!N){m+=\" \";continue}if(w||N){if(N)g=y;else if(t.multiline&&(h+2)*(v+2)+2>o)continue t}else{if(!t.multiline)continue t;if((h+2)*(v+2)+2>o)continue t;g=y}for(var L=\"\",A=p;A<=g;A++)L+=i[A]+\" \";switch(L=\" \"==L.substr(L.length-1)?L.substr(0,L.length-1):L,l=$(L,t,a).width,t.textAlign){case\"right\":c=s-l-2;break;case\"center\":c=(s-l)/2;break;case\"left\":default:c=2}e+=R(c)+\" \"+R(d)+\" Td\\n\",e+=\"(\"+E(L)+\") Tj\\n\",e+=-R(c)+\" 0 Td\\n\",d=-(a+2),l=0,p=g+1,v++,m=\"\"}else;break}return n.text=e,n.fontSize=a,n},$=function(t,e,r){var n=e.scope.internal.getFont(e.fontName,e.fontStyle),i=e.scope.getStringUnitWidth(t,{font:n,fontSize:parseFloat(r),charSpace:0})*parseFloat(r);return{height:e.scope.getStringUnitWidth(\"3\",{font:n,fontSize:parseFloat(r),charSpace:0})*parseFloat(r)*1.5,width:i}},Q={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1},tt=function(t,e){var r={type:\"reference\",object:t};void 0===e.internal.getPageInfo(t.page).pageContext.annotations.find((function(t){return t.type===r.type&&t.object===r.object}))&&e.internal.getPageInfo(t.page).pageContext.annotations.push(r)},et=function(t,e){for(var r in t)if(t.hasOwnProperty(r)){var n=r,i=t[r];e.internal.newObjectDeferredBegin(i.objId,!0),\"object\"==typeof i&&\"function\"==typeof i.putStream&&i.putStream(),delete t[n]}},rt=function(t,e){if(e.scope=t,void 0!==t.internal&&(void 0===t.internal.acroformPlugin||!1===t.internal.acroformPlugin.isInitialized)){if(ut.FieldNum=0,t.internal.acroformPlugin=JSON.parse(JSON.stringify(Q)),t.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"Exception while creating AcroformDictionary\");M=t.internal.scaleFactor,t.internal.acroformPlugin.acroFormDictionaryRoot=new st,t.internal.acroformPlugin.acroFormDictionaryRoot.scope=t,t.internal.acroformPlugin.acroFormDictionaryRoot._eventID=t.internal.events.subscribe(\"postPutResources\",(function(){!function(t){t.internal.events.unsubscribe(t.internal.acroformPlugin.acroFormDictionaryRoot._eventID),delete t.internal.acroformPlugin.acroFormDictionaryRoot._eventID,t.internal.acroformPlugin.printedOut=!0}(t)})),t.internal.events.subscribe(\"buildDocument\",(function(){!function(t){t.internal.acroformPlugin.acroFormDictionaryRoot.objId=void 0;var e=t.internal.acroformPlugin.acroFormDictionaryRoot.Fields;for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];n.objId=void 0,n.hasAnnotation&&tt(n,t)}}(t)})),t.internal.events.subscribe(\"putCatalog\",(function(){!function(t){if(void 0===t.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"putCatalogCallback: Root missing.\");t.internal.write(\"/AcroForm \"+t.internal.acroformPlugin.acroFormDictionaryRoot.objId+\" 0 R\")}(t)})),t.internal.events.subscribe(\"postPutPages\",(function(e){!function(t,e){var r=!t;for(var n in t||(e.internal.newObjectDeferredBegin(e.internal.acroformPlugin.acroFormDictionaryRoot.objId,!0),e.internal.acroformPlugin.acroFormDictionaryRoot.putStream()),t=t||e.internal.acroformPlugin.acroFormDictionaryRoot.Kids)if(t.hasOwnProperty(n)){var i=t[n],a=[],o=i.Rect;if(i.Rect&&(i.Rect=X(i.Rect,e)),e.internal.newObjectDeferredBegin(i.objId,!0),i.DA=wt.createDefaultAppearanceStream(i),\"object\"==typeof i&&\"function\"==typeof i.getKeyValueListForStream&&(a=i.getKeyValueListForStream()),i.Rect=o,i.hasAppearanceStream&&!i.appearanceStreamContent){var s=K(i);a.push({key:\"AP\",value:\"<</N \"+s+\">>\"}),e.internal.acroformPlugin.xForms.push(s)}if(i.appearanceStreamContent){var u=\"\";for(var c in i.appearanceStreamContent)if(i.appearanceStreamContent.hasOwnProperty(c)){var l=i.appearanceStreamContent[c];if(u+=\"/\"+c+\" \",u+=\"<<\",Object.keys(l).length>=1||Array.isArray(l)){for(var n in l)if(l.hasOwnProperty(n)){var h=l[n];\"function\"==typeof h&&(h=h.call(e,i)),u+=\"/\"+n+\" \"+h+\" \",e.internal.acroformPlugin.xForms.indexOf(h)>=0||e.internal.acroformPlugin.xForms.push(h)}}else\"function\"==typeof(h=l)&&(h=h.call(e,i)),u+=\"/\"+n+\" \"+h,e.internal.acroformPlugin.xForms.indexOf(h)>=0||e.internal.acroformPlugin.xForms.push(h);u+=\">>\"}a.push({key:\"AP\",value:\"<<\\n\"+u+\">>\"})}e.internal.putStream({additionalKeyValues:a,objectId:i.objId}),e.internal.out(\"endobj\")}r&&et(e.internal.acroformPlugin.xForms,e)}(e,t)})),t.internal.acroformPlugin.isInitialized=!0}},nt=B.__acroform__.arrayToPdfArray=function(t,e,r){var n=function(t){return t};if(Array.isArray(t)){for(var i=\"[\",a=0;a<t.length;a++)switch(0!==a&&(i+=\" \"),typeof t[a]){case\"boolean\":case\"number\":case\"object\":i+=t[a].toString();break;case\"string\":\"/\"!==t[a].substr(0,1)?(void 0!==e&&r&&(n=r.internal.getEncryptor(e)),i+=\"(\"+E(n(t[a].toString()))+\")\"):i+=t[a].toString()}return i+=\"]\"}throw new Error(\"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\")};var it=function(t,e,r){var n=function(t){return t};return void 0!==e&&r&&(n=r.internal.getEncryptor(e)),(t=t||\"\").toString(),t=\"(\"+E(n(t))+\")\"},at=function(){this._objId=void 0,this._scope=void 0,Object.defineProperty(this,\"objId\",{get:function(){if(void 0===this._objId){if(void 0===this.scope)return;this._objId=this.scope.internal.newObjectDeferred()}return this._objId},set:function(t){this._objId=t}}),Object.defineProperty(this,\"scope\",{value:this._scope,writable:!0})};at.prototype.toString=function(){return this.objId+\" 0 R\"},at.prototype.putStream=function(){var t=this.getKeyValueListForStream();this.scope.internal.putStream({data:this.stream,additionalKeyValues:t,objectId:this.objId}),this.scope.internal.out(\"endobj\")},at.prototype.getKeyValueListForStream=function(){var t=[],e=Object.getOwnPropertyNames(this).filter((function(t){return\"content\"!=t&&\"appearanceStreamContent\"!=t&&\"scope\"!=t&&\"objId\"!=t&&\"_\"!=t.substring(0,1)}));for(var r in e)if(!1===Object.getOwnPropertyDescriptor(this,e[r]).configurable){var n=e[r],i=this[n];i&&(Array.isArray(i)?t.push({key:n,value:nt(i,this.objId,this.scope)}):i instanceof at?(i.scope=this.scope,t.push({key:n,value:i.objId+\" 0 R\"})):\"function\"!=typeof i&&t.push({key:n,value:i}))}return t};var ot=function(){at.call(this),Object.defineProperty(this,\"Type\",{value:\"/XObject\",configurable:!1,writable:!0}),Object.defineProperty(this,\"Subtype\",{value:\"/Form\",configurable:!1,writable:!0}),Object.defineProperty(this,\"FormType\",{value:1,configurable:!1,writable:!0});var t,e=[];Object.defineProperty(this,\"BBox\",{configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"Resources\",{value:\"2 0 R\",configurable:!1,writable:!0}),Object.defineProperty(this,\"stream\",{enumerable:!1,configurable:!0,set:function(e){t=e.trim()},get:function(){return t||null}})};T(ot,at);var st=function(){at.call(this);var t,e=[];Object.defineProperty(this,\"Kids\",{enumerable:!1,configurable:!0,get:function(){return e.length>0?e:void 0}}),Object.defineProperty(this,\"Fields\",{enumerable:!1,configurable:!1,get:function(){return e}}),Object.defineProperty(this,\"DA\",{enumerable:!1,configurable:!1,get:function(){if(t){var e=function(t){return t};return this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),\"(\"+E(e(t))+\")\"}},set:function(e){t=e}})};T(st,at);var ut=function(){at.call(this);var t=4;Object.defineProperty(this,\"F\",{enumerable:!1,configurable:!1,get:function(){return t},set:function(e){if(isNaN(e))throw new Error('Invalid value \"'+e+'\" for attribute F supplied.');t=e}}),Object.defineProperty(this,\"showWhenPrinted\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(t,3))},set:function(e){!0===Boolean(e)?this.F=Y(t,3):this.F=J(t,3)}});var e=0;Object.defineProperty(this,\"Ff\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){if(isNaN(t))throw new Error('Invalid value \"'+t+'\" for attribute Ff supplied.');e=t}});var r=[];Object.defineProperty(this,\"Rect\",{enumerable:!1,configurable:!1,get:function(){if(0!==r.length)return r},set:function(t){r=void 0!==t?t:[]}}),Object.defineProperty(this,\"x\",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[0])?0:r[0]},set:function(t){r[0]=t}}),Object.defineProperty(this,\"y\",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[1])?0:r[1]},set:function(t){r[1]=t}}),Object.defineProperty(this,\"width\",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[2])?0:r[2]},set:function(t){r[2]=t}}),Object.defineProperty(this,\"height\",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[3])?0:r[3]},set:function(t){r[3]=t}});var n=\"\";Object.defineProperty(this,\"FT\",{enumerable:!0,configurable:!1,get:function(){return n},set:function(t){switch(t){case\"/Btn\":case\"/Tx\":case\"/Ch\":case\"/Sig\":n=t;break;default:throw new Error('Invalid value \"'+t+'\" for attribute FT supplied.')}}});var i=null;Object.defineProperty(this,\"T\",{enumerable:!0,configurable:!1,get:function(){if(!i||i.length<1){if(this instanceof mt)return;i=\"FieldObject\"+ut.FieldNum++}var t=function(t){return t};return this.scope&&(t=this.scope.internal.getEncryptor(this.objId)),\"(\"+E(t(i))+\")\"},set:function(t){i=t.toString()}}),Object.defineProperty(this,\"fieldName\",{configurable:!0,enumerable:!0,get:function(){return i},set:function(t){i=t}});var a=\"helvetica\";Object.defineProperty(this,\"fontName\",{enumerable:!0,configurable:!0,get:function(){return a},set:function(t){a=t}});var o=\"normal\";Object.defineProperty(this,\"fontStyle\",{enumerable:!0,configurable:!0,get:function(){return o},set:function(t){o=t}});var s=0;Object.defineProperty(this,\"fontSize\",{enumerable:!0,configurable:!0,get:function(){return s},set:function(t){s=t}});var u=void 0;Object.defineProperty(this,\"maxFontSize\",{enumerable:!0,configurable:!0,get:function(){return void 0===u?50/M:u},set:function(t){u=t}});var c=\"black\";Object.defineProperty(this,\"color\",{enumerable:!0,configurable:!0,get:function(){return c},set:function(t){c=t}});var l=\"/F1 0 Tf 0 g\";Object.defineProperty(this,\"DA\",{enumerable:!0,configurable:!1,get:function(){if(!(!l||this instanceof mt||this instanceof bt))return it(l,this.objId,this.scope)},set:function(t){t=t.toString(),l=t}});var h=null;Object.defineProperty(this,\"DV\",{enumerable:!1,configurable:!1,get:function(){if(h)return this instanceof dt==!1?it(h,this.objId,this.scope):h},set:function(t){t=t.toString(),h=this instanceof dt==!1?\"(\"===t.substr(0,1)?q(t.substr(1,t.length-2)):q(t):t}}),Object.defineProperty(this,\"defaultValue\",{enumerable:!0,configurable:!0,get:function(){return this instanceof dt==!0?q(h.substr(1,h.length-1)):h},set:function(t){t=t.toString(),h=this instanceof dt==!0?\"/\"+t:t}});var f=null;Object.defineProperty(this,\"_V\",{enumerable:!1,configurable:!1,get:function(){if(f)return f},set:function(t){this.V=t}}),Object.defineProperty(this,\"V\",{enumerable:!1,configurable:!1,get:function(){if(f)return this instanceof dt==!1?it(f,this.objId,this.scope):f},set:function(t){t=t.toString(),f=this instanceof dt==!1?\"(\"===t.substr(0,1)?q(t.substr(1,t.length-2)):q(t):t}}),Object.defineProperty(this,\"value\",{enumerable:!0,configurable:!0,get:function(){return this instanceof dt==!0?q(f.substr(1,f.length-1)):f},set:function(t){t=t.toString(),f=this instanceof dt==!0?\"/\"+t:t}}),Object.defineProperty(this,\"hasAnnotation\",{enumerable:!0,configurable:!0,get:function(){return this.Rect}}),Object.defineProperty(this,\"Type\",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?\"/Annot\":null}}),Object.defineProperty(this,\"Subtype\",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?\"/Widget\":null}});var d,p=!1;Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!0,configurable:!0,get:function(){return p},set:function(t){t=Boolean(t),p=t}}),Object.defineProperty(this,\"page\",{enumerable:!0,configurable:!0,get:function(){if(d)return d},set:function(t){d=t}}),Object.defineProperty(this,\"readOnly\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,1))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,1):this.Ff=J(this.Ff,1)}}),Object.defineProperty(this,\"required\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,2))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,2):this.Ff=J(this.Ff,2)}}),Object.defineProperty(this,\"noExport\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,3))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,3):this.Ff=J(this.Ff,3)}});var g=null;Object.defineProperty(this,\"Q\",{enumerable:!0,configurable:!1,get:function(){if(null!==g)return g},set:function(t){if(-1===[0,1,2].indexOf(t))throw new Error('Invalid value \"'+t+'\" for attribute Q supplied.');g=t}}),Object.defineProperty(this,\"textAlign\",{get:function(){var t;switch(g){case 0:default:t=\"left\";break;case 1:t=\"center\";break;case 2:t=\"right\"}return t},configurable:!0,enumerable:!0,set:function(t){switch(t){case\"right\":case 2:g=2;break;case\"center\":case 1:g=1;break;case\"left\":case 0:default:g=0}}})};T(ut,at);var ct=function(){ut.call(this),this.FT=\"/Ch\",this.V=\"()\",this.fontName=\"zapfdingbats\";var t=0;Object.defineProperty(this,\"TI\",{enumerable:!0,configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,\"topIndex\",{enumerable:!0,configurable:!0,get:function(){return t},set:function(e){t=e}});var e=[];Object.defineProperty(this,\"Opt\",{enumerable:!0,configurable:!1,get:function(){return nt(e,this.objId,this.scope)},set:function(t){var r,n;n=[],\"string\"==typeof(r=t)&&(n=function(t,e,r){r||(r=1);for(var n,i=[];n=e.exec(t);)i.push(n[r]);return i}(r,/\\((.*?)\\)/g)),e=n}}),this.getOptions=function(){return e},this.setOptions=function(t){e=t,this.sort&&e.sort()},this.addOption=function(t){t=(t=t||\"\").toString(),e.push(t),this.sort&&e.sort()},this.removeOption=function(t,r){for(r=r||!1,t=(t=t||\"\").toString();-1!==e.indexOf(t)&&(e.splice(e.indexOf(t),1),!1!==r););},Object.defineProperty(this,\"combo\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,18))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,18):this.Ff=J(this.Ff,18)}}),Object.defineProperty(this,\"edit\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,19))},set:function(t){!0===this.combo&&(!0===Boolean(t)?this.Ff=Y(this.Ff,19):this.Ff=J(this.Ff,19))}}),Object.defineProperty(this,\"sort\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,20))},set:function(t){!0===Boolean(t)?(this.Ff=Y(this.Ff,20),e.sort()):this.Ff=J(this.Ff,20)}}),Object.defineProperty(this,\"multiSelect\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,22))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,22):this.Ff=J(this.Ff,22)}}),Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,23))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,23):this.Ff=J(this.Ff,23)}}),Object.defineProperty(this,\"commitOnSelChange\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,27))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,27):this.Ff=J(this.Ff,27)}}),this.hasAppearanceStream=!1};T(ct,ut);var lt=function(){ct.call(this),this.fontName=\"helvetica\",this.combo=!1};T(lt,ct);var ht=function(){lt.call(this),this.combo=!0};T(ht,lt);var ft=function(){ht.call(this),this.edit=!0};T(ft,ht);var dt=function(){ut.call(this),this.FT=\"/Btn\",Object.defineProperty(this,\"noToggleToOff\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,15))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,15):this.Ff=J(this.Ff,15)}}),Object.defineProperty(this,\"radio\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,16))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,16):this.Ff=J(this.Ff,16)}}),Object.defineProperty(this,\"pushButton\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,17))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,17):this.Ff=J(this.Ff,17)}}),Object.defineProperty(this,\"radioIsUnison\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,26))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,26):this.Ff=J(this.Ff,26)}});var t,e={};Object.defineProperty(this,\"MK\",{enumerable:!1,configurable:!1,get:function(){var t=function(t){return t};if(this.scope&&(t=this.scope.internal.getEncryptor(this.objId)),0!==Object.keys(e).length){var r,n=[];for(r in n.push(\"<<\"),e)n.push(\"/\"+r+\" (\"+E(t(e[r]))+\")\");return n.push(\">>\"),n.join(\"\\n\")}},set:function(t){\"object\"==typeof t&&(e=t)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return e.CA||\"\"},set:function(t){\"string\"==typeof t&&(e.CA=t)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return t.substr(1,t.length-1)},set:function(e){t=\"/\"+e}})};T(dt,ut);var pt=function(){dt.call(this),this.pushButton=!0};T(pt,dt);var gt=function(){dt.call(this),this.radio=!0,this.pushButton=!1;var t=[];Object.defineProperty(this,\"Kids\",{enumerable:!0,configurable:!1,get:function(){return t},set:function(e){t=void 0!==e?e:[]}})};T(gt,dt);var mt=function(){var t,e;ut.call(this),Object.defineProperty(this,\"Parent\",{enumerable:!1,configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,\"optionName\",{enumerable:!1,configurable:!0,get:function(){return e},set:function(t){e=t}});var r,n={};Object.defineProperty(this,\"MK\",{enumerable:!1,configurable:!1,get:function(){var t=function(t){return t};this.scope&&(t=this.scope.internal.getEncryptor(this.objId));var e,r=[];for(e in r.push(\"<<\"),n)r.push(\"/\"+e+\" (\"+E(t(n[e]))+\")\");return r.push(\">>\"),r.join(\"\\n\")},set:function(t){\"object\"==typeof t&&(n=t)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return n.CA||\"\"},set:function(t){\"string\"==typeof t&&(n.CA=t)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return r},set:function(t){r=t}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return r.substr(1,r.length-1)},set:function(t){r=\"/\"+t}}),this.caption=\"l\",this.appearanceState=\"Off\",this._AppearanceType=wt.RadioButton.Circle,this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(this.optionName)};T(mt,ut),gt.prototype.setAppearance=function(t){if(!(\"createAppearanceStream\"in t)||!(\"getCA\"in t))throw new Error(\"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\");for(var e in this.Kids)if(this.Kids.hasOwnProperty(e)){var r=this.Kids[e];r.appearanceStreamContent=t.createAppearanceStream(r.optionName),r.caption=t.getCA()}},gt.prototype.createOption=function(t){var e=new mt;return e.Parent=this,e.optionName=t,this.Kids.push(e),Nt.call(this.scope,e),e};var vt=function(){dt.call(this),this.fontName=\"zapfdingbats\",this.caption=\"3\",this.appearanceState=\"On\",this.value=\"On\",this.textAlign=\"center\",this.appearanceStreamContent=wt.CheckBox.createAppearanceStream()};T(vt,dt);var bt=function(){ut.call(this),this.FT=\"/Tx\",Object.defineProperty(this,\"multiline\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,13))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,13):this.Ff=J(this.Ff,13)}}),Object.defineProperty(this,\"fileSelect\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,21))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,21):this.Ff=J(this.Ff,21)}}),Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,23))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,23):this.Ff=J(this.Ff,23)}}),Object.defineProperty(this,\"doNotScroll\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,24))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,24):this.Ff=J(this.Ff,24)}}),Object.defineProperty(this,\"comb\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,25))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,25):this.Ff=J(this.Ff,25)}}),Object.defineProperty(this,\"richText\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,26))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,26):this.Ff=J(this.Ff,26)}});var t=null;Object.defineProperty(this,\"MaxLen\",{enumerable:!0,configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,\"maxLength\",{enumerable:!0,configurable:!0,get:function(){return t},set:function(e){Number.isInteger(e)&&(t=e)}}),Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!0,configurable:!0,get:function(){return this.V||this.DV}})};T(bt,ut);var yt=function(){bt.call(this),Object.defineProperty(this,\"password\",{enumerable:!0,configurable:!0,get:function(){return Boolean(G(this.Ff,14))},set:function(t){!0===Boolean(t)?this.Ff=Y(this.Ff,14):this.Ff=J(this.Ff,14)}}),this.password=!0};T(yt,bt);var wt={CheckBox:{createAppearanceStream:function(){return{N:{On:wt.CheckBox.YesNormal},D:{On:wt.CheckBox.YesPushDown,Off:wt.CheckBox.OffPushDown}}},YesPushDown:function(t){var e=z(t);e.scope=t.scope;var r=[],n=t.scope.internal.getFont(t.fontName,t.fontStyle).id,i=t.scope.__private__.encodeColorString(t.color),a=Z(t,t.caption);return r.push(\"0.749023 g\"),r.push(\"0 0 \"+R(wt.internal.getWidth(t))+\" \"+R(wt.internal.getHeight(t))+\" re\"),r.push(\"f\"),r.push(\"BMC\"),r.push(\"q\"),r.push(\"0 0 1 rg\"),r.push(\"/\"+n+\" \"+R(a.fontSize)+\" Tf \"+i),r.push(\"BT\"),r.push(a.text),r.push(\"ET\"),r.push(\"Q\"),r.push(\"EMC\"),e.stream=r.join(\"\\n\"),e},YesNormal:function(t){var e=z(t);e.scope=t.scope;var r=t.scope.internal.getFont(t.fontName,t.fontStyle).id,n=t.scope.__private__.encodeColorString(t.color),i=[],a=wt.internal.getHeight(t),o=wt.internal.getWidth(t),s=Z(t,t.caption);return i.push(\"1 g\"),i.push(\"0 0 \"+R(o)+\" \"+R(a)+\" re\"),i.push(\"f\"),i.push(\"q\"),i.push(\"0 0 1 rg\"),i.push(\"0 0 \"+R(o-1)+\" \"+R(a-1)+\" re\"),i.push(\"W\"),i.push(\"n\"),i.push(\"0 g\"),i.push(\"BT\"),i.push(\"/\"+r+\" \"+R(s.fontSize)+\" Tf \"+n),i.push(s.text),i.push(\"ET\"),i.push(\"Q\"),e.stream=i.join(\"\\n\"),e},OffPushDown:function(t){var e=z(t);e.scope=t.scope;var r=[];return r.push(\"0.749023 g\"),r.push(\"0 0 \"+R(wt.internal.getWidth(t))+\" \"+R(wt.internal.getHeight(t))+\" re\"),r.push(\"f\"),e.stream=r.join(\"\\n\"),e}},RadioButton:{Circle:{createAppearanceStream:function(t){var e={D:{Off:wt.RadioButton.Circle.OffPushDown},N:{}};return e.N[t]=wt.RadioButton.Circle.YesNormal,e.D[t]=wt.RadioButton.Circle.YesPushDown,e},getCA:function(){return\"l\"},YesNormal:function(t){var e=z(t);e.scope=t.scope;var r=[],n=wt.internal.getWidth(t)<=wt.internal.getHeight(t)?wt.internal.getWidth(t)/4:wt.internal.getHeight(t)/4;n=Number((.9*n).toFixed(5));var i=wt.internal.Bezier_C,a=Number((n*i).toFixed(5));return r.push(\"q\"),r.push(\"1 0 0 1 \"+D(wt.internal.getWidth(t)/2)+\" \"+D(wt.internal.getHeight(t)/2)+\" cm\"),r.push(n+\" 0 m\"),r.push(n+\" \"+a+\" \"+a+\" \"+n+\" 0 \"+n+\" c\"),r.push(\"-\"+a+\" \"+n+\" -\"+n+\" \"+a+\" -\"+n+\" 0 c\"),r.push(\"-\"+n+\" -\"+a+\" -\"+a+\" -\"+n+\" 0 -\"+n+\" c\"),r.push(a+\" -\"+n+\" \"+n+\" -\"+a+\" \"+n+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),e.stream=r.join(\"\\n\"),e},YesPushDown:function(t){var e=z(t);e.scope=t.scope;var r=[],n=wt.internal.getWidth(t)<=wt.internal.getHeight(t)?wt.internal.getWidth(t)/4:wt.internal.getHeight(t)/4;n=Number((.9*n).toFixed(5));var i=Number((2*n).toFixed(5)),a=Number((i*wt.internal.Bezier_C).toFixed(5)),o=Number((n*wt.internal.Bezier_C).toFixed(5));return r.push(\"0.749023 g\"),r.push(\"q\"),r.push(\"1 0 0 1 \"+D(wt.internal.getWidth(t)/2)+\" \"+D(wt.internal.getHeight(t)/2)+\" cm\"),r.push(i+\" 0 m\"),r.push(i+\" \"+a+\" \"+a+\" \"+i+\" 0 \"+i+\" c\"),r.push(\"-\"+a+\" \"+i+\" -\"+i+\" \"+a+\" -\"+i+\" 0 c\"),r.push(\"-\"+i+\" -\"+a+\" -\"+a+\" -\"+i+\" 0 -\"+i+\" c\"),r.push(a+\" -\"+i+\" \"+i+\" -\"+a+\" \"+i+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),r.push(\"0 g\"),r.push(\"q\"),r.push(\"1 0 0 1 \"+D(wt.internal.getWidth(t)/2)+\" \"+D(wt.internal.getHeight(t)/2)+\" cm\"),r.push(n+\" 0 m\"),r.push(n+\" \"+o+\" \"+o+\" \"+n+\" 0 \"+n+\" c\"),r.push(\"-\"+o+\" \"+n+\" -\"+n+\" \"+o+\" -\"+n+\" 0 c\"),r.push(\"-\"+n+\" -\"+o+\" -\"+o+\" -\"+n+\" 0 -\"+n+\" c\"),r.push(o+\" -\"+n+\" \"+n+\" -\"+o+\" \"+n+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),e.stream=r.join(\"\\n\"),e},OffPushDown:function(t){var e=z(t);e.scope=t.scope;var r=[],n=wt.internal.getWidth(t)<=wt.internal.getHeight(t)?wt.internal.getWidth(t)/4:wt.internal.getHeight(t)/4;n=Number((.9*n).toFixed(5));var i=Number((2*n).toFixed(5)),a=Number((i*wt.internal.Bezier_C).toFixed(5));return r.push(\"0.749023 g\"),r.push(\"q\"),r.push(\"1 0 0 1 \"+D(wt.internal.getWidth(t)/2)+\" \"+D(wt.internal.getHeight(t)/2)+\" cm\"),r.push(i+\" 0 m\"),r.push(i+\" \"+a+\" \"+a+\" \"+i+\" 0 \"+i+\" c\"),r.push(\"-\"+a+\" \"+i+\" -\"+i+\" \"+a+\" -\"+i+\" 0 c\"),r.push(\"-\"+i+\" -\"+a+\" -\"+a+\" -\"+i+\" 0 -\"+i+\" c\"),r.push(a+\" -\"+i+\" \"+i+\" -\"+a+\" \"+i+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),e.stream=r.join(\"\\n\"),e}},Cross:{createAppearanceStream:function(t){var e={D:{Off:wt.RadioButton.Cross.OffPushDown},N:{}};return e.N[t]=wt.RadioButton.Cross.YesNormal,e.D[t]=wt.RadioButton.Cross.YesPushDown,e},getCA:function(){return\"8\"},YesNormal:function(t){var e=z(t);e.scope=t.scope;var r=[],n=wt.internal.calculateCross(t);return r.push(\"q\"),r.push(\"1 1 \"+R(wt.internal.getWidth(t)-2)+\" \"+R(wt.internal.getHeight(t)-2)+\" re\"),r.push(\"W\"),r.push(\"n\"),r.push(R(n.x1.x)+\" \"+R(n.x1.y)+\" m\"),r.push(R(n.x2.x)+\" \"+R(n.x2.y)+\" l\"),r.push(R(n.x4.x)+\" \"+R(n.x4.y)+\" m\"),r.push(R(n.x3.x)+\" \"+R(n.x3.y)+\" l\"),r.push(\"s\"),r.push(\"Q\"),e.stream=r.join(\"\\n\"),e},YesPushDown:function(t){var e=z(t);e.scope=t.scope;var r=wt.internal.calculateCross(t),n=[];return n.push(\"0.749023 g\"),n.push(\"0 0 \"+R(wt.internal.getWidth(t))+\" \"+R(wt.internal.getHeight(t))+\" re\"),n.push(\"f\"),n.push(\"q\"),n.push(\"1 1 \"+R(wt.internal.getWidth(t)-2)+\" \"+R(wt.internal.getHeight(t)-2)+\" re\"),n.push(\"W\"),n.push(\"n\"),n.push(R(r.x1.x)+\" \"+R(r.x1.y)+\" m\"),n.push(R(r.x2.x)+\" \"+R(r.x2.y)+\" l\"),n.push(R(r.x4.x)+\" \"+R(r.x4.y)+\" m\"),n.push(R(r.x3.x)+\" \"+R(r.x3.y)+\" l\"),n.push(\"s\"),n.push(\"Q\"),e.stream=n.join(\"\\n\"),e},OffPushDown:function(t){var e=z(t);e.scope=t.scope;var r=[];return r.push(\"0.749023 g\"),r.push(\"0 0 \"+R(wt.internal.getWidth(t))+\" \"+R(wt.internal.getHeight(t))+\" re\"),r.push(\"f\"),e.stream=r.join(\"\\n\"),e}}},createDefaultAppearanceStream:function(t){var e=t.scope.internal.getFont(t.fontName,t.fontStyle).id,r=t.scope.__private__.encodeColorString(t.color);return\"/\"+e+\" \"+t.fontSize+\" Tf \"+r}};wt.internal={Bezier_C:.551915024494,calculateCross:function(t){var e=wt.internal.getWidth(t),r=wt.internal.getHeight(t),n=Math.min(e,r);return{x1:{x:(e-n)/2,y:(r-n)/2+n},x2:{x:(e-n)/2+n,y:(r-n)/2},x3:{x:(e-n)/2,y:(r-n)/2},x4:{x:(e-n)/2+n,y:(r-n)/2+n}}}},wt.internal.getWidth=function(t){var e=0;return\"object\"==typeof t&&(e=U(t.Rect[2])),e},wt.internal.getHeight=function(t){var e=0;return\"object\"==typeof t&&(e=U(t.Rect[3])),e};var Nt=B.addField=function(t){if(rt(this,t),!(t instanceof ut))throw new Error(\"Invalid argument passed to jsPDF.addField.\");var e;return(e=t).scope.internal.acroformPlugin.printedOut&&(e.scope.internal.acroformPlugin.printedOut=!1,e.scope.internal.acroformPlugin.acroFormDictionaryRoot=null),e.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(e),t.page=t.scope.internal.getCurrentPageInfo().pageNumber,this};B.AcroFormChoiceField=ct,B.AcroFormListBox=lt,B.AcroFormComboBox=ht,B.AcroFormEditBox=ft,B.AcroFormButton=dt,B.AcroFormPushButton=pt,B.AcroFormRadioButton=gt,B.AcroFormCheckBox=vt,B.AcroFormTextField=bt,B.AcroFormPasswordField=yt,B.AcroFormAppearance=wt,B.AcroForm={ChoiceField:ct,ListBox:lt,ComboBox:ht,EditBox:ft,Button:dt,PushButton:pt,RadioButton:gt,CheckBox:vt,TextField:bt,PasswordField:yt,Appearance:wt},O.AcroForm={ChoiceField:ct,ListBox:lt,ComboBox:ht,EditBox:ft,Button:dt,PushButton:pt,RadioButton:gt,CheckBox:vt,TextField:bt,PasswordField:yt,Appearance:wt};var Lt=O.AcroForm;\n/** @license\n * jsPDF addImage plugin\n * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/\n * 2013 Chris Dowling, https://github.com/gingerchris\n * 2013 Trinh Ho, https://github.com/ineedfat\n * 2013 Edwin Alejandro Perez, https://github.com/eaparango\n * 2013 Norah Smith, https://github.com/burnburnrocket\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */function At(t){return t.reduce((function(t,e,r){return t[e]=r,t}),{})}!function(t){t.__addimage__={};var e=\"UNKNOWN\",r={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0],[255,216,255,219],[255,216,255,238]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],WEBP:[[82,73,70,70,void 0,void 0,void 0,void 0,87,69,66,80]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]},n=t.__addimage__.getImageFileTypeByImageData=function(t,n){var i,a;n=n||e;var o,s,u,c=e;if(x(t))for(u in r)for(o=r[u],i=0;i<o.length;i+=1){for(s=!0,a=0;a<o[i].length;a+=1)if(void 0!==o[i][a]&&o[i][a]!==t[a]){s=!1;break}if(!0===s){c=u;break}}else for(u in r)for(o=r[u],i=0;i<o.length;i+=1){for(s=!0,a=0;a<o[i].length;a+=1)if(void 0!==o[i][a]&&o[i][a]!==t.charCodeAt(a)){s=!1;break}if(!0===s){c=u;break}}return c===e&&n!==e&&(c=n),c},i=function(t){for(var e=this.internal.write,r=this.internal.putStream,n=(0,this.internal.getFilters)();-1!==n.indexOf(\"FlateEncode\");)n.splice(n.indexOf(\"FlateEncode\"),1);t.objectId=this.internal.newObject();var a=[];if(a.push({key:\"Type\",value:\"/XObject\"}),a.push({key:\"Subtype\",value:\"/Image\"}),a.push({key:\"Width\",value:t.width}),a.push({key:\"Height\",value:t.height}),t.colorSpace===b.INDEXED?a.push({key:\"ColorSpace\",value:\"[/Indexed /DeviceRGB \"+(t.palette.length/3-1)+\" \"+(\"sMask\"in t&&void 0!==t.sMask?t.objectId+2:t.objectId+1)+\" 0 R]\"}):(a.push({key:\"ColorSpace\",value:\"/\"+t.colorSpace}),t.colorSpace===b.DEVICE_CMYK&&a.push({key:\"Decode\",value:\"[1 0 1 0 1 0 1 0]\"})),a.push({key:\"BitsPerComponent\",value:t.bitsPerComponent}),\"decodeParameters\"in t&&void 0!==t.decodeParameters&&a.push({key:\"DecodeParms\",value:\"<<\"+t.decodeParameters+\">>\"}),\"transparency\"in t&&Array.isArray(t.transparency)){for(var o=\"\",s=0,u=t.transparency.length;s<u;s++)o+=t.transparency[s]+\" \"+t.transparency[s]+\" \";a.push({key:\"Mask\",value:\"[\"+o+\"]\"})}void 0!==t.sMask&&a.push({key:\"SMask\",value:t.objectId+1+\" 0 R\"});var c=void 0!==t.filter?[\"/\"+t.filter]:void 0;if(r({data:t.data,additionalKeyValues:a,alreadyAppliedFilters:c,objectId:t.objectId}),e(\"endobj\"),\"sMask\"in t&&void 0!==t.sMask){var l=\"/Predictor \"+t.predictor+\" /Colors 1 /BitsPerComponent \"+t.bitsPerComponent+\" /Columns \"+t.width,h={width:t.width,height:t.height,colorSpace:\"DeviceGray\",bitsPerComponent:t.bitsPerComponent,decodeParameters:l,data:t.sMask};\"filter\"in t&&(h.filter=t.filter),i.call(this,h)}if(t.colorSpace===b.INDEXED){var f=this.internal.newObject();r({data:_(new Uint8Array(t.palette)),objectId:f}),e(\"endobj\")}},a=function(){var t=this.internal.collections.addImage_images;for(var e in t)i.call(this,t[e])},o=function(){var t,e=this.internal.collections.addImage_images,r=this.internal.write;for(var n in e)r(\"/I\"+(t=e[n]).index,t.objectId,\"0\",\"R\")},s=function(){this.internal.collections.addImage_images||(this.internal.collections.addImage_images={},this.internal.events.subscribe(\"putResources\",a),this.internal.events.subscribe(\"putXobjectDict\",o))},l=function(){var t=this.internal.collections.addImage_images;return s.call(this),t},h=function(){return Object.keys(this.internal.collections.addImage_images).length},f=function(e){return\"function\"==typeof t[\"process\"+e.toUpperCase()]},d=function(t){return\"object\"==typeof t&&1===t.nodeType},p=function(e,r){if(\"IMG\"===e.nodeName&&e.hasAttribute(\"src\")){var n=\"\"+e.getAttribute(\"src\");if(0===n.indexOf(\"data:image/\"))return u(unescape(n).split(\"base64,\").pop());var i=t.loadFile(n,!0);if(void 0!==i)return i}if(\"CANVAS\"===e.nodeName){var a;switch(r){case\"PNG\":a=\"image/png\";break;case\"WEBP\":a=\"image/webp\";break;case\"JPEG\":case\"JPG\":default:a=\"image/jpeg\"}return u(e.toDataURL(a,1).split(\"base64,\").pop())}},g=function(t){var e=this.internal.collections.addImage_images;if(e)for(var r in e)if(t===e[r].alias)return e[r]},m=function(t,e,r){return t||e||(t=-96,e=-96),t<0&&(t=-1*r.width*72/t/this.internal.scaleFactor),e<0&&(e=-1*r.height*72/e/this.internal.scaleFactor),0===t&&(t=e*r.width/r.height),0===e&&(e=t*r.height/r.width),[t,e]},v=function(t,e,r,n,i,a){var o=m.call(this,r,n,i),s=this.internal.getCoordinateString,u=this.internal.getVerticalCoordinateString,c=l.call(this);if(r=o[0],n=o[1],c[i.index]=i,a){a*=Math.PI/180;var h=Math.cos(a),f=Math.sin(a),d=function(t){return t.toFixed(4)},p=[d(h),d(f),d(-1*f),d(h),0,0,\"cm\"]}this.internal.write(\"q\"),a?(this.internal.write([1,\"0\",\"0\",1,s(t),u(e+n),\"cm\"].join(\" \")),this.internal.write(p.join(\" \")),this.internal.write([s(r),\"0\",\"0\",s(n),\"0\",\"0\",\"cm\"].join(\" \"))):this.internal.write([s(r),\"0\",\"0\",s(n),s(t),u(e+n),\"cm\"].join(\" \")),this.isAdvancedAPI()&&this.internal.write([1,0,0,-1,0,0,\"cm\"].join(\" \")),this.internal.write(\"/I\"+i.index+\" Do\"),this.internal.write(\"Q\")},b=t.color_spaces={DEVICE_RGB:\"DeviceRGB\",DEVICE_GRAY:\"DeviceGray\",DEVICE_CMYK:\"DeviceCMYK\",CAL_GREY:\"CalGray\",CAL_RGB:\"CalRGB\",LAB:\"Lab\",ICC_BASED:\"ICCBased\",INDEXED:\"Indexed\",PATTERN:\"Pattern\",SEPARATION:\"Separation\",DEVICE_N:\"DeviceN\"};t.decode={DCT_DECODE:\"DCTDecode\",FLATE_DECODE:\"FlateDecode\",LZW_DECODE:\"LZWDecode\",JPX_DECODE:\"JPXDecode\",JBIG2_DECODE:\"JBIG2Decode\",ASCII85_DECODE:\"ASCII85Decode\",ASCII_HEX_DECODE:\"ASCIIHexDecode\",RUN_LENGTH_DECODE:\"RunLengthDecode\",CCITT_FAX_DECODE:\"CCITTFaxDecode\"};var y=t.image_compression={NONE:\"NONE\",FAST:\"FAST\",MEDIUM:\"MEDIUM\",SLOW:\"SLOW\"},w=t.__addimage__.sHashCode=function(t){var e,r,n=0;if(\"string\"==typeof t)for(r=t.length,e=0;e<r;e++)n=(n<<5)-n+t.charCodeAt(e),n|=0;else if(x(t))for(r=t.byteLength/2,e=0;e<r;e++)n=(n<<5)-n+t[e],n|=0;return n},N=t.__addimage__.validateStringAsBase64=function(t){(t=t||\"\").toString().trim();var e=!0;return 0===t.length&&(e=!1),t.length%4!=0&&(e=!1),!1===/^[A-Za-z0-9+/]+$/.test(t.substr(0,t.length-2))&&(e=!1),!1===/^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(t.substr(-2))&&(e=!1),e},L=t.__addimage__.extractImageFromDataUrl=function(t){var e=(t=t||\"\").split(\"base64,\"),r=null;if(2===e.length){var n=/^data:(\\w*\\/\\w*);*(charset=[\\w=-]*)*;*$/.exec(e[0]);Array.isArray(n)&&(r={mimeType:n[1],charset:n[2],data:e[1]})}return r},A=t.__addimage__.supportsArrayBuffer=function(){return\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array};t.__addimage__.isArrayBuffer=function(t){return A()&&t instanceof ArrayBuffer};var x=t.__addimage__.isArrayBufferView=function(t){return A()&&\"undefined\"!=typeof Uint32Array&&(t instanceof Int8Array||t instanceof Uint8Array||\"undefined\"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)},S=t.__addimage__.binaryStringToUint8Array=function(t){for(var e=t.length,r=new Uint8Array(e),n=0;n<e;n++)r[n]=t.charCodeAt(n);return r},_=t.__addimage__.arrayBufferToBinaryString=function(t){try{return u(c(String.fromCharCode.apply(null,t)))}catch(e){if(\"undefined\"!=typeof Uint8Array&&void 0!==Uint8Array.prototype.reduce)return new Uint8Array(t).reduce((function(t,e){return t.push(String.fromCharCode(e)),t}),[]).join(\"\")}};t.addImage=function(){var t,r,n,i,a,o,u,c,l;if(\"number\"==typeof arguments[1]?(r=e,n=arguments[1],i=arguments[2],a=arguments[3],o=arguments[4],u=arguments[5],c=arguments[6],l=arguments[7]):(r=arguments[1],n=arguments[2],i=arguments[3],a=arguments[4],o=arguments[5],u=arguments[6],c=arguments[7],l=arguments[8]),\"object\"==typeof(t=arguments[0])&&!d(t)&&\"imageData\"in t){var h=t;t=h.imageData,r=h.format||r||e,n=h.x||n||0,i=h.y||i||0,a=h.w||h.width||a,o=h.h||h.height||o,u=h.alias||u,c=h.compression||c,l=h.rotation||h.angle||l}var f=this.internal.getFilters();if(void 0===c&&-1!==f.indexOf(\"FlateEncode\")&&(c=\"SLOW\"),isNaN(n)||isNaN(i))throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");s.call(this);var p=P.call(this,t,r,u,c);return v.call(this,n,i,a,o,p,l),this};var P=function(r,i,a,o){var s,u,c;if(\"string\"==typeof r&&n(r)===e){r=unescape(r);var l=k(r,!1);(\"\"!==l||void 0!==(l=t.loadFile(r,!0)))&&(r=l)}if(d(r)&&(r=p(r,i)),i=n(r,i),!f(i))throw new Error(\"addImage does not support files of type '\"+i+\"', please ensure that a plugin for '\"+i+\"' support is added.\");if((null==(c=a)||0===c.length)&&(a=function(t){return\"string\"==typeof t||x(t)?w(t):null}(r)),(s=g.call(this,a))||(A()&&(r instanceof Uint8Array||(u=r,r=S(r))),s=this[\"process\"+i.toUpperCase()](r,h.call(this),a,function(e){return e&&\"string\"==typeof e&&(e=e.toUpperCase()),e in t.image_compression?e:y.NONE}(o),u)),!s)throw new Error(\"An unknown error occurred whilst processing the image.\");return s},k=t.__addimage__.convertBase64ToBinaryString=function(t,e){var r;e=\"boolean\"!=typeof e||e;var n,i=\"\";if(\"string\"==typeof t){n=null!==(r=L(t))?r.data:t;try{i=u(n)}catch(t){if(e)throw N(n)?new Error(\"atob-Error in jsPDF.convertBase64ToBinaryString \"+t.message):new Error(\"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \")}}return i};t.getImageProperties=function(r){var i,a,o=\"\";if(d(r)&&(r=p(r)),\"string\"==typeof r&&n(r)===e&&(\"\"===(o=k(r,!1))&&(o=t.loadFile(r)||\"\"),r=o),a=n(r),!f(a))throw new Error(\"addImage does not support files of type '\"+a+\"', please ensure that a plugin for '\"+a+\"' support is added.\");if(!A()||r instanceof Uint8Array||(r=S(r)),!(i=this[\"process\"+a.toUpperCase()](r)))throw new Error(\"An unknown error occurred whilst processing the image\");return i.fileType=a,i}}(O.API),\n/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e=function(t){if(void 0!==t&&\"\"!=t)return!0};O.API.events.push([\"addPage\",function(t){this.internal.getPageInfo(t.pageNumber).pageContext.annotations=[]}]),t.events.push([\"putPage\",function(t){for(var r,n,i,a=this.internal.getCoordinateString,o=this.internal.getVerticalCoordinateString,s=this.internal.getPageInfoByObjId(t.objId),u=t.pageContext.annotations,c=!1,l=0;l<u.length&&!c;l++)switch((r=u[l]).type){case\"link\":(e(r.options.url)||e(r.options.pageNumber))&&(c=!0);break;case\"reference\":case\"text\":case\"freetext\":c=!0}if(0!=c){this.internal.write(\"/Annots [\");for(var h=0;h<u.length;h++){r=u[h];var f=this.internal.pdfEscape,d=this.internal.getEncryptor(t.objId);switch(r.type){case\"reference\":this.internal.write(\" \"+r.object.objId+\" 0 R \");break;case\"text\":var p=this.internal.newAdditionalObject(),g=this.internal.newAdditionalObject(),m=this.internal.getEncryptor(p.objId),v=r.title||\"Note\";i=\"<</Type /Annot /Subtype /Text \"+(n=\"/Rect [\"+a(r.bounds.x)+\" \"+o(r.bounds.y+r.bounds.h)+\" \"+a(r.bounds.x+r.bounds.w)+\" \"+o(r.bounds.y)+\"] \")+\"/Contents (\"+f(m(r.contents))+\")\",i+=\" /Popup \"+g.objId+\" 0 R\",i+=\" /P \"+s.objId+\" 0 R\",i+=\" /T (\"+f(m(v))+\") >>\",p.content=i;var b=p.objId+\" 0 R\";i=\"<</Type /Annot /Subtype /Popup \"+(n=\"/Rect [\"+a(r.bounds.x+30)+\" \"+o(r.bounds.y+r.bounds.h)+\" \"+a(r.bounds.x+r.bounds.w+30)+\" \"+o(r.bounds.y)+\"] \")+\" /Parent \"+b,r.open&&(i+=\" /Open true\"),i+=\" >>\",g.content=i,this.internal.write(p.objId,\"0 R\",g.objId,\"0 R\");break;case\"freetext\":n=\"/Rect [\"+a(r.bounds.x)+\" \"+o(r.bounds.y)+\" \"+a(r.bounds.x+r.bounds.w)+\" \"+o(r.bounds.y+r.bounds.h)+\"] \";var y=r.color||\"#000000\";i=\"<</Type /Annot /Subtype /FreeText \"+n+\"/Contents (\"+f(d(r.contents))+\")\",i+=\" /DS(font: Helvetica,sans-serif 12.0pt; text-align:left; color:#\"+y+\")\",i+=\" /Border [0 0 0]\",i+=\" >>\",this.internal.write(i);break;case\"link\":if(r.options.name){var w=this.annotations._nameMap[r.options.name];r.options.pageNumber=w.page,r.options.top=w.y}else r.options.top||(r.options.top=0);if(n=\"/Rect [\"+r.finalBounds.x+\" \"+r.finalBounds.y+\" \"+r.finalBounds.w+\" \"+r.finalBounds.h+\"] \",i=\"\",r.options.url)i=\"<</Type /Annot /Subtype /Link \"+n+\"/Border [0 0 0] /A <</S /URI /URI (\"+f(d(r.options.url))+\") >>\";else if(r.options.pageNumber){switch(i=\"<</Type /Annot /Subtype /Link \"+n+\"/Border [0 0 0] /Dest [\"+this.internal.getPageInfo(r.options.pageNumber).objId+\" 0 R\",r.options.magFactor=r.options.magFactor||\"XYZ\",r.options.magFactor){case\"Fit\":i+=\" /Fit]\";break;case\"FitH\":i+=\" /FitH \"+r.options.top+\"]\";break;case\"FitV\":r.options.left=r.options.left||0,i+=\" /FitV \"+r.options.left+\"]\";break;case\"XYZ\":default:var N=o(r.options.top);r.options.left=r.options.left||0,void 0===r.options.zoom&&(r.options.zoom=0),i+=\" /XYZ \"+r.options.left+\" \"+N+\" \"+r.options.zoom+\"]\"}}\"\"!=i&&(i+=\" >>\",this.internal.write(i))}}this.internal.write(\"]\")}}]),t.createAnnotation=function(t){var e=this.internal.getCurrentPageInfo();switch(t.type){case\"link\":this.link(t.bounds.x,t.bounds.y,t.bounds.w,t.bounds.h,t);break;case\"text\":case\"freetext\":e.pageContext.annotations.push(t)}},t.link=function(t,e,r,n,i){var a=this.internal.getCurrentPageInfo(),o=this.internal.getCoordinateString,s=this.internal.getVerticalCoordinateString;a.pageContext.annotations.push({finalBounds:{x:o(t),y:s(e),w:o(t+r),h:s(e+n)},options:i,type:\"link\"})},t.textWithLink=function(t,e,r,n){var i=this.getTextWidth(t),a=this.internal.getLineHeight()/this.internal.scaleFactor;return this.text(t,e,r,n),r+=.2*a,\"center\"===n.align&&(e-=i/2),\"right\"===n.align&&(e-=i),this.link(e,r-a,i,a,n),i},t.getTextWidth=function(t){var e=this.internal.getFontSize();return this.getStringUnitWidth(t)*e/this.internal.scaleFactor}}(O.API),\n/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e={1569:[65152],1570:[65153,65154],1571:[65155,65156],1572:[65157,65158],1573:[65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194],1584:[65195,65196],1585:[65197,65198],1586:[65199,65200],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},r={65247:{65154:65269,65156:65271,65160:65273,65166:65275},65248:{65154:65270,65156:65272,65160:65274,65166:65276},65165:{65247:{65248:{65258:65010}}},1617:{1612:64606,1613:64607,1614:64608,1615:64609,1616:64610}},n={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},i=[1570,1571,1573,1575];t.__arabicParser__={};var a=t.__arabicParser__.isInArabicSubstitutionA=function(t){return void 0!==e[t.charCodeAt(0)]},o=t.__arabicParser__.isArabicLetter=function(t){return\"string\"==typeof t&&/^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(t)},s=t.__arabicParser__.isArabicEndLetter=function(t){return o(t)&&a(t)&&e[t.charCodeAt(0)].length<=2},u=t.__arabicParser__.isArabicAlfLetter=function(t){return o(t)&&i.indexOf(t.charCodeAt(0))>=0};t.__arabicParser__.arabicLetterHasIsolatedForm=function(t){return o(t)&&a(t)&&e[t.charCodeAt(0)].length>=1};var c=t.__arabicParser__.arabicLetterHasFinalForm=function(t){return o(t)&&a(t)&&e[t.charCodeAt(0)].length>=2};t.__arabicParser__.arabicLetterHasInitialForm=function(t){return o(t)&&a(t)&&e[t.charCodeAt(0)].length>=3};var l=t.__arabicParser__.arabicLetterHasMedialForm=function(t){return o(t)&&a(t)&&4==e[t.charCodeAt(0)].length},h=t.__arabicParser__.resolveLigatures=function(t){var e=0,n=r,i=\"\",a=0;for(e=0;e<t.length;e+=1)void 0!==n[t.charCodeAt(e)]?(a++,\"number\"==typeof(n=n[t.charCodeAt(e)])&&(i+=String.fromCharCode(n),n=r,a=0),e===t.length-1&&(n=r,i+=t.charAt(e-(a-1)),e-=a-1,a=0)):(n=r,i+=t.charAt(e-a),e-=a,a=0);return i};t.__arabicParser__.isArabicDiacritic=function(t){return void 0!==t&&void 0!==n[t.charCodeAt(0)]};var f=t.__arabicParser__.getCorrectForm=function(t,e,r){return o(t)?!1===a(t)?-1:!c(t)||!o(e)&&!o(r)||!o(r)&&s(e)||s(t)&&!o(e)||s(t)&&u(e)||s(t)&&s(e)?0:l(t)&&o(e)&&!s(e)&&o(r)&&c(r)?3:s(t)||!o(r)?1:2:-1},d=function(t){var r=0,n=0,i=0,a=\"\",s=\"\",u=\"\",c=(t=t||\"\").split(\"\\\\s+\"),l=[];for(r=0;r<c.length;r+=1){for(l.push(\"\"),n=0;n<c[r].length;n+=1)a=c[r][n],s=c[r][n-1],u=c[r][n+1],o(a)?(i=f(a,s,u),l[r]+=-1!==i?String.fromCharCode(e[a.charCodeAt(0)][i]):a):l[r]+=a;l[r]=h(l[r])}return l.join(\" \")},p=t.__arabicParser__.processArabic=t.processArabic=function(){var t,e=\"string\"==typeof arguments[0]?arguments[0]:arguments[0].text,r=[];if(Array.isArray(e)){var n=0;for(r=[],n=0;n<e.length;n+=1)Array.isArray(e[n])?r.push([d(e[n][0]),e[n][1],e[n][2]]):r.push([d(e[n])]);t=r}else t=d(e);return\"string\"==typeof arguments[0]?t:(arguments[0].text=t,arguments[0])};t.events.push([\"preProcessText\",p])}(O.API),O.API.autoPrint=function(t){var e;switch((t=t||{}).variant=t.variant||\"non-conform\",t.variant){case\"javascript\":this.addJS(\"print({});\");break;case\"non-conform\":default:this.internal.events.subscribe(\"postPutResources\",(function(){e=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/S /Named\"),this.internal.out(\"/Type /Action\"),this.internal.out(\"/N /Print\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")})),this.internal.events.subscribe(\"putCatalog\",(function(){this.internal.out(\"/OpenAction \"+e+\" 0 R\")}))}return this},\n/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e=function(){var t=void 0;Object.defineProperty(this,\"pdf\",{get:function(){return t},set:function(e){t=e}});var e=150;Object.defineProperty(this,\"width\",{get:function(){return e},set:function(t){e=isNaN(t)||!1===Number.isInteger(t)||t<0?150:t,this.getContext(\"2d\").pageWrapXEnabled&&(this.getContext(\"2d\").pageWrapX=e+1)}});var r=300;Object.defineProperty(this,\"height\",{get:function(){return r},set:function(t){r=isNaN(t)||!1===Number.isInteger(t)||t<0?300:t,this.getContext(\"2d\").pageWrapYEnabled&&(this.getContext(\"2d\").pageWrapY=r+1)}});var n=[];Object.defineProperty(this,\"childNodes\",{get:function(){return n},set:function(t){n=t}});var i={};Object.defineProperty(this,\"style\",{get:function(){return i},set:function(t){i=t}}),Object.defineProperty(this,\"parentNode\",{})};e.prototype.getContext=function(t,e){var r;if(\"2d\"!==(t=t||\"2d\"))return null;for(r in e)this.pdf.context2d.hasOwnProperty(r)&&(this.pdf.context2d[r]=e[r]);return this.pdf.context2d._canvas=this,this.pdf.context2d},e.prototype.toDataURL=function(){throw new Error(\"toDataURL is not implemented.\")},t.events.push([\"initialized\",function(){this.canvas=new e,this.canvas.pdf=this}])}(O.API),\n/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n * 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Hall, james@parall.ax\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\nfunction(t){var e={left:0,top:0,bottom:0,right:0},r=!1,n=function(){void 0===this.internal.__cell__&&(this.internal.__cell__={},this.internal.__cell__.padding=3,this.internal.__cell__.headerFunction=void 0,this.internal.__cell__.margins=Object.assign({},e),this.internal.__cell__.margins.width=this.getPageWidth(),i.call(this))},i=function(){this.internal.__cell__.lastCell=new a,this.internal.__cell__.pages=1},a=function(){var t=arguments[0];Object.defineProperty(this,\"x\",{enumerable:!0,get:function(){return t},set:function(e){t=e}});var e=arguments[1];Object.defineProperty(this,\"y\",{enumerable:!0,get:function(){return e},set:function(t){e=t}});var r=arguments[2];Object.defineProperty(this,\"width\",{enumerable:!0,get:function(){return r},set:function(t){r=t}});var n=arguments[3];Object.defineProperty(this,\"height\",{enumerable:!0,get:function(){return n},set:function(t){n=t}});var i=arguments[4];Object.defineProperty(this,\"text\",{enumerable:!0,get:function(){return i},set:function(t){i=t}});var a=arguments[5];Object.defineProperty(this,\"lineNumber\",{enumerable:!0,get:function(){return a},set:function(t){a=t}});var o=arguments[6];return Object.defineProperty(this,\"align\",{enumerable:!0,get:function(){return o},set:function(t){o=t}}),this};a.prototype.clone=function(){return new a(this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align)},a.prototype.toArray=function(){return[this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align]},t.setHeaderFunction=function(t){return n.call(this),this.internal.__cell__.headerFunction=\"function\"==typeof t?t:void 0,this},t.getTextDimensions=function(t,e){n.call(this);var r=(e=e||{}).fontSize||this.getFontSize(),i=e.font||this.getFont(),a=e.scaleFactor||this.internal.scaleFactor,o=0,s=0,u=0;if(!Array.isArray(t)&&\"string\"!=typeof t){if(\"number\"!=typeof t)throw new Error(\"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\");t=String(t)}const c=e.maxWidth;c>0?\"string\"==typeof t?t=this.splitTextToSize(t,c):\"[object Array]\"===Object.prototype.toString.call(t)&&(t=t.reduce((function(t,e){return t.concat(scope.splitTextToSize(e,c))}),[])):t=Array.isArray(t)?t:[t];for(var l=0;l<t.length;l++)o<(u=this.getStringUnitWidth(t[l],{font:i})*r)&&(o=u);return 0!==o&&(s=t.length),{w:o/=a,h:Math.max((s*r*this.getLineHeightFactor()-r*(this.getLineHeightFactor()-1))/a,0)}},t.cellAddPage=function(){n.call(this),this.addPage();var t=this.internal.__cell__.margins||e;return this.internal.__cell__.lastCell=new a(t.left,t.top,void 0,void 0),this.internal.__cell__.pages+=1,this};var o=t.cell=function(){var t;t=arguments[0]instanceof a?arguments[0]:new a(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]),n.call(this);var i=this.internal.__cell__.lastCell,o=this.internal.__cell__.padding,s=this.internal.__cell__.margins||e,u=this.internal.__cell__.tableHeaderRow,c=this.internal.__cell__.printHeaders;return void 0!==i.lineNumber&&(i.lineNumber===t.lineNumber?(t.x=(i.x||0)+(i.width||0),t.y=i.y||0):i.y+i.height+t.height+s.bottom>this.getPageHeight()?(this.cellAddPage(),t.y=s.top,c&&u&&(this.printHeaderRow(t.lineNumber,!0),t.y+=u[0].height)):t.y=i.y+i.height||t.y),void 0!==t.text[0]&&(this.rect(t.x,t.y,t.width,t.height,!0===r?\"FD\":void 0),\"right\"===t.align?this.text(t.text,t.x+t.width-o,t.y+o,{align:\"right\",baseline:\"top\"}):\"center\"===t.align?this.text(t.text,t.x+t.width/2,t.y+o,{align:\"center\",baseline:\"top\",maxWidth:t.width-o-o}):this.text(t.text,t.x+o,t.y+o,{align:\"left\",baseline:\"top\",maxWidth:t.width-o-o})),this.internal.__cell__.lastCell=t,this};t.table=function(t,r,u,c,l){if(n.call(this),!u)throw new Error(\"No data for PDF table.\");var h,f,d,p,g=[],m=[],v=[],b={},y={},w=[],N=[],L=(l=l||{}).autoSize||!1,A=!1!==l.printHeaders,x=l.css&&void 0!==l.css[\"font-size\"]?16*l.css[\"font-size\"]:l.fontSize||12,S=l.margins||Object.assign({width:this.getPageWidth()},e),_=\"number\"==typeof l.padding?l.padding:3,P=l.headerBackgroundColor||\"#c8c8c8\";if(i.call(this),this.internal.__cell__.printHeaders=A,this.internal.__cell__.margins=S,this.internal.__cell__.table_font_size=x,this.internal.__cell__.padding=_,this.internal.__cell__.headerBackgroundColor=P,this.setFontSize(x),null==c)m=g=Object.keys(u[0]),v=g.map((function(){return\"left\"}));else if(Array.isArray(c)&&\"object\"==typeof c[0])for(g=c.map((function(t){return t.name})),m=c.map((function(t){return t.prompt||t.name||\"\"})),v=c.map((function(t){return t.align||\"left\"})),h=0;h<c.length;h+=1)y[c[h].name]=c[h].width*(19.049976/25.4);else Array.isArray(c)&&\"string\"==typeof c[0]&&(m=g=c,v=g.map((function(){return\"left\"})));if(L)for(h=0;h<g.length;h+=1){for(b[p=g[h]]=u.map((function(t){return t[p]})),this.setFont(void 0,\"bold\"),w.push(this.getTextDimensions(m[h],{fontSize:this.internal.__cell__.table_font_size,scaleFactor:this.internal.scaleFactor}).w),f=b[p],this.setFont(void 0,\"normal\"),d=0;d<f.length;d+=1)w.push(this.getTextDimensions(f[d],{fontSize:this.internal.__cell__.table_font_size,scaleFactor:this.internal.scaleFactor}).w);y[p]=Math.max.apply(null,w)+_+_,w=[]}if(A){var k={};for(h=0;h<g.length;h+=1)k[g[h]]={},k[g[h]].text=m[h],k[g[h]].align=v[h];var I=s.call(this,k,y);N=g.map((function(e){return new a(t,r,y[e],I,k[e].text,void 0,k[e].align)})),this.setTableHeaderRow(N),this.printHeaderRow(1,!1)}var F=c.reduce((function(t,e){return t[e.name]=e.align,t}),{});for(h=0;h<u.length;h+=1){var C=s.call(this,u[h],y);for(d=0;d<g.length;d+=1)o.call(this,new a(t,r,y[g[d]],C,u[h][g[d]],h+2,F[g[d]]))}return this.internal.__cell__.table_x=t,this.internal.__cell__.table_y=r,this};var s=function(t,e){var r=this.internal.__cell__.padding,n=this.internal.__cell__.table_font_size,i=this.internal.scaleFactor;return Object.keys(t).map((function(n){var i=t[n];return this.splitTextToSize(i.hasOwnProperty(\"text\")?i.text:i,e[n]-r-r)}),this).map((function(t){return this.getLineHeightFactor()*t.length*n/i+r+r}),this).reduce((function(t,e){return Math.max(t,e)}),0)};t.setTableHeaderRow=function(t){n.call(this),this.internal.__cell__.tableHeaderRow=t},t.printHeaderRow=function(t,e){if(n.call(this),!this.internal.__cell__.tableHeaderRow)throw new Error(\"Property tableHeaderRow does not exist.\");var i;if(r=!0,\"function\"==typeof this.internal.__cell__.headerFunction){var s=this.internal.__cell__.headerFunction(this,this.internal.__cell__.pages);this.internal.__cell__.lastCell=new a(s[0],s[1],s[2],s[3],void 0,-1)}this.setFont(void 0,\"bold\");for(var u=[],c=0;c<this.internal.__cell__.tableHeaderRow.length;c+=1)i=this.internal.__cell__.tableHeaderRow[c].clone(),e&&(i.y=this.internal.__cell__.margins.top||0,u.push(i)),i.lineNumber=t,this.setFillColor(this.internal.__cell__.headerBackgroundColor),o.call(this,i);u.length>0&&this.setTableHeaderRow(u),this.setFont(void 0,\"normal\"),r=!1}}(O.API);var xt={italic:[\"italic\",\"oblique\",\"normal\"],oblique:[\"oblique\",\"italic\",\"normal\"],normal:[\"normal\",\"oblique\",\"italic\"]},St=[\"ultra-condensed\",\"extra-condensed\",\"condensed\",\"semi-condensed\",\"normal\",\"semi-expanded\",\"expanded\",\"extra-expanded\",\"ultra-expanded\"],_t=At(St),Pt=[100,200,300,400,500,600,700,800,900],kt=At(Pt);function It(t){var e=t.family.replace(/\"|'/g,\"\").toLowerCase(),r=function(t){return xt[t=t||\"normal\"]?t:\"normal\"}(t.style),n=function(t){if(!t)return 400;if(\"number\"==typeof t)return t>=100&&t<=900&&t%100==0?t:400;if(/^\\d00$/.test(t))return parseInt(t);switch(t){case\"bold\":return 700;case\"normal\":default:return 400}}(t.weight),i=function(t){return\"number\"==typeof _t[t=t||\"normal\"]?t:\"normal\"}(t.stretch);return{family:e,style:r,weight:n,stretch:i,src:t.src||[],ref:t.ref||{name:e,style:[i,r,n].join(\" \")}}}function Ft(t,e,r,n){var i;for(i=r;i>=0&&i<e.length;i+=n)if(t[e[i]])return t[e[i]];for(i=r;i>=0&&i<e.length;i-=n)if(t[e[i]])return t[e[i]]}var Ct={\"sans-serif\":\"helvetica\",fixed:\"courier\",monospace:\"courier\",terminal:\"courier\",cursive:\"times\",fantasy:\"times\",serif:\"times\"},jt={caption:\"times\",icon:\"times\",menu:\"times\",\"message-box\":\"times\",\"small-caption\":\"times\",\"status-bar\":\"times\"};function Ot(t){return[t.stretch,t.style,t.weight,t.family].join(\" \")}function Bt(t,e,r){for(var n=(r=r||{}).defaultFontFamily||\"times\",i=Object.assign({},Ct,r.genericFontFamilies||{}),a=null,o=null,s=0;s<e.length;++s)if(i[(a=It(e[s])).family]&&(a.family=i[a.family]),t.hasOwnProperty(a.family)){o=t[a.family];break}if(!(o=o||t[n]))throw new Error(\"Could not find a font-family for the rule '\"+Ot(a)+\"' and default family '\"+n+\"'.\");if(o=function(t,e){if(e[t])return e[t];var r=_t[t],n=r<=_t.normal?-1:1,i=Ft(e,St,r,n);if(!i)throw new Error(\"Could not find a matching font-stretch value for \"+t);return i}(a.stretch,o),o=function(t,e){if(e[t])return e[t];for(var r=xt[t],n=0;n<r.length;++n)if(e[r[n]])return e[r[n]];throw new Error(\"Could not find a matching font-style for \"+t)}(a.style,o),!(o=function(t,e){if(e[t])return e[t];if(400===t&&e[500])return e[500];if(500===t&&e[400])return e[400];var r=kt[t],n=Ft(e,Pt,r,t<400?-1:1);if(!n)throw new Error(\"Could not find a matching font-weight for value \"+t);return n}(a.weight,o)))throw new Error(\"Failed to resolve a font for the rule '\"+Ot(a)+\"'.\");return o}function Mt(t){return t.trimLeft()}function Et(t,e){for(var r=0;r<t.length;){if(t.charAt(r)===e)return[t.substring(0,r),t.substring(r+1)];r+=1}return null}function qt(t){var e=t.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i);return null===e?null:[e[0],t.substring(e[0].length)]}var Rt,Dt,Tt,Ut=[\"times\"];!function(t){var e,r,n,a,o,s,u,c,l,f=function(t){return t=t||{},this.isStrokeTransparent=t.isStrokeTransparent||!1,this.strokeOpacity=t.strokeOpacity||1,this.strokeStyle=t.strokeStyle||\"#000000\",this.fillStyle=t.fillStyle||\"#000000\",this.isFillTransparent=t.isFillTransparent||!1,this.fillOpacity=t.fillOpacity||1,this.font=t.font||\"10px sans-serif\",this.textBaseline=t.textBaseline||\"alphabetic\",this.textAlign=t.textAlign||\"left\",this.lineWidth=t.lineWidth||1,this.lineJoin=t.lineJoin||\"miter\",this.lineCap=t.lineCap||\"butt\",this.path=t.path||[],this.transform=void 0!==t.transform?t.transform.clone():new c,this.globalCompositeOperation=t.globalCompositeOperation||\"normal\",this.globalAlpha=t.globalAlpha||1,this.clip_path=t.clip_path||[],this.currentPoint=t.currentPoint||new s,this.miterLimit=t.miterLimit||10,this.lastPoint=t.lastPoint||new s,this.ignoreClearRect=\"boolean\"!=typeof t.ignoreClearRect||t.ignoreClearRect,this};t.events.push([\"initialized\",function(){this.context2d=new d(this),e=this.internal.f2,r=this.internal.getCoordinateString,n=this.internal.getVerticalCoordinateString,a=this.internal.getHorizontalCoordinate,o=this.internal.getVerticalCoordinate,s=this.internal.Point,u=this.internal.Rectangle,c=this.internal.Matrix,l=new f}]);var d=function(t){Object.defineProperty(this,\"canvas\",{get:function(){return{parentNode:!1,style:!1}}});var e=t;Object.defineProperty(this,\"pdf\",{get:function(){return e}});var r=!1;Object.defineProperty(this,\"pageWrapXEnabled\",{get:function(){return r},set:function(t){r=Boolean(t)}});var n=!1;Object.defineProperty(this,\"pageWrapYEnabled\",{get:function(){return n},set:function(t){n=Boolean(t)}});var i=0;Object.defineProperty(this,\"posX\",{get:function(){return i},set:function(t){isNaN(t)||(i=t)}});var a=0;Object.defineProperty(this,\"posY\",{get:function(){return a},set:function(t){isNaN(t)||(a=t)}});var o=!1;Object.defineProperty(this,\"autoPaging\",{get:function(){return o},set:function(t){o=Boolean(t)}});var s=0;Object.defineProperty(this,\"lastBreak\",{get:function(){return s},set:function(t){s=t}});var u=[];Object.defineProperty(this,\"pageBreaks\",{get:function(){return u},set:function(t){u=t}}),Object.defineProperty(this,\"ctx\",{get:function(){return l},set:function(t){t instanceof f&&(l=t)}}),Object.defineProperty(this,\"path\",{get:function(){return l.path},set:function(t){l.path=t}});var c=[];Object.defineProperty(this,\"ctxStack\",{get:function(){return c},set:function(t){c=t}}),Object.defineProperty(this,\"fillStyle\",{get:function(){return this.ctx.fillStyle},set:function(t){var e;e=p(t),this.ctx.fillStyle=e.style,this.ctx.isFillTransparent=0===e.a,this.ctx.fillOpacity=e.a,this.pdf.setFillColor(e.r,e.g,e.b,{a:e.a}),this.pdf.setTextColor(e.r,e.g,e.b,{a:e.a})}}),Object.defineProperty(this,\"strokeStyle\",{get:function(){return this.ctx.strokeStyle},set:function(t){var e=p(t);this.ctx.strokeStyle=e.style,this.ctx.isStrokeTransparent=0===e.a,this.ctx.strokeOpacity=e.a,0===e.a?this.pdf.setDrawColor(255,255,255):(e.a,this.pdf.setDrawColor(e.r,e.g,e.b))}}),Object.defineProperty(this,\"lineCap\",{get:function(){return this.ctx.lineCap},set:function(t){-1!==[\"butt\",\"round\",\"square\"].indexOf(t)&&(this.ctx.lineCap=t,this.pdf.setLineCap(t))}}),Object.defineProperty(this,\"lineWidth\",{get:function(){return this.ctx.lineWidth},set:function(t){isNaN(t)||(this.ctx.lineWidth=t,this.pdf.setLineWidth(t))}}),Object.defineProperty(this,\"lineJoin\",{get:function(){return this.ctx.lineJoin},set:function(t){-1!==[\"bevel\",\"round\",\"miter\"].indexOf(t)&&(this.ctx.lineJoin=t,this.pdf.setLineJoin(t))}}),Object.defineProperty(this,\"miterLimit\",{get:function(){return this.ctx.miterLimit},set:function(t){isNaN(t)||(this.ctx.miterLimit=t,this.pdf.setMiterLimit(t))}}),Object.defineProperty(this,\"textBaseline\",{get:function(){return this.ctx.textBaseline},set:function(t){this.ctx.textBaseline=t}}),Object.defineProperty(this,\"textAlign\",{get:function(){return this.ctx.textAlign},set:function(t){-1!==[\"right\",\"end\",\"center\",\"left\",\"start\"].indexOf(t)&&(this.ctx.textAlign=t)}});var h=null;function d(t,e){if(null===h){var r=function(t){var e=[];return Object.keys(t).forEach((function(r){t[r].forEach((function(t){var n=null;switch(t){case\"bold\":n={family:r,weight:\"bold\"};break;case\"italic\":n={family:r,style:\"italic\"};break;case\"bolditalic\":n={family:r,weight:\"bold\",style:\"italic\"};break;case\"\":case\"normal\":n={family:r}}null!==n&&(n.ref={name:r,style:t},e.push(n))}))})),e}(t.getFontList());h=function(t){for(var e={},r=0;r<t.length;++r){var n=It(t[r]),i=n.family,a=n.stretch,o=n.style,s=n.weight;e[i]=e[i]||{},e[i][a]=e[i][a]||{},e[i][a][o]=e[i][a][o]||{},e[i][a][o][s]=n}return e}(r.concat(e))}return h}var g=null;Object.defineProperty(this,\"fontFaces\",{get:function(){return g},set:function(t){h=null,g=t}}),Object.defineProperty(this,\"font\",{get:function(){return this.ctx.font},set:function(t){var e;if(this.ctx.font=t,null!==(e=/^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z]+?)\\s*$/i.exec(t))){var r=e[1],n=(e[2],e[3]),i=e[4],a=(e[5],e[6]),o=/^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i.exec(i)[2];i=\"px\"===o?Math.floor(parseFloat(i)*this.pdf.internal.scaleFactor):\"em\"===o?Math.floor(parseFloat(i)*this.pdf.getFontSize()):Math.floor(parseFloat(i)*this.pdf.internal.scaleFactor),this.pdf.setFontSize(i);var s=function(t){var e,r,n=[],i=t.trim();if(\"\"===i)return Ut;if(i in jt)return[jt[i]];for(;\"\"!==i;){switch(r=null,e=(i=Mt(i)).charAt(0)){case'\"':case\"'\":r=Et(i.substring(1),e);break;default:r=qt(i)}if(null===r)return Ut;if(n.push(r[0]),\"\"!==(i=Mt(r[1]))&&\",\"!==i.charAt(0))return Ut;i=i.replace(/^,/,\"\")}return n}(a);if(this.fontFaces){var u=Bt(d(this.pdf,this.fontFaces),s.map((function(t){return{family:t,stretch:\"normal\",weight:n,style:r}})));this.pdf.setFont(u.ref.name,u.ref.style)}else{var c=\"\";(\"bold\"===n||parseInt(n,10)>=700||\"bold\"===r)&&(c=\"bold\"),\"italic\"===r&&(c+=\"italic\"),0===c.length&&(c=\"normal\");for(var l=\"\",h={arial:\"Helvetica\",Arial:\"Helvetica\",verdana:\"Helvetica\",Verdana:\"Helvetica\",helvetica:\"Helvetica\",Helvetica:\"Helvetica\",\"sans-serif\":\"Helvetica\",fixed:\"Courier\",monospace:\"Courier\",terminal:\"Courier\",cursive:\"Times\",fantasy:\"Times\",serif:\"Times\"},f=0;f<s.length;f++){if(void 0!==this.pdf.internal.getFont(s[f],c,{noFallback:!0,disableWarning:!0})){l=s[f];break}if(\"bolditalic\"===c&&void 0!==this.pdf.internal.getFont(s[f],\"bold\",{noFallback:!0,disableWarning:!0}))l=s[f],c=\"bold\";else if(void 0!==this.pdf.internal.getFont(s[f],\"normal\",{noFallback:!0,disableWarning:!0})){l=s[f],c=\"normal\";break}}if(\"\"===l)for(var p=0;p<s.length;p++)if(h[s[p]]){l=h[s[p]];break}l=\"\"===l?\"Times\":l,this.pdf.setFont(l,c)}}}}),Object.defineProperty(this,\"globalCompositeOperation\",{get:function(){return this.ctx.globalCompositeOperation},set:function(t){this.ctx.globalCompositeOperation=t}}),Object.defineProperty(this,\"globalAlpha\",{get:function(){return this.ctx.globalAlpha},set:function(t){this.ctx.globalAlpha=t}}),Object.defineProperty(this,\"ignoreClearRect\",{get:function(){return this.ctx.ignoreClearRect},set:function(t){this.ctx.ignoreClearRect=Boolean(t)}})};d.prototype.fill=function(){N.call(this,\"fill\",!1)},d.prototype.stroke=function(){N.call(this,\"stroke\",!1)},d.prototype.beginPath=function(){this.path=[{type:\"begin\"}]},d.prototype.moveTo=function(t,e){if(isNaN(t)||isNaN(e))throw i.error(\"jsPDF.context2d.moveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");var r=this.ctx.transform.applyToPoint(new s(t,e));this.path.push({type:\"mt\",x:r.x,y:r.y}),this.ctx.lastPoint=new s(t,e)},d.prototype.closePath=function(){var t=new s(0,0),e=0;for(e=this.path.length-1;-1!==e;e--)if(\"begin\"===this.path[e].type&&\"object\"==typeof this.path[e+1]&&\"number\"==typeof this.path[e+1].x){t=new s(this.path[e+1].x,this.path[e+1].y),this.path.push({type:\"lt\",x:t.x,y:t.y});break}\"object\"==typeof this.path[e+2]&&\"number\"==typeof this.path[e+2].x&&this.path.push(JSON.parse(JSON.stringify(this.path[e+2]))),this.path.push({type:\"close\"}),this.ctx.lastPoint=new s(t.x,t.y)},d.prototype.lineTo=function(t,e){if(isNaN(t)||isNaN(e))throw i.error(\"jsPDF.context2d.lineTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");var r=this.ctx.transform.applyToPoint(new s(t,e));this.path.push({type:\"lt\",x:r.x,y:r.y}),this.ctx.lastPoint=new s(r.x,r.y)},d.prototype.clip=function(){this.ctx.clip_path=JSON.parse(JSON.stringify(this.path)),N.call(this,null,!0)},d.prototype.quadraticCurveTo=function(t,e,r,n){if(isNaN(r)||isNaN(n)||isNaN(t)||isNaN(e))throw i.error(\"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\");var a=this.ctx.transform.applyToPoint(new s(r,n)),o=this.ctx.transform.applyToPoint(new s(t,e));this.path.push({type:\"qct\",x1:o.x,y1:o.y,x:a.x,y:a.y}),this.ctx.lastPoint=new s(a.x,a.y)},d.prototype.bezierCurveTo=function(t,e,r,n,a,o){if(isNaN(a)||isNaN(o)||isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.bezierCurveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\");var u=this.ctx.transform.applyToPoint(new s(a,o)),c=this.ctx.transform.applyToPoint(new s(t,e)),l=this.ctx.transform.applyToPoint(new s(r,n));this.path.push({type:\"bct\",x1:c.x,y1:c.y,x2:l.x,y2:l.y,x:u.x,y:u.y}),this.ctx.lastPoint=new s(u.x,u.y)},d.prototype.arc=function(t,e,r,n,a,o){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||isNaN(a))throw i.error(\"jsPDF.context2d.arc: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");if(o=Boolean(o),!this.ctx.transform.isIdentity){var u=this.ctx.transform.applyToPoint(new s(t,e));t=u.x,e=u.y;var c=this.ctx.transform.applyToPoint(new s(0,r)),l=this.ctx.transform.applyToPoint(new s(0,0));r=Math.sqrt(Math.pow(c.x-l.x,2)+Math.pow(c.y-l.y,2))}Math.abs(a-n)>=2*Math.PI&&(n=0,a=2*Math.PI),this.path.push({type:\"arc\",x:t,y:e,radius:r,startAngle:n,endAngle:a,counterclockwise:o})},d.prototype.arcTo=function(t,e,r,n,i){throw new Error(\"arcTo not implemented.\")},d.prototype.rect=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.rect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");this.moveTo(t,e),this.lineTo(t+r,e),this.lineTo(t+r,e+n),this.lineTo(t,e+n),this.lineTo(t,e),this.lineTo(t+r,e),this.lineTo(t,e)},d.prototype.fillRect=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.fillRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");if(!g.call(this)){var a={};\"butt\"!==this.lineCap&&(a.lineCap=this.lineCap,this.lineCap=\"butt\"),\"miter\"!==this.lineJoin&&(a.lineJoin=this.lineJoin,this.lineJoin=\"miter\"),this.beginPath(),this.rect(t,e,r,n),this.fill(),a.hasOwnProperty(\"lineCap\")&&(this.lineCap=a.lineCap),a.hasOwnProperty(\"lineJoin\")&&(this.lineJoin=a.lineJoin)}},d.prototype.strokeRect=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.strokeRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");m.call(this)||(this.beginPath(),this.rect(t,e,r,n),this.stroke())},d.prototype.clearRect=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.clearRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");this.ignoreClearRect||(this.fillStyle=\"#ffffff\",this.fillRect(t,e,r,n))},d.prototype.save=function(t){t=\"boolean\"!=typeof t||t;for(var e=this.pdf.internal.getCurrentPageInfo().pageNumber,r=0;r<this.pdf.internal.getNumberOfPages();r++)this.pdf.setPage(r+1),this.pdf.internal.out(\"q\");if(this.pdf.setPage(e),t){this.ctx.fontSize=this.pdf.internal.getFontSize();var n=new f(this.ctx);this.ctxStack.push(this.ctx),this.ctx=n}},d.prototype.restore=function(t){t=\"boolean\"!=typeof t||t;for(var e=this.pdf.internal.getCurrentPageInfo().pageNumber,r=0;r<this.pdf.internal.getNumberOfPages();r++)this.pdf.setPage(r+1),this.pdf.internal.out(\"Q\");this.pdf.setPage(e),t&&0!==this.ctxStack.length&&(this.ctx=this.ctxStack.pop(),this.fillStyle=this.ctx.fillStyle,this.strokeStyle=this.ctx.strokeStyle,this.font=this.ctx.font,this.lineCap=this.ctx.lineCap,this.lineWidth=this.ctx.lineWidth,this.lineJoin=this.ctx.lineJoin)},d.prototype.toDataURL=function(){throw new Error(\"toDataUrl not implemented.\")};var p=function(t){var e,r,n,i;if(!0===t.isCanvasGradient&&(t=t.getColor()),!t)return{r:0,g:0,b:0,a:0,style:t};if(/transparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)/.test(t))e=0,r=0,n=0,i=0;else{var a=/rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/.exec(t);if(null!==a)e=parseInt(a[1]),r=parseInt(a[2]),n=parseInt(a[3]),i=1;else if(null!==(a=/rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)/.exec(t)))e=parseInt(a[1]),r=parseInt(a[2]),n=parseInt(a[3]),i=parseFloat(a[4]);else{if(i=1,\"string\"==typeof t&&\"#\"!==t.charAt(0)){var o=new h(t);t=o.ok?o.toHex():\"#000000\"}4===t.length?(e=t.substring(1,2),e+=e,r=t.substring(2,3),r+=r,n=t.substring(3,4),n+=n):(e=t.substring(1,3),r=t.substring(3,5),n=t.substring(5,7)),e=parseInt(e,16),r=parseInt(r,16),n=parseInt(n,16)}}return{r:e,g:r,b:n,a:i,style:t}},g=function(){return this.ctx.isFillTransparent||0==this.globalAlpha},m=function(){return Boolean(this.ctx.isStrokeTransparent||0==this.globalAlpha)};d.prototype.fillText=function(t,e,r,n){if(isNaN(e)||isNaN(r)||\"string\"!=typeof t)throw i.error(\"jsPDF.context2d.fillText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");if(n=isNaN(n)?void 0:n,!g.call(this)){r=A.call(this,r);var a=B(this.ctx.transform.rotation),o=this.ctx.transform.scaleX;k.call(this,{text:t,x:e,y:r,scale:o,angle:a,align:this.textAlign,maxWidth:n})}},d.prototype.strokeText=function(t,e,r,n){if(isNaN(e)||isNaN(r)||\"string\"!=typeof t)throw i.error(\"jsPDF.context2d.strokeText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");if(!m.call(this)){n=isNaN(n)?void 0:n,r=A.call(this,r);var a=B(this.ctx.transform.rotation),o=this.ctx.transform.scaleX;k.call(this,{text:t,x:e,y:r,scale:o,renderingMode:\"stroke\",angle:a,align:this.textAlign,maxWidth:n})}},d.prototype.measureText=function(t){if(\"string\"!=typeof t)throw i.error(\"jsPDF.context2d.measureText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.measureText\");var e=this.pdf,r=this.pdf.internal.scaleFactor,n=e.internal.getFontSize(),a=e.getStringUnitWidth(t)*n/e.internal.scaleFactor,o=function(t){var e=(t=t||{}).width||0;return Object.defineProperty(this,\"width\",{get:function(){return e}}),this};return new o({width:a*=Math.round(96*r/72*1e4)/1e4})},d.prototype.scale=function(t,e){if(isNaN(t)||isNaN(e))throw i.error(\"jsPDF.context2d.scale: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");var r=new c(t,0,0,e,0,0);this.ctx.transform=this.ctx.transform.multiply(r)},d.prototype.rotate=function(t){if(isNaN(t))throw i.error(\"jsPDF.context2d.rotate: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");var e=new c(Math.cos(t),Math.sin(t),-Math.sin(t),Math.cos(t),0,0);this.ctx.transform=this.ctx.transform.multiply(e)},d.prototype.translate=function(t,e){if(isNaN(t)||isNaN(e))throw i.error(\"jsPDF.context2d.translate: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");var r=new c(1,0,0,1,t,e);this.ctx.transform=this.ctx.transform.multiply(r)},d.prototype.transform=function(t,e,r,n,a,o){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||isNaN(a)||isNaN(o))throw i.error(\"jsPDF.context2d.transform: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");var s=new c(t,e,r,n,a,o);this.ctx.transform=this.ctx.transform.multiply(s)},d.prototype.setTransform=function(t,e,r,n,i,a){t=isNaN(t)?1:t,e=isNaN(e)?0:e,r=isNaN(r)?0:r,n=isNaN(n)?1:n,i=isNaN(i)?0:i,a=isNaN(a)?0:a,this.ctx.transform=new c(t,e,r,n,i,a)},d.prototype.drawImage=function(t,e,r,n,i,a,o,s,l){var h=this.pdf.getImageProperties(t),f=1,d=1,p=1,g=1;void 0!==n&&void 0!==s&&(p=s/n,g=l/i,f=h.width/n*s/n,d=h.height/i*l/i),void 0===a&&(a=e,o=r,e=0,r=0),void 0!==n&&void 0===s&&(s=n,l=i),void 0===n&&void 0===s&&(s=h.width,l=h.height);for(var m,b=this.ctx.transform.decompose(),N=B(b.rotate.shx),A=new c,x=(A=(A=(A=A.multiply(b.translate)).multiply(b.skew)).multiply(b.scale)).applyToRectangle(new u(a-e*p,o-r*g,n*f,i*d)),S=v.call(this,x),_=[],P=0;P<S.length;P+=1)-1===_.indexOf(S[P])&&_.push(S[P]);if(w(_),this.autoPaging)for(var k=_[0],I=_[_.length-1],F=k;F<I+1;F++){if(this.pdf.setPage(F),0!==this.ctx.clip_path.length){var C=this.path;m=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=y(m,this.posX,-1*this.pdf.internal.pageSize.height*(F-1)+this.posY),L.call(this,\"fill\",!0),this.path=C}var j=JSON.parse(JSON.stringify(x));j=y([j],this.posX,-1*this.pdf.internal.pageSize.height*(F-1)+this.posY)[0],this.pdf.addImage(t,\"JPEG\",j.x,j.y,j.w,j.h,null,null,N)}else this.pdf.addImage(t,\"JPEG\",x.x,x.y,x.w,x.h,null,null,N)};var v=function(t,e,r){var n=[];switch(e=e||this.pdf.internal.pageSize.width,r=r||this.pdf.internal.pageSize.height,t.type){default:case\"mt\":case\"lt\":n.push(Math.floor((t.y+this.posY)/r)+1);break;case\"arc\":n.push(Math.floor((t.y+this.posY-t.radius)/r)+1),n.push(Math.floor((t.y+this.posY+t.radius)/r)+1);break;case\"qct\":var i=M(this.ctx.lastPoint.x,this.ctx.lastPoint.y,t.x1,t.y1,t.x,t.y);n.push(Math.floor(i.y/r)+1),n.push(Math.floor((i.y+i.h)/r)+1);break;case\"bct\":var a=E(this.ctx.lastPoint.x,this.ctx.lastPoint.y,t.x1,t.y1,t.x2,t.y2,t.x,t.y);n.push(Math.floor(a.y/r)+1),n.push(Math.floor((a.y+a.h)/r)+1);break;case\"rect\":n.push(Math.floor((t.y+this.posY)/r)+1),n.push(Math.floor((t.y+t.h+this.posY)/r)+1)}for(var o=0;o<n.length;o+=1)for(;this.pdf.internal.getNumberOfPages()<n[o];)b.call(this);return n},b=function(){var t=this.fillStyle,e=this.strokeStyle,r=this.font,n=this.lineCap,i=this.lineWidth,a=this.lineJoin;this.pdf.addPage(),this.fillStyle=t,this.strokeStyle=e,this.font=r,this.lineCap=n,this.lineWidth=i,this.lineJoin=a},y=function(t,e,r){for(var n=0;n<t.length;n++)switch(t[n].type){case\"bct\":t[n].x2+=e,t[n].y2+=r;case\"qct\":t[n].x1+=e,t[n].y1+=r;case\"mt\":case\"lt\":case\"arc\":default:t[n].x+=e,t[n].y+=r}return t},w=function(t){return t.sort((function(t,e){return t-e}))},N=function(t,e){for(var r,n,i=this.fillStyle,a=this.strokeStyle,o=this.lineCap,s=this.lineWidth,u=s*this.ctx.transform.scaleX,c=this.lineJoin,l=JSON.parse(JSON.stringify(this.path)),h=JSON.parse(JSON.stringify(this.path)),f=[],d=0;d<h.length;d++)if(void 0!==h[d].x)for(var p=v.call(this,h[d]),g=0;g<p.length;g+=1)-1===f.indexOf(p[g])&&f.push(p[g]);for(var m=0;m<f.length;m++)for(;this.pdf.internal.getNumberOfPages()<f[m];)b.call(this);if(w(f),this.autoPaging)for(var N=f[0],A=f[f.length-1],x=N;x<A+1;x++){if(this.pdf.setPage(x),this.fillStyle=i,this.strokeStyle=a,this.lineCap=o,this.lineWidth=u,this.lineJoin=c,0!==this.ctx.clip_path.length){var S=this.path;r=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=y(r,this.posX,-1*this.pdf.internal.pageSize.height*(x-1)+this.posY),L.call(this,t,!0),this.path=S}n=JSON.parse(JSON.stringify(l)),this.path=y(n,this.posX,-1*this.pdf.internal.pageSize.height*(x-1)+this.posY),!1!==e&&0!==x||L.call(this,t,e),this.lineWidth=s}else this.lineWidth=u,L.call(this,t,e),this.lineWidth=s;this.path=l},L=function(t,e){if((\"stroke\"!==t||e||!m.call(this))&&(\"stroke\"===t||e||!g.call(this))){for(var r,n,i=[],a=this.path,o=0;o<a.length;o++){var s=a[o];switch(s.type){case\"begin\":i.push({begin:!0});break;case\"close\":i.push({close:!0});break;case\"mt\":i.push({start:s,deltas:[],abs:[]});break;case\"lt\":var u=i.length;if(!isNaN(a[o-1].x)&&(r=[s.x-a[o-1].x,s.y-a[o-1].y],u>0))for(;u>=0;u--)if(!0!==i[u-1].close&&!0!==i[u-1].begin){i[u-1].deltas.push(r),i[u-1].abs.push(s);break}break;case\"bct\":r=[s.x1-a[o-1].x,s.y1-a[o-1].y,s.x2-a[o-1].x,s.y2-a[o-1].y,s.x-a[o-1].x,s.y-a[o-1].y],i[i.length-1].deltas.push(r);break;case\"qct\":var c=a[o-1].x+2/3*(s.x1-a[o-1].x),l=a[o-1].y+2/3*(s.y1-a[o-1].y),h=s.x+2/3*(s.x1-s.x),f=s.y+2/3*(s.y1-s.y),d=s.x,p=s.y;r=[c-a[o-1].x,l-a[o-1].y,h-a[o-1].x,f-a[o-1].y,d-a[o-1].x,p-a[o-1].y],i[i.length-1].deltas.push(r);break;case\"arc\":i.push({deltas:[],abs:[],arc:!0}),Array.isArray(i[i.length-1].abs)&&i[i.length-1].abs.push(s)}}n=e?null:\"stroke\"===t?\"stroke\":\"fill\";for(var v=0;v<i.length;v++){if(i[v].arc){for(var b=i[v].abs,y=0;y<b.length;y++){var w=b[y];\"arc\"===w.type?x.call(this,w.x,w.y,w.radius,w.startAngle,w.endAngle,w.counterclockwise,void 0,e):I.call(this,w.x,w.y)}S.call(this,n),this.pdf.internal.out(\"h\")}if(!i[v].arc&&!0!==i[v].close&&!0!==i[v].begin){var N=i[v].start.x,L=i[v].start.y;F.call(this,i[v].deltas,N,L)}}n&&S.call(this,n),e&&_.call(this)}},A=function(t){var e=this.pdf.internal.getFontSize()/this.pdf.internal.scaleFactor,r=e*(this.pdf.internal.getLineHeightFactor()-1);switch(this.ctx.textBaseline){case\"bottom\":return t-r;case\"top\":return t+e-r;case\"hanging\":return t+e-2*r;case\"middle\":return t+e/2-r;case\"ideographic\":return t;case\"alphabetic\":default:return t}};d.prototype.createLinearGradient=function(){var t=function(){};return t.colorStops=[],t.addColorStop=function(t,e){this.colorStops.push([t,e])},t.getColor=function(){return 0===this.colorStops.length?\"#000000\":this.colorStops[0][1]},t.isCanvasGradient=!0,t},d.prototype.createPattern=function(){return this.createLinearGradient()},d.prototype.createRadialGradient=function(){return this.createLinearGradient()};var x=function(t,e,r,n,i,a,o,s){for(var u=j.call(this,r,n,i,a),c=0;c<u.length;c++){var l=u[c];0===c&&P.call(this,l.x1+t,l.y1+e),C.call(this,t,e,l.x2,l.y2,l.x3,l.y3,l.x4,l.y4)}s?_.call(this):S.call(this,o)},S=function(t){switch(t){case\"stroke\":this.pdf.internal.out(\"S\");break;case\"fill\":this.pdf.internal.out(\"f\")}},_=function(){this.pdf.clip(),this.pdf.discardPath()},P=function(t,e){this.pdf.internal.out(r(t)+\" \"+n(e)+\" m\")},k=function(t){var e;switch(t.align){case\"right\":case\"end\":e=\"right\";break;case\"center\":e=\"center\";break;case\"left\":case\"start\":default:e=\"left\"}var r=this.ctx.transform.applyToPoint(new s(t.x,t.y)),n=this.ctx.transform.decompose(),i=new c;i=(i=(i=i.multiply(n.translate)).multiply(n.skew)).multiply(n.scale);for(var a,o,l,h=this.pdf.getTextDimensions(t.text),f=this.ctx.transform.applyToRectangle(new u(t.x,t.y,h.w,h.h)),d=i.applyToRectangle(new u(t.x,t.y-h.h,h.w,h.h)),p=v.call(this,d),g=[],m=0;m<p.length;m+=1)-1===g.indexOf(p[m])&&g.push(p[m]);if(w(g),!0===this.autoPaging)for(var b=g[0],N=g[g.length-1],A=b;A<N+1;A++){if(this.pdf.setPage(A),0!==this.ctx.clip_path.length){var x=this.path;a=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=y(a,this.posX,-1*this.pdf.internal.pageSize.height*(A-1)+this.posY),L.call(this,\"fill\",!0),this.path=x}var S=JSON.parse(JSON.stringify(f));S=y([S],this.posX,-1*this.pdf.internal.pageSize.height*(A-1)+this.posY)[0],t.scale>=.01&&(o=this.pdf.internal.getFontSize(),this.pdf.setFontSize(o*t.scale),l=this.lineWidth,this.lineWidth=l*t.scale),this.pdf.text(t.text,S.x,S.y,{angle:t.angle,align:e,renderingMode:t.renderingMode,maxWidth:t.maxWidth}),t.scale>=.01&&(this.pdf.setFontSize(o),this.lineWidth=l)}else t.scale>=.01&&(o=this.pdf.internal.getFontSize(),this.pdf.setFontSize(o*t.scale),l=this.lineWidth,this.lineWidth=l*t.scale),this.pdf.text(t.text,r.x+this.posX,r.y+this.posY,{angle:t.angle,align:e,renderingMode:t.renderingMode,maxWidth:t.maxWidth}),t.scale>=.01&&(this.pdf.setFontSize(o),this.lineWidth=l)},I=function(t,e,i,a){i=i||0,a=a||0,this.pdf.internal.out(r(t+i)+\" \"+n(e+a)+\" l\")},F=function(t,e,r){return this.pdf.lines(t,e,r,null,null)},C=function(t,r,n,i,s,u,c,l){this.pdf.internal.out([e(a(n+t)),e(o(i+r)),e(a(s+t)),e(o(u+r)),e(a(c+t)),e(o(l+r)),\"c\"].join(\" \"))},j=function(t,e,r,n){for(var i=2*Math.PI,a=Math.PI/2;e>r;)e-=i;var o=Math.abs(r-e);o<i&&n&&(o=i-o);for(var s=[],u=n?-1:1,c=e;o>1e-5;){var l=c+u*Math.min(o,a);s.push(O.call(this,t,c,l)),o-=Math.abs(l-c),c=l}return s},O=function(t,e,r){var n=(r-e)/2,i=t*Math.cos(n),a=t*Math.sin(n),o=i,s=-a,u=o*o+s*s,c=u+o*i+s*a,l=4/3*(Math.sqrt(2*u*c)-c)/(o*a-s*i),h=o-l*s,f=s+l*o,d=h,p=-f,g=n+e,m=Math.cos(g),v=Math.sin(g);return{x1:t*Math.cos(e),y1:t*Math.sin(e),x2:h*m-f*v,y2:h*v+f*m,x3:d*m-p*v,y3:d*v+p*m,x4:t*Math.cos(r),y4:t*Math.sin(r)}},B=function(t){return 180*t/Math.PI},M=function(t,e,r,n,i,a){var o=t+.5*(r-t),s=e+.5*(n-e),c=i+.5*(r-i),l=a+.5*(n-a),h=Math.min(t,i,o,c),f=Math.max(t,i,o,c),d=Math.min(e,a,s,l),p=Math.max(e,a,s,l);return new u(h,d,f-h,p-d)},E=function(t,e,r,n,i,a,o,s){var c,l,h,f,d,p,g,m,v,b,y,w,N,L,A=r-t,x=n-e,S=i-r,_=a-n,P=o-i,k=s-a;for(l=0;l<41;l++)v=(g=(h=t+(c=l/40)*A)+c*((d=r+c*S)-h))+c*(d+c*(i+c*P-d)-g),b=(m=(f=e+c*x)+c*((p=n+c*_)-f))+c*(p+c*(a+c*k-p)-m),0==l?(y=v,w=b,N=v,L=b):(y=Math.min(y,v),w=Math.min(w,b),N=Math.max(N,v),L=Math.max(L,b));return new u(Math.round(y),Math.round(w),Math.round(N-y),Math.round(L-w))}}(O.API),\n/**\n * @license\n * jsPDF filters PlugIn\n * Copyright (c) 2014 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(e){var r=function(t){var e,r,n,i,a,o,s,u,c,l;for(/[^\\x00-\\xFF]/.test(t),r=[],n=0,i=(t+=e=\"\\0\\0\\0\\0\".slice(t.length%4||4)).length;i>n;n+=4)0!==(a=(t.charCodeAt(n)<<24)+(t.charCodeAt(n+1)<<16)+(t.charCodeAt(n+2)<<8)+t.charCodeAt(n+3))?(o=(a=((a=((a=((a=(a-(l=a%85))/85)-(c=a%85))/85)-(u=a%85))/85)-(s=a%85))/85)%85,r.push(o+33,s+33,u+33,c+33,l+33)):r.push(122);return function(t,e){for(var r=e;r>0;r--)t.pop()}(r,e.length),String.fromCharCode.apply(String,r)+\"~>\"},n=function(t){var e,r,n,i,a,o=String,s=\"length\",u=255,c=\"charCodeAt\",l=\"slice\",h=\"replace\";for(t[l](-2),t=t[l](0,-2)[h](/\\s/g,\"\")[h](\"z\",\"!!!!!\"),n=[],i=0,a=(t+=e=\"uuuuu\"[l](t[s]%5||5))[s];a>i;i+=5)r=52200625*(t[c](i)-33)+614125*(t[c](i+1)-33)+7225*(t[c](i+2)-33)+85*(t[c](i+3)-33)+(t[c](i+4)-33),n.push(u&r>>24,u&r>>16,u&r>>8,u&r);return function(t,e){for(var r=e;r>0;r--)t.pop()}(n,e[s]),o.fromCharCode.apply(o,n)},i=function(t){var e=new RegExp(/^([0-9A-Fa-f]{2})+$/);if(-1!==(t=t.replace(/\\s/g,\"\")).indexOf(\">\")&&(t=t.substr(0,t.indexOf(\">\"))),t.length%2&&(t+=\"0\"),!1===e.test(t))return\"\";for(var r=\"\",n=0;n<t.length;n+=2)r+=String.fromCharCode(\"0x\"+(t[n]+t[n+1]));return r},a=function(e){for(var r=new Uint8Array(e.length),n=e.length;n--;)r[n]=e.charCodeAt(n);return e=(r=t(r)).reduce((function(t,e){return t+String.fromCharCode(e)}),\"\")};e.processDataByFilters=function(t,e){var o=0,s=t||\"\",u=[];for(\"string\"==typeof(e=e||[])&&(e=[e]),o=0;o<e.length;o+=1)switch(e[o]){case\"ASCII85Decode\":case\"/ASCII85Decode\":s=n(s),u.push(\"/ASCII85Encode\");break;case\"ASCII85Encode\":case\"/ASCII85Encode\":s=r(s),u.push(\"/ASCII85Decode\");break;case\"ASCIIHexDecode\":case\"/ASCIIHexDecode\":s=i(s),u.push(\"/ASCIIHexEncode\");break;case\"ASCIIHexEncode\":case\"/ASCIIHexEncode\":s=s.split(\"\").map((function(t){return(\"0\"+t.charCodeAt().toString(16)).slice(-2)})).join(\"\")+\">\",u.push(\"/ASCIIHexDecode\");break;case\"FlateEncode\":case\"/FlateEncode\":s=a(s),u.push(\"/FlateDecode\");break;default:throw new Error('The filter: \"'+e[o]+'\" is not implemented')}return{data:s,reverseChain:u.reverse().join(\" \")}}}(O.API),\n/**\n * @license\n * jsPDF fileloading PlugIn\n * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){t.loadFile=function(t,e,r){return function(t,e,r){e=!1!==e,r=\"function\"==typeof r?r:function(){};var n=void 0;try{n=function(t,e,r){var n=new XMLHttpRequest,i=0,a=function(t){var e=t.length,r=[],n=String.fromCharCode;for(i=0;i<e;i+=1)r.push(n(255&t.charCodeAt(i)));return r.join(\"\")};if(n.open(\"GET\",t,!e),n.overrideMimeType(\"text/plain; charset=x-user-defined\"),!1===e&&(n.onload=function(){200===n.status?r(a(this.responseText)):r(void 0)}),n.send(null),e&&200===n.status)return a(n.responseText)}(t,e,r)}catch(t){}return n}(t,e,r)},t.loadImageFile=t.loadFile}(O.API),\n/**\n * @license\n * Copyright (c) 2018 Erik Koopmans\n * Released under the MIT License.\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){function e(){return(r.html2canvas?Promise.resolve(r.html2canvas):import(\"html2canvas\")).catch((function(t){return Promise.reject(new Error(\"Could not load html2canvas: \"+t))})).then((function(t){return t.default?t.default:t}))}function n(){return(r.DOMPurify?Promise.resolve(r.DOMPurify):import(\"dompurify\")).catch((function(t){return Promise.reject(new Error(\"Could not load dompurify: \"+t))})).then((function(t){return t.default?t.default:t}))}var i=function(t){var e=typeof t;return\"undefined\"===e?\"undefined\":\"string\"===e||t instanceof String?\"string\":\"number\"===e||t instanceof Number?\"number\":\"function\"===e||t instanceof Function?\"function\":t&&t.constructor===Array?\"array\":t&&1===t.nodeType?\"element\":\"object\"===e?\"object\":\"unknown\"},a=function(t,e){var r=document.createElement(t);for(var n in e.className&&(r.className=e.className),e.innerHTML&&e.dompurify&&(r.innerHTML=e.dompurify.sanitize(e.innerHTML)),e.style)r.style[n]=e.style[n];return r},o=function(t,e){for(var r=3===t.nodeType?document.createTextNode(t.nodeValue):t.cloneNode(!1),n=t.firstChild;n;n=n.nextSibling)!0!==e&&1===n.nodeType&&\"SCRIPT\"===n.nodeName||r.appendChild(o(n,e));return 1===t.nodeType&&(\"CANVAS\"===t.nodeName?(r.width=t.width,r.height=t.height,r.getContext(\"2d\").drawImage(t,0,0)):\"TEXTAREA\"!==t.nodeName&&\"SELECT\"!==t.nodeName||(r.value=t.value),r.addEventListener(\"load\",(function(){r.scrollTop=t.scrollTop,r.scrollLeft=t.scrollLeft}),!0)),r},s=function t(e){var r=Object.assign(t.convert(Promise.resolve()),JSON.parse(JSON.stringify(t.template))),n=t.convert(Promise.resolve(),r);return n=(n=n.setProgress(1,t,1,[t])).set(e)};(s.prototype=Object.create(Promise.prototype)).constructor=s,s.convert=function(t,e){return t.__proto__=e||s.prototype,t},s.template={prop:{src:null,container:null,overlay:null,canvas:null,img:null,pdf:null,pageSize:null,callback:function(){}},progress:{val:0,state:null,n:0,stack:[]},opt:{filename:\"file.pdf\",margin:[0,0,0,0],enableLinks:!0,x:0,y:0,html2canvas:{},jsPDF:{},backgroundColor:\"transparent\"}},s.prototype.from=function(t,e){return this.then((function(){switch(e=e||function(t){switch(i(t)){case\"string\":return\"string\";case\"element\":return\"canvas\"===t.nodeName.toLowerCase()?\"canvas\":\"element\";default:return\"unknown\"}}(t)){case\"string\":return this.then(n).then((function(e){return this.set({src:a(\"div\",{innerHTML:t,dompurify:e})})}));case\"element\":return this.set({src:t});case\"canvas\":return this.set({canvas:t});case\"img\":return this.set({img:t});default:return this.error(\"Unknown source type.\")}}))},s.prototype.to=function(t){switch(t){case\"container\":return this.toContainer();case\"canvas\":return this.toCanvas();case\"img\":return this.toImg();case\"pdf\":return this.toPdf();default:return this.error(\"Invalid target.\")}},s.prototype.toContainer=function(){return this.thenList([function(){return this.prop.src||this.error(\"Cannot duplicate - no source HTML.\")},function(){return this.prop.pageSize||this.setPageSize()}]).then((function(){var t={position:\"relative\",display:\"inline-block\",width:Math.max(this.prop.src.clientWidth,this.prop.src.scrollWidth,this.prop.src.offsetWidth)+\"px\",left:0,right:0,top:0,margin:\"auto\",backgroundColor:this.opt.backgroundColor},e=o(this.prop.src,this.opt.html2canvas.javascriptEnabled);\"BODY\"===e.tagName&&(t.height=Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)+\"px\"),this.prop.overlay=a(\"div\",{className:\"html2pdf__overlay\",style:{position:\"fixed\",overflow:\"hidden\",zIndex:1e3,left:\"-100000px\",right:0,bottom:0,top:0}}),this.prop.container=a(\"div\",{className:\"html2pdf__container\",style:t}),this.prop.container.appendChild(e),this.prop.container.firstChild.appendChild(a(\"div\",{style:{clear:\"both\",border:\"0 none transparent\",margin:0,padding:0,height:0}})),this.prop.container.style.float=\"none\",this.prop.overlay.appendChild(this.prop.container),document.body.appendChild(this.prop.overlay),this.prop.container.firstChild.style.position=\"relative\",this.prop.container.height=Math.max(this.prop.container.firstChild.clientHeight,this.prop.container.firstChild.scrollHeight,this.prop.container.firstChild.offsetHeight)+\"px\"}))},s.prototype.toCanvas=function(){var t=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(t).then(e).then((function(t){var e=Object.assign({},this.opt.html2canvas);return delete e.onrendered,t(this.prop.container,e)})).then((function(t){(this.opt.html2canvas.onrendered||function(){})(t),this.prop.canvas=t,document.body.removeChild(this.prop.overlay)}))},s.prototype.toContext2d=function(){var t=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(t).then(e).then((function(t){var e=this.opt.jsPDF,r=this.opt.fontFaces,n=Object.assign({async:!0,allowTaint:!0,scale:1,scrollX:this.opt.scrollX||0,scrollY:this.opt.scrollY||0,backgroundColor:\"#ffffff\",imageTimeout:15e3,logging:!0,proxy:null,removeContainer:!0,foreignObjectRendering:!1,useCORS:!1},this.opt.html2canvas);if(delete n.onrendered,e.context2d.autoPaging=!0,e.context2d.posX=this.opt.x,e.context2d.posY=this.opt.y,e.context2d.fontFaces=r,r)for(var i=0;i<r.length;++i){var a=r[i],o=a.src.find((function(t){return\"truetype\"===t.format}));o&&e.addFont(o.url,a.ref.name,a.ref.style)}return n.windowHeight=n.windowHeight||0,n.windowHeight=0==n.windowHeight?Math.max(this.prop.container.clientHeight,this.prop.container.scrollHeight,this.prop.container.offsetHeight):n.windowHeight,t(this.prop.container,n)})).then((function(t){(this.opt.html2canvas.onrendered||function(){})(t),this.prop.canvas=t,document.body.removeChild(this.prop.overlay)}))},s.prototype.toImg=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then((function(){var t=this.prop.canvas.toDataURL(\"image/\"+this.opt.image.type,this.opt.image.quality);this.prop.img=document.createElement(\"img\"),this.prop.img.src=t}))},s.prototype.toPdf=function(){return this.thenList([function(){return this.toContext2d()}]).then((function(){this.prop.pdf=this.prop.pdf||this.opt.jsPDF}))},s.prototype.output=function(t,e,r){return\"img\"===(r=r||\"pdf\").toLowerCase()||\"image\"===r.toLowerCase()?this.outputImg(t,e):this.outputPdf(t,e)},s.prototype.outputPdf=function(t,e){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then((function(){return this.prop.pdf.output(t,e)}))},s.prototype.outputImg=function(t){return this.thenList([function(){return this.prop.img||this.toImg()}]).then((function(){switch(t){case void 0:case\"img\":return this.prop.img;case\"datauristring\":case\"dataurlstring\":return this.prop.img.src;case\"datauri\":case\"dataurl\":return document.location.href=this.prop.img.src;default:throw'Image output type \"'+t+'\" is not supported.'}}))},s.prototype.save=function(t){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).set(t?{filename:t}:null).then((function(){this.prop.pdf.save(this.opt.filename)}))},s.prototype.doCallback=function(){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then((function(){this.prop.callback(this.prop.pdf)}))},s.prototype.set=function(t){if(\"object\"!==i(t))return this;var e=Object.keys(t||{}).map((function(e){if(e in s.template.prop)return function(){this.prop[e]=t[e]};switch(e){case\"margin\":return this.setMargin.bind(this,t.margin);case\"jsPDF\":return function(){return this.opt.jsPDF=t.jsPDF,this.setPageSize()};case\"pageSize\":return this.setPageSize.bind(this,t.pageSize);default:return function(){this.opt[e]=t[e]}}}),this);return this.then((function(){return this.thenList(e)}))},s.prototype.get=function(t,e){return this.then((function(){var r=t in s.template.prop?this.prop[t]:this.opt[t];return e?e(r):r}))},s.prototype.setMargin=function(t){return this.then((function(){switch(i(t)){case\"number\":t=[t,t,t,t];case\"array\":if(2===t.length&&(t=[t[0],t[1],t[0],t[1]]),4===t.length)break;default:return this.error(\"Invalid margin array.\")}this.opt.margin=t})).then(this.setPageSize)},s.prototype.setPageSize=function(t){function e(t,e){return Math.floor(t*e/72*96)}return this.then((function(){(t=t||O.getPageSize(this.opt.jsPDF)).hasOwnProperty(\"inner\")||(t.inner={width:t.width-this.opt.margin[1]-this.opt.margin[3],height:t.height-this.opt.margin[0]-this.opt.margin[2]},t.inner.px={width:e(t.inner.width,t.k),height:e(t.inner.height,t.k)},t.inner.ratio=t.inner.height/t.inner.width),this.prop.pageSize=t}))},s.prototype.setProgress=function(t,e,r,n){return null!=t&&(this.progress.val=t),null!=e&&(this.progress.state=e),null!=r&&(this.progress.n=r),null!=n&&(this.progress.stack=n),this.progress.ratio=this.progress.val/this.progress.state,this},s.prototype.updateProgress=function(t,e,r,n){return this.setProgress(t?this.progress.val+t:null,e||null,r?this.progress.n+r:null,n?this.progress.stack.concat(n):null)},s.prototype.then=function(t,e){var r=this;return this.thenCore(t,e,(function(t,e){return r.updateProgress(null,null,1,[t]),Promise.prototype.then.call(this,(function(e){return r.updateProgress(null,t),e})).then(t,e).then((function(t){return r.updateProgress(1),t}))}))},s.prototype.thenCore=function(t,e,r){r=r||Promise.prototype.then;t&&(t=t.bind(this)),e&&(e=e.bind(this));var n=-1!==Promise.toString().indexOf(\"[native code]\")&&\"Promise\"===Promise.name?this:s.convert(Object.assign({},this),Promise.prototype),i=r.call(n,t,e);return s.convert(i,this.__proto__)},s.prototype.thenExternal=function(t,e){return Promise.prototype.then.call(this,t,e)},s.prototype.thenList=function(t){var e=this;return t.forEach((function(t){e=e.thenCore(t)})),e},s.prototype.catch=function(t){t&&(t=t.bind(this));var e=Promise.prototype.catch.call(this,t);return s.convert(e,this)},s.prototype.catchExternal=function(t){return Promise.prototype.catch.call(this,t)},s.prototype.error=function(t){return this.then((function(){throw new Error(t)}))},s.prototype.using=s.prototype.set,s.prototype.saveAs=s.prototype.save,s.prototype.export=s.prototype.output,s.prototype.run=s.prototype.then,O.getPageSize=function(t,e,r){if(\"object\"==typeof t){var n=t;t=n.orientation,e=n.unit||e,r=n.format||r}e=e||\"mm\",r=r||\"a4\",t=(\"\"+(t||\"P\")).toLowerCase();var i,a=(\"\"+r).toLowerCase(),o={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};switch(e){case\"pt\":i=1;break;case\"mm\":i=72/25.4;break;case\"cm\":i=72/2.54;break;case\"in\":i=72;break;case\"px\":i=.75;break;case\"pc\":case\"em\":i=12;break;case\"ex\":i=6;break;default:throw\"Invalid unit: \"+e}var s,u=0,c=0;if(o.hasOwnProperty(a))u=o[a][1]/i,c=o[a][0]/i;else try{u=r[1],c=r[0]}catch(t){throw new Error(\"Invalid format: \"+r)}if(\"p\"===t||\"portrait\"===t)t=\"p\",c>u&&(s=c,c=u,u=s);else{if(\"l\"!==t&&\"landscape\"!==t)throw\"Invalid orientation: \"+t;t=\"l\",u>c&&(s=c,c=u,u=s)}return{width:c,height:u,unit:e,k:i,orientation:t}},t.html=function(t,e){(e=e||{}).callback=e.callback||function(){},e.html2canvas=e.html2canvas||{},e.html2canvas.canvas=e.html2canvas.canvas||this.canvas,e.jsPDF=e.jsPDF||this,e.fontFaces=e.fontFaces?e.fontFaces.map(It):null;var r=new s(e);return e.worker?r:r.from(t).doCallback()}}(O.API),O.API.addJS=function(t){return Tt=t,this.internal.events.subscribe(\"postPutResources\",(function(){Rt=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/Names [(EmbeddedJS) \"+(Rt+1)+\" 0 R]\"),this.internal.out(\">>\"),this.internal.out(\"endobj\"),Dt=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/S /JavaScript\"),this.internal.out(\"/JS (\"+Tt+\")\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")})),this.internal.events.subscribe(\"putCatalog\",(function(){void 0!==Rt&&void 0!==Dt&&this.internal.out(\"/Names <</JavaScript \"+Rt+\" 0 R>>\")})),this},\n/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e;t.events.push([\"postPutResources\",function(){var t=this,r=/^(\\d+) 0 obj$/;if(this.outline.root.children.length>0)for(var n=t.outline.render().split(/\\r\\n/),i=0;i<n.length;i++){var a=n[i],o=r.exec(a);if(null!=o){var s=o[1];t.internal.newObjectDeferredBegin(s,!1)}t.internal.write(a)}if(this.outline.createNamedDestinations){var u=this.internal.pages.length,c=[];for(i=0;i<u;i++){var l=t.internal.newObject();c.push(l);var h=t.internal.getPageInfo(i+1);t.internal.write(\"<< /D[\"+h.objId+\" 0 R /XYZ null null null]>> endobj\")}var f=t.internal.newObject();t.internal.write(\"<< /Names [ \");for(i=0;i<c.length;i++)t.internal.write(\"(page_\"+(i+1)+\")\"+c[i]+\" 0 R\");t.internal.write(\" ] >>\",\"endobj\"),e=t.internal.newObject(),t.internal.write(\"<< /Dests \"+f+\" 0 R\"),t.internal.write(\">>\",\"endobj\")}}]),t.events.push([\"putCatalog\",function(){this.outline.root.children.length>0&&(this.internal.write(\"/Outlines\",this.outline.makeRef(this.outline.root)),this.outline.createNamedDestinations&&this.internal.write(\"/Names \"+e+\" 0 R\"))}]),t.events.push([\"initialized\",function(){var t=this;t.outline={createNamedDestinations:!1,root:{children:[]}},t.outline.add=function(t,e,r){var n={title:e,options:r,children:[]};return null==t&&(t=this.root),t.children.push(n),n},t.outline.render=function(){return this.ctx={},this.ctx.val=\"\",this.ctx.pdf=t,this.genIds_r(this.root),this.renderRoot(this.root),this.renderItems(this.root),this.ctx.val},t.outline.genIds_r=function(e){e.id=t.internal.newObjectDeferred();for(var r=0;r<e.children.length;r++)this.genIds_r(e.children[r])},t.outline.renderRoot=function(t){this.objStart(t),this.line(\"/Type /Outlines\"),t.children.length>0&&(this.line(\"/First \"+this.makeRef(t.children[0])),this.line(\"/Last \"+this.makeRef(t.children[t.children.length-1]))),this.line(\"/Count \"+this.count_r({count:0},t)),this.objEnd()},t.outline.renderItems=function(e){for(var r=this.ctx.pdf.internal.getVerticalCoordinateString,n=0;n<e.children.length;n++){var i=e.children[n];this.objStart(i),this.line(\"/Title \"+this.makeString(i.title)),this.line(\"/Parent \"+this.makeRef(e)),n>0&&this.line(\"/Prev \"+this.makeRef(e.children[n-1])),n<e.children.length-1&&this.line(\"/Next \"+this.makeRef(e.children[n+1])),i.children.length>0&&(this.line(\"/First \"+this.makeRef(i.children[0])),this.line(\"/Last \"+this.makeRef(i.children[i.children.length-1])));var a=this.count=this.count_r({count:0},i);if(a>0&&this.line(\"/Count \"+a),i.options&&i.options.pageNumber){var o=t.internal.getPageInfo(i.options.pageNumber);this.line(\"/Dest [\"+o.objId+\" 0 R /XYZ 0 \"+r(0)+\" 0]\")}this.objEnd()}for(var s=0;s<e.children.length;s++)this.renderItems(e.children[s])},t.outline.line=function(t){this.ctx.val+=t+\"\\r\\n\"},t.outline.makeRef=function(t){return t.id+\" 0 R\"},t.outline.makeString=function(e){return\"(\"+t.internal.pdfEscape(e)+\")\"},t.outline.objStart=function(t){this.ctx.val+=\"\\r\\n\"+t.id+\" 0 obj\\r\\n<<\\r\\n\"},t.outline.objEnd=function(){this.ctx.val+=\">> \\r\\nendobj\\r\\n\"},t.outline.count_r=function(t,e){for(var r=0;r<e.children.length;r++)t.count++,this.count_r(t,e.children[r]);return t.count}}])}(O.API),\n/**\n * @license\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e=[192,193,194,195,196,197,198,199];t.processJPEG=function(t,r,n,i,a,o){var s,u=this.decode.DCT_DECODE,c=null;if(\"string\"==typeof t||this.__addimage__.isArrayBuffer(t)||this.__addimage__.isArrayBufferView(t)){switch(t=a||t,t=this.__addimage__.isArrayBuffer(t)?new Uint8Array(t):t,(s=function(t){for(var r,n=256*t.charCodeAt(4)+t.charCodeAt(5),i=t.length,a={width:0,height:0,numcomponents:1},o=4;o<i;o+=2){if(o+=n,-1!==e.indexOf(t.charCodeAt(o+1))){r=256*t.charCodeAt(o+5)+t.charCodeAt(o+6),a={width:256*t.charCodeAt(o+7)+t.charCodeAt(o+8),height:r,numcomponents:t.charCodeAt(o+9)};break}n=256*t.charCodeAt(o+2)+t.charCodeAt(o+3)}return a}(t=this.__addimage__.isArrayBufferView(t)?this.__addimage__.arrayBufferToBinaryString(t):t)).numcomponents){case 1:o=this.color_spaces.DEVICE_GRAY;break;case 4:o=this.color_spaces.DEVICE_CMYK;break;case 3:o=this.color_spaces.DEVICE_RGB}c={data:t,width:s.width,height:s.height,colorSpace:o,bitsPerComponent:8,filter:u,index:r,alias:n}}return c}}(O.API);var zt,Ht,Vt,Wt,Gt,Yt=function(){var t,n,i;function a(t){var e,r,n,i,a,o,s,u,c,l,h,f,d,p;for(this.data=t,this.pos=8,this.palette=[],this.imgData=[],this.transparency={},this.animation=null,this.text={},o=null;;){switch(e=this.readUInt32(),c=function(){var t,e;for(e=[],t=0;t<4;++t)e.push(String.fromCharCode(this.data[this.pos++]));return e}.call(this).join(\"\")){case\"IHDR\":this.width=this.readUInt32(),this.height=this.readUInt32(),this.bits=this.data[this.pos++],this.colorType=this.data[this.pos++],this.compressionMethod=this.data[this.pos++],this.filterMethod=this.data[this.pos++],this.interlaceMethod=this.data[this.pos++];break;case\"acTL\":this.animation={numFrames:this.readUInt32(),numPlays:this.readUInt32()||1/0,frames:[]};break;case\"PLTE\":this.palette=this.read(e);break;case\"fcTL\":o&&this.animation.frames.push(o),this.pos+=4,o={width:this.readUInt32(),height:this.readUInt32(),xOffset:this.readUInt32(),yOffset:this.readUInt32()},a=this.readUInt16(),i=this.readUInt16()||100,o.delay=1e3*a/i,o.disposeOp=this.data[this.pos++],o.blendOp=this.data[this.pos++],o.data=[];break;case\"IDAT\":case\"fdAT\":for(\"fdAT\"===c&&(this.pos+=4,e-=4),t=(null!=o?o.data:void 0)||this.imgData,f=0;0<=e?f<e:f>e;0<=e?++f:--f)t.push(this.data[this.pos++]);break;case\"tRNS\":switch(this.transparency={},this.colorType){case 3:if(n=this.palette.length/3,this.transparency.indexed=this.read(e),this.transparency.indexed.length>n)throw new Error(\"More transparent colors than palette size\");if((l=n-this.transparency.indexed.length)>0)for(d=0;0<=l?d<l:d>l;0<=l?++d:--d)this.transparency.indexed.push(255);break;case 0:this.transparency.grayscale=this.read(e)[0];break;case 2:this.transparency.rgb=this.read(e)}break;case\"tEXt\":s=(h=this.read(e)).indexOf(0),u=String.fromCharCode.apply(String,h.slice(0,s)),this.text[u]=String.fromCharCode.apply(String,h.slice(s+1));break;case\"IEND\":return o&&this.animation.frames.push(o),this.colors=function(){switch(this.colorType){case 0:case 3:case 4:return 1;case 2:case 6:return 3}}.call(this),this.hasAlphaChannel=4===(p=this.colorType)||6===p,r=this.colors+(this.hasAlphaChannel?1:0),this.pixelBitlength=this.bits*r,this.colorSpace=function(){switch(this.colors){case 1:return\"DeviceGray\";case 3:return\"DeviceRGB\"}}.call(this),void(this.imgData=new Uint8Array(this.imgData));default:this.pos+=e}if(this.pos+=4,this.pos>this.data.length)throw new Error(\"Incomplete or corrupt PNG file\")}}a.prototype.read=function(t){var e,r;for(r=[],e=0;0<=t?e<t:e>t;0<=t?++e:--e)r.push(this.data[this.pos++]);return r},a.prototype.readUInt32=function(){return this.data[this.pos++]<<24|this.data[this.pos++]<<16|this.data[this.pos++]<<8|this.data[this.pos++]},a.prototype.readUInt16=function(){return this.data[this.pos++]<<8|this.data[this.pos++]},a.prototype.decodePixels=function(t){var r=this.pixelBitlength/8,n=new Uint8Array(this.width*this.height*r),i=0,a=this;if(null==t&&(t=this.imgData),0===t.length)return new Uint8Array(0);function o(e,o,s,u){var c,l,h,f,d,p,g,m,v,b,y,w,N,L,A,x,S,_,P,k,I,F=Math.ceil((a.width-e)/s),C=Math.ceil((a.height-o)/u),j=a.width==F&&a.height==C;for(L=r*F,w=j?n:new Uint8Array(L*C),p=t.length,N=0,l=0;N<C&&i<p;){switch(t[i++]){case 0:for(f=S=0;S<L;f=S+=1)w[l++]=t[i++];break;case 1:for(f=_=0;_<L;f=_+=1)c=t[i++],d=f<r?0:w[l-r],w[l++]=(c+d)%256;break;case 2:for(f=P=0;P<L;f=P+=1)c=t[i++],h=(f-f%r)/r,A=N&&w[(N-1)*L+h*r+f%r],w[l++]=(A+c)%256;break;case 3:for(f=k=0;k<L;f=k+=1)c=t[i++],h=(f-f%r)/r,d=f<r?0:w[l-r],A=N&&w[(N-1)*L+h*r+f%r],w[l++]=(c+Math.floor((d+A)/2))%256;break;case 4:for(f=I=0;I<L;f=I+=1)c=t[i++],h=(f-f%r)/r,d=f<r?0:w[l-r],0===N?A=x=0:(A=w[(N-1)*L+h*r+f%r],x=h&&w[(N-1)*L+(h-1)*r+f%r]),g=d+A-x,m=Math.abs(g-d),b=Math.abs(g-A),y=Math.abs(g-x),v=m<=b&&m<=y?d:b<=y?A:x,w[l++]=(c+v)%256;break;default:throw new Error(\"Invalid filter algorithm: \"+t[i-1])}if(!j){var O=((o+N*u)*a.width+e)*r,B=N*L;for(f=0;f<F;f+=1){for(var M=0;M<r;M+=1)n[O++]=w[B++];O+=(s-1)*r}}N++}}return t=e(t),1==a.interlaceMethod?(o(0,0,8,8),o(4,0,8,8),o(0,4,4,8),o(2,0,4,4),o(0,2,2,4),o(1,0,2,2),o(0,1,1,2)):o(0,0,1,1),n},a.prototype.decodePalette=function(){var t,e,r,n,i,a,o,s,u;for(r=this.palette,a=this.transparency.indexed||[],i=new Uint8Array((a.length||0)+r.length),n=0,t=0,e=o=0,s=r.length;o<s;e=o+=3)i[n++]=r[e],i[n++]=r[e+1],i[n++]=r[e+2],i[n++]=null!=(u=a[t++])?u:255;return i},a.prototype.copyToImageData=function(t,e){var r,n,i,a,o,s,u,c,l,h,f;if(n=this.colors,l=null,r=this.hasAlphaChannel,this.palette.length&&(l=null!=(f=this._decodedPalette)?f:this._decodedPalette=this.decodePalette(),n=4,r=!0),c=(i=t.data||t).length,o=l||e,a=s=0,1===n)for(;a<c;)u=l?4*e[a/4]:s,h=o[u++],i[a++]=h,i[a++]=h,i[a++]=h,i[a++]=r?o[u++]:255,s=u;else for(;a<c;)u=l?4*e[a/4]:s,i[a++]=o[u++],i[a++]=o[u++],i[a++]=o[u++],i[a++]=r?o[u++]:255,s=u},a.prototype.decode=function(){var t;return t=new Uint8Array(this.width*this.height*4),this.copyToImageData(t,this.decodePixels()),t};var o=function(){if(\"[object Window]\"===Object.prototype.toString.call(r)){try{n=r.document.createElement(\"canvas\"),i=n.getContext(\"2d\")}catch(t){return!1}return!0}return!1};return o(),t=function(t){var e;if(!0===o())return i.width=t.width,i.height=t.height,i.clearRect(0,0,t.width,t.height),i.putImageData(t,0,0),(e=new Image).src=n.toDataURL(),e;throw new Error(\"This method requires a Browser with Canvas-capability.\")},a.prototype.decodeFrames=function(e){var r,n,i,a,o,s,u,c;if(this.animation){for(c=[],n=o=0,s=(u=this.animation.frames).length;o<s;n=++o)r=u[n],i=e.createImageData(r.width,r.height),a=this.decodePixels(new Uint8Array(r.data)),this.copyToImageData(i,a),r.imageData=i,c.push(r.image=t(i));return c}},a.prototype.renderFrame=function(t,e){var r,n,i;return r=(n=this.animation.frames)[e],i=n[e-1],0===e&&t.clearRect(0,0,this.width,this.height),1===(null!=i?i.disposeOp:void 0)?t.clearRect(i.xOffset,i.yOffset,i.width,i.height):2===(null!=i?i.disposeOp:void 0)&&t.putImageData(i.imageData,i.xOffset,i.yOffset),0===r.blendOp&&t.clearRect(r.xOffset,r.yOffset,r.width,r.height),t.drawImage(r.image,r.xOffset,r.yOffset)},a.prototype.animate=function(t){var e,r,n,i,a,o,s=this;return r=0,o=this.animation,i=o.numFrames,n=o.frames,a=o.numPlays,(e=function(){var o,u;if(o=r++%i,u=n[o],s.renderFrame(t,o),i>1&&r/i<a)return s.animation._timeout=setTimeout(e,u.delay)})()},a.prototype.stopAnimation=function(){var t;return clearTimeout(null!=(t=this.animation)?t._timeout:void 0)},a.prototype.render=function(t){var e,r;return t._png&&t._png.stopAnimation(),t._png=this,t.width=this.width,t.height=this.height,e=t.getContext(\"2d\"),this.animation?(this.decodeFrames(e),this.animate(e)):(r=e.createImageData(this.width,this.height),this.copyToImageData(r,this.decodePixels()),e.putImageData(r,0,0))},a}();\n/**\n * @license\n *\n * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n/**\n * @license\n * (c) Dean McNamee <dean@gmail.com>, 2013.\n *\n * https://github.com/deanm/omggif\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\n * including animation and compression. It does not rely on any specific\n * underlying system, so should run in the browser, Node, or Plask.\n */\nfunction Jt(t){var e=0;if(71!==t[e++]||73!==t[e++]||70!==t[e++]||56!==t[e++]||56!=(t[e++]+1&253)||97!==t[e++])throw new Error(\"Invalid GIF 87a/89a header.\");var r=t[e++]|t[e++]<<8,n=t[e++]|t[e++]<<8,i=t[e++],a=i>>7,o=1<<(7&i)+1;t[e++];t[e++];var s=null,u=null;a&&(s=e,u=o,e+=3*o);var c=!0,l=[],h=0,f=null,d=0,p=null;for(this.width=r,this.height=n;c&&e<t.length;)switch(t[e++]){case 33:switch(t[e++]){case 255:if(11!==t[e]||78==t[e+1]&&69==t[e+2]&&84==t[e+3]&&83==t[e+4]&&67==t[e+5]&&65==t[e+6]&&80==t[e+7]&&69==t[e+8]&&50==t[e+9]&&46==t[e+10]&&48==t[e+11]&&3==t[e+12]&&1==t[e+13]&&0==t[e+16])e+=14,p=t[e++]|t[e++]<<8,e++;else for(e+=12;;){if(!((P=t[e++])>=0))throw Error(\"Invalid block size\");if(0===P)break;e+=P}break;case 249:if(4!==t[e++]||0!==t[e+4])throw new Error(\"Invalid graphics extension block.\");var g=t[e++];h=t[e++]|t[e++]<<8,f=t[e++],0==(1&g)&&(f=null),d=g>>2&7,e++;break;case 254:for(;;){if(!((P=t[e++])>=0))throw Error(\"Invalid block size\");if(0===P)break;e+=P}break;default:throw new Error(\"Unknown graphic control label: 0x\"+t[e-1].toString(16))}break;case 44:var m=t[e++]|t[e++]<<8,v=t[e++]|t[e++]<<8,b=t[e++]|t[e++]<<8,y=t[e++]|t[e++]<<8,w=t[e++],N=w>>6&1,L=1<<(7&w)+1,A=s,x=u,S=!1;if(w>>7){S=!0;A=e,x=L,e+=3*L}var _=e;for(e++;;){var P;if(!((P=t[e++])>=0))throw Error(\"Invalid block size\");if(0===P)break;e+=P}l.push({x:m,y:v,width:b,height:y,has_local_palette:S,palette_offset:A,palette_size:x,data_offset:_,data_length:e-_,transparent_index:f,interlaced:!!N,delay:h,disposal:d});break;case 59:c=!1;break;default:throw new Error(\"Unknown gif block: 0x\"+t[e-1].toString(16))}this.numFrames=function(){return l.length},this.loopCount=function(){return p},this.frameInfo=function(t){if(t<0||t>=l.length)throw new Error(\"Frame index out of range.\");return l[t]},this.decodeAndBlitFrameBGRA=function(e,n){var i=this.frameInfo(e),a=i.width*i.height,o=new Uint8Array(a);Xt(t,i.data_offset,o,a);var s=i.palette_offset,u=i.transparent_index;null===u&&(u=256);var c=i.width,l=r-c,h=c,f=4*(i.y*r+i.x),d=4*((i.y+i.height)*r+i.x),p=f,g=4*l;!0===i.interlaced&&(g+=4*r*7);for(var m=8,v=0,b=o.length;v<b;++v){var y=o[v];if(0===h&&(h=c,(p+=g)>=d&&(g=4*l+4*r*(m-1),p=f+(c+l)*(m<<1),m>>=1)),y===u)p+=4;else{var w=t[s+3*y],N=t[s+3*y+1],L=t[s+3*y+2];n[p++]=L,n[p++]=N,n[p++]=w,n[p++]=255}--h}},this.decodeAndBlitFrameRGBA=function(e,n){var i=this.frameInfo(e),a=i.width*i.height,o=new Uint8Array(a);Xt(t,i.data_offset,o,a);var s=i.palette_offset,u=i.transparent_index;null===u&&(u=256);var c=i.width,l=r-c,h=c,f=4*(i.y*r+i.x),d=4*((i.y+i.height)*r+i.x),p=f,g=4*l;!0===i.interlaced&&(g+=4*r*7);for(var m=8,v=0,b=o.length;v<b;++v){var y=o[v];if(0===h&&(h=c,(p+=g)>=d&&(g=4*l+4*r*(m-1),p=f+(c+l)*(m<<1),m>>=1)),y===u)p+=4;else{var w=t[s+3*y],N=t[s+3*y+1],L=t[s+3*y+2];n[p++]=w,n[p++]=N,n[p++]=L,n[p++]=255}--h}}}function Xt(t,e,r,n){for(var a=t[e++],o=1<<a,s=o+1,u=s+1,c=a+1,l=(1<<c)-1,h=0,f=0,d=0,p=t[e++],g=new Int32Array(4096),m=null;;){for(;h<16&&0!==p;)f|=t[e++]<<h,h+=8,1===p?p=t[e++]:--p;if(h<c)break;var v=f&l;if(f>>=c,h-=c,v!==o){if(v===s)break;for(var b=v<u?v:m,y=0,w=b;w>o;)w=g[w]>>8,++y;var N=w;if(d+y+(b!==v?1:0)>n)return void i.log(\"Warning, gif stream longer than expected.\");r[d++]=N;var L=d+=y;for(b!==v&&(r[d++]=N),w=b;y--;)w=g[w],r[--L]=255&w,w>>=8;null!==m&&u<4096&&(g[u++]=m<<8|N,u>=l+1&&c<12&&(++c,l=l<<1|1)),m=v}else u=s+1,l=(1<<(c=a+1))-1,m=null}return d!==n&&i.log(\"Warning, gif stream shorter than expected.\"),r}\n/**\n * @license\n Copyright (c) 2008, Adobe Systems Incorporated\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without \n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright notice, \n this list of conditions and the following disclaimer.\n \n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the \n documentation and/or other materials provided with the distribution.\n \n * Neither the name of Adobe Systems Incorporated nor the names of its \n contributors may be used to endorse or promote products derived from \n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/function Kt(t){var e,r,n,i,a,o=Math.floor,s=new Array(64),u=new Array(64),c=new Array(64),l=new Array(64),h=new Array(65535),f=new Array(65535),d=new Array(64),p=new Array(64),g=[],m=0,v=7,b=new Array(64),y=new Array(64),w=new Array(64),N=new Array(256),L=new Array(2048),A=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],x=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],S=[0,1,2,3,4,5,6,7,8,9,10,11],_=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],P=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],k=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],I=[0,1,2,3,4,5,6,7,8,9,10,11],F=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],C=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function j(t,e){for(var r=0,n=0,i=new Array,a=1;a<=16;a++){for(var o=1;o<=t[a];o++)i[e[n]]=[],i[e[n]][0]=r,i[e[n]][1]=a,n++,r++;r*=2}return i}function O(t){for(var e=t[0],r=t[1]-1;r>=0;)e&1<<r&&(m|=1<<v),r--,--v<0&&(255==m?(B(255),B(0)):B(m),v=7,m=0)}function B(t){g.push(t)}function M(t){B(t>>8&255),B(255&t)}function E(t,e,r,n,i){for(var a,o=i[0],s=i[240],u=function(t,e){var r,n,i,a,o,s,u,c,l,h,f=0;for(l=0;l<8;++l){r=t[f],n=t[f+1],i=t[f+2],a=t[f+3],o=t[f+4],s=t[f+5],u=t[f+6];var p=r+(c=t[f+7]),g=r-c,m=n+u,v=n-u,b=i+s,y=i-s,w=a+o,N=a-o,L=p+w,A=p-w,x=m+b,S=m-b;t[f]=L+x,t[f+4]=L-x;var _=.707106781*(S+A);t[f+2]=A+_,t[f+6]=A-_;var P=.382683433*((L=N+y)-(S=v+g)),k=.5411961*L+P,I=1.306562965*S+P,F=.707106781*(x=y+v),C=g+F,j=g-F;t[f+5]=j+k,t[f+3]=j-k,t[f+1]=C+I,t[f+7]=C-I,f+=8}for(f=0,l=0;l<8;++l){r=t[f],n=t[f+8],i=t[f+16],a=t[f+24],o=t[f+32],s=t[f+40],u=t[f+48];var O=r+(c=t[f+56]),B=r-c,M=n+u,E=n-u,q=i+s,R=i-s,D=a+o,T=a-o,U=O+D,z=O-D,H=M+q,V=M-q;t[f]=U+H,t[f+32]=U-H;var W=.707106781*(V+z);t[f+16]=z+W,t[f+48]=z-W;var G=.382683433*((U=T+R)-(V=E+B)),Y=.5411961*U+G,J=1.306562965*V+G,X=.707106781*(H=R+E),K=B+X,Z=B-X;t[f+40]=Z+Y,t[f+24]=Z-Y,t[f+8]=K+J,t[f+56]=K-J,f++}for(l=0;l<64;++l)h=t[l]*e[l],d[l]=h>0?h+.5|0:h-.5|0;return d}(t,e),c=0;c<64;++c)p[A[c]]=u[c];var l=p[0]-r;r=p[0],0==l?O(n[0]):(O(n[f[a=32767+l]]),O(h[a]));for(var g=63;g>0&&0==p[g];)g--;if(0==g)return O(o),r;for(var m,v=1;v<=g;){for(var b=v;0==p[v]&&v<=g;)++v;var y=v-b;if(y>=16){m=y>>4;for(var w=1;w<=m;++w)O(s);y&=15}a=32767+p[v],O(i[(y<<4)+f[a]]),O(h[a]),v++}return 63!=g&&O(o),r}function q(t){(t=Math.min(Math.max(t,1),100),a!=t)&&(!function(t){for(var e=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],r=0;r<64;r++){var n=o((e[r]*t+50)/100);n=Math.min(Math.max(n,1),255),s[A[r]]=n}for(var i=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],a=0;a<64;a++){var h=o((i[a]*t+50)/100);h=Math.min(Math.max(h,1),255),u[A[a]]=h}for(var f=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],d=0,p=0;p<8;p++)for(var g=0;g<8;g++)c[d]=1/(s[A[d]]*f[p]*f[g]*8),l[d]=1/(u[A[d]]*f[p]*f[g]*8),d++}(t<50?Math.floor(5e3/t):Math.floor(200-2*t)),a=t)}this.encode=function(t,a){a&&q(a),g=new Array,m=0,v=7,M(65496),M(65504),M(16),B(74),B(70),B(73),B(70),B(0),B(1),B(1),B(0),M(1),M(1),B(0),B(0),function(){M(65499),M(132),B(0);for(var t=0;t<64;t++)B(s[t]);B(1);for(var e=0;e<64;e++)B(u[e])}(),function(t,e){M(65472),M(17),B(8),M(e),M(t),B(3),B(1),B(17),B(0),B(2),B(17),B(1),B(3),B(17),B(1)}(t.width,t.height),function(){M(65476),M(418),B(0);for(var t=0;t<16;t++)B(x[t+1]);for(var e=0;e<=11;e++)B(S[e]);B(16);for(var r=0;r<16;r++)B(_[r+1]);for(var n=0;n<=161;n++)B(P[n]);B(1);for(var i=0;i<16;i++)B(k[i+1]);for(var a=0;a<=11;a++)B(I[a]);B(17);for(var o=0;o<16;o++)B(F[o+1]);for(var s=0;s<=161;s++)B(C[s])}(),M(65498),M(12),B(3),B(1),B(0),B(2),B(17),B(3),B(17),B(0),B(63),B(0);var o=0,h=0,f=0;m=0,v=7,this.encode.displayName=\"_encode_\";for(var d,p,N,A,j,R,D,T,U,z=t.data,H=t.width,V=t.height,W=4*H,G=0;G<V;){for(d=0;d<W;){for(j=W*G+d,D=-1,T=0,U=0;U<64;U++)R=j+(T=U>>3)*W+(D=4*(7&U)),G+T>=V&&(R-=W*(G+1+T-V)),d+D>=W&&(R-=d+D-W+4),p=z[R++],N=z[R++],A=z[R++],b[U]=(L[p]+L[N+256>>0]+L[A+512>>0]>>16)-128,y[U]=(L[p+768>>0]+L[N+1024>>0]+L[A+1280>>0]>>16)-128,w[U]=(L[p+1280>>0]+L[N+1536>>0]+L[A+1792>>0]>>16)-128;o=E(b,c,o,e,n),h=E(y,l,h,r,i),f=E(w,l,f,r,i),d+=32}G+=8}if(v>=0){var Y=[];Y[1]=v+1,Y[0]=(1<<v+1)-1,O(Y)}return M(65497),new Uint8Array(g)},t=t||50,function(){for(var t=String.fromCharCode,e=0;e<256;e++)N[e]=t(e)}(),e=j(x,S),r=j(k,I),n=j(_,P),i=j(F,C),function(){for(var t=1,e=2,r=1;r<=15;r++){for(var n=t;n<e;n++)f[32767+n]=r,h[32767+n]=[],h[32767+n][1]=r,h[32767+n][0]=n;for(var i=-(e-1);i<=-t;i++)f[32767+i]=r,h[32767+i]=[],h[32767+i][1]=r,h[32767+i][0]=e-1+i;t<<=1,e<<=1}}(),function(){for(var t=0;t<256;t++)L[t]=19595*t,L[t+256>>0]=38470*t,L[t+512>>0]=7471*t+32768,L[t+768>>0]=-11059*t,L[t+1024>>0]=-21709*t,L[t+1280>>0]=32768*t+8421375,L[t+1536>>0]=-27439*t,L[t+1792>>0]=-5329*t}(),q(t)}\n/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */function Zt(t,e){if(this.pos=0,this.buffer=t,this.datav=new DataView(t.buffer),this.is_with_alpha=!!e,this.bottom_up=!0,this.flag=String.fromCharCode(this.buffer[0])+String.fromCharCode(this.buffer[1]),this.pos+=2,-1===[\"BM\",\"BA\",\"CI\",\"CP\",\"IC\",\"PT\"].indexOf(this.flag))throw new Error(\"Invalid BMP File\");this.parseHeader(),this.parseBGR()}function $t(t){function e(t){if(!t)throw Error(\"assert :P\")}function r(t,e,r){for(var n=0;4>n;n++)if(t[e+n]!=r.charCodeAt(n))return!0;return!1}function n(t,e,r,n,i){for(var a=0;a<i;a++)t[e+a]=r[n+a]}function i(t,e,r,n){for(var i=0;i<n;i++)t[e+i]=r}function a(t){return new Int32Array(t)}function o(t,e){for(var r=[],n=0;n<t;n++)r.push(new e);return r}function s(t,e){var r=[];return function t(r,n,i){for(var a=i[n],o=0;o<a&&(r.push(i.length>n+1?[]:new e),!(i.length<n+1));o++)t(r[o],n+1,i)}(r,0,t),r}function u(t,e){for(var r=\"\",n=0;n<4;n++)r+=String.fromCharCode(t[e++]);return r}function c(t,e){return(t[e+0]<<0|t[e+1]<<8|t[e+2]<<16)>>>0}function l(t,e){return(t[e+0]<<0|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24)>>>0}new($t=function(){var t=this;function u(t,e){for(var r=1<<e-1>>>0;t&r;)r>>>=1;return r?(t&r-1)+r:t}function c(t,r,n,i,a){e(!(i%n));do{t[r+(i-=n)]=a}while(0<i)}function l(t,r,n,i,o){if(e(2328>=o),512>=o)var s=a(512);else if(null==(s=a(o)))return 0;return function(t,r,n,i,o,s){var l,f,d=r,p=1<<n,g=a(16),m=a(16);for(e(0!=o),e(null!=i),e(null!=t),e(0<n),f=0;f<o;++f){if(15<i[f])return 0;++g[i[f]]}if(g[0]==o)return 0;for(m[1]=0,l=1;15>l;++l){if(g[l]>1<<l)return 0;m[l+1]=m[l]+g[l]}for(f=0;f<o;++f)l=i[f],0<i[f]&&(s[m[l]++]=f);if(1==m[15])return(i=new h).g=0,i.value=s[0],c(t,d,1,p,i),p;var v,b=-1,y=p-1,w=0,N=1,L=1,A=1<<n;for(f=0,l=1,o=2;l<=n;++l,o<<=1){if(N+=L<<=1,0>(L-=g[l]))return 0;for(;0<g[l];--g[l])(i=new h).g=l,i.value=s[f++],c(t,d+w,o,A,i),w=u(w,l)}for(l=n+1,o=2;15>=l;++l,o<<=1){if(N+=L<<=1,0>(L-=g[l]))return 0;for(;0<g[l];--g[l]){if(i=new h,(w&y)!=b){for(d+=A,v=1<<(b=l)-n;15>b&&!(0>=(v-=g[b]));)++b,v<<=1;p+=A=1<<(v=b-n),t[r+(b=w&y)].g=v+n,t[r+b].value=d-r-b}i.g=l-n,i.value=s[f++],c(t,d+(w>>n),o,A,i),w=u(w,l)}}return N!=2*m[15]-1?0:p}(t,r,n,i,o,s)}function h(){this.value=this.g=0}function f(){this.value=this.g=0}function d(){this.G=o(5,h),this.H=a(5),this.jc=this.Qb=this.qb=this.nd=0,this.pd=o(Rr,f)}function p(t,r,n,i){e(null!=t),e(null!=r),e(2147483648>i),t.Ca=254,t.I=0,t.b=-8,t.Ka=0,t.oa=r,t.pa=n,t.Jd=r,t.Yc=n+i,t.Zc=4<=i?n+i-4+1:n,_(t)}function g(t,e){for(var r=0;0<e--;)r|=k(t,128)<<e;return r}function m(t,e){var r=g(t,e);return P(t)?-r:r}function v(t,r,n,i){var a,o=0;for(e(null!=t),e(null!=r),e(4294967288>i),t.Sb=i,t.Ra=0,t.u=0,t.h=0,4<i&&(i=4),a=0;a<i;++a)o+=r[n+a]<<8*a;t.Ra=o,t.bb=i,t.oa=r,t.pa=n}function b(t){for(;8<=t.u&&t.bb<t.Sb;)t.Ra>>>=8,t.Ra+=t.oa[t.pa+t.bb]<<Ur-8>>>0,++t.bb,t.u-=8;A(t)&&(t.h=1,t.u=0)}function y(t,r){if(e(0<=r),!t.h&&r<=Tr){var n=L(t)&Dr[r];return t.u+=r,b(t),n}return t.h=1,t.u=0}function w(){this.b=this.Ca=this.I=0,this.oa=[],this.pa=0,this.Jd=[],this.Yc=0,this.Zc=[],this.Ka=0}function N(){this.Ra=0,this.oa=[],this.h=this.u=this.bb=this.Sb=this.pa=0}function L(t){return t.Ra>>>(t.u&Ur-1)>>>0}function A(t){return e(t.bb<=t.Sb),t.h||t.bb==t.Sb&&t.u>Ur}function x(t,e){t.u=e,t.h=A(t)}function S(t){t.u>=zr&&(e(t.u>=zr),b(t))}function _(t){e(null!=t&&null!=t.oa),t.pa<t.Zc?(t.I=(t.oa[t.pa++]|t.I<<8)>>>0,t.b+=8):(e(null!=t&&null!=t.oa),t.pa<t.Yc?(t.b+=8,t.I=t.oa[t.pa++]|t.I<<8):t.Ka?t.b=0:(t.I<<=8,t.b+=8,t.Ka=1))}function P(t){return g(t,1)}function k(t,e){var r=t.Ca;0>t.b&&_(t);var n=t.b,i=r*e>>>8,a=(t.I>>>n>i)+0;for(a?(r-=i,t.I-=i+1<<n>>>0):r=i+1,n=r,i=0;256<=n;)i+=8,n>>=8;return n=7^i+Hr[n],t.b-=n,t.Ca=(r<<n)-1,a}function I(t,e,r){t[e+0]=r>>24&255,t[e+1]=r>>16&255,t[e+2]=r>>8&255,t[e+3]=r>>0&255}function F(t,e){return t[e+0]<<0|t[e+1]<<8}function C(t,e){return F(t,e)|t[e+2]<<16}function j(t,e){return F(t,e)|F(t,e+2)<<16}function O(t,r){var n=1<<r;return e(null!=t),e(0<r),t.X=a(n),null==t.X?0:(t.Mb=32-r,t.Xa=r,1)}function B(t,r){e(null!=t),e(null!=r),e(t.Xa==r.Xa),n(r.X,0,t.X,0,1<<r.Xa)}function M(){this.X=[],this.Xa=this.Mb=0}function E(t,r,n,i){e(null!=n),e(null!=i);var a=n[0],o=i[0];return 0==a&&(a=(t*o+r/2)/r),0==o&&(o=(r*a+t/2)/t),0>=a||0>=o?0:(n[0]=a,i[0]=o,1)}function q(t,e){return t+(1<<e)-1>>>e}function R(t,e){return((4278255360&t)+(4278255360&e)>>>0&4278255360)+((16711935&t)+(16711935&e)>>>0&16711935)>>>0}function D(e,r){t[r]=function(r,n,i,a,o,s,u){var c;for(c=0;c<o;++c){var l=t[e](s[u+c-1],i,a+c);s[u+c]=R(r[n+c],l)}}}function T(){this.ud=this.hd=this.jd=0}function U(t,e){return((4278124286&(t^e))>>>1)+(t&e)>>>0}function z(t){return 0<=t&&256>t?t:0>t?0:255<t?255:void 0}function H(t,e){return z(t+(t-e+.5>>1))}function V(t,e,r){return Math.abs(e-r)-Math.abs(t-r)}function W(t,e,r,n,i,a,o){for(n=a[o-1],r=0;r<i;++r)a[o+r]=n=R(t[e+r],n)}function G(t,e,r,n,i){var a;for(a=0;a<r;++a){var o=t[e+a],s=o>>8&255,u=16711935&(u=(u=16711935&o)+((s<<16)+s));n[i+a]=(4278255360&o)+u>>>0}}function Y(t,e){e.jd=t>>0&255,e.hd=t>>8&255,e.ud=t>>16&255}function J(t,e,r,n,i,a){var o;for(o=0;o<n;++o){var s=e[r+o],u=s>>>8,c=s,l=255&(l=(l=s>>>16)+((t.jd<<24>>24)*(u<<24>>24)>>>5));c=255&(c=(c=c+((t.hd<<24>>24)*(u<<24>>24)>>>5))+((t.ud<<24>>24)*(l<<24>>24)>>>5));i[a+o]=(4278255360&s)+(l<<16)+c}}function X(e,r,n,i,a){t[r]=function(t,e,r,n,o,s,u,c,l){for(n=u;n<c;++n)for(u=0;u<l;++u)o[s++]=a(r[i(t[e++])])},t[e]=function(e,r,o,s,u,c,l){var h=8>>e.b,f=e.Ea,d=e.K[0],p=e.w;if(8>h)for(e=(1<<e.b)-1,p=(1<<h)-1;r<o;++r){var g,m=0;for(g=0;g<f;++g)g&e||(m=i(s[u++])),c[l++]=a(d[m&p]),m>>=h}else t[\"VP8LMapColor\"+n](s,u,d,p,c,l,r,o,f)}}function K(t,e,r,n,i){for(r=e+r;e<r;){var a=t[e++];n[i++]=a>>16&255,n[i++]=a>>8&255,n[i++]=a>>0&255}}function Z(t,e,r,n,i){for(r=e+r;e<r;){var a=t[e++];n[i++]=a>>16&255,n[i++]=a>>8&255,n[i++]=a>>0&255,n[i++]=a>>24&255}}function $(t,e,r,n,i){for(r=e+r;e<r;){var a=(o=t[e++])>>16&240|o>>12&15,o=o>>0&240|o>>28&15;n[i++]=a,n[i++]=o}}function Q(t,e,r,n,i){for(r=e+r;e<r;){var a=(o=t[e++])>>16&248|o>>13&7,o=o>>5&224|o>>3&31;n[i++]=a,n[i++]=o}}function tt(t,e,r,n,i){for(r=e+r;e<r;){var a=t[e++];n[i++]=a>>0&255,n[i++]=a>>8&255,n[i++]=a>>16&255}}function et(t,e,r,i,a,o){if(0==o)for(r=e+r;e<r;)I(i,((o=t[e++])[0]>>24|o[1]>>8&65280|o[2]<<8&16711680|o[3]<<24)>>>0),a+=32;else n(i,a,t,e,r)}function rt(e,r){t[r][0]=t[e+\"0\"],t[r][1]=t[e+\"1\"],t[r][2]=t[e+\"2\"],t[r][3]=t[e+\"3\"],t[r][4]=t[e+\"4\"],t[r][5]=t[e+\"5\"],t[r][6]=t[e+\"6\"],t[r][7]=t[e+\"7\"],t[r][8]=t[e+\"8\"],t[r][9]=t[e+\"9\"],t[r][10]=t[e+\"10\"],t[r][11]=t[e+\"11\"],t[r][12]=t[e+\"12\"],t[r][13]=t[e+\"13\"],t[r][14]=t[e+\"0\"],t[r][15]=t[e+\"0\"]}function nt(t){return t==Hn||t==Vn||t==Wn||t==Gn}function it(){this.eb=[],this.size=this.A=this.fb=0}function at(){this.y=[],this.f=[],this.ea=[],this.F=[],this.Tc=this.Ed=this.Cd=this.Fd=this.lb=this.Db=this.Ab=this.fa=this.J=this.W=this.N=this.O=0}function ot(){this.Rd=this.height=this.width=this.S=0,this.f={},this.f.RGBA=new it,this.f.kb=new at,this.sd=null}function st(){this.width=[0],this.height=[0],this.Pd=[0],this.Qd=[0],this.format=[0]}function ut(){this.Id=this.fd=this.Md=this.hb=this.ib=this.da=this.bd=this.cd=this.j=this.v=this.Da=this.Sd=this.ob=0}function ct(t){return alert(\"todo:WebPSamplerProcessPlane\"),t.T}function lt(t,e){var r=t.T,i=e.ba.f.RGBA,a=i.eb,o=i.fb+t.ka*i.A,s=vi[e.ba.S],u=t.y,c=t.O,l=t.f,h=t.N,f=t.ea,d=t.W,p=e.cc,g=e.dc,m=e.Mc,v=e.Nc,b=t.ka,y=t.ka+t.T,w=t.U,N=w+1>>1;for(0==b?s(u,c,null,null,l,h,f,d,l,h,f,d,a,o,null,null,w):(s(e.ec,e.fc,u,c,p,g,m,v,l,h,f,d,a,o-i.A,a,o,w),++r);b+2<y;b+=2)p=l,g=h,m=f,v=d,h+=t.Rc,d+=t.Rc,o+=2*i.A,s(u,(c+=2*t.fa)-t.fa,u,c,p,g,m,v,l,h,f,d,a,o-i.A,a,o,w);return c+=t.fa,t.j+y<t.o?(n(e.ec,e.fc,u,c,w),n(e.cc,e.dc,l,h,N),n(e.Mc,e.Nc,f,d,N),r--):1&y||s(u,c,null,null,l,h,f,d,l,h,f,d,a,o+i.A,null,null,w),r}function ht(t,r,n){var i=t.F,a=[t.J];if(null!=i){var o=t.U,s=r.ba.S,u=s==Tn||s==Wn;r=r.ba.f.RGBA;var c=[0],l=t.ka;c[0]=t.T,t.Kb&&(0==l?--c[0]:(--l,a[0]-=t.width),t.j+t.ka+t.T==t.o&&(c[0]=t.o-t.j-l));var h=r.eb;l=r.fb+l*r.A;t=Sn(i,a[0],t.width,o,c,h,l+(u?0:3),r.A),e(n==c),t&&nt(s)&&An(h,l,u,o,c,r.A)}return 0}function ft(t){var e=t.ma,r=e.ba.S,n=11>r,i=r==qn||r==Dn||r==Tn||r==Un||12==r||nt(r);if(e.memory=null,e.Ib=null,e.Jb=null,e.Nd=null,!Mr(e.Oa,t,i?11:12))return 0;if(i&&nt(r)&&br(),t.da)alert(\"todo:use_scaling\");else{if(n){if(e.Ib=ct,t.Kb){if(r=t.U+1>>1,e.memory=a(t.U+2*r),null==e.memory)return 0;e.ec=e.memory,e.fc=0,e.cc=e.ec,e.dc=e.fc+t.U,e.Mc=e.cc,e.Nc=e.dc+r,e.Ib=lt,br()}}else alert(\"todo:EmitYUV\");i&&(e.Jb=ht,n&&mr())}if(n&&!Ci){for(t=0;256>t;++t)ji[t]=89858*(t-128)+_i>>Si,Mi[t]=-22014*(t-128)+_i,Bi[t]=-45773*(t-128),Oi[t]=113618*(t-128)+_i>>Si;for(t=Pi;t<ki;++t)e=76283*(t-16)+_i>>Si,Ei[t-Pi]=Wt(e,255),qi[t-Pi]=Wt(e+8>>4,15);Ci=1}return 1}function dt(t){var r=t.ma,n=t.U,i=t.T;return e(!(1&t.ka)),0>=n||0>=i?0:(n=r.Ib(t,r),null!=r.Jb&&r.Jb(t,r,n),r.Dc+=n,1)}function pt(t){t.ma.memory=null}function gt(t,e,r,n){return 47!=y(t,8)?0:(e[0]=y(t,14)+1,r[0]=y(t,14)+1,n[0]=y(t,1),0!=y(t,3)?0:!t.h)}function mt(t,e){if(4>t)return t+1;var r=t-2>>1;return(2+(1&t)<<r)+y(e,r)+1}function vt(t,e){return 120<e?e-120:1<=(r=((r=$n[e-1])>>4)*t+(8-(15&r)))?r:1;var r}function bt(t,e,r){var n=L(r),i=t[e+=255&n].g-8;return 0<i&&(x(r,r.u+8),n=L(r),e+=t[e].value,e+=n&(1<<i)-1),x(r,r.u+t[e].g),t[e].value}function yt(t,r,n){return n.g+=t.g,n.value+=t.value<<r>>>0,e(8>=n.g),t.g}function wt(t,r,n){var i=t.xc;return e((r=0==i?0:t.vc[t.md*(n>>i)+(r>>i)])<t.Wb),t.Ya[r]}function Nt(t,r,i,a){var o=t.ab,s=t.c*r,u=t.C;r=u+r;var c=i,l=a;for(a=t.Ta,i=t.Ua;0<o--;){var h=t.gc[o],f=u,d=r,p=c,g=l,m=(l=a,c=i,h.Ea);switch(e(f<d),e(d<=h.nc),h.hc){case 2:Gr(p,g,(d-f)*m,l,c);break;case 0:var v=f,b=d,y=l,w=c,N=(_=h).Ea;0==v&&(Vr(p,g,null,null,1,y,w),W(p,g+1,0,0,N-1,y,w+1),g+=N,w+=N,++v);for(var L=1<<_.b,A=L-1,x=q(N,_.b),S=_.K,_=_.w+(v>>_.b)*x;v<b;){var P=S,k=_,I=1;for(Wr(p,g,y,w-N,1,y,w);I<N;){var F=(I&~A)+L;F>N&&(F=N),(0,Zr[P[k++]>>8&15])(p,g+ +I,y,w+I-N,F-I,y,w+I),I=F}g+=N,w+=N,++v&A||(_+=x)}d!=h.nc&&n(l,c-m,l,c+(d-f-1)*m,m);break;case 1:for(m=p,b=g,N=(p=h.Ea)-(w=p&~(y=(g=1<<h.b)-1)),v=q(p,h.b),L=h.K,h=h.w+(f>>h.b)*v;f<d;){for(A=L,x=h,S=new T,_=b+w,P=b+p;b<_;)Y(A[x++],S),$r(S,m,b,g,l,c),b+=g,c+=g;b<P&&(Y(A[x++],S),$r(S,m,b,N,l,c),b+=N,c+=N),++f&y||(h+=v)}break;case 3:if(p==l&&g==c&&0<h.b){for(b=l,p=m=c+(d-f)*m-(w=(d-f)*q(h.Ea,h.b)),g=l,y=c,v=[],w=(N=w)-1;0<=w;--w)v[w]=g[y+w];for(w=N-1;0<=w;--w)b[p+w]=v[w];Yr(h,f,d,l,m,l,c)}else Yr(h,f,d,p,g,l,c)}c=a,l=i}l!=i&&n(a,i,c,l,s)}function Lt(t,r){var n=t.V,i=t.Ba+t.c*t.C,a=r-t.C;if(e(r<=t.l.o),e(16>=a),0<a){var o=t.l,s=t.Ta,u=t.Ua,c=o.width;if(Nt(t,a,n,i),a=u=[u],e((n=t.C)<(i=r)),e(o.v<o.va),i>o.o&&(i=o.o),n<o.j){var l=o.j-n;n=o.j;a[0]+=l*c}if(n>=i?n=0:(a[0]+=4*o.v,o.ka=n-o.j,o.U=o.va-o.v,o.T=i-n,n=1),n){if(u=u[0],11>(n=t.ca).S){var h=n.f.RGBA,f=(i=n.S,a=o.U,o=o.T,l=h.eb,h.A),d=o;for(h=h.fb+t.Ma*h.A;0<d--;){var p=s,g=u,m=a,v=l,b=h;switch(i){case En:Qr(p,g,m,v,b);break;case qn:tn(p,g,m,v,b);break;case Hn:tn(p,g,m,v,b),An(v,b,0,m,1,0);break;case Rn:nn(p,g,m,v,b);break;case Dn:et(p,g,m,v,b,1);break;case Vn:et(p,g,m,v,b,1),An(v,b,0,m,1,0);break;case Tn:et(p,g,m,v,b,0);break;case Wn:et(p,g,m,v,b,0),An(v,b,1,m,1,0);break;case Un:en(p,g,m,v,b);break;case Gn:en(p,g,m,v,b),xn(v,b,m,1,0);break;case zn:rn(p,g,m,v,b);break;default:e(0)}u+=c,h+=f}t.Ma+=o}else alert(\"todo:EmitRescaledRowsYUVA\");e(t.Ma<=n.height)}}t.C=r,e(t.C<=t.i)}function At(t){var e;if(0<t.ua)return 0;for(e=0;e<t.Wb;++e){var r=t.Ya[e].G,n=t.Ya[e].H;if(0<r[1][n[1]+0].g||0<r[2][n[2]+0].g||0<r[3][n[3]+0].g)return 0}return 1}function xt(t,r,n,i,a,o){if(0!=t.Z){var s=t.qd,u=t.rd;for(e(null!=mi[t.Z]);r<n;++r)mi[t.Z](s,u,i,a,i,a,o),s=i,u=a,a+=o;t.qd=s,t.rd=u}}function St(t,r){var n=t.l.ma,i=0==n.Z||1==n.Z?t.l.j:t.C;i=t.C<i?i:t.C;if(e(r<=t.l.o),r>i){var a=t.l.width,o=n.ca,s=n.tb+a*i,u=t.V,c=t.Ba+t.c*i,l=t.gc;e(1==t.ab),e(3==l[0].hc),Xr(l[0],i,r,u,c,o,s),xt(n,i,r,o,s,a)}t.C=t.Ma=r}function _t(t,r,n,i,a,o,s){var u=t.$/i,c=t.$%i,l=t.m,h=t.s,f=n+t.$,d=f;a=n+i*a;var p=n+i*o,g=280+h.ua,m=t.Pb?u:16777216,v=0<h.ua?h.Wa:null,b=h.wc,y=f<p?wt(h,c,u):null;e(t.C<o),e(p<=a);var w=!1;t:for(;;){for(;w||f<p;){var N=0;if(u>=m){var _=f-n;e((m=t).Pb),m.wd=m.m,m.xd=_,0<m.s.ua&&B(m.s.Wa,m.s.vb),m=u+ti}if(c&b||(y=wt(h,c,u)),e(null!=y),y.Qb&&(r[f]=y.qb,w=!0),!w)if(S(l),y.jc){N=l,_=r;var P=f,k=y.pd[L(N)&Rr-1];e(y.jc),256>k.g?(x(N,N.u+k.g),_[P]=k.value,N=0):(x(N,N.u+k.g-256),e(256<=k.value),N=k.value),0==N&&(w=!0)}else N=bt(y.G[0],y.H[0],l);if(l.h)break;if(w||256>N){if(!w)if(y.nd)r[f]=(y.qb|N<<8)>>>0;else{if(S(l),w=bt(y.G[1],y.H[1],l),S(l),_=bt(y.G[2],y.H[2],l),P=bt(y.G[3],y.H[3],l),l.h)break;r[f]=(P<<24|w<<16|N<<8|_)>>>0}if(w=!1,++f,++c>=i&&(c=0,++u,null!=s&&u<=o&&!(u%16)&&s(t,u),null!=v))for(;d<f;)N=r[d++],v.X[(506832829*N&4294967295)>>>v.Mb]=N}else if(280>N){if(N=mt(N-256,l),_=bt(y.G[4],y.H[4],l),S(l),_=vt(i,_=mt(_,l)),l.h)break;if(f-n<_||a-f<N)break t;for(P=0;P<N;++P)r[f+P]=r[f+P-_];for(f+=N,c+=N;c>=i;)c-=i,++u,null!=s&&u<=o&&!(u%16)&&s(t,u);if(e(f<=a),c&b&&(y=wt(h,c,u)),null!=v)for(;d<f;)N=r[d++],v.X[(506832829*N&4294967295)>>>v.Mb]=N}else{if(!(N<g))break t;for(w=N-280,e(null!=v);d<f;)N=r[d++],v.X[(506832829*N&4294967295)>>>v.Mb]=N;N=f,e(!(w>>>(_=v).Xa)),r[N]=_.X[w],w=!0}w||e(l.h==A(l))}if(t.Pb&&l.h&&f<a)e(t.m.h),t.a=5,t.m=t.wd,t.$=t.xd,0<t.s.ua&&B(t.s.vb,t.s.Wa);else{if(l.h)break t;null!=s&&s(t,u>o?o:u),t.a=0,t.$=f-n}return 1}return t.a=3,0}function Pt(t){e(null!=t),t.vc=null,t.yc=null,t.Ya=null;var r=t.Wa;null!=r&&(r.X=null),t.vb=null,e(null!=t)}function kt(){var e=new or;return null==e?null:(e.a=0,e.xb=gi,rt(\"Predictor\",\"VP8LPredictors\"),rt(\"Predictor\",\"VP8LPredictors_C\"),rt(\"PredictorAdd\",\"VP8LPredictorsAdd\"),rt(\"PredictorAdd\",\"VP8LPredictorsAdd_C\"),Gr=G,$r=J,Qr=K,tn=Z,en=$,rn=Q,nn=tt,t.VP8LMapColor32b=Jr,t.VP8LMapColor8b=Kr,e)}function It(t,r,n,s,u){var c=1,f=[t],p=[r],g=s.m,m=s.s,v=null,b=0;t:for(;;){if(n)for(;c&&y(g,1);){var w=f,N=p,A=s,_=1,P=A.m,k=A.gc[A.ab],I=y(P,2);if(A.Oc&1<<I)c=0;else{switch(A.Oc|=1<<I,k.hc=I,k.Ea=w[0],k.nc=N[0],k.K=[null],++A.ab,e(4>=A.ab),I){case 0:case 1:k.b=y(P,3)+2,_=It(q(k.Ea,k.b),q(k.nc,k.b),0,A,k.K),k.K=k.K[0];break;case 3:var F,C=y(P,8)+1,j=16<C?0:4<C?1:2<C?2:3;if(w[0]=q(k.Ea,j),k.b=j,F=_=It(C,1,0,A,k.K)){var B,M=C,E=k,D=1<<(8>>E.b),T=a(D);if(null==T)F=0;else{var U=E.K[0],z=E.w;for(T[0]=E.K[0][0],B=1;B<1*M;++B)T[B]=R(U[z+B],T[B-1]);for(;B<4*D;++B)T[B]=0;E.K[0]=null,E.K[0]=T,F=1}}_=F;break;case 2:break;default:e(0)}c=_}}if(f=f[0],p=p[0],c&&y(g,1)&&!(c=1<=(b=y(g,4))&&11>=b)){s.a=3;break t}var H;if(H=c)e:{var V,W,G,Y=s,J=f,X=p,K=b,Z=n,$=Y.m,Q=Y.s,tt=[null],et=1,rt=0,nt=Qn[K];r:for(;;){if(Z&&y($,1)){var it=y($,3)+2,at=q(J,it),ot=q(X,it),st=at*ot;if(!It(at,ot,0,Y,tt))break r;for(tt=tt[0],Q.xc=it,V=0;V<st;++V){var ut=tt[V]>>8&65535;tt[V]=ut,ut>=et&&(et=ut+1)}}if($.h)break r;for(W=0;5>W;++W){var ct=Xn[W];!W&&0<K&&(ct+=1<<K),rt<ct&&(rt=ct)}var lt=o(et*nt,h),ht=et,ft=o(ht,d);if(null==ft)var dt=null;else e(65536>=ht),dt=ft;var pt=a(rt);if(null==dt||null==pt||null==lt){Y.a=1;break r}var gt=lt;for(V=G=0;V<et;++V){var mt=dt[V],vt=mt.G,bt=mt.H,wt=0,Nt=1,Lt=0;for(W=0;5>W;++W){ct=Xn[W],vt[W]=gt,bt[W]=G,!W&&0<K&&(ct+=1<<K);n:{var At,xt=ct,St=Y,kt=pt,Ft=gt,Ct=G,jt=0,Ot=St.m,Bt=y(Ot,1);if(i(kt,0,0,xt),Bt){var Mt=y(Ot,1)+1,Et=y(Ot,1),qt=y(Ot,0==Et?1:8);kt[qt]=1,2==Mt&&(kt[qt=y(Ot,8)]=1);var Rt=1}else{var Dt=a(19),Tt=y(Ot,4)+4;if(19<Tt){St.a=3;var Ut=0;break n}for(At=0;At<Tt;++At)Dt[Zn[At]]=y(Ot,3);var zt=void 0,Ht=void 0,Vt=St,Wt=Dt,Gt=xt,Yt=kt,Jt=0,Xt=Vt.m,Kt=8,Zt=o(128,h);i:for(;l(Zt,0,7,Wt,19);){if(y(Xt,1)){var $t=2+2*y(Xt,3);if((zt=2+y(Xt,$t))>Gt)break i}else zt=Gt;for(Ht=0;Ht<Gt&&zt--;){S(Xt);var Qt=Zt[0+(127&L(Xt))];x(Xt,Xt.u+Qt.g);var te=Qt.value;if(16>te)Yt[Ht++]=te,0!=te&&(Kt=te);else{var ee=16==te,re=te-16,ne=Jn[re],ie=y(Xt,Yn[re])+ne;if(Ht+ie>Gt)break i;for(var ae=ee?Kt:0;0<ie--;)Yt[Ht++]=ae}}Jt=1;break i}Jt||(Vt.a=3),Rt=Jt}(Rt=Rt&&!Ot.h)&&(jt=l(Ft,Ct,8,kt,xt)),Rt&&0!=jt?Ut=jt:(St.a=3,Ut=0)}if(0==Ut)break r;if(Nt&&1==Kn[W]&&(Nt=0==gt[G].g),wt+=gt[G].g,G+=Ut,3>=W){var oe,se=pt[0];for(oe=1;oe<ct;++oe)pt[oe]>se&&(se=pt[oe]);Lt+=se}}if(mt.nd=Nt,mt.Qb=0,Nt&&(mt.qb=(vt[3][bt[3]+0].value<<24|vt[1][bt[1]+0].value<<16|vt[2][bt[2]+0].value)>>>0,0==wt&&256>vt[0][bt[0]+0].value&&(mt.Qb=1,mt.qb+=vt[0][bt[0]+0].value<<8)),mt.jc=!mt.Qb&&6>Lt,mt.jc){var ue,ce=mt;for(ue=0;ue<Rr;++ue){var le=ue,he=ce.pd[le],fe=ce.G[0][ce.H[0]+le];256<=fe.value?(he.g=fe.g+256,he.value=fe.value):(he.g=0,he.value=0,le>>=yt(fe,8,he),le>>=yt(ce.G[1][ce.H[1]+le],16,he),le>>=yt(ce.G[2][ce.H[2]+le],0,he),yt(ce.G[3][ce.H[3]+le],24,he))}}}Q.vc=tt,Q.Wb=et,Q.Ya=dt,Q.yc=lt,H=1;break e}H=0}if(!(c=H)){s.a=3;break t}if(0<b){if(m.ua=1<<b,!O(m.Wa,b)){s.a=1,c=0;break t}}else m.ua=0;var de=s,pe=f,ge=p,me=de.s,ve=me.xc;if(de.c=pe,de.i=ge,me.md=q(pe,ve),me.wc=0==ve?-1:(1<<ve)-1,n){s.xb=pi;break t}if(null==(v=a(f*p))){s.a=1,c=0;break t}c=(c=_t(s,v,0,f,p,p,null))&&!g.h;break t}return c?(null!=u?u[0]=v:(e(null==v),e(n)),s.$=0,n||Pt(m)):Pt(m),c}function Ft(t,r){var n=t.c*t.i,i=n+r+16*r;return e(t.c<=r),t.V=a(i),null==t.V?(t.Ta=null,t.Ua=0,t.a=1,0):(t.Ta=t.V,t.Ua=t.Ba+n+r,1)}function Ct(t,r){var n=t.C,i=r-n,a=t.V,o=t.Ba+t.c*n;for(e(r<=t.l.o);0<i;){var s=16<i?16:i,u=t.l.ma,c=t.l.width,l=c*s,h=u.ca,f=u.tb+c*n,d=t.Ta,p=t.Ua;Nt(t,s,a,o),_n(d,p,h,f,l),xt(u,n,n+s,h,f,c),i-=s,a+=s*t.c,n+=s}e(n==r),t.C=t.Ma=r}function jt(){this.ub=this.yd=this.td=this.Rb=0}function Ot(){this.Kd=this.Ld=this.Ud=this.Td=this.i=this.c=0}function Bt(){this.Fb=this.Bb=this.Cb=0,this.Zb=a(4),this.Lb=a(4)}function Mt(){this.Yb=function(){var t=[];return function t(e,r,n){for(var i=n[r],a=0;a<i&&(e.push(n.length>r+1?[]:0),!(n.length<r+1));a++)t(e[a],r+1,n)}(t,0,[3,11]),t}()}function Et(){this.jb=a(3),this.Wc=s([4,8],Mt),this.Xc=s([4,17],Mt)}function qt(){this.Pc=this.wb=this.Tb=this.zd=0,this.vd=new a(4),this.od=new a(4)}function Rt(){this.ld=this.La=this.dd=this.tc=0}function Dt(){this.Na=this.la=0}function Tt(){this.Sc=[0,0],this.Eb=[0,0],this.Qc=[0,0],this.ia=this.lc=0}function Ut(){this.ad=a(384),this.Za=0,this.Ob=a(16),this.$b=this.Ad=this.ia=this.Gc=this.Hc=this.Dd=0}function zt(){this.uc=this.M=this.Nb=0,this.wa=Array(new Rt),this.Y=0,this.ya=Array(new Ut),this.aa=0,this.l=new Gt}function Ht(){this.y=a(16),this.f=a(8),this.ea=a(8)}function Vt(){this.cb=this.a=0,this.sc=\"\",this.m=new w,this.Od=new jt,this.Kc=new Ot,this.ed=new qt,this.Qa=new Bt,this.Ic=this.$c=this.Aa=0,this.D=new zt,this.Xb=this.Va=this.Hb=this.zb=this.yb=this.Ub=this.za=0,this.Jc=o(8,w),this.ia=0,this.pb=o(4,Tt),this.Pa=new Et,this.Bd=this.kc=0,this.Ac=[],this.Bc=0,this.zc=[0,0,0,0],this.Gd=Array(new Ht),this.Hd=0,this.rb=Array(new Dt),this.sb=0,this.wa=Array(new Rt),this.Y=0,this.oc=[],this.pc=0,this.sa=[],this.ta=0,this.qa=[],this.ra=0,this.Ha=[],this.B=this.R=this.Ia=0,this.Ec=[],this.M=this.ja=this.Vb=this.Fc=0,this.ya=Array(new Ut),this.L=this.aa=0,this.gd=s([4,2],Rt),this.ga=null,this.Fa=[],this.Cc=this.qc=this.P=0,this.Gb=[],this.Uc=0,this.mb=[],this.nb=0,this.rc=[],this.Ga=this.Vc=0}function Wt(t,e){return 0>t?0:t>e?e:t}function Gt(){this.T=this.U=this.ka=this.height=this.width=0,this.y=[],this.f=[],this.ea=[],this.Rc=this.fa=this.W=this.N=this.O=0,this.ma=\"void\",this.put=\"VP8IoPutHook\",this.ac=\"VP8IoSetupHook\",this.bc=\"VP8IoTeardownHook\",this.ha=this.Kb=0,this.data=[],this.hb=this.ib=this.da=this.o=this.j=this.va=this.v=this.Da=this.ob=this.w=0,this.F=[],this.J=0}function Yt(){var t=new Vt;return null!=t&&(t.a=0,t.sc=\"OK\",t.cb=0,t.Xb=0,ni||(ni=Zt)),t}function Jt(t,e,r){return 0==t.a&&(t.a=e,t.sc=r,t.cb=0),0}function Xt(t,e,r){return 3<=r&&157==t[e+0]&&1==t[e+1]&&42==t[e+2]}function Kt(t,r){if(null==t)return 0;if(t.a=0,t.sc=\"OK\",null==r)return Jt(t,2,\"null VP8Io passed to VP8GetHeaders()\");var n=r.data,a=r.w,o=r.ha;if(4>o)return Jt(t,7,\"Truncated header.\");var s=n[a+0]|n[a+1]<<8|n[a+2]<<16,u=t.Od;if(u.Rb=!(1&s),u.td=s>>1&7,u.yd=s>>4&1,u.ub=s>>5,3<u.td)return Jt(t,3,\"Incorrect keyframe parameters.\");if(!u.yd)return Jt(t,4,\"Frame not displayable.\");a+=3,o-=3;var c=t.Kc;if(u.Rb){if(7>o)return Jt(t,7,\"cannot parse picture header\");if(!Xt(n,a,o))return Jt(t,3,\"Bad code word\");c.c=16383&(n[a+4]<<8|n[a+3]),c.Td=n[a+4]>>6,c.i=16383&(n[a+6]<<8|n[a+5]),c.Ud=n[a+6]>>6,a+=7,o-=7,t.za=c.c+15>>4,t.Ub=c.i+15>>4,r.width=c.c,r.height=c.i,r.Da=0,r.j=0,r.v=0,r.va=r.width,r.o=r.height,r.da=0,r.ib=r.width,r.hb=r.height,r.U=r.width,r.T=r.height,i((s=t.Pa).jb,0,255,s.jb.length),e(null!=(s=t.Qa)),s.Cb=0,s.Bb=0,s.Fb=1,i(s.Zb,0,0,s.Zb.length),i(s.Lb,0,0,s.Lb)}if(u.ub>o)return Jt(t,7,\"bad partition length\");p(s=t.m,n,a,u.ub),a+=u.ub,o-=u.ub,u.Rb&&(c.Ld=P(s),c.Kd=P(s)),c=t.Qa;var l,h=t.Pa;if(e(null!=s),e(null!=c),c.Cb=P(s),c.Cb){if(c.Bb=P(s),P(s)){for(c.Fb=P(s),l=0;4>l;++l)c.Zb[l]=P(s)?m(s,7):0;for(l=0;4>l;++l)c.Lb[l]=P(s)?m(s,6):0}if(c.Bb)for(l=0;3>l;++l)h.jb[l]=P(s)?g(s,8):255}else c.Bb=0;if(s.Ka)return Jt(t,3,\"cannot parse segment header\");if((c=t.ed).zd=P(s),c.Tb=g(s,6),c.wb=g(s,3),c.Pc=P(s),c.Pc&&P(s)){for(h=0;4>h;++h)P(s)&&(c.vd[h]=m(s,6));for(h=0;4>h;++h)P(s)&&(c.od[h]=m(s,6))}if(t.L=0==c.Tb?0:c.zd?1:2,s.Ka)return Jt(t,3,\"cannot parse filter header\");var f=o;if(o=l=a,a=l+f,c=f,t.Xb=(1<<g(t.m,2))-1,f<3*(h=t.Xb))n=7;else{for(l+=3*h,c-=3*h,f=0;f<h;++f){var d=n[o+0]|n[o+1]<<8|n[o+2]<<16;d>c&&(d=c),p(t.Jc[+f],n,l,d),l+=d,c-=d,o+=3}p(t.Jc[+h],n,l,c),n=l<a?0:5}if(0!=n)return Jt(t,n,\"cannot parse partitions\");for(n=g(l=t.m,7),o=P(l)?m(l,4):0,a=P(l)?m(l,4):0,c=P(l)?m(l,4):0,h=P(l)?m(l,4):0,l=P(l)?m(l,4):0,f=t.Qa,d=0;4>d;++d){if(f.Cb){var v=f.Zb[d];f.Fb||(v+=n)}else{if(0<d){t.pb[d]=t.pb[0];continue}v=n}var b=t.pb[d];b.Sc[0]=ei[Wt(v+o,127)],b.Sc[1]=ri[Wt(v+0,127)],b.Eb[0]=2*ei[Wt(v+a,127)],b.Eb[1]=101581*ri[Wt(v+c,127)]>>16,8>b.Eb[1]&&(b.Eb[1]=8),b.Qc[0]=ei[Wt(v+h,117)],b.Qc[1]=ri[Wt(v+l,127)],b.lc=v+l}if(!u.Rb)return Jt(t,4,\"Not a key frame.\");for(P(s),u=t.Pa,n=0;4>n;++n){for(o=0;8>o;++o)for(a=0;3>a;++a)for(c=0;11>c;++c)h=k(s,ci[n][o][a][c])?g(s,8):si[n][o][a][c],u.Wc[n][o].Yb[a][c]=h;for(o=0;17>o;++o)u.Xc[n][o]=u.Wc[n][li[o]]}return t.kc=P(s),t.kc&&(t.Bd=g(s,8)),t.cb=1}function Zt(t,e,r,n,i,a,o){var s=e[i].Yb[r];for(r=0;16>i;++i){if(!k(t,s[r+0]))return i;for(;!k(t,s[r+1]);)if(s=e[++i].Yb[0],r=0,16==i)return 16;var u=e[i+1].Yb;if(k(t,s[r+2])){var c=t,l=0;if(k(c,(f=s)[(h=r)+3]))if(k(c,f[h+6])){for(s=0,h=2*(l=k(c,f[h+8]))+(f=k(c,f[h+9+l])),l=0,f=ii[h];f[s];++s)l+=l+k(c,f[s]);l+=3+(8<<h)}else k(c,f[h+7])?(l=7+2*k(c,165),l+=k(c,145)):l=5+k(c,159);else l=k(c,f[h+4])?3+k(c,f[h+5]):2;s=u[2]}else l=1,s=u[1];u=o+ai[i],0>(c=t).b&&_(c);var h,f=c.b,d=(h=c.Ca>>1)-(c.I>>f)>>31;--c.b,c.Ca+=d,c.Ca|=1,c.I-=(h+1&d)<<f,a[u]=((l^d)-d)*n[(0<i)+0]}return 16}function $t(t){var e=t.rb[t.sb-1];e.la=0,e.Na=0,i(t.zc,0,0,t.zc.length),t.ja=0}function Qt(t,r){if(null==t)return 0;if(null==r)return Jt(t,2,\"NULL VP8Io parameter in VP8Decode().\");if(!t.cb&&!Kt(t,r))return 0;if(e(t.cb),null==r.ac||r.ac(r)){r.ob&&(t.L=0);var s=Di[t.L];if(2==t.L?(t.yb=0,t.zb=0):(t.yb=r.v-s>>4,t.zb=r.j-s>>4,0>t.yb&&(t.yb=0),0>t.zb&&(t.zb=0)),t.Va=r.o+15+s>>4,t.Hb=r.va+15+s>>4,t.Hb>t.za&&(t.Hb=t.za),t.Va>t.Ub&&(t.Va=t.Ub),0<t.L){var u=t.ed;for(s=0;4>s;++s){var c;if(t.Qa.Cb){var l=t.Qa.Lb[s];t.Qa.Fb||(l+=u.Tb)}else l=u.Tb;for(c=0;1>=c;++c){var h=t.gd[s][c],f=l;if(u.Pc&&(f+=u.vd[0],c&&(f+=u.od[0])),0<(f=0>f?0:63<f?63:f)){var d=f;0<u.wb&&((d=4<u.wb?d>>2:d>>1)>9-u.wb&&(d=9-u.wb)),1>d&&(d=1),h.dd=d,h.tc=2*f+d,h.ld=40<=f?2:15<=f?1:0}else h.tc=0;h.La=c}}}s=0}else Jt(t,6,\"Frame setup failed\"),s=t.a;if(s=0==s){if(s){t.$c=0,0<t.Aa||(t.Ic=Ui);t:{s=t.Ic;u=4*(d=t.za);var p=32*d,g=d+1,m=0<t.L?d*(0<t.Aa?2:1):0,v=(2==t.Aa?2:1)*d;if((h=u+832+(c=3*(16*s+Di[t.L])/2*p)+(l=null!=t.Fa&&0<t.Fa.length?t.Kc.c*t.Kc.i:0))!=h)s=0;else{if(h>t.Vb){if(t.Vb=0,t.Ec=a(h),t.Fc=0,null==t.Ec){s=Jt(t,1,\"no memory during frame initialization.\");break t}t.Vb=h}h=t.Ec,f=t.Fc,t.Ac=h,t.Bc=f,f+=u,t.Gd=o(p,Ht),t.Hd=0,t.rb=o(g+1,Dt),t.sb=1,t.wa=m?o(m,Rt):null,t.Y=0,t.D.Nb=0,t.D.wa=t.wa,t.D.Y=t.Y,0<t.Aa&&(t.D.Y+=d),e(!0),t.oc=h,t.pc=f,f+=832,t.ya=o(v,Ut),t.aa=0,t.D.ya=t.ya,t.D.aa=t.aa,2==t.Aa&&(t.D.aa+=d),t.R=16*d,t.B=8*d,d=(p=Di[t.L])*t.R,p=p/2*t.B,t.sa=h,t.ta=f+d,t.qa=t.sa,t.ra=t.ta+16*s*t.R+p,t.Ha=t.qa,t.Ia=t.ra+8*s*t.B+p,t.$c=0,f+=c,t.mb=l?h:null,t.nb=l?f:null,e(f+l<=t.Fc+t.Vb),$t(t),i(t.Ac,t.Bc,0,u),s=1}}if(s){if(r.ka=0,r.y=t.sa,r.O=t.ta,r.f=t.qa,r.N=t.ra,r.ea=t.Ha,r.Vd=t.Ia,r.fa=t.R,r.Rc=t.B,r.F=null,r.J=0,!Cn){for(s=-255;255>=s;++s)Pn[255+s]=0>s?-s:s;for(s=-1020;1020>=s;++s)kn[1020+s]=-128>s?-128:127<s?127:s;for(s=-112;112>=s;++s)In[112+s]=-16>s?-16:15<s?15:s;for(s=-255;510>=s;++s)Fn[255+s]=0>s?0:255<s?255:s;Cn=1}an=ce,on=ae,un=oe,cn=se,ln=ue,sn=ie,hn=Je,fn=Xe,dn=$e,pn=Qe,gn=Ke,mn=Ze,vn=tr,bn=er,yn=ze,wn=He,Nn=Ve,Ln=We,fi[0]=xe,fi[1]=he,fi[2]=Le,fi[3]=Ae,fi[4]=Se,fi[5]=Pe,fi[6]=_e,fi[7]=ke,fi[8]=Fe,fi[9]=Ie,hi[0]=ve,hi[1]=de,hi[2]=pe,hi[3]=ge,hi[4]=be,hi[5]=ye,hi[6]=we,di[0]=Be,di[1]=fe,di[2]=Ce,di[3]=je,di[4]=Ee,di[5]=Me,di[6]=qe,s=1}else s=0}s&&(s=function(t,r){for(t.M=0;t.M<t.Va;++t.M){var o,s=t.Jc[t.M&t.Xb],u=t.m,c=t;for(o=0;o<c.za;++o){var l=u,h=c,f=h.Ac,d=h.Bc+4*o,p=h.zc,g=h.ya[h.aa+o];if(h.Qa.Bb?g.$b=k(l,h.Pa.jb[0])?2+k(l,h.Pa.jb[2]):k(l,h.Pa.jb[1]):g.$b=0,h.kc&&(g.Ad=k(l,h.Bd)),g.Za=!k(l,145)+0,g.Za){var m=g.Ob,v=0;for(h=0;4>h;++h){var b,y=p[0+h];for(b=0;4>b;++b){y=ui[f[d+b]][y];for(var w=oi[k(l,y[0])];0<w;)w=oi[2*w+k(l,y[w])];y=-w,f[d+b]=y}n(m,v,f,d,4),v+=4,p[0+h]=y}}else y=k(l,156)?k(l,128)?1:3:k(l,163)?2:0,g.Ob[0]=y,i(f,d,y,4),i(p,0,y,4);g.Dd=k(l,142)?k(l,114)?k(l,183)?1:3:2:0}if(c.m.Ka)return Jt(t,7,\"Premature end-of-partition0 encountered.\");for(;t.ja<t.za;++t.ja){if(c=s,l=(u=t).rb[u.sb-1],f=u.rb[u.sb+u.ja],o=u.ya[u.aa+u.ja],d=u.kc?o.Ad:0)l.la=f.la=0,o.Za||(l.Na=f.Na=0),o.Hc=0,o.Gc=0,o.ia=0;else{var N,L;l=f,f=c,d=u.Pa.Xc,p=u.ya[u.aa+u.ja],g=u.pb[p.$b];if(h=p.ad,m=0,v=u.rb[u.sb-1],y=b=0,i(h,m,0,384),p.Za)var A=0,x=d[3];else{w=a(16);var S=l.Na+v.Na;if(S=ni(f,d[1],S,g.Eb,0,w,0),l.Na=v.Na=(0<S)+0,1<S)an(w,0,h,m);else{var _=w[0]+3>>3;for(w=0;256>w;w+=16)h[m+w]=_}A=1,x=d[0]}var P=15&l.la,I=15&v.la;for(w=0;4>w;++w){var F=1&I;for(_=L=0;4>_;++_)P=P>>1|(F=(S=ni(f,x,S=F+(1&P),g.Sc,A,h,m))>A)<<7,L=L<<2|(3<S?3:1<S?2:0!=h[m+0]),m+=16;P>>=4,I=I>>1|F<<7,b=(b<<8|L)>>>0}for(x=P,A=I>>4,N=0;4>N;N+=2){for(L=0,P=l.la>>4+N,I=v.la>>4+N,w=0;2>w;++w){for(F=1&I,_=0;2>_;++_)S=F+(1&P),P=P>>1|(F=0<(S=ni(f,d[2],S,g.Qc,0,h,m)))<<3,L=L<<2|(3<S?3:1<S?2:0!=h[m+0]),m+=16;P>>=2,I=I>>1|F<<5}y|=L<<4*N,x|=P<<4<<N,A|=(240&I)<<N}l.la=x,v.la=A,p.Hc=b,p.Gc=y,p.ia=43690&y?0:g.ia,d=!(b|y)}if(0<u.L&&(u.wa[u.Y+u.ja]=u.gd[o.$b][o.Za],u.wa[u.Y+u.ja].La|=!d),c.Ka)return Jt(t,7,\"Premature end-of-file encountered.\")}if($t(t),u=r,c=1,o=(s=t).D,l=0<s.L&&s.M>=s.zb&&s.M<=s.Va,0==s.Aa)t:{if(o.M=s.M,o.uc=l,Or(s,o),c=1,o=(L=s.D).Nb,l=(y=Di[s.L])*s.R,f=y/2*s.B,w=16*o*s.R,_=8*o*s.B,d=s.sa,p=s.ta-l+w,g=s.qa,h=s.ra-f+_,m=s.Ha,v=s.Ia-f+_,I=0==(P=L.M),b=P>=s.Va-1,2==s.Aa&&Or(s,L),L.uc)for(F=(S=s).D.M,e(S.D.uc),L=S.yb;L<S.Hb;++L){A=L,x=F;var C=(j=(U=S).D).Nb;N=U.R;var j=j.wa[j.Y+A],O=U.sa,B=U.ta+16*C*N+16*A,M=j.dd,E=j.tc;if(0!=E)if(e(3<=E),1==U.L)0<A&&wn(O,B,N,E+4),j.La&&Ln(O,B,N,E),0<x&&yn(O,B,N,E+4),j.La&&Nn(O,B,N,E);else{var q=U.B,R=U.qa,D=U.ra+8*C*q+8*A,T=U.Ha,U=U.Ia+8*C*q+8*A;C=j.ld;0<A&&(fn(O,B,N,E+4,M,C),pn(R,D,T,U,q,E+4,M,C)),j.La&&(mn(O,B,N,E,M,C),bn(R,D,T,U,q,E,M,C)),0<x&&(hn(O,B,N,E+4,M,C),dn(R,D,T,U,q,E+4,M,C)),j.La&&(gn(O,B,N,E,M,C),vn(R,D,T,U,q,E,M,C))}}if(s.ia&&alert(\"todo:DitherRow\"),null!=u.put){if(L=16*P,P=16*(P+1),I?(u.y=s.sa,u.O=s.ta+w,u.f=s.qa,u.N=s.ra+_,u.ea=s.Ha,u.W=s.Ia+_):(L-=y,u.y=d,u.O=p,u.f=g,u.N=h,u.ea=m,u.W=v),b||(P-=y),P>u.o&&(P=u.o),u.F=null,u.J=null,null!=s.Fa&&0<s.Fa.length&&L<P&&(u.J=hr(s,u,L,P-L),u.F=s.mb,null==u.F&&0==u.F.length)){c=Jt(s,3,\"Could not decode alpha data.\");break t}L<u.j&&(y=u.j-L,L=u.j,e(!(1&y)),u.O+=s.R*y,u.N+=s.B*(y>>1),u.W+=s.B*(y>>1),null!=u.F&&(u.J+=u.width*y)),L<P&&(u.O+=u.v,u.N+=u.v>>1,u.W+=u.v>>1,null!=u.F&&(u.J+=u.v),u.ka=L-u.j,u.U=u.va-u.v,u.T=P-L,c=u.put(u))}o+1!=s.Ic||b||(n(s.sa,s.ta-l,d,p+16*s.R,l),n(s.qa,s.ra-f,g,h+8*s.B,f),n(s.Ha,s.Ia-f,m,v+8*s.B,f))}if(!c)return Jt(t,6,\"Output aborted.\")}return 1}(t,r)),null!=r.bc&&r.bc(r),s&=1}return s?(t.cb=0,s):0}function te(t,e,r,n,i){i=t[e+r+32*n]+(i>>3),t[e+r+32*n]=-256&i?0>i?0:255:i}function ee(t,e,r,n,i,a){te(t,e,0,r,n+i),te(t,e,1,r,n+a),te(t,e,2,r,n-a),te(t,e,3,r,n-i)}function re(t){return(20091*t>>16)+t}function ne(t,e,r,n){var i,o=0,s=a(16);for(i=0;4>i;++i){var u=t[e+0]+t[e+8],c=t[e+0]-t[e+8],l=(35468*t[e+4]>>16)-re(t[e+12]),h=re(t[e+4])+(35468*t[e+12]>>16);s[o+0]=u+h,s[o+1]=c+l,s[o+2]=c-l,s[o+3]=u-h,o+=4,e++}for(i=o=0;4>i;++i)u=(t=s[o+0]+4)+s[o+8],c=t-s[o+8],l=(35468*s[o+4]>>16)-re(s[o+12]),te(r,n,0,0,u+(h=re(s[o+4])+(35468*s[o+12]>>16))),te(r,n,1,0,c+l),te(r,n,2,0,c-l),te(r,n,3,0,u-h),o++,n+=32}function ie(t,e,r,n){var i=t[e+0]+4,a=35468*t[e+4]>>16,o=re(t[e+4]),s=35468*t[e+1]>>16;ee(r,n,0,i+o,t=re(t[e+1]),s),ee(r,n,1,i+a,t,s),ee(r,n,2,i-a,t,s),ee(r,n,3,i-o,t,s)}function ae(t,e,r,n,i){ne(t,e,r,n),i&&ne(t,e+16,r,n+4)}function oe(t,e,r,n){on(t,e+0,r,n,1),on(t,e+32,r,n+128,1)}function se(t,e,r,n){var i;for(t=t[e+0]+4,i=0;4>i;++i)for(e=0;4>e;++e)te(r,n,e,i,t)}function ue(t,e,r,n){t[e+0]&&cn(t,e+0,r,n),t[e+16]&&cn(t,e+16,r,n+4),t[e+32]&&cn(t,e+32,r,n+128),t[e+48]&&cn(t,e+48,r,n+128+4)}function ce(t,e,r,n){var i,o=a(16);for(i=0;4>i;++i){var s=t[e+0+i]+t[e+12+i],u=t[e+4+i]+t[e+8+i],c=t[e+4+i]-t[e+8+i],l=t[e+0+i]-t[e+12+i];o[0+i]=s+u,o[8+i]=s-u,o[4+i]=l+c,o[12+i]=l-c}for(i=0;4>i;++i)s=(t=o[0+4*i]+3)+o[3+4*i],u=o[1+4*i]+o[2+4*i],c=o[1+4*i]-o[2+4*i],l=t-o[3+4*i],r[n+0]=s+u>>3,r[n+16]=l+c>>3,r[n+32]=s-u>>3,r[n+48]=l-c>>3,n+=64}function le(t,e,r){var n,i=e-32,a=Bn,o=255-t[i-1];for(n=0;n<r;++n){var s,u=a,c=o+t[e-1];for(s=0;s<r;++s)t[e+s]=u[c+t[i+s]];e+=32}}function he(t,e){le(t,e,4)}function fe(t,e){le(t,e,8)}function de(t,e){le(t,e,16)}function pe(t,e){var r;for(r=0;16>r;++r)n(t,e+32*r,t,e-32,16)}function ge(t,e){var r;for(r=16;0<r;--r)i(t,e,t[e-1],16),e+=32}function me(t,e,r){var n;for(n=0;16>n;++n)i(e,r+32*n,t,16)}function ve(t,e){var r,n=16;for(r=0;16>r;++r)n+=t[e-1+32*r]+t[e+r-32];me(n>>5,t,e)}function be(t,e){var r,n=8;for(r=0;16>r;++r)n+=t[e-1+32*r];me(n>>4,t,e)}function ye(t,e){var r,n=8;for(r=0;16>r;++r)n+=t[e+r-32];me(n>>4,t,e)}function we(t,e){me(128,t,e)}function Ne(t,e,r){return t+2*e+r+2>>2}function Le(t,e){var r,i=e-32;i=new Uint8Array([Ne(t[i-1],t[i+0],t[i+1]),Ne(t[i+0],t[i+1],t[i+2]),Ne(t[i+1],t[i+2],t[i+3]),Ne(t[i+2],t[i+3],t[i+4])]);for(r=0;4>r;++r)n(t,e+32*r,i,0,i.length)}function Ae(t,e){var r=t[e-1],n=t[e-1+32],i=t[e-1+64],a=t[e-1+96];I(t,e+0,16843009*Ne(t[e-1-32],r,n)),I(t,e+32,16843009*Ne(r,n,i)),I(t,e+64,16843009*Ne(n,i,a)),I(t,e+96,16843009*Ne(i,a,a))}function xe(t,e){var r,n=4;for(r=0;4>r;++r)n+=t[e+r-32]+t[e-1+32*r];for(n>>=3,r=0;4>r;++r)i(t,e+32*r,n,4)}function Se(t,e){var r=t[e-1+0],n=t[e-1+32],i=t[e-1+64],a=t[e-1-32],o=t[e+0-32],s=t[e+1-32],u=t[e+2-32],c=t[e+3-32];t[e+0+96]=Ne(n,i,t[e-1+96]),t[e+1+96]=t[e+0+64]=Ne(r,n,i),t[e+2+96]=t[e+1+64]=t[e+0+32]=Ne(a,r,n),t[e+3+96]=t[e+2+64]=t[e+1+32]=t[e+0+0]=Ne(o,a,r),t[e+3+64]=t[e+2+32]=t[e+1+0]=Ne(s,o,a),t[e+3+32]=t[e+2+0]=Ne(u,s,o),t[e+3+0]=Ne(c,u,s)}function _e(t,e){var r=t[e+1-32],n=t[e+2-32],i=t[e+3-32],a=t[e+4-32],o=t[e+5-32],s=t[e+6-32],u=t[e+7-32];t[e+0+0]=Ne(t[e+0-32],r,n),t[e+1+0]=t[e+0+32]=Ne(r,n,i),t[e+2+0]=t[e+1+32]=t[e+0+64]=Ne(n,i,a),t[e+3+0]=t[e+2+32]=t[e+1+64]=t[e+0+96]=Ne(i,a,o),t[e+3+32]=t[e+2+64]=t[e+1+96]=Ne(a,o,s),t[e+3+64]=t[e+2+96]=Ne(o,s,u),t[e+3+96]=Ne(s,u,u)}function Pe(t,e){var r=t[e-1+0],n=t[e-1+32],i=t[e-1+64],a=t[e-1-32],o=t[e+0-32],s=t[e+1-32],u=t[e+2-32],c=t[e+3-32];t[e+0+0]=t[e+1+64]=a+o+1>>1,t[e+1+0]=t[e+2+64]=o+s+1>>1,t[e+2+0]=t[e+3+64]=s+u+1>>1,t[e+3+0]=u+c+1>>1,t[e+0+96]=Ne(i,n,r),t[e+0+64]=Ne(n,r,a),t[e+0+32]=t[e+1+96]=Ne(r,a,o),t[e+1+32]=t[e+2+96]=Ne(a,o,s),t[e+2+32]=t[e+3+96]=Ne(o,s,u),t[e+3+32]=Ne(s,u,c)}function ke(t,e){var r=t[e+0-32],n=t[e+1-32],i=t[e+2-32],a=t[e+3-32],o=t[e+4-32],s=t[e+5-32],u=t[e+6-32],c=t[e+7-32];t[e+0+0]=r+n+1>>1,t[e+1+0]=t[e+0+64]=n+i+1>>1,t[e+2+0]=t[e+1+64]=i+a+1>>1,t[e+3+0]=t[e+2+64]=a+o+1>>1,t[e+0+32]=Ne(r,n,i),t[e+1+32]=t[e+0+96]=Ne(n,i,a),t[e+2+32]=t[e+1+96]=Ne(i,a,o),t[e+3+32]=t[e+2+96]=Ne(a,o,s),t[e+3+64]=Ne(o,s,u),t[e+3+96]=Ne(s,u,c)}function Ie(t,e){var r=t[e-1+0],n=t[e-1+32],i=t[e-1+64],a=t[e-1+96];t[e+0+0]=r+n+1>>1,t[e+2+0]=t[e+0+32]=n+i+1>>1,t[e+2+32]=t[e+0+64]=i+a+1>>1,t[e+1+0]=Ne(r,n,i),t[e+3+0]=t[e+1+32]=Ne(n,i,a),t[e+3+32]=t[e+1+64]=Ne(i,a,a),t[e+3+64]=t[e+2+64]=t[e+0+96]=t[e+1+96]=t[e+2+96]=t[e+3+96]=a}function Fe(t,e){var r=t[e-1+0],n=t[e-1+32],i=t[e-1+64],a=t[e-1+96],o=t[e-1-32],s=t[e+0-32],u=t[e+1-32],c=t[e+2-32];t[e+0+0]=t[e+2+32]=r+o+1>>1,t[e+0+32]=t[e+2+64]=n+r+1>>1,t[e+0+64]=t[e+2+96]=i+n+1>>1,t[e+0+96]=a+i+1>>1,t[e+3+0]=Ne(s,u,c),t[e+2+0]=Ne(o,s,u),t[e+1+0]=t[e+3+32]=Ne(r,o,s),t[e+1+32]=t[e+3+64]=Ne(n,r,o),t[e+1+64]=t[e+3+96]=Ne(i,n,r),t[e+1+96]=Ne(a,i,n)}function Ce(t,e){var r;for(r=0;8>r;++r)n(t,e+32*r,t,e-32,8)}function je(t,e){var r;for(r=0;8>r;++r)i(t,e,t[e-1],8),e+=32}function Oe(t,e,r){var n;for(n=0;8>n;++n)i(e,r+32*n,t,8)}function Be(t,e){var r,n=8;for(r=0;8>r;++r)n+=t[e+r-32]+t[e-1+32*r];Oe(n>>4,t,e)}function Me(t,e){var r,n=4;for(r=0;8>r;++r)n+=t[e+r-32];Oe(n>>3,t,e)}function Ee(t,e){var r,n=4;for(r=0;8>r;++r)n+=t[e-1+32*r];Oe(n>>3,t,e)}function qe(t,e){Oe(128,t,e)}function Re(t,e,r){var n=t[e-r],i=t[e+0],a=3*(i-n)+jn[1020+t[e-2*r]-t[e+r]],o=On[112+(a+4>>3)];t[e-r]=Bn[255+n+On[112+(a+3>>3)]],t[e+0]=Bn[255+i-o]}function De(t,e,r,n){var i=t[e+0],a=t[e+r];return Mn[255+t[e-2*r]-t[e-r]]>n||Mn[255+a-i]>n}function Te(t,e,r,n){return 4*Mn[255+t[e-r]-t[e+0]]+Mn[255+t[e-2*r]-t[e+r]]<=n}function Ue(t,e,r,n,i){var a=t[e-3*r],o=t[e-2*r],s=t[e-r],u=t[e+0],c=t[e+r],l=t[e+2*r],h=t[e+3*r];return 4*Mn[255+s-u]+Mn[255+o-c]>n?0:Mn[255+t[e-4*r]-a]<=i&&Mn[255+a-o]<=i&&Mn[255+o-s]<=i&&Mn[255+h-l]<=i&&Mn[255+l-c]<=i&&Mn[255+c-u]<=i}function ze(t,e,r,n){var i=2*n+1;for(n=0;16>n;++n)Te(t,e+n,r,i)&&Re(t,e+n,r)}function He(t,e,r,n){var i=2*n+1;for(n=0;16>n;++n)Te(t,e+n*r,1,i)&&Re(t,e+n*r,1)}function Ve(t,e,r,n){var i;for(i=3;0<i;--i)ze(t,e+=4*r,r,n)}function We(t,e,r,n){var i;for(i=3;0<i;--i)He(t,e+=4,r,n)}function Ge(t,e,r,n,i,a,o,s){for(a=2*a+1;0<i--;){if(Ue(t,e,r,a,o))if(De(t,e,r,s))Re(t,e,r);else{var u=t,c=e,l=r,h=u[c-2*l],f=u[c-l],d=u[c+0],p=u[c+l],g=u[c+2*l],m=27*(b=jn[1020+3*(d-f)+jn[1020+h-p]])+63>>7,v=18*b+63>>7,b=9*b+63>>7;u[c-3*l]=Bn[255+u[c-3*l]+b],u[c-2*l]=Bn[255+h+v],u[c-l]=Bn[255+f+m],u[c+0]=Bn[255+d-m],u[c+l]=Bn[255+p-v],u[c+2*l]=Bn[255+g-b]}e+=n}}function Ye(t,e,r,n,i,a,o,s){for(a=2*a+1;0<i--;){if(Ue(t,e,r,a,o))if(De(t,e,r,s))Re(t,e,r);else{var u=t,c=e,l=r,h=u[c-l],f=u[c+0],d=u[c+l],p=On[112+((g=3*(f-h))+4>>3)],g=On[112+(g+3>>3)],m=p+1>>1;u[c-2*l]=Bn[255+u[c-2*l]+m],u[c-l]=Bn[255+h+g],u[c+0]=Bn[255+f-p],u[c+l]=Bn[255+d-m]}e+=n}}function Je(t,e,r,n,i,a){Ge(t,e,r,1,16,n,i,a)}function Xe(t,e,r,n,i,a){Ge(t,e,1,r,16,n,i,a)}function Ke(t,e,r,n,i,a){var o;for(o=3;0<o;--o)Ye(t,e+=4*r,r,1,16,n,i,a)}function Ze(t,e,r,n,i,a){var o;for(o=3;0<o;--o)Ye(t,e+=4,1,r,16,n,i,a)}function $e(t,e,r,n,i,a,o,s){Ge(t,e,i,1,8,a,o,s),Ge(r,n,i,1,8,a,o,s)}function Qe(t,e,r,n,i,a,o,s){Ge(t,e,1,i,8,a,o,s),Ge(r,n,1,i,8,a,o,s)}function tr(t,e,r,n,i,a,o,s){Ye(t,e+4*i,i,1,8,a,o,s),Ye(r,n+4*i,i,1,8,a,o,s)}function er(t,e,r,n,i,a,o,s){Ye(t,e+4,1,i,8,a,o,s),Ye(r,n+4,1,i,8,a,o,s)}function rr(){this.ba=new ot,this.ec=[],this.cc=[],this.Mc=[],this.Dc=this.Nc=this.dc=this.fc=0,this.Oa=new ut,this.memory=0,this.Ib=\"OutputFunc\",this.Jb=\"OutputAlphaFunc\",this.Nd=\"OutputRowFunc\"}function nr(){this.data=[],this.offset=this.kd=this.ha=this.w=0,this.na=[],this.xa=this.gb=this.Ja=this.Sa=this.P=0}function ir(){this.nc=this.Ea=this.b=this.hc=0,this.K=[],this.w=0}function ar(){this.ua=0,this.Wa=new M,this.vb=new M,this.md=this.xc=this.wc=0,this.vc=[],this.Wb=0,this.Ya=new d,this.yc=new h}function or(){this.xb=this.a=0,this.l=new Gt,this.ca=new ot,this.V=[],this.Ba=0,this.Ta=[],this.Ua=0,this.m=new N,this.Pb=0,this.wd=new N,this.Ma=this.$=this.C=this.i=this.c=this.xd=0,this.s=new ar,this.ab=0,this.gc=o(4,ir),this.Oc=0}function sr(){this.Lc=this.Z=this.$a=this.i=this.c=0,this.l=new Gt,this.ic=0,this.ca=[],this.tb=0,this.qd=null,this.rd=0}function ur(t,e,r,n,i,a,o){for(t=null==t?0:t[e+0],e=0;e<o;++e)i[a+e]=t+r[n+e]&255,t=i[a+e]}function cr(t,e,r,n,i,a,o){var s;if(null==t)ur(null,null,r,n,i,a,o);else for(s=0;s<o;++s)i[a+s]=t[e+s]+r[n+s]&255}function lr(t,e,r,n,i,a,o){if(null==t)ur(null,null,r,n,i,a,o);else{var s,u=t[e+0],c=u,l=u;for(s=0;s<o;++s)c=l+(u=t[e+s])-c,l=r[n+s]+(-256&c?0>c?0:255:c)&255,c=u,i[a+s]=l}}function hr(t,r,i,o){var s=r.width,u=r.o;if(e(null!=t&&null!=r),0>i||0>=o||i+o>u)return null;if(!t.Cc){if(null==t.ga){var c;if(t.ga=new sr,(c=null==t.ga)||(c=r.width*r.o,e(0==t.Gb.length),t.Gb=a(c),t.Uc=0,null==t.Gb?c=0:(t.mb=t.Gb,t.nb=t.Uc,t.rc=null,c=1),c=!c),!c){c=t.ga;var l=t.Fa,h=t.P,f=t.qc,d=t.mb,p=t.nb,g=h+1,m=f-1,b=c.l;if(e(null!=l&&null!=d&&null!=r),mi[0]=null,mi[1]=ur,mi[2]=cr,mi[3]=lr,c.ca=d,c.tb=p,c.c=r.width,c.i=r.height,e(0<c.c&&0<c.i),1>=f)r=0;else if(c.$a=l[h+0]>>0&3,c.Z=l[h+0]>>2&3,c.Lc=l[h+0]>>4&3,h=l[h+0]>>6&3,0>c.$a||1<c.$a||4<=c.Z||1<c.Lc||h)r=0;else if(b.put=dt,b.ac=ft,b.bc=pt,b.ma=c,b.width=r.width,b.height=r.height,b.Da=r.Da,b.v=r.v,b.va=r.va,b.j=r.j,b.o=r.o,c.$a)t:{e(1==c.$a),r=kt();e:for(;;){if(null==r){r=0;break t}if(e(null!=c),c.mc=r,r.c=c.c,r.i=c.i,r.l=c.l,r.l.ma=c,r.l.width=c.c,r.l.height=c.i,r.a=0,v(r.m,l,g,m),!It(c.c,c.i,1,r,null))break e;if(1==r.ab&&3==r.gc[0].hc&&At(r.s)?(c.ic=1,l=r.c*r.i,r.Ta=null,r.Ua=0,r.V=a(l),r.Ba=0,null==r.V?(r.a=1,r=0):r=1):(c.ic=0,r=Ft(r,c.c)),!r)break e;r=1;break t}c.mc=null,r=0}else r=m>=c.c*c.i;c=!r}if(c)return null;1!=t.ga.Lc?t.Ga=0:o=u-i}e(null!=t.ga),e(i+o<=u);t:{if(r=(l=t.ga).c,u=l.l.o,0==l.$a){if(g=t.rc,m=t.Vc,b=t.Fa,h=t.P+1+i*r,f=t.mb,d=t.nb+i*r,e(h<=t.P+t.qc),0!=l.Z)for(e(null!=mi[l.Z]),c=0;c<o;++c)mi[l.Z](g,m,b,h,f,d,r),g=f,m=d,d+=r,h+=r;else for(c=0;c<o;++c)n(f,d,b,h,r),g=f,m=d,d+=r,h+=r;t.rc=g,t.Vc=m}else{if(e(null!=l.mc),r=i+o,e(null!=(c=l.mc)),e(r<=c.i),c.C>=r)r=1;else if(l.ic||mr(),l.ic){l=c.V,g=c.Ba,m=c.c;var y=c.i,w=(b=1,h=c.$/m,f=c.$%m,d=c.m,p=c.s,c.$),N=m*y,L=m*r,x=p.wc,_=w<L?wt(p,f,h):null;e(w<=N),e(r<=y),e(At(p));e:for(;;){for(;!d.h&&w<L;){if(f&x||(_=wt(p,f,h)),e(null!=_),S(d),256>(y=bt(_.G[0],_.H[0],d)))l[g+w]=y,++w,++f>=m&&(f=0,++h<=r&&!(h%16)&&St(c,h));else{if(!(280>y)){b=0;break e}y=mt(y-256,d);var P,k=bt(_.G[4],_.H[4],d);if(S(d),!(w>=(k=vt(m,k=mt(k,d)))&&N-w>=y)){b=0;break e}for(P=0;P<y;++P)l[g+w+P]=l[g+w+P-k];for(w+=y,f+=y;f>=m;)f-=m,++h<=r&&!(h%16)&&St(c,h);w<L&&f&x&&(_=wt(p,f,h))}e(d.h==A(d))}St(c,h>r?r:h);break e}!b||d.h&&w<N?(b=0,c.a=d.h?5:3):c.$=w,r=b}else r=_t(c,c.V,c.Ba,c.c,c.i,r,Ct);if(!r){o=0;break t}}i+o>=u&&(t.Cc=1),o=1}if(!o)return null;if(t.Cc&&(null!=(o=t.ga)&&(o.mc=null),t.ga=null,0<t.Ga))return alert(\"todo:WebPDequantizeLevels\"),null}return t.nb+i*s}function fr(t,e,r,n,i,a){for(;0<i--;){var o,s=t,u=e+(r?1:0),c=t,l=e+(r?0:3);for(o=0;o<n;++o){var h=c[l+4*o];255!=h&&(h*=32897,s[u+4*o+0]=s[u+4*o+0]*h>>23,s[u+4*o+1]=s[u+4*o+1]*h>>23,s[u+4*o+2]=s[u+4*o+2]*h>>23)}e+=a}}function dr(t,e,r,n,i){for(;0<n--;){var a;for(a=0;a<r;++a){var o=t[e+2*a+0],s=15&(c=t[e+2*a+1]),u=4369*s,c=(240&c|c>>4)*u>>16;t[e+2*a+0]=(240&o|o>>4)*u>>16&240|(15&o|o<<4)*u>>16>>4&15,t[e+2*a+1]=240&c|s}e+=i}}function pr(t,e,r,n,i,a,o,s){var u,c,l=255;for(c=0;c<i;++c){for(u=0;u<n;++u){var h=t[e+u];a[o+4*u]=h,l&=h}e+=r,o+=s}return 255!=l}function gr(t,e,r,n,i){var a;for(a=0;a<i;++a)r[n+a]=t[e+a]>>8}function mr(){An=fr,xn=dr,Sn=pr,_n=gr}function vr(r,n,i){t[r]=function(t,r,a,o,s,u,c,l,h,f,d,p,g,m,v,b,y){var w,N=y-1>>1,L=s[u+0]|c[l+0]<<16,A=h[f+0]|d[p+0]<<16;e(null!=t);var x=3*L+A+131074>>2;for(n(t[r+0],255&x,x>>16,g,m),null!=a&&(x=3*A+L+131074>>2,n(a[o+0],255&x,x>>16,v,b)),w=1;w<=N;++w){var S=s[u+w]|c[l+w]<<16,_=h[f+w]|d[p+w]<<16,P=L+S+A+_+524296,k=P+2*(S+A)>>3;x=k+L>>1,L=(P=P+2*(L+_)>>3)+S>>1,n(t[r+2*w-1],255&x,x>>16,g,m+(2*w-1)*i),n(t[r+2*w-0],255&L,L>>16,g,m+(2*w-0)*i),null!=a&&(x=P+A>>1,L=k+_>>1,n(a[o+2*w-1],255&x,x>>16,v,b+(2*w-1)*i),n(a[o+2*w+0],255&L,L>>16,v,b+(2*w+0)*i)),L=S,A=_}1&y||(x=3*L+A+131074>>2,n(t[r+y-1],255&x,x>>16,g,m+(y-1)*i),null!=a&&(x=3*A+L+131074>>2,n(a[o+y-1],255&x,x>>16,v,b+(y-1)*i)))}}function br(){vi[En]=bi,vi[qn]=wi,vi[Rn]=yi,vi[Dn]=Ni,vi[Tn]=Li,vi[Un]=Ai,vi[zn]=xi,vi[Hn]=wi,vi[Vn]=Ni,vi[Wn]=Li,vi[Gn]=Ai}function yr(t){return t&~Fi?0>t?0:255:t>>Ii}function wr(t,e){return yr((19077*t>>8)+(26149*e>>8)-14234)}function Nr(t,e,r){return yr((19077*t>>8)-(6419*e>>8)-(13320*r>>8)+8708)}function Lr(t,e){return yr((19077*t>>8)+(33050*e>>8)-17685)}function Ar(t,e,r,n,i){n[i+0]=wr(t,r),n[i+1]=Nr(t,e,r),n[i+2]=Lr(t,e)}function xr(t,e,r,n,i){n[i+0]=Lr(t,e),n[i+1]=Nr(t,e,r),n[i+2]=wr(t,r)}function Sr(t,e,r,n,i){var a=Nr(t,e,r);e=a<<3&224|Lr(t,e)>>3,n[i+0]=248&wr(t,r)|a>>5,n[i+1]=e}function _r(t,e,r,n,i){var a=240&Lr(t,e)|15;n[i+0]=240&wr(t,r)|Nr(t,e,r)>>4,n[i+1]=a}function Pr(t,e,r,n,i){n[i+0]=255,Ar(t,e,r,n,i+1)}function kr(t,e,r,n,i){xr(t,e,r,n,i),n[i+3]=255}function Ir(t,e,r,n,i){Ar(t,e,r,n,i),n[i+3]=255}function Wt(t,e){return 0>t?0:t>e?e:t}function Fr(e,r,n){t[e]=function(t,e,i,a,o,s,u,c,l){for(var h=c+(-2&l)*n;c!=h;)r(t[e+0],i[a+0],o[s+0],u,c),r(t[e+1],i[a+0],o[s+0],u,c+n),e+=2,++a,++s,c+=2*n;1&l&&r(t[e+0],i[a+0],o[s+0],u,c)}}function Cr(t,e,r){return 0==r?0==t?0==e?6:5:0==e?4:0:r}function jr(t,e,r,n,i){switch(t>>>30){case 3:on(e,r,n,i,0);break;case 2:sn(e,r,n,i);break;case 1:cn(e,r,n,i)}}function Or(t,e){var r,a,o=e.M,s=e.Nb,u=t.oc,c=t.pc+40,l=t.oc,h=t.pc+584,f=t.oc,d=t.pc+600;for(r=0;16>r;++r)u[c+32*r-1]=129;for(r=0;8>r;++r)l[h+32*r-1]=129,f[d+32*r-1]=129;for(0<o?u[c-1-32]=l[h-1-32]=f[d-1-32]=129:(i(u,c-32-1,127,21),i(l,h-32-1,127,9),i(f,d-32-1,127,9)),a=0;a<t.za;++a){var p=e.ya[e.aa+a];if(0<a){for(r=-1;16>r;++r)n(u,c+32*r-4,u,c+32*r+12,4);for(r=-1;8>r;++r)n(l,h+32*r-4,l,h+32*r+4,4),n(f,d+32*r-4,f,d+32*r+4,4)}var g=t.Gd,m=t.Hd+a,v=p.ad,b=p.Hc;if(0<o&&(n(u,c-32,g[m].y,0,16),n(l,h-32,g[m].f,0,8),n(f,d-32,g[m].ea,0,8)),p.Za){var y=u,w=c-32+16;for(0<o&&(a>=t.za-1?i(y,w,g[m].y[15],4):n(y,w,g[m+1].y,0,4)),r=0;4>r;r++)y[w+128+r]=y[w+256+r]=y[w+384+r]=y[w+0+r];for(r=0;16>r;++r,b<<=2)y=u,w=c+Ri[r],fi[p.Ob[r]](y,w),jr(b,v,16*+r,y,w)}else if(y=Cr(a,o,p.Ob[0]),hi[y](u,c),0!=b)for(r=0;16>r;++r,b<<=2)jr(b,v,16*+r,u,c+Ri[r]);for(r=p.Gc,y=Cr(a,o,p.Dd),di[y](l,h),di[y](f,d),b=v,y=l,w=h,255&(p=r>>0)&&(170&p?un(b,256,y,w):ln(b,256,y,w)),p=f,b=d,255&(r>>=8)&&(170&r?un(v,320,p,b):ln(v,320,p,b)),o<t.Ub-1&&(n(g[m].y,0,u,c+480,16),n(g[m].f,0,l,h+224,8),n(g[m].ea,0,f,d+224,8)),r=8*s*t.B,g=t.sa,m=t.ta+16*a+16*s*t.R,v=t.qa,p=t.ra+8*a+r,b=t.Ha,y=t.Ia+8*a+r,r=0;16>r;++r)n(g,m+r*t.R,u,c+32*r,16);for(r=0;8>r;++r)n(v,p+r*t.B,l,h+32*r,8),n(b,y+r*t.B,f,d+32*r,8)}}function Br(t,n,i,a,o,s,u,c,l){var h=[0],f=[0],d=0,p=null!=l?l.kd:0,g=null!=l?l:new nr;if(null==t||12>i)return 7;g.data=t,g.w=n,g.ha=i,n=[n],i=[i],g.gb=[g.gb];t:{var m=n,b=i,y=g.gb;if(e(null!=t),e(null!=b),e(null!=y),y[0]=0,12<=b[0]&&!r(t,m[0],\"RIFF\")){if(r(t,m[0]+8,\"WEBP\")){y=3;break t}var w=j(t,m[0]+4);if(12>w||4294967286<w){y=3;break t}if(p&&w>b[0]-8){y=7;break t}y[0]=w,m[0]+=12,b[0]-=12}y=0}if(0!=y)return y;for(w=0<g.gb[0],i=i[0];;){t:{var L=t;b=n,y=i;var A=h,x=f,S=m=[0];if((k=d=[d])[0]=0,8>y[0])y=7;else{if(!r(L,b[0],\"VP8X\")){if(10!=j(L,b[0]+4)){y=3;break t}if(18>y[0]){y=7;break t}var _=j(L,b[0]+8),P=1+C(L,b[0]+12);if(2147483648<=P*(L=1+C(L,b[0]+15))){y=3;break t}null!=S&&(S[0]=_),null!=A&&(A[0]=P),null!=x&&(x[0]=L),b[0]+=18,y[0]-=18,k[0]=1}y=0}}if(d=d[0],m=m[0],0!=y)return y;if(b=!!(2&m),!w&&d)return 3;if(null!=s&&(s[0]=!!(16&m)),null!=u&&(u[0]=b),null!=c&&(c[0]=0),u=h[0],m=f[0],d&&b&&null==l){y=0;break}if(4>i){y=7;break}if(w&&d||!w&&!d&&!r(t,n[0],\"ALPH\")){i=[i],g.na=[g.na],g.P=[g.P],g.Sa=[g.Sa];t:{_=t,y=n,w=i;var k=g.gb;A=g.na,x=g.P,S=g.Sa;P=22,e(null!=_),e(null!=w),L=y[0];var I=w[0];for(e(null!=A),e(null!=S),A[0]=null,x[0]=null,S[0]=0;;){if(y[0]=L,w[0]=I,8>I){y=7;break t}var F=j(_,L+4);if(4294967286<F){y=3;break t}var O=8+F+1&-2;if(P+=O,0<k&&P>k){y=3;break t}if(!r(_,L,\"VP8 \")||!r(_,L,\"VP8L\")){y=0;break t}if(I[0]<O){y=7;break t}r(_,L,\"ALPH\")||(A[0]=_,x[0]=L+8,S[0]=F),L+=O,I-=O}}if(i=i[0],g.na=g.na[0],g.P=g.P[0],g.Sa=g.Sa[0],0!=y)break}i=[i],g.Ja=[g.Ja],g.xa=[g.xa];t:if(k=t,y=n,w=i,A=g.gb[0],x=g.Ja,S=g.xa,_=y[0],L=!r(k,_,\"VP8 \"),P=!r(k,_,\"VP8L\"),e(null!=k),e(null!=w),e(null!=x),e(null!=S),8>w[0])y=7;else{if(L||P){if(k=j(k,_+4),12<=A&&k>A-12){y=3;break t}if(p&&k>w[0]-8){y=7;break t}x[0]=k,y[0]+=8,w[0]-=8,S[0]=P}else S[0]=5<=w[0]&&47==k[_+0]&&!(k[_+4]>>5),x[0]=w[0];y=0}if(i=i[0],g.Ja=g.Ja[0],g.xa=g.xa[0],n=n[0],0!=y)break;if(4294967286<g.Ja)return 3;if(null==c||b||(c[0]=g.xa?2:1),u=[u],m=[m],g.xa){if(5>i){y=7;break}c=u,p=m,b=s,null==t||5>i?t=0:5<=i&&47==t[n+0]&&!(t[n+4]>>5)?(w=[0],k=[0],A=[0],v(x=new N,t,n,i),gt(x,w,k,A)?(null!=c&&(c[0]=w[0]),null!=p&&(p[0]=k[0]),null!=b&&(b[0]=A[0]),t=1):t=0):t=0}else{if(10>i){y=7;break}c=m,null==t||10>i||!Xt(t,n+3,i-3)?t=0:(p=t[n+0]|t[n+1]<<8|t[n+2]<<16,b=16383&(t[n+7]<<8|t[n+6]),t=16383&(t[n+9]<<8|t[n+8]),1&p||3<(p>>1&7)||!(p>>4&1)||p>>5>=g.Ja||!b||!t?t=0:(u&&(u[0]=b),c&&(c[0]=t),t=1))}if(!t)return 3;if(u=u[0],m=m[0],d&&(h[0]!=u||f[0]!=m))return 3;null!=l&&(l[0]=g,l.offset=n-l.w,e(4294967286>n-l.w),e(l.offset==l.ha-i));break}return 0==y||7==y&&d&&null==l?(null!=s&&(s[0]|=null!=g.na&&0<g.na.length),null!=a&&(a[0]=u),null!=o&&(o[0]=m),0):y}function Mr(t,e,r){var n=e.width,i=e.height,a=0,o=0,s=n,u=i;if(e.Da=null!=t&&0<t.Da,e.Da&&(s=t.cd,u=t.bd,a=t.v,o=t.j,11>r||(a&=-2,o&=-2),0>a||0>o||0>=s||0>=u||a+s>n||o+u>i))return 0;if(e.v=a,e.j=o,e.va=a+s,e.o=o+u,e.U=s,e.T=u,e.da=null!=t&&0<t.da,e.da){if(!E(s,u,r=[t.ib],a=[t.hb]))return 0;e.ib=r[0],e.hb=a[0]}return e.ob=null!=t&&t.ob,e.Kb=null==t||!t.Sd,e.da&&(e.ob=e.ib<3*n/4&&e.hb<3*i/4,e.Kb=0),1}function Er(t){if(null==t)return 2;if(11>t.S){var e=t.f.RGBA;e.fb+=(t.height-1)*e.A,e.A=-e.A}else e=t.f.kb,t=t.height,e.O+=(t-1)*e.fa,e.fa=-e.fa,e.N+=(t-1>>1)*e.Ab,e.Ab=-e.Ab,e.W+=(t-1>>1)*e.Db,e.Db=-e.Db,null!=e.F&&(e.J+=(t-1)*e.lb,e.lb=-e.lb);return 0}function qr(t,e,r,n){if(null==n||0>=t||0>=e)return 2;if(null!=r){if(r.Da){var i=r.cd,o=r.bd,s=-2&r.v,u=-2&r.j;if(0>s||0>u||0>=i||0>=o||s+i>t||u+o>e)return 2;t=i,e=o}if(r.da){if(!E(t,e,i=[r.ib],o=[r.hb]))return 2;t=i[0],e=o[0]}}n.width=t,n.height=e;t:{var c=n.width,l=n.height;if(t=n.S,0>=c||0>=l||!(t>=En&&13>t))t=2;else{if(0>=n.Rd&&null==n.sd){s=o=i=e=0;var h=(u=c*zi[t])*l;if(11>t||(o=(l+1)/2*(e=(c+1)/2),12==t&&(s=(i=c)*l)),null==(l=a(h+2*o+s))){t=1;break t}n.sd=l,11>t?((c=n.f.RGBA).eb=l,c.fb=0,c.A=u,c.size=h):((c=n.f.kb).y=l,c.O=0,c.fa=u,c.Fd=h,c.f=l,c.N=0+h,c.Ab=e,c.Cd=o,c.ea=l,c.W=0+h+o,c.Db=e,c.Ed=o,12==t&&(c.F=l,c.J=0+h+2*o),c.Tc=s,c.lb=i)}if(e=1,i=n.S,o=n.width,s=n.height,i>=En&&13>i)if(11>i)t=n.f.RGBA,e&=(u=Math.abs(t.A))*(s-1)+o<=t.size,e&=u>=o*zi[i],e&=null!=t.eb;else{t=n.f.kb,u=(o+1)/2,h=(s+1)/2,c=Math.abs(t.fa);l=Math.abs(t.Ab);var f=Math.abs(t.Db),d=Math.abs(t.lb),p=d*(s-1)+o;e&=c*(s-1)+o<=t.Fd,e&=l*(h-1)+u<=t.Cd,e=(e&=f*(h-1)+u<=t.Ed)&c>=o&l>=u&f>=u,e&=null!=t.y,e&=null!=t.f,e&=null!=t.ea,12==i&&(e&=d>=o,e&=p<=t.Tc,e&=null!=t.F)}else e=0;t=e?0:2}}return 0!=t||null!=r&&r.fd&&(t=Er(n)),t}var Rr=64,Dr=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215],Tr=24,Ur=32,zr=8,Hr=[0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7];D(\"Predictor0\",\"PredictorAdd0\"),t.Predictor0=function(){return 4278190080},t.Predictor1=function(t){return t},t.Predictor2=function(t,e,r){return e[r+0]},t.Predictor3=function(t,e,r){return e[r+1]},t.Predictor4=function(t,e,r){return e[r-1]},t.Predictor5=function(t,e,r){return U(U(t,e[r+1]),e[r+0])},t.Predictor6=function(t,e,r){return U(t,e[r-1])},t.Predictor7=function(t,e,r){return U(t,e[r+0])},t.Predictor8=function(t,e,r){return U(e[r-1],e[r+0])},t.Predictor9=function(t,e,r){return U(e[r+0],e[r+1])},t.Predictor10=function(t,e,r){return U(U(t,e[r-1]),U(e[r+0],e[r+1]))},t.Predictor11=function(t,e,r){var n=e[r+0];return 0>=V(n>>24&255,t>>24&255,(e=e[r-1])>>24&255)+V(n>>16&255,t>>16&255,e>>16&255)+V(n>>8&255,t>>8&255,e>>8&255)+V(255&n,255&t,255&e)?n:t},t.Predictor12=function(t,e,r){var n=e[r+0];return(z((t>>24&255)+(n>>24&255)-((e=e[r-1])>>24&255))<<24|z((t>>16&255)+(n>>16&255)-(e>>16&255))<<16|z((t>>8&255)+(n>>8&255)-(e>>8&255))<<8|z((255&t)+(255&n)-(255&e)))>>>0},t.Predictor13=function(t,e,r){var n=e[r-1];return(H((t=U(t,e[r+0]))>>24&255,n>>24&255)<<24|H(t>>16&255,n>>16&255)<<16|H(t>>8&255,n>>8&255)<<8|H(t>>0&255,n>>0&255))>>>0};var Vr=t.PredictorAdd0;t.PredictorAdd1=W,D(\"Predictor2\",\"PredictorAdd2\"),D(\"Predictor3\",\"PredictorAdd3\"),D(\"Predictor4\",\"PredictorAdd4\"),D(\"Predictor5\",\"PredictorAdd5\"),D(\"Predictor6\",\"PredictorAdd6\"),D(\"Predictor7\",\"PredictorAdd7\"),D(\"Predictor8\",\"PredictorAdd8\"),D(\"Predictor9\",\"PredictorAdd9\"),D(\"Predictor10\",\"PredictorAdd10\"),D(\"Predictor11\",\"PredictorAdd11\"),D(\"Predictor12\",\"PredictorAdd12\"),D(\"Predictor13\",\"PredictorAdd13\");var Wr=t.PredictorAdd2;X(\"ColorIndexInverseTransform\",\"MapARGB\",\"32b\",(function(t){return t>>8&255}),(function(t){return t})),X(\"VP8LColorIndexInverseTransformAlpha\",\"MapAlpha\",\"8b\",(function(t){return t}),(function(t){return t>>8&255}));var Gr,Yr=t.ColorIndexInverseTransform,Jr=t.MapARGB,Xr=t.VP8LColorIndexInverseTransformAlpha,Kr=t.MapAlpha,Zr=t.VP8LPredictorsAdd=[];Zr.length=16,(t.VP8LPredictors=[]).length=16,(t.VP8LPredictorsAdd_C=[]).length=16,(t.VP8LPredictors_C=[]).length=16;var $r,Qr,tn,en,rn,nn,an,on,sn,un,cn,ln,hn,fn,dn,pn,gn,mn,vn,bn,yn,wn,Nn,Ln,An,xn,Sn,_n,Pn=a(511),kn=a(2041),In=a(225),Fn=a(767),Cn=0,jn=kn,On=In,Bn=Fn,Mn=Pn,En=0,qn=1,Rn=2,Dn=3,Tn=4,Un=5,zn=6,Hn=7,Vn=8,Wn=9,Gn=10,Yn=[2,3,7],Jn=[3,3,11],Xn=[280,256,256,256,40],Kn=[0,1,1,1,0],Zn=[17,18,0,1,2,3,4,5,16,6,7,8,9,10,11,12,13,14,15],$n=[24,7,23,25,40,6,39,41,22,26,38,42,56,5,55,57,21,27,54,58,37,43,72,4,71,73,20,28,53,59,70,74,36,44,88,69,75,52,60,3,87,89,19,29,86,90,35,45,68,76,85,91,51,61,104,2,103,105,18,30,102,106,34,46,84,92,67,77,101,107,50,62,120,1,119,121,83,93,17,31,100,108,66,78,118,122,33,47,117,123,49,63,99,109,82,94,0,116,124,65,79,16,32,98,110,48,115,125,81,95,64,114,126,97,111,80,113,127,96,112],Qn=[2954,2956,2958,2962,2970,2986,3018,3082,3212,3468,3980,5004],ti=8,ei=[4,5,6,7,8,9,10,10,11,12,13,14,15,16,17,17,18,19,20,20,21,21,22,22,23,23,24,25,25,26,27,28,29,30,31,32,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,93,95,96,98,100,101,102,104,106,108,110,112,114,116,118,122,124,126,128,130,132,134,136,138,140,143,145,148,151,154,157],ri=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,234,239,245,249,254,259,264,269,274,279,284],ni=null,ii=[[173,148,140,0],[176,155,140,135,0],[180,157,141,134,130,0],[254,254,243,230,196,177,153,140,133,130,129,0]],ai=[0,1,4,8,5,2,3,6,9,12,13,10,7,11,14,15],oi=[-0,1,-1,2,-2,3,4,6,-3,5,-4,-5,-6,7,-7,8,-8,-9],si=[[[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]],[[253,136,254,255,228,219,128,128,128,128,128],[189,129,242,255,227,213,255,219,128,128,128],[106,126,227,252,214,209,255,255,128,128,128]],[[1,98,248,255,236,226,255,255,128,128,128],[181,133,238,254,221,234,255,154,128,128,128],[78,134,202,247,198,180,255,219,128,128,128]],[[1,185,249,255,243,255,128,128,128,128,128],[184,150,247,255,236,224,128,128,128,128,128],[77,110,216,255,236,230,128,128,128,128,128]],[[1,101,251,255,241,255,128,128,128,128,128],[170,139,241,252,236,209,255,255,128,128,128],[37,116,196,243,228,255,255,255,128,128,128]],[[1,204,254,255,245,255,128,128,128,128,128],[207,160,250,255,238,128,128,128,128,128,128],[102,103,231,255,211,171,128,128,128,128,128]],[[1,152,252,255,240,255,128,128,128,128,128],[177,135,243,255,234,225,128,128,128,128,128],[80,129,211,255,194,224,128,128,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[246,1,255,128,128,128,128,128,128,128,128],[255,128,128,128,128,128,128,128,128,128,128]]],[[[198,35,237,223,193,187,162,160,145,155,62],[131,45,198,221,172,176,220,157,252,221,1],[68,47,146,208,149,167,221,162,255,223,128]],[[1,149,241,255,221,224,255,255,128,128,128],[184,141,234,253,222,220,255,199,128,128,128],[81,99,181,242,176,190,249,202,255,255,128]],[[1,129,232,253,214,197,242,196,255,255,128],[99,121,210,250,201,198,255,202,128,128,128],[23,91,163,242,170,187,247,210,255,255,128]],[[1,200,246,255,234,255,128,128,128,128,128],[109,178,241,255,231,245,255,255,128,128,128],[44,130,201,253,205,192,255,255,128,128,128]],[[1,132,239,251,219,209,255,165,128,128,128],[94,136,225,251,218,190,255,255,128,128,128],[22,100,174,245,186,161,255,199,128,128,128]],[[1,182,249,255,232,235,128,128,128,128,128],[124,143,241,255,227,234,128,128,128,128,128],[35,77,181,251,193,211,255,205,128,128,128]],[[1,157,247,255,236,231,255,255,128,128,128],[121,141,235,255,225,227,255,255,128,128,128],[45,99,188,251,195,217,255,224,128,128,128]],[[1,1,251,255,213,255,128,128,128,128,128],[203,1,248,255,255,128,128,128,128,128,128],[137,1,177,255,224,255,128,128,128,128,128]]],[[[253,9,248,251,207,208,255,192,128,128,128],[175,13,224,243,193,185,249,198,255,255,128],[73,17,171,221,161,179,236,167,255,234,128]],[[1,95,247,253,212,183,255,255,128,128,128],[239,90,244,250,211,209,255,255,128,128,128],[155,77,195,248,188,195,255,255,128,128,128]],[[1,24,239,251,218,219,255,205,128,128,128],[201,51,219,255,196,186,128,128,128,128,128],[69,46,190,239,201,218,255,228,128,128,128]],[[1,191,251,255,255,128,128,128,128,128,128],[223,165,249,255,213,255,128,128,128,128,128],[141,124,248,255,255,128,128,128,128,128,128]],[[1,16,248,255,255,128,128,128,128,128,128],[190,36,230,255,236,255,128,128,128,128,128],[149,1,255,128,128,128,128,128,128,128,128]],[[1,226,255,128,128,128,128,128,128,128,128],[247,192,255,128,128,128,128,128,128,128,128],[240,128,255,128,128,128,128,128,128,128,128]],[[1,134,252,255,255,128,128,128,128,128,128],[213,62,250,255,255,128,128,128,128,128,128],[55,93,255,128,128,128,128,128,128,128,128]],[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]]],[[[202,24,213,235,186,191,220,160,240,175,255],[126,38,182,232,169,184,228,174,255,187,128],[61,46,138,219,151,178,240,170,255,216,128]],[[1,112,230,250,199,191,247,159,255,255,128],[166,109,228,252,211,215,255,174,128,128,128],[39,77,162,232,172,180,245,178,255,255,128]],[[1,52,220,246,198,199,249,220,255,255,128],[124,74,191,243,183,193,250,221,255,255,128],[24,71,130,219,154,170,243,182,255,255,128]],[[1,182,225,249,219,240,255,224,128,128,128],[149,150,226,252,216,205,255,171,128,128,128],[28,108,170,242,183,194,254,223,255,255,128]],[[1,81,230,252,204,203,255,192,128,128,128],[123,102,209,247,188,196,255,233,128,128,128],[20,95,153,243,164,173,255,203,128,128,128]],[[1,222,248,255,216,213,128,128,128,128,128],[168,175,246,252,235,205,255,255,128,128,128],[47,116,215,255,211,212,255,255,128,128,128]],[[1,121,236,253,212,214,255,255,128,128,128],[141,84,213,252,201,202,255,219,128,128,128],[42,80,160,240,162,185,255,205,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[244,1,255,128,128,128,128,128,128,128,128],[238,1,255,128,128,128,128,128,128,128,128]]]],ui=[[[231,120,48,89,115,113,120,152,112],[152,179,64,126,170,118,46,70,95],[175,69,143,80,85,82,72,155,103],[56,58,10,171,218,189,17,13,152],[114,26,17,163,44,195,21,10,173],[121,24,80,195,26,62,44,64,85],[144,71,10,38,171,213,144,34,26],[170,46,55,19,136,160,33,206,71],[63,20,8,114,114,208,12,9,226],[81,40,11,96,182,84,29,16,36]],[[134,183,89,137,98,101,106,165,148],[72,187,100,130,157,111,32,75,80],[66,102,167,99,74,62,40,234,128],[41,53,9,178,241,141,26,8,107],[74,43,26,146,73,166,49,23,157],[65,38,105,160,51,52,31,115,128],[104,79,12,27,217,255,87,17,7],[87,68,71,44,114,51,15,186,23],[47,41,14,110,182,183,21,17,194],[66,45,25,102,197,189,23,18,22]],[[88,88,147,150,42,46,45,196,205],[43,97,183,117,85,38,35,179,61],[39,53,200,87,26,21,43,232,171],[56,34,51,104,114,102,29,93,77],[39,28,85,171,58,165,90,98,64],[34,22,116,206,23,34,43,166,73],[107,54,32,26,51,1,81,43,31],[68,25,106,22,64,171,36,225,114],[34,19,21,102,132,188,16,76,124],[62,18,78,95,85,57,50,48,51]],[[193,101,35,159,215,111,89,46,111],[60,148,31,172,219,228,21,18,111],[112,113,77,85,179,255,38,120,114],[40,42,1,196,245,209,10,25,109],[88,43,29,140,166,213,37,43,154],[61,63,30,155,67,45,68,1,209],[100,80,8,43,154,1,51,26,71],[142,78,78,16,255,128,34,197,171],[41,40,5,102,211,183,4,1,221],[51,50,17,168,209,192,23,25,82]],[[138,31,36,171,27,166,38,44,229],[67,87,58,169,82,115,26,59,179],[63,59,90,180,59,166,93,73,154],[40,40,21,116,143,209,34,39,175],[47,15,16,183,34,223,49,45,183],[46,17,33,183,6,98,15,32,183],[57,46,22,24,128,1,54,17,37],[65,32,73,115,28,128,23,128,205],[40,3,9,115,51,192,18,6,223],[87,37,9,115,59,77,64,21,47]],[[104,55,44,218,9,54,53,130,226],[64,90,70,205,40,41,23,26,57],[54,57,112,184,5,41,38,166,213],[30,34,26,133,152,116,10,32,134],[39,19,53,221,26,114,32,73,255],[31,9,65,234,2,15,1,118,73],[75,32,12,51,192,255,160,43,51],[88,31,35,67,102,85,55,186,85],[56,21,23,111,59,205,45,37,192],[55,38,70,124,73,102,1,34,98]],[[125,98,42,88,104,85,117,175,82],[95,84,53,89,128,100,113,101,45],[75,79,123,47,51,128,81,171,1],[57,17,5,71,102,57,53,41,49],[38,33,13,121,57,73,26,1,85],[41,10,67,138,77,110,90,47,114],[115,21,2,10,102,255,166,23,6],[101,29,16,10,85,128,101,196,26],[57,18,10,102,102,213,34,20,43],[117,20,15,36,163,128,68,1,26]],[[102,61,71,37,34,53,31,243,192],[69,60,71,38,73,119,28,222,37],[68,45,128,34,1,47,11,245,171],[62,17,19,70,146,85,55,62,70],[37,43,37,154,100,163,85,160,1],[63,9,92,136,28,64,32,201,85],[75,15,9,9,64,255,184,119,16],[86,6,28,5,64,255,25,248,1],[56,8,17,132,137,255,55,116,128],[58,15,20,82,135,57,26,121,40]],[[164,50,31,137,154,133,25,35,218],[51,103,44,131,131,123,31,6,158],[86,40,64,135,148,224,45,183,128],[22,26,17,131,240,154,14,1,209],[45,16,21,91,64,222,7,1,197],[56,21,39,155,60,138,23,102,213],[83,12,13,54,192,255,68,47,28],[85,26,85,85,128,128,32,146,171],[18,11,7,63,144,171,4,4,246],[35,27,10,146,174,171,12,26,128]],[[190,80,35,99,180,80,126,54,45],[85,126,47,87,176,51,41,20,32],[101,75,128,139,118,146,116,128,85],[56,41,15,176,236,85,37,9,62],[71,30,17,119,118,255,17,18,138],[101,38,60,138,55,70,43,26,142],[146,36,19,30,171,255,97,27,20],[138,45,61,62,219,1,81,188,64],[32,41,20,117,151,142,20,21,163],[112,19,12,61,195,128,48,4,24]]],ci=[[[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[176,246,255,255,255,255,255,255,255,255,255],[223,241,252,255,255,255,255,255,255,255,255],[249,253,253,255,255,255,255,255,255,255,255]],[[255,244,252,255,255,255,255,255,255,255,255],[234,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255]],[[255,246,254,255,255,255,255,255,255,255,255],[239,253,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[251,255,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[251,254,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,254,253,255,254,255,255,255,255,255,255],[250,255,254,255,254,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[217,255,255,255,255,255,255,255,255,255,255],[225,252,241,253,255,255,254,255,255,255,255],[234,250,241,250,253,255,253,254,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[223,254,254,255,255,255,255,255,255,255,255],[238,253,254,254,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[249,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,255,255,255,255,255,255,255,255,255],[247,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[252,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[186,251,250,255,255,255,255,255,255,255,255],[234,251,244,254,255,255,255,255,255,255,255],[251,251,243,253,254,255,254,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[236,253,254,255,255,255,255,255,255,255,255],[251,253,253,254,254,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[254,254,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[254,254,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[248,255,255,255,255,255,255,255,255,255,255],[250,254,252,254,255,255,255,255,255,255,255],[248,254,249,253,255,255,255,255,255,255,255]],[[255,253,253,255,255,255,255,255,255,255,255],[246,253,253,255,255,255,255,255,255,255,255],[252,254,251,254,254,255,255,255,255,255,255]],[[255,254,252,255,255,255,255,255,255,255,255],[248,254,253,255,255,255,255,255,255,255,255],[253,255,254,254,255,255,255,255,255,255,255]],[[255,251,254,255,255,255,255,255,255,255,255],[245,251,254,255,255,255,255,255,255,255,255],[253,253,254,255,255,255,255,255,255,255,255]],[[255,251,253,255,255,255,255,255,255,255,255],[252,253,254,255,255,255,255,255,255,255,255],[255,254,255,255,255,255,255,255,255,255,255]],[[255,252,255,255,255,255,255,255,255,255,255],[249,255,254,255,255,255,255,255,255,255,255],[255,255,254,255,255,255,255,255,255,255,255]],[[255,255,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]]],li=[0,1,2,3,6,4,5,6,6,6,6,6,6,6,6,7,0],hi=[],fi=[],di=[],pi=1,gi=2,mi=[],vi=[];vr(\"UpsampleRgbLinePair\",Ar,3),vr(\"UpsampleBgrLinePair\",xr,3),vr(\"UpsampleRgbaLinePair\",Ir,4),vr(\"UpsampleBgraLinePair\",kr,4),vr(\"UpsampleArgbLinePair\",Pr,4),vr(\"UpsampleRgba4444LinePair\",_r,2),vr(\"UpsampleRgb565LinePair\",Sr,2);var bi=t.UpsampleRgbLinePair,yi=t.UpsampleBgrLinePair,wi=t.UpsampleRgbaLinePair,Ni=t.UpsampleBgraLinePair,Li=t.UpsampleArgbLinePair,Ai=t.UpsampleRgba4444LinePair,xi=t.UpsampleRgb565LinePair,Si=16,_i=1<<Si-1,Pi=-227,ki=482,Ii=6,Fi=(256<<Ii)-1,Ci=0,ji=a(256),Oi=a(256),Bi=a(256),Mi=a(256),Ei=a(ki-Pi),qi=a(ki-Pi);Fr(\"YuvToRgbRow\",Ar,3),Fr(\"YuvToBgrRow\",xr,3),Fr(\"YuvToRgbaRow\",Ir,4),Fr(\"YuvToBgraRow\",kr,4),Fr(\"YuvToArgbRow\",Pr,4),Fr(\"YuvToRgba4444Row\",_r,2),Fr(\"YuvToRgb565Row\",Sr,2);var Ri=[0,4,8,12,128,132,136,140,256,260,264,268,384,388,392,396],Di=[0,2,8],Ti=[8,7,6,4,4,2,2,2,1,1,1,1],Ui=1;this.WebPDecodeRGBA=function(t,r,n,i,a){var o=qn,s=new rr,u=new ot;s.ba=u,u.S=o,u.width=[u.width],u.height=[u.height];var c=u.width,l=u.height,h=new st;if(null==h||null==t)var f=2;else e(null!=h),f=Br(t,r,n,h.width,h.height,h.Pd,h.Qd,h.format,null);if(0!=f?c=0:(null!=c&&(c[0]=h.width[0]),null!=l&&(l[0]=h.height[0]),c=1),c){u.width=u.width[0],u.height=u.height[0],null!=i&&(i[0]=u.width),null!=a&&(a[0]=u.height);t:{if(i=new Gt,(a=new nr).data=t,a.w=r,a.ha=n,a.kd=1,r=[0],e(null!=a),(0==(t=Br(a.data,a.w,a.ha,null,null,null,r,null,a))||7==t)&&r[0]&&(t=4),0==(r=t)){if(e(null!=s),i.data=a.data,i.w=a.w+a.offset,i.ha=a.ha-a.offset,i.put=dt,i.ac=ft,i.bc=pt,i.ma=s,a.xa){if(null==(t=kt())){s=1;break t}if(function(t,r){var n=[0],i=[0],a=[0];e:for(;;){if(null==t)return 0;if(null==r)return t.a=2,0;if(t.l=r,t.a=0,v(t.m,r.data,r.w,r.ha),!gt(t.m,n,i,a)){t.a=3;break e}if(t.xb=gi,r.width=n[0],r.height=i[0],!It(n[0],i[0],1,t,null))break e;return 1}return e(0!=t.a),0}(t,i)){if(i=0==(r=qr(i.width,i.height,s.Oa,s.ba))){e:{i=t;r:for(;;){if(null==i){i=0;break e}if(e(null!=i.s.yc),e(null!=i.s.Ya),e(0<i.s.Wb),e(null!=(n=i.l)),e(null!=(a=n.ma)),0!=i.xb){if(i.ca=a.ba,i.tb=a.tb,e(null!=i.ca),!Mr(a.Oa,n,Dn)){i.a=2;break r}if(!Ft(i,n.width))break r;if(n.da)break r;if((n.da||nt(i.ca.S))&&mr(),11>i.ca.S||(alert(\"todo:WebPInitConvertARGBToYUV\"),null!=i.ca.f.kb.F&&mr()),i.Pb&&0<i.s.ua&&null==i.s.vb.X&&!O(i.s.vb,i.s.Wa.Xa)){i.a=1;break r}i.xb=0}if(!_t(i,i.V,i.Ba,i.c,i.i,n.o,Lt))break r;a.Dc=i.Ma,i=1;break e}e(0!=i.a),i=0}i=!i}i&&(r=t.a)}else r=t.a}else{if(null==(t=new Yt)){s=1;break t}if(t.Fa=a.na,t.P=a.P,t.qc=a.Sa,Kt(t,i)){if(0==(r=qr(i.width,i.height,s.Oa,s.ba))){if(t.Aa=0,n=s.Oa,e(null!=(a=t)),null!=n){if(0<(c=0>(c=n.Md)?0:100<c?255:255*c/100)){for(l=h=0;4>l;++l)12>(f=a.pb[l]).lc&&(f.ia=c*Ti[0>f.lc?0:f.lc]>>3),h|=f.ia;h&&(alert(\"todo:VP8InitRandom\"),a.ia=1)}a.Ga=n.Id,100<a.Ga?a.Ga=100:0>a.Ga&&(a.Ga=0)}Qt(t,i)||(r=t.a)}}else r=t.a}0==r&&null!=s.Oa&&s.Oa.fd&&(r=Er(s.ba))}s=r}o=0!=s?null:11>o?u.f.RGBA.eb:u.f.kb.y}else o=null;return o};var zi=[3,4,3,4,4,2,2,4,4,4,2,1,1]});var h=[0],f=[0],d=[],p=new $t,g=t,m=function(t,e){var r={},n=0,i=!1,a=0,o=0;if(r.frames=[],!\n/** @license\n * Copyright (c) 2017 Dominik Homberger\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nhttps://webpjs.appspot.com\nWebPRiffParser dominikhlbg@gmail.com\n*/\nfunction(t,e,r,n){for(var i=0;i<n;i++)if(t[e+i]!=r.charCodeAt(i))return!0;return!1}(t,e,\"RIFF\",4)){var s,h;l(t,e+=4);for(e+=8;e<t.length;){var f=u(t,e),d=l(t,e+=4);e+=4;var p=d+(1&d);switch(f){case\"VP8 \":case\"VP8L\":void 0===r.frames[n]&&(r.frames[n]={});(v=r.frames[n]).src_off=i?o:e-8,v.src_size=a+d+8,n++,i&&(i=!1,a=0,o=0);break;case\"VP8X\":(v=r.header={}).feature_flags=t[e];var g=e+4;v.canvas_width=1+c(t,g);g+=3;v.canvas_height=1+c(t,g);g+=3;break;case\"ALPH\":i=!0,a=p+8,o=e-8;break;case\"ANIM\":(v=r.header).bgcolor=l(t,e);g=e+4;v.loop_count=(s=t)[(h=g)+0]<<0|s[h+1]<<8;g+=2;break;case\"ANMF\":var m,v;(v=r.frames[n]={}).offset_x=2*c(t,e),e+=3,v.offset_y=2*c(t,e),e+=3,v.width=1+c(t,e),e+=3,v.height=1+c(t,e),e+=3,v.duration=c(t,e),e+=3,m=t[e++],v.dispose=1&m,v.blend=m>>1&1}\"ANMF\"!=f&&(e+=p)}return r}}(g,0);m.response=g,m.rgbaoutput=!0,m.dataurl=!1;var v=m.header?m.header:null,b=m.frames?m.frames:null;if(v){v.loop_counter=v.loop_count,h=[v.canvas_height],f=[v.canvas_width];for(var y=0;y<b.length&&0!=b[y].blend;y++);}var w=b[0],N=p.WebPDecodeRGBA(g,w.src_off,w.src_size,f,h);w.rgba=N,w.imgwidth=f[0],w.imgheight=h[0];for(var L=0;L<f[0]*h[0]*4;L++)d[L]=N[L];return this.width=f,this.height=h,this.data=d,this}!function(e){var r=function(){return\"function\"==typeof t},n=function(r,n,a,l){var h=4,f=s;switch(l){case e.image_compression.FAST:h=1,f=o;break;case e.image_compression.MEDIUM:h=6,f=u;break;case e.image_compression.SLOW:h=9,f=c}r=i(r,n,a,f);var d=t(r,{level:h});return e.__addimage__.arrayBufferToBinaryString(d)},i=function(t,e,r,n){for(var i,a,o,s=t.length/e,u=new Uint8Array(t.length+s),c=h(),l=0;l<s;l+=1){if(o=l*e,i=t.subarray(o,o+e),n)u.set(n(i,r,a),o+l);else{for(var d,p=c.length,g=[];d<p;d+=1)g[d]=c[d](i,r,a);var m=f(g.concat());u.set(g[m],o+l)}a=i}return u},a=function(t){var e=Array.apply([],t);return e.unshift(0),e},o=function(t,e){var r,n=[],i=t.length;n[0]=1;for(var a=0;a<i;a+=1)r=t[a-e]||0,n[a+1]=t[a]-r+256&255;return n},s=function(t,e,r){var n,i=[],a=t.length;i[0]=2;for(var o=0;o<a;o+=1)n=r&&r[o]||0,i[o+1]=t[o]-n+256&255;return i},u=function(t,e,r){var n,i,a=[],o=t.length;a[0]=3;for(var s=0;s<o;s+=1)n=t[s-e]||0,i=r&&r[s]||0,a[s+1]=t[s]+256-(n+i>>>1)&255;return a},c=function(t,e,r){var n,i,a,o,s=[],u=t.length;s[0]=4;for(var c=0;c<u;c+=1)n=t[c-e]||0,i=r&&r[c]||0,a=r&&r[c-e]||0,o=l(n,i,a),s[c+1]=t[c]-o+256&255;return s},l=function(t,e,r){if(t===e&&e===r)return t;var n=Math.abs(e-r),i=Math.abs(t-r),a=Math.abs(t+e-r-r);return n<=i&&n<=a?t:i<=a?e:r},h=function(){return[a,o,s,u,c]},f=function(t){var e=t.map((function(t){return t.reduce((function(t,e){return t+Math.abs(e)}),0)}));return e.indexOf(Math.min.apply(null,e))};e.processPNG=function(t,i,a,o){var s,u,c,l,h,f,d,p,g,m,v,b,y,w,N,L=this.decode.FLATE_DECODE,A=\"\";if(this.__addimage__.isArrayBuffer(t)&&(t=new Uint8Array(t)),this.__addimage__.isArrayBufferView(t)){if(t=(c=new Yt(t)).imgData,u=c.bits,s=c.colorSpace,h=c.colors,-1!==[4,6].indexOf(c.colorType)){if(8===c.bits){g=(p=32==c.pixelBitlength?new Uint32Array(c.decodePixels().buffer):16==c.pixelBitlength?new Uint16Array(c.decodePixels().buffer):new Uint8Array(c.decodePixels().buffer)).length,v=new Uint8Array(g*c.colors),m=new Uint8Array(g);var x,S=c.pixelBitlength-c.bits;for(w=0,N=0;w<g;w++){for(y=p[w],x=0;x<S;)v[N++]=y>>>x&255,x+=c.bits;m[w]=y>>>x&255}}if(16===c.bits){g=(p=new Uint32Array(c.decodePixels().buffer)).length,v=new Uint8Array(g*(32/c.pixelBitlength)*c.colors),m=new Uint8Array(g*(32/c.pixelBitlength)),b=c.colors>1,w=0,N=0;for(var _=0;w<g;)y=p[w++],v[N++]=y>>>0&255,b&&(v[N++]=y>>>16&255,y=p[w++],v[N++]=y>>>0&255),m[_++]=y>>>16&255;u=8}o!==e.image_compression.NONE&&r()?(t=n(v,c.width*c.colors,c.colors,o),d=n(m,c.width,1,o)):(t=v,d=m,L=void 0)}if(3===c.colorType&&(s=this.color_spaces.INDEXED,f=c.palette,c.transparency.indexed)){var P=c.transparency.indexed,k=0;for(w=0,g=P.length;w<g;++w)k+=P[w];if((k/=255)===g-1&&-1!==P.indexOf(0))l=[P.indexOf(0)];else if(k!==g){for(p=c.decodePixels(),m=new Uint8Array(p.length),w=0,g=p.length;w<g;w++)m[w]=P[p[w]];d=n(m,c.width,1)}}var I=function(t){var r;switch(t){case e.image_compression.FAST:r=11;break;case e.image_compression.MEDIUM:r=13;break;case e.image_compression.SLOW:r=14;break;default:r=12}return r}(o);return L===this.decode.FLATE_DECODE&&(A=\"/Predictor \"+I+\" \"),A+=\"/Colors \"+h+\" /BitsPerComponent \"+u+\" /Columns \"+c.width,(this.__addimage__.isArrayBuffer(t)||this.__addimage__.isArrayBufferView(t))&&(t=this.__addimage__.arrayBufferToBinaryString(t)),(d&&this.__addimage__.isArrayBuffer(d)||this.__addimage__.isArrayBufferView(d))&&(d=this.__addimage__.arrayBufferToBinaryString(d)),{alias:a,data:t,index:i,filter:L,decodeParameters:A,transparency:l,palette:f,sMask:d,predictor:I,width:c.width,height:c.height,bitsPerComponent:u,colorSpace:s}}}}(O.API),function(t){t.processGIF89A=function(e,r,n,i){var a=new Jt(e),o=a.width,s=a.height,u=[];a.decodeAndBlitFrameRGBA(0,u);var c={data:u,width:o,height:s},l=new Kt(100).encode(c,100);return t.processJPEG.call(this,l,r,n,i)},t.processGIF87A=t.processGIF89A}(O.API),Zt.prototype.parseHeader=function(){if(this.fileSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.reserved=this.datav.getUint32(this.pos,!0),this.pos+=4,this.offset=this.datav.getUint32(this.pos,!0),this.pos+=4,this.headerSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.width=this.datav.getUint32(this.pos,!0),this.pos+=4,this.height=this.datav.getInt32(this.pos,!0),this.pos+=4,this.planes=this.datav.getUint16(this.pos,!0),this.pos+=2,this.bitPP=this.datav.getUint16(this.pos,!0),this.pos+=2,this.compress=this.datav.getUint32(this.pos,!0),this.pos+=4,this.rawSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.hr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.vr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.colors=this.datav.getUint32(this.pos,!0),this.pos+=4,this.importantColors=this.datav.getUint32(this.pos,!0),this.pos+=4,16===this.bitPP&&this.is_with_alpha&&(this.bitPP=15),this.bitPP<15){var t=0===this.colors?1<<this.bitPP:this.colors;this.palette=new Array(t);for(var e=0;e<t;e++){var r=this.datav.getUint8(this.pos++,!0),n=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0);this.palette[e]={red:i,green:n,blue:r,quad:a}}}this.height<0&&(this.height*=-1,this.bottom_up=!1)},Zt.prototype.parseBGR=function(){this.pos=this.offset;try{var t=\"bit\"+this.bitPP,e=this.width*this.height*4;this.data=new Uint8Array(e),this[t]()}catch(t){i.log(\"bit decode error:\"+t)}},Zt.prototype.bit1=function(){var t,e=Math.ceil(this.width/8),r=e%4;for(t=this.height-1;t>=0;t--){for(var n=this.bottom_up?t:this.height-1-t,i=0;i<e;i++)for(var a=this.datav.getUint8(this.pos++,!0),o=n*this.width*4+8*i*4,s=0;s<8&&8*i+s<this.width;s++){var u=this.palette[a>>7-s&1];this.data[o+4*s]=u.blue,this.data[o+4*s+1]=u.green,this.data[o+4*s+2]=u.red,this.data[o+4*s+3]=255}0!==r&&(this.pos+=4-r)}},Zt.prototype.bit4=function(){for(var t=Math.ceil(this.width/2),e=t%4,r=this.height-1;r>=0;r--){for(var n=this.bottom_up?r:this.height-1-r,i=0;i<t;i++){var a=this.datav.getUint8(this.pos++,!0),o=n*this.width*4+2*i*4,s=a>>4,u=15&a,c=this.palette[s];if(this.data[o]=c.blue,this.data[o+1]=c.green,this.data[o+2]=c.red,this.data[o+3]=255,2*i+1>=this.width)break;c=this.palette[u],this.data[o+4]=c.blue,this.data[o+4+1]=c.green,this.data[o+4+2]=c.red,this.data[o+4+3]=255}0!==e&&(this.pos+=4-e)}},Zt.prototype.bit8=function(){for(var t=this.width%4,e=this.height-1;e>=0;e--){for(var r=this.bottom_up?e:this.height-1-e,n=0;n<this.width;n++){var i=this.datav.getUint8(this.pos++,!0),a=r*this.width*4+4*n;if(i<this.palette.length){var o=this.palette[i];this.data[a]=o.red,this.data[a+1]=o.green,this.data[a+2]=o.blue,this.data[a+3]=255}else this.data[a]=255,this.data[a+1]=255,this.data[a+2]=255,this.data[a+3]=255}0!==t&&(this.pos+=4-t)}},Zt.prototype.bit15=function(){for(var t=this.width%3,e=parseInt(\"11111\",2),r=this.height-1;r>=0;r--){for(var n=this.bottom_up?r:this.height-1-r,i=0;i<this.width;i++){var a=this.datav.getUint16(this.pos,!0);this.pos+=2;var o=(a&e)/e*255|0,s=(a>>5&e)/e*255|0,u=(a>>10&e)/e*255|0,c=a>>15?255:0,l=n*this.width*4+4*i;this.data[l]=u,this.data[l+1]=s,this.data[l+2]=o,this.data[l+3]=c}this.pos+=t}},Zt.prototype.bit16=function(){for(var t=this.width%3,e=parseInt(\"11111\",2),r=parseInt(\"111111\",2),n=this.height-1;n>=0;n--){for(var i=this.bottom_up?n:this.height-1-n,a=0;a<this.width;a++){var o=this.datav.getUint16(this.pos,!0);this.pos+=2;var s=(o&e)/e*255|0,u=(o>>5&r)/r*255|0,c=(o>>11)/e*255|0,l=i*this.width*4+4*a;this.data[l]=c,this.data[l+1]=u,this.data[l+2]=s,this.data[l+3]=255}this.pos+=t}},Zt.prototype.bit24=function(){for(var t=this.height-1;t>=0;t--){for(var e=this.bottom_up?t:this.height-1-t,r=0;r<this.width;r++){var n=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0),o=e*this.width*4+4*r;this.data[o]=a,this.data[o+1]=i,this.data[o+2]=n,this.data[o+3]=255}this.pos+=this.width%4}},Zt.prototype.bit32=function(){for(var t=this.height-1;t>=0;t--)for(var e=this.bottom_up?t:this.height-1-t,r=0;r<this.width;r++){var n=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),s=e*this.width*4+4*r;this.data[s]=a,this.data[s+1]=i,this.data[s+2]=n,this.data[s+3]=o}},Zt.prototype.getData=function(){return this.data},\n/**\n * @license\n * Copyright (c) 2018 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){t.processBMP=function(e,r,n,i){var a=new Zt(e,!1),o=a.width,s=a.height,u={data:a.getData(),width:o,height:s},c=new Kt(100).encode(u,100);return t.processJPEG.call(this,c,r,n,i)}}(O.API),$t.prototype.getData=function(){return this.data},\n/**\n * @license\n * Copyright (c) 2019 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){t.processWEBP=function(e,r,n,i){var a=new $t(e,!1),o=a.width,s=a.height,u={data:a.getData(),width:o,height:s},c=new Kt(100).encode(u,100);return t.processJPEG.call(this,c,r,n,i)}}(O.API),O.API.setLanguage=function(t){return void 0===this.internal.languageSettings&&(this.internal.languageSettings={},this.internal.languageSettings.isSubscribed=!1),void 0!=={af:\"Afrikaans\",sq:\"Albanian\",ar:\"Arabic (Standard)\",\"ar-DZ\":\"Arabic (Algeria)\",\"ar-BH\":\"Arabic (Bahrain)\",\"ar-EG\":\"Arabic (Egypt)\",\"ar-IQ\":\"Arabic (Iraq)\",\"ar-JO\":\"Arabic (Jordan)\",\"ar-KW\":\"Arabic (Kuwait)\",\"ar-LB\":\"Arabic (Lebanon)\",\"ar-LY\":\"Arabic (Libya)\",\"ar-MA\":\"Arabic (Morocco)\",\"ar-OM\":\"Arabic (Oman)\",\"ar-QA\":\"Arabic (Qatar)\",\"ar-SA\":\"Arabic (Saudi Arabia)\",\"ar-SY\":\"Arabic (Syria)\",\"ar-TN\":\"Arabic (Tunisia)\",\"ar-AE\":\"Arabic (U.A.E.)\",\"ar-YE\":\"Arabic (Yemen)\",an:\"Aragonese\",hy:\"Armenian\",as:\"Assamese\",ast:\"Asturian\",az:\"Azerbaijani\",eu:\"Basque\",be:\"Belarusian\",bn:\"Bengali\",bs:\"Bosnian\",br:\"Breton\",bg:\"Bulgarian\",my:\"Burmese\",ca:\"Catalan\",ch:\"Chamorro\",ce:\"Chechen\",zh:\"Chinese\",\"zh-HK\":\"Chinese (Hong Kong)\",\"zh-CN\":\"Chinese (PRC)\",\"zh-SG\":\"Chinese (Singapore)\",\"zh-TW\":\"Chinese (Taiwan)\",cv:\"Chuvash\",co:\"Corsican\",cr:\"Cree\",hr:\"Croatian\",cs:\"Czech\",da:\"Danish\",nl:\"Dutch (Standard)\",\"nl-BE\":\"Dutch (Belgian)\",en:\"English\",\"en-AU\":\"English (Australia)\",\"en-BZ\":\"English (Belize)\",\"en-CA\":\"English (Canada)\",\"en-IE\":\"English (Ireland)\",\"en-JM\":\"English (Jamaica)\",\"en-NZ\":\"English (New Zealand)\",\"en-PH\":\"English (Philippines)\",\"en-ZA\":\"English (South Africa)\",\"en-TT\":\"English (Trinidad & Tobago)\",\"en-GB\":\"English (United Kingdom)\",\"en-US\":\"English (United States)\",\"en-ZW\":\"English (Zimbabwe)\",eo:\"Esperanto\",et:\"Estonian\",fo:\"Faeroese\",fj:\"Fijian\",fi:\"Finnish\",fr:\"French (Standard)\",\"fr-BE\":\"French (Belgium)\",\"fr-CA\":\"French (Canada)\",\"fr-FR\":\"French (France)\",\"fr-LU\":\"French (Luxembourg)\",\"fr-MC\":\"French (Monaco)\",\"fr-CH\":\"French (Switzerland)\",fy:\"Frisian\",fur:\"Friulian\",gd:\"Gaelic (Scots)\",\"gd-IE\":\"Gaelic (Irish)\",gl:\"Galacian\",ka:\"Georgian\",de:\"German (Standard)\",\"de-AT\":\"German (Austria)\",\"de-DE\":\"German (Germany)\",\"de-LI\":\"German (Liechtenstein)\",\"de-LU\":\"German (Luxembourg)\",\"de-CH\":\"German (Switzerland)\",el:\"Greek\",gu:\"Gujurati\",ht:\"Haitian\",he:\"Hebrew\",hi:\"Hindi\",hu:\"Hungarian\",is:\"Icelandic\",id:\"Indonesian\",iu:\"Inuktitut\",ga:\"Irish\",it:\"Italian (Standard)\",\"it-CH\":\"Italian (Switzerland)\",ja:\"Japanese\",kn:\"Kannada\",ks:\"Kashmiri\",kk:\"Kazakh\",km:\"Khmer\",ky:\"Kirghiz\",tlh:\"Klingon\",ko:\"Korean\",\"ko-KP\":\"Korean (North Korea)\",\"ko-KR\":\"Korean (South Korea)\",la:\"Latin\",lv:\"Latvian\",lt:\"Lithuanian\",lb:\"Luxembourgish\",mk:\"FYRO Macedonian\",ms:\"Malay\",ml:\"Malayalam\",mt:\"Maltese\",mi:\"Maori\",mr:\"Marathi\",mo:\"Moldavian\",nv:\"Navajo\",ng:\"Ndonga\",ne:\"Nepali\",no:\"Norwegian\",nb:\"Norwegian (Bokmal)\",nn:\"Norwegian (Nynorsk)\",oc:\"Occitan\",or:\"Oriya\",om:\"Oromo\",fa:\"Persian\",\"fa-IR\":\"Persian/Iran\",pl:\"Polish\",pt:\"Portuguese\",\"pt-BR\":\"Portuguese (Brazil)\",pa:\"Punjabi\",\"pa-IN\":\"Punjabi (India)\",\"pa-PK\":\"Punjabi (Pakistan)\",qu:\"Quechua\",rm:\"Rhaeto-Romanic\",ro:\"Romanian\",\"ro-MO\":\"Romanian (Moldavia)\",ru:\"Russian\",\"ru-MO\":\"Russian (Moldavia)\",sz:\"Sami (Lappish)\",sg:\"Sango\",sa:\"Sanskrit\",sc:\"Sardinian\",sd:\"Sindhi\",si:\"Singhalese\",sr:\"Serbian\",sk:\"Slovak\",sl:\"Slovenian\",so:\"Somani\",sb:\"Sorbian\",es:\"Spanish\",\"es-AR\":\"Spanish (Argentina)\",\"es-BO\":\"Spanish (Bolivia)\",\"es-CL\":\"Spanish (Chile)\",\"es-CO\":\"Spanish (Colombia)\",\"es-CR\":\"Spanish (Costa Rica)\",\"es-DO\":\"Spanish (Dominican Republic)\",\"es-EC\":\"Spanish (Ecuador)\",\"es-SV\":\"Spanish (El Salvador)\",\"es-GT\":\"Spanish (Guatemala)\",\"es-HN\":\"Spanish (Honduras)\",\"es-MX\":\"Spanish (Mexico)\",\"es-NI\":\"Spanish (Nicaragua)\",\"es-PA\":\"Spanish (Panama)\",\"es-PY\":\"Spanish (Paraguay)\",\"es-PE\":\"Spanish (Peru)\",\"es-PR\":\"Spanish (Puerto Rico)\",\"es-ES\":\"Spanish (Spain)\",\"es-UY\":\"Spanish (Uruguay)\",\"es-VE\":\"Spanish (Venezuela)\",sx:\"Sutu\",sw:\"Swahili\",sv:\"Swedish\",\"sv-FI\":\"Swedish (Finland)\",\"sv-SV\":\"Swedish (Sweden)\",ta:\"Tamil\",tt:\"Tatar\",te:\"Teluga\",th:\"Thai\",tig:\"Tigre\",ts:\"Tsonga\",tn:\"Tswana\",tr:\"Turkish\",tk:\"Turkmen\",uk:\"Ukrainian\",hsb:\"Upper Sorbian\",ur:\"Urdu\",ve:\"Venda\",vi:\"Vietnamese\",vo:\"Volapuk\",wa:\"Walloon\",cy:\"Welsh\",xh:\"Xhosa\",ji:\"Yiddish\",zu:\"Zulu\"}[t]&&(this.internal.languageSettings.languageCode=t,!1===this.internal.languageSettings.isSubscribed&&(this.internal.events.subscribe(\"putCatalog\",(function(){this.internal.write(\"/Lang (\"+this.internal.languageSettings.languageCode+\")\")})),this.internal.languageSettings.isSubscribed=!0)),this},\n/** @license\n * MIT license.\n * Copyright (c) 2012 Willow Systems Corporation, willow-systems.com\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\nzt=O.API,Ht=zt.getCharWidthsArray=function(t,e){var r,n,i=(e=e||{}).font||this.internal.getFont(),a=e.fontSize||this.internal.getFontSize(),o=e.charSpace||this.internal.getCharSpace(),s=e.widths?e.widths:i.metadata.Unicode.widths,u=s.fof?s.fof:1,c=e.kerning?e.kerning:i.metadata.Unicode.kerning,l=c.fof?c.fof:1,h=!1!==e.doKerning,f=0,d=t.length,p=0,g=s[0]||u,m=[];for(r=0;r<d;r++)n=t.charCodeAt(r),\"function\"==typeof i.metadata.widthOfString?m.push((i.metadata.widthOfGlyph(i.metadata.characterToGlyph(n))+o*(1e3/a)||0)/1e3):(f=h&&\"object\"==typeof c[n]&&!isNaN(parseInt(c[n][p],10))?c[n][p]/l:0,m.push((s[n]||g)/u+f)),p=n;return m},Vt=zt.getStringUnitWidth=function(t,e){var r=(e=e||{}).fontSize||this.internal.getFontSize(),n=e.font||this.internal.getFont(),i=e.charSpace||this.internal.getCharSpace();return zt.processArabic&&(t=zt.processArabic(t)),\"function\"==typeof n.metadata.widthOfString?n.metadata.widthOfString(t,r,i)/r:Ht.apply(this,arguments).reduce((function(t,e){return t+e}),0)},Wt=function(t,e,r,n){for(var i=[],a=0,o=t.length,s=0;a!==o&&s+e[a]<r;)s+=e[a],a++;i.push(t.slice(0,a));var u=a;for(s=0;a!==o;)s+e[a]>n&&(i.push(t.slice(u,a)),s=0,u=a),s+=e[a],a++;return u!==a&&i.push(t.slice(u,a)),i},Gt=function(t,e,r){r||(r={});var n,i,a,o,s,u,c,l=[],h=[l],f=r.textIndent||0,d=0,p=0,g=t.split(\" \"),m=Ht.apply(this,[\" \",r])[0];if(u=-1===r.lineIndent?g[0].length+2:r.lineIndent||0){var v=Array(u).join(\" \"),b=[];g.map((function(t){(t=t.split(/\\s*\\n/)).length>1?b=b.concat(t.map((function(t,e){return(e&&t.length?\"\\n\":\"\")+t}))):b.push(t[0])})),g=b,u=Vt.apply(this,[v,r])}for(a=0,o=g.length;a<o;a++){var y=0;if(n=g[a],u&&\"\\n\"==n[0]&&(n=n.substr(1),y=1),f+d+(p=(i=Ht.apply(this,[n,r])).reduce((function(t,e){return t+e}),0))>e||y){if(p>e){for(s=Wt.apply(this,[n,i,e-(f+d),e]),l.push(s.shift()),l=[s.pop()];s.length;)h.push([s.shift()]);p=i.slice(n.length-(l[0]?l[0].length:0)).reduce((function(t,e){return t+e}),0)}else l=[n];h.push(l),f=p+u,d=m}else l.push(n),f+=d+p,d=m}return c=u?function(t,e){return(e?v:\"\")+t.join(\" \")}:function(t){return t.join(\" \")},h.map(c)},zt.splitTextToSize=function(t,e,r){var n,i=(r=r||{}).fontSize||this.internal.getFontSize(),a=function(t){if(t.widths&&t.kerning)return{widths:t.widths,kerning:t.kerning};var e=this.internal.getFont(t.fontName,t.fontStyle);return e.metadata.Unicode?{widths:e.metadata.Unicode.widths||{0:1},kerning:e.metadata.Unicode.kerning||{}}:{font:e.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}.call(this,r);n=Array.isArray(t)?t:String(t).split(/\\r?\\n/);var o=1*this.internal.scaleFactor*e/i;a.textIndent=r.textIndent?1*r.textIndent*this.internal.scaleFactor/i:0,a.lineIndent=r.lineIndent;var s,u,c=[];for(s=0,u=n.length;s<u;s++)c=c.concat(Gt.apply(this,[n[s],o,a]));return c},\n/** @license\n jsPDF standard_fonts_metrics plugin\n * Copyright (c) 2012 Willow Systems Corporation, willow-systems.com\n * MIT license.\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n * \n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\nfunction(t){t.__fontmetrics__=t.__fontmetrics__||{};for(var e=\"klmnopqrstuvwxyz\",r={},n={},i=0;i<e.length;i++)r[e[i]]=\"0123456789abcdef\"[i],n[\"0123456789abcdef\"[i]]=e[i];var a=function(t){return\"0x\"+parseInt(t,10).toString(16)},o=t.__fontmetrics__.compress=function(t){var e,r,i,s,u=[\"{\"];for(var c in t){if(e=t[c],isNaN(parseInt(c,10))?r=\"'\"+c+\"'\":(c=parseInt(c,10),r=(r=a(c).slice(2)).slice(0,-1)+n[r.slice(-1)]),\"number\"==typeof e)e<0?(i=a(e).slice(3),s=\"-\"):(i=a(e).slice(2),s=\"\"),i=s+i.slice(0,-1)+n[i.slice(-1)];else{if(\"object\"!=typeof e)throw new Error(\"Don't know what to do with value type \"+typeof e+\".\");i=o(e)}u.push(r+i)}return u.push(\"}\"),u.join(\"\")},s=t.__fontmetrics__.uncompress=function(t){if(\"string\"!=typeof t)throw new Error(\"Invalid argument passed to uncompress.\");for(var e,n,i,a,o={},s=1,u=o,c=[],l=\"\",h=\"\",f=t.length-1,d=1;d<f;d+=1)\"'\"==(a=t[d])?e?(i=e.join(\"\"),e=void 0):e=[]:e?e.push(a):\"{\"==a?(c.push([u,i]),u={},i=void 0):\"}\"==a?((n=c.pop())[0][n[1]]=u,i=void 0,u=n[0]):\"-\"==a?s=-1:void 0===i?r.hasOwnProperty(a)?(l+=r[a],i=parseInt(l,16)*s,s=1,l=\"\"):l+=a:r.hasOwnProperty(a)?(h+=r[a],u[i]=parseInt(h,16)*s,s=1,i=void 0,h=\"\"):h+=a;return o},u={codePages:[\"WinAnsiEncoding\"],WinAnsiEncoding:s(\"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\")},c={Unicode:{Courier:u,\"Courier-Bold\":u,\"Courier-BoldOblique\":u,\"Courier-Oblique\":u,Helvetica:u,\"Helvetica-Bold\":u,\"Helvetica-BoldOblique\":u,\"Helvetica-Oblique\":u,\"Times-Roman\":u,\"Times-Bold\":u,\"Times-BoldItalic\":u,\"Times-Italic\":u}},l={Unicode:{\"Courier-Oblique\":s(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-BoldItalic\":s(\"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"),\"Helvetica-Bold\":s(\"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"),Courier:s(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Courier-BoldOblique\":s(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-Bold\":s(\"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"),Symbol:s(\"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"),Helvetica:s(\"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"),\"Helvetica-BoldOblique\":s(\"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"),ZapfDingbats:s(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\"Courier-Bold\":s(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-Italic\":s(\"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"),\"Times-Roman\":s(\"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"),\"Helvetica-Oblique\":s(\"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\")}};t.events.push([\"addFont\",function(t){var e=t.font,r=l.Unicode[e.postScriptName];r&&(e.metadata.Unicode={},e.metadata.Unicode.widths=r.widths,e.metadata.Unicode.kerning=r.kerning);var n=c.Unicode[e.postScriptName];n&&(e.metadata.Unicode.encoding=n,e.encoding=n.codePages[0])}])}(O.API),\n/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e=function(t){for(var e=t.length,r=new Uint8Array(e),n=0;n<e;n++)r[n]=t.charCodeAt(n);return r};t.API.events.push([\"addFont\",function(r){var n=void 0,i=r.font,a=r.instance;if(!i.isStandardFont){if(void 0===a)throw new Error(\"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\"+i.postScriptName+\"').\");if(\"string\"!=typeof(n=!1===a.existsFileInVFS(i.postScriptName)?a.loadFile(i.postScriptName):a.getFileFromVFS(i.postScriptName)))throw new Error(\"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\"+i.postScriptName+\"').\");!function(r,n){n=/^\\x00\\x01\\x00\\x00/.test(n)?e(n):e(u(n)),r.metadata=t.API.TTFFont.open(n),r.metadata.Unicode=r.metadata.Unicode||{encoding:{},kerning:{},widths:[]},r.metadata.glyIdsUsed=[0]}(i,n)}}])}(O),\n/** @license\n * Copyright (c) 2012 Willow Systems Corporation, willow-systems.com\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\nfunction(t){function e(){return(r.canvg?Promise.resolve(r.canvg):import(\"canvg\")).catch((function(t){return Promise.reject(new Error(\"Could not load canvg: \"+t))})).then((function(t){return t.default?t.default:t}))}O.API.addSvgAsImage=function(t,r,n,a,o,s,u,c){if(isNaN(r)||isNaN(n))throw i.error(\"jsPDF.addSvgAsImage: Invalid coordinates\",arguments),new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");if(isNaN(a)||isNaN(o))throw i.error(\"jsPDF.addSvgAsImage: Invalid measurements\",arguments),new Error(\"Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage\");var l=document.createElement(\"canvas\");l.width=a,l.height=o;var h=l.getContext(\"2d\");h.fillStyle=\"#fff\",h.fillRect(0,0,l.width,l.height);var f={ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0},d=this;return e().then((function(e){return e.fromString(h,t,f)}),(function(){return Promise.reject(new Error(\"Could not load canvg.\"))})).then((function(t){return t.render(f)})).then((function(){d.addImage(l.toDataURL(\"image/jpeg\",1),r,n,a,o,u,c)}))}}(),O.API.putTotalPages=function(t){var e,r=0;parseInt(this.internal.getFont().id.substr(1),10)<15?(e=new RegExp(t,\"g\"),r=this.internal.getNumberOfPages()):(e=new RegExp(this.pdfEscape16(t,this.internal.getFont()),\"g\"),r=this.pdfEscape16(this.internal.getNumberOfPages()+\"\",this.internal.getFont()));for(var n=1;n<=this.internal.getNumberOfPages();n++)for(var i=0;i<this.internal.pages[n].length;i++)this.internal.pages[n][i]=this.internal.pages[n][i].replace(e,r);return this},O.API.viewerPreferences=function(t,e){var r;t=t||{},e=e||!1;var n,i,a,o={HideToolbar:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideMenubar:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideWindowUI:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},FitWindow:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},CenterWindow:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},DisplayDocTitle:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.4},NonFullScreenPageMode:{defaultValue:\"UseNone\",value:\"UseNone\",type:\"name\",explicitSet:!1,valueSet:[\"UseNone\",\"UseOutlines\",\"UseThumbs\",\"UseOC\"],pdfVersion:1.3},Direction:{defaultValue:\"L2R\",value:\"L2R\",type:\"name\",explicitSet:!1,valueSet:[\"L2R\",\"R2L\"],pdfVersion:1.3},ViewArea:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},ViewClip:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintArea:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintClip:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintScaling:{defaultValue:\"AppDefault\",value:\"AppDefault\",type:\"name\",explicitSet:!1,valueSet:[\"AppDefault\",\"None\"],pdfVersion:1.6},Duplex:{defaultValue:\"\",value:\"none\",type:\"name\",explicitSet:!1,valueSet:[\"Simplex\",\"DuplexFlipShortEdge\",\"DuplexFlipLongEdge\",\"none\"],pdfVersion:1.7},PickTrayByPDFSize:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.7},PrintPageRange:{defaultValue:\"\",value:\"\",type:\"array\",explicitSet:!1,valueSet:null,pdfVersion:1.7},NumCopies:{defaultValue:1,value:1,type:\"integer\",explicitSet:!1,valueSet:null,pdfVersion:1.7}},s=Object.keys(o),u=[],c=0,l=0,h=0;function f(t,e){var r,n=!1;for(r=0;r<t.length;r+=1)t[r]===e&&(n=!0);return n}if(void 0===this.internal.viewerpreferences&&(this.internal.viewerpreferences={},this.internal.viewerpreferences.configuration=JSON.parse(JSON.stringify(o)),this.internal.viewerpreferences.isSubscribed=!1),r=this.internal.viewerpreferences.configuration,\"reset\"===t||!0===e){var d=s.length;for(h=0;h<d;h+=1)r[s[h]].value=r[s[h]].defaultValue,r[s[h]].explicitSet=!1}if(\"object\"==typeof t)for(i in t)if(a=t[i],f(s,i)&&void 0!==a){if(\"boolean\"===r[i].type&&\"boolean\"==typeof a)r[i].value=a;else if(\"name\"===r[i].type&&f(r[i].valueSet,a))r[i].value=a;else if(\"integer\"===r[i].type&&Number.isInteger(a))r[i].value=a;else if(\"array\"===r[i].type){for(c=0;c<a.length;c+=1)if(n=!0,1===a[c].length&&\"number\"==typeof a[c][0])u.push(String(a[c]-1));else if(a[c].length>1){for(l=0;l<a[c].length;l+=1)\"number\"!=typeof a[c][l]&&(n=!1);!0===n&&u.push([a[c][0]-1,a[c][1]-1].join(\" \"))}r[i].value=\"[\"+u.join(\" \")+\"]\"}else r[i].value=r[i].defaultValue;r[i].explicitSet=!0}return!1===this.internal.viewerpreferences.isSubscribed&&(this.internal.events.subscribe(\"putCatalog\",(function(){var t,e=[];for(t in r)!0===r[t].explicitSet&&(\"name\"===r[t].type?e.push(\"/\"+t+\" /\"+r[t].value):e.push(\"/\"+t+\" \"+r[t].value));0!==e.length&&this.internal.write(\"/ViewerPreferences\\n<<\\n\"+e.join(\"\\n\")+\"\\n>>\")})),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=r,this},\n/** ====================================================================\n * @license\n * jsPDF XMP metadata plugin\n * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\nfunction(t){var e=function(){var t='<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"><rdf:Description rdf:about=\"\" xmlns:jspdf=\"'+this.internal.__metadata__.namespaceuri+'\"><jspdf:metadata>',e=unescape(encodeURIComponent('<x:xmpmeta xmlns:x=\"adobe:ns:meta/\">')),r=unescape(encodeURIComponent(t)),n=unescape(encodeURIComponent(this.internal.__metadata__.metadata)),i=unescape(encodeURIComponent(\"</jspdf:metadata></rdf:Description></rdf:RDF>\")),a=unescape(encodeURIComponent(\"</x:xmpmeta>\")),o=r.length+n.length+i.length+e.length+a.length;this.internal.__metadata__.metadata_object_number=this.internal.newObject(),this.internal.write(\"<< /Type /Metadata /Subtype /XML /Length \"+o+\" >>\"),this.internal.write(\"stream\"),this.internal.write(e+r+n+i+a),this.internal.write(\"endstream\"),this.internal.write(\"endobj\")},r=function(){this.internal.__metadata__.metadata_object_number&&this.internal.write(\"/Metadata \"+this.internal.__metadata__.metadata_object_number+\" 0 R\")};t.addMetadata=function(t,n){return void 0===this.internal.__metadata__&&(this.internal.__metadata__={metadata:t,namespaceuri:n||\"http://jspdf.default.namespaceuri/\"},this.internal.events.subscribe(\"putCatalog\",r),this.internal.events.subscribe(\"postPutResources\",e)),this}}(O.API),function(t){var e=t.API,r=e.pdfEscape16=function(t,e){for(var r,n=e.metadata.Unicode.widths,i=[\"\",\"0\",\"00\",\"000\",\"0000\"],a=[\"\"],o=0,s=t.length;o<s;++o){if(r=e.metadata.characterToGlyph(t.charCodeAt(o)),e.metadata.glyIdsUsed.push(r),e.metadata.toUnicode[r]=t.charCodeAt(o),-1==n.indexOf(r)&&(n.push(r),n.push([parseInt(e.metadata.widthOfGlyph(r),10)])),\"0\"==r)return a.join(\"\");r=r.toString(16),a.push(i[4-r.length],r)}return a.join(\"\")},n=function(t){var e,r,n,i,a,o,s;for(a=\"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n /Registry (Adobe)\\n /Ordering (UCS)\\n /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000><ffff>\\nendcodespacerange\",n=[],o=0,s=(r=Object.keys(t).sort((function(t,e){return t-e}))).length;o<s;o++)e=r[o],n.length>=100&&(a+=\"\\n\"+n.length+\" beginbfchar\\n\"+n.join(\"\\n\")+\"\\nendbfchar\",n=[]),void 0!==t[e]&&null!==t[e]&&\"function\"==typeof t[e].toString&&(i=(\"0000\"+t[e].toString(16)).slice(-4),e=(\"0000\"+(+e).toString(16)).slice(-4),n.push(\"<\"+e+\"><\"+i+\">\"));return n.length&&(a+=\"\\n\"+n.length+\" beginbfchar\\n\"+n.join(\"\\n\")+\"\\nendbfchar\\n\"),a+=\"endcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\"};e.events.push([\"putFont\",function(e){!function(e){var r=e.font,i=e.out,a=e.newObject,o=e.putStream,s=e.pdfEscapeWithNeededParanthesis;if(r.metadata instanceof t.API.TTFFont&&\"Identity-H\"===r.encoding){for(var u=r.metadata.Unicode.widths,c=r.metadata.subset.encode(r.metadata.glyIdsUsed,1),l=\"\",h=0;h<c.length;h++)l+=String.fromCharCode(c[h]);var f=a();o({data:l,addLength1:!0,objectId:f}),i(\"endobj\");var d=a();o({data:n(r.metadata.toUnicode),addLength1:!0,objectId:d}),i(\"endobj\");var p=a();i(\"<<\"),i(\"/Type /FontDescriptor\"),i(\"/FontName /\"+s(r.fontName)),i(\"/FontFile2 \"+f+\" 0 R\"),i(\"/FontBBox \"+t.API.PDFObject.convert(r.metadata.bbox)),i(\"/Flags \"+r.metadata.flags),i(\"/StemV \"+r.metadata.stemV),i(\"/ItalicAngle \"+r.metadata.italicAngle),i(\"/Ascent \"+r.metadata.ascender),i(\"/Descent \"+r.metadata.decender),i(\"/CapHeight \"+r.metadata.capHeight),i(\">>\"),i(\"endobj\");var g=a();i(\"<<\"),i(\"/Type /Font\"),i(\"/BaseFont /\"+s(r.fontName)),i(\"/FontDescriptor \"+p+\" 0 R\"),i(\"/W \"+t.API.PDFObject.convert(u)),i(\"/CIDToGIDMap /Identity\"),i(\"/DW 1000\"),i(\"/Subtype /CIDFontType2\"),i(\"/CIDSystemInfo\"),i(\"<<\"),i(\"/Supplement 0\"),i(\"/Registry (Adobe)\"),i(\"/Ordering (\"+r.encoding+\")\"),i(\">>\"),i(\">>\"),i(\"endobj\"),r.objectNumber=a(),i(\"<<\"),i(\"/Type /Font\"),i(\"/Subtype /Type0\"),i(\"/ToUnicode \"+d+\" 0 R\"),i(\"/BaseFont /\"+s(r.fontName)),i(\"/Encoding /\"+r.encoding),i(\"/DescendantFonts [\"+g+\" 0 R]\"),i(\">>\"),i(\"endobj\"),r.isAlreadyPutted=!0}}(e)}]);e.events.push([\"putFont\",function(e){!function(e){var r=e.font,i=e.out,a=e.newObject,o=e.putStream,s=e.pdfEscapeWithNeededParanthesis;if(r.metadata instanceof t.API.TTFFont&&\"WinAnsiEncoding\"===r.encoding){for(var u=r.metadata.rawData,c=\"\",l=0;l<u.length;l++)c+=String.fromCharCode(u[l]);var h=a();o({data:c,addLength1:!0,objectId:h}),i(\"endobj\");var f=a();o({data:n(r.metadata.toUnicode),addLength1:!0,objectId:f}),i(\"endobj\");var d=a();i(\"<<\"),i(\"/Descent \"+r.metadata.decender),i(\"/CapHeight \"+r.metadata.capHeight),i(\"/StemV \"+r.metadata.stemV),i(\"/Type /FontDescriptor\"),i(\"/FontFile2 \"+h+\" 0 R\"),i(\"/Flags 96\"),i(\"/FontBBox \"+t.API.PDFObject.convert(r.metadata.bbox)),i(\"/FontName /\"+s(r.fontName)),i(\"/ItalicAngle \"+r.metadata.italicAngle),i(\"/Ascent \"+r.metadata.ascender),i(\">>\"),i(\"endobj\"),r.objectNumber=a();for(var p=0;p<r.metadata.hmtx.widths.length;p++)r.metadata.hmtx.widths[p]=parseInt(r.metadata.hmtx.widths[p]*(1e3/r.metadata.head.unitsPerEm));i(\"<</Subtype/TrueType/Type/Font/ToUnicode \"+f+\" 0 R/BaseFont/\"+s(r.fontName)+\"/FontDescriptor \"+d+\" 0 R/Encoding/\"+r.encoding+\" /FirstChar 29 /LastChar 255 /Widths \"+t.API.PDFObject.convert(r.metadata.hmtx.widths)+\">>\"),i(\"endobj\"),r.isAlreadyPutted=!0}}(e)}]);var i=function(t){var e,n=t.text||\"\",i=t.x,a=t.y,o=t.options||{},s=t.mutex||{},u=s.pdfEscape,c=s.activeFontKey,l=s.fonts,h=c,f=\"\",d=0,p=\"\",g=l[h].encoding;if(\"Identity-H\"!==l[h].encoding)return{text:n,x:i,y:a,options:o,mutex:s};for(p=n,h=c,Array.isArray(n)&&(p=n[0]),d=0;d<p.length;d+=1)l[h].metadata.hasOwnProperty(\"cmap\")&&(e=l[h].metadata.cmap.unicode.codeMap[p[d].charCodeAt(0)]),e||p[d].charCodeAt(0)<256&&l[h].metadata.hasOwnProperty(\"Unicode\")?f+=p[d]:f+=\"\";var m=\"\";return parseInt(h.slice(1))<14||\"WinAnsiEncoding\"===g?m=u(f,h).split(\"\").map((function(t){return t.charCodeAt(0).toString(16)})).join(\"\"):\"Identity-H\"===g&&(m=r(f,l[h])),s.isHex=!0,{text:m,x:i,y:a,options:o,mutex:s}};e.events.push([\"postProcessText\",function(t){var e=t.text||\"\",r=[],n={text:e,x:t.x,y:t.y,options:t.options,mutex:t.mutex};if(Array.isArray(e)){var a=0;for(a=0;a<e.length;a+=1)Array.isArray(e[a])&&3===e[a].length?r.push([i(Object.assign({},n,{text:e[a][0]})).text,e[a][1],e[a][2]]):r.push(i(Object.assign({},n,{text:e[a]})).text);t.text=r}else t.text=i(Object.assign({},n,{text:e})).text}])}(O),\n/**\n * @license\n * jsPDF virtual FileSystem functionality\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e=function(){return void 0===this.internal.vFS&&(this.internal.vFS={}),!0};t.existsFileInVFS=function(t){return e.call(this),void 0!==this.internal.vFS[t]},t.addFileToVFS=function(t,r){return e.call(this),this.internal.vFS[t]=r,this},t.getFileFromVFS=function(t){return e.call(this),void 0!==this.internal.vFS[t]?this.internal.vFS[t]:null}}(O.API),\n/**\n * @license\n * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)\n * MIT License\n */\nfunction(t){t.__bidiEngine__=t.prototype.__bidiEngine__=function(t){var r,n,i,a,o,s,u,c=e,l=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],h=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],f={L:0,R:1,EN:2,AN:3,N:4,B:5,S:6},d={0:0,5:1,6:2,7:3,32:4,251:5,254:6,255:7},p=[\"(\",\")\",\"(\",\"<\",\">\",\"<\",\"[\",\"]\",\"[\",\"{\",\"}\",\"{\",\"«\",\"»\",\"«\",\"\",\"\",\"\",\"⁅\",\"⁆\",\"⁅\",\"⁽\",\"⁾\",\"⁽\",\"₍\",\"₎\",\"₍\",\"≤\",\"≥\",\"≤\",\"〈\",\"〉\",\"〈\",\"﹙\",\"﹚\",\"﹙\",\"﹛\",\"﹜\",\"﹛\",\"﹝\",\"﹞\",\"﹝\",\"﹤\",\"﹥\",\"﹤\"],g=new RegExp(/^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/),m=!1,v=0;this.__bidiEngine__={};var b=function(t){var e=t.charCodeAt(),r=e>>8,n=d[r];return void 0!==n?c[256*n+(255&e)]:252===r||253===r?\"AL\":g.test(r)?\"L\":8===r?\"R\":\"N\"},y=function(t){for(var e,r=0;r<t.length;r++){if(\"L\"===(e=b(t.charAt(r))))return!1;if(\"R\"===e)return!0}return!1},w=function(t,e,o,s){var u,c,l,h,f=e[s];switch(f){case\"L\":case\"R\":m=!1;break;case\"N\":case\"AN\":break;case\"EN\":m&&(f=\"AN\");break;case\"AL\":m=!0,f=\"R\";break;case\"WS\":f=\"N\";break;case\"CS\":s<1||s+1>=e.length||\"EN\"!==(u=o[s-1])&&\"AN\"!==u||\"EN\"!==(c=e[s+1])&&\"AN\"!==c?f=\"N\":m&&(c=\"AN\"),f=c===u?c:\"N\";break;case\"ES\":f=\"EN\"===(u=s>0?o[s-1]:\"B\")&&s+1<e.length&&\"EN\"===e[s+1]?\"EN\":\"N\";break;case\"ET\":if(s>0&&\"EN\"===o[s-1]){f=\"EN\";break}if(m){f=\"N\";break}for(l=s+1,h=e.length;l<h&&\"ET\"===e[l];)l++;f=l<h&&\"EN\"===e[l]?\"EN\":\"N\";break;case\"NSM\":if(i&&!a){for(h=e.length,l=s+1;l<h&&\"NSM\"===e[l];)l++;if(l<h){var d=t[s],p=d>=1425&&d<=2303||64286===d;if(u=e[l],p&&(\"R\"===u||\"AL\"===u)){f=\"R\";break}}}f=s<1||\"B\"===(u=e[s-1])?\"N\":o[s-1];break;case\"B\":m=!1,r=!0,f=v;break;case\"S\":n=!0,f=\"N\";break;case\"LRE\":case\"RLE\":case\"LRO\":case\"RLO\":case\"PDF\":m=!1;break;case\"BN\":f=\"N\"}return f},N=function(t,e,r){var n=t.split(\"\");return r&&L(n,r,{hiLevel:v}),n.reverse(),e&&e.reverse(),n.join(\"\")},L=function(t,e,i){var a,o,s,u,c,d=-1,p=t.length,g=0,y=[],N=v?h:l,L=[];for(m=!1,r=!1,n=!1,o=0;o<p;o++)L[o]=b(t[o]);for(s=0;s<p;s++){if(c=g,y[s]=w(t,L,y,s),a=240&(g=N[c][f[y[s]]]),g&=15,e[s]=u=N[g][5],a>0)if(16===a){for(o=d;o<s;o++)e[o]=1;d=-1}else d=-1;if(N[g][6])-1===d&&(d=s);else if(d>-1){for(o=d;o<s;o++)e[o]=u;d=-1}\"B\"===L[s]&&(e[s]=0),i.hiLevel|=u}n&&function(t,e,r){for(var n=0;n<r;n++)if(\"S\"===t[n]){e[n]=v;for(var i=n-1;i>=0&&\"WS\"===t[i];i--)e[i]=v}}(L,e,p)},A=function(t,e,n,i,a){if(!(a.hiLevel<t)){if(1===t&&1===v&&!r)return e.reverse(),void(n&&n.reverse());for(var o,s,u,c,l=e.length,h=0;h<l;){if(i[h]>=t){for(u=h+1;u<l&&i[u]>=t;)u++;for(c=h,s=u-1;c<s;c++,s--)o=e[c],e[c]=e[s],e[s]=o,n&&(o=n[c],n[c]=n[s],n[s]=o);h=u}h++}}},x=function(t,e,r){var n=t.split(\"\"),i={hiLevel:v};return r||(r=[]),L(n,r,i),function(t,e,r){if(0!==r.hiLevel&&u)for(var n,i=0;i<t.length;i++)1===e[i]&&(n=p.indexOf(t[i]))>=0&&(t[i]=p[n+1])}(n,r,i),A(2,n,e,r,i),A(1,n,e,r,i),n.join(\"\")};return this.__bidiEngine__.doBidiReorder=function(t,e,r){if(function(t,e){if(e)for(var r=0;r<t.length;r++)e[r]=r;void 0===a&&(a=y(t)),void 0===s&&(s=y(t))}(t,e),i||!o||s)if(i&&o&&a^s)v=a?1:0,t=N(t,e,r);else if(!i&&o&&s)v=a?1:0,t=x(t,e,r),t=N(t,e);else if(!i||a||o||s){if(i&&!o&&a^s)t=N(t,e),a?(v=0,t=x(t,e,r)):(v=1,t=x(t,e,r),t=N(t,e));else if(i&&a&&!o&&s)v=1,t=x(t,e,r),t=N(t,e);else if(!i&&!o&&a^s){var n=u;a?(v=1,t=x(t,e,r),v=0,u=!1,t=x(t,e,r),u=n):(v=0,t=x(t,e,r),t=N(t,e),v=1,u=!1,t=x(t,e,r),u=n,t=N(t,e))}}else v=0,t=x(t,e,r);else v=a?1:0,t=x(t,e,r);return t},this.__bidiEngine__.setOptions=function(t){t&&(i=t.isInputVisual,o=t.isOutputVisual,a=t.isInputRtl,s=t.isOutputRtl,u=t.isSymmetricSwapping)},this.__bidiEngine__.setOptions(t),this.__bidiEngine__};var e=[\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"S\",\"B\",\"S\",\"WS\",\"B\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"B\",\"B\",\"B\",\"S\",\"WS\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ES\",\"CS\",\"ES\",\"CS\",\"CS\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"B\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"CS\",\"N\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"L\",\"N\",\"N\",\"BN\",\"N\",\"N\",\"ET\",\"ET\",\"EN\",\"EN\",\"N\",\"L\",\"N\",\"N\",\"N\",\"EN\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"R\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"N\",\"N\",\"AL\",\"ET\",\"ET\",\"AL\",\"CS\",\"AL\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"ET\",\"AN\",\"AN\",\"AL\",\"AL\",\"AL\",\"NSM\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AN\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"NSM\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"BN\",\"BN\",\"BN\",\"L\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"B\",\"LRE\",\"RLE\",\"PDF\",\"LRO\",\"RLO\",\"CS\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"N\",\"LRI\",\"RLI\",\"FSI\",\"PDI\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"EN\",\"L\",\"N\",\"N\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"L\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"NSM\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"ES\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"R\",\"N\",\"R\",\"R\",\"N\",\"R\",\"R\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"CS\",\"N\",\"CS\",\"N\",\"N\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"N\",\"N\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"N\",\"BN\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ES\",\"CS\",\"ES\",\"CS\",\"CS\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\"],r=new t.__bidiEngine__({isInputVisual:!0});t.API.events.push([\"postProcessText\",function(t){var e=t.text,n=(t.x,t.y,t.options||{}),i=(t.mutex,n.lang,[]);if(n.isInputVisual=\"boolean\"!=typeof n.isInputVisual||n.isInputVisual,r.setOptions(n),\"[object Array]\"===Object.prototype.toString.call(e)){var a=0;for(i=[],a=0;a<e.length;a+=1)\"[object Array]\"===Object.prototype.toString.call(e[a])?i.push([r.doBidiReorder(e[a][0]),e[a][1],e[a][2]]):i.push([r.doBidiReorder(e[a])]);t.text=i}else t.text=r.doBidiReorder(e);r.setOptions({isInputVisual:!0})}])}(O),O.API.TTFFont=function(){function t(t){var e;if(this.rawData=t,e=this.contents=new te(t),this.contents.pos=4,\"ttcf\"===e.readString(4))throw new Error(\"TTCF not supported.\");e.pos=0,this.parse(),this.subset=new ye(this),this.registerTTF()}return t.open=function(e){return new t(e)},t.prototype.parse=function(){return this.directory=new ee(this.contents),this.head=new ie(this),this.name=new he(this),this.cmap=new oe(this),this.toUnicode={},this.hhea=new se(this),this.maxp=new fe(this),this.hmtx=new de(this),this.post=new ce(this),this.os2=new ue(this),this.loca=new be(this),this.glyf=new ge(this),this.ascender=this.os2.exists&&this.os2.ascender||this.hhea.ascender,this.decender=this.os2.exists&&this.os2.decender||this.hhea.decender,this.lineGap=this.os2.exists&&this.os2.lineGap||this.hhea.lineGap,this.bbox=[this.head.xMin,this.head.yMin,this.head.xMax,this.head.yMax]},t.prototype.registerTTF=function(){var t,e,r,n,i;if(this.scaleFactor=1e3/this.head.unitsPerEm,this.bbox=function(){var e,r,n,i;for(i=[],e=0,r=(n=this.bbox).length;e<r;e++)t=n[e],i.push(Math.round(t*this.scaleFactor));return i}.call(this),this.stemV=0,this.post.exists?(r=255&(n=this.post.italic_angle),0!=(32768&(e=n>>16))&&(e=-(1+(65535^e))),this.italicAngle=+(e+\".\"+r)):this.italicAngle=0,this.ascender=Math.round(this.ascender*this.scaleFactor),this.decender=Math.round(this.decender*this.scaleFactor),this.lineGap=Math.round(this.lineGap*this.scaleFactor),this.capHeight=this.os2.exists&&this.os2.capHeight||this.ascender,this.xHeight=this.os2.exists&&this.os2.xHeight||0,this.familyClass=(this.os2.exists&&this.os2.familyClass||0)>>8,this.isSerif=1===(i=this.familyClass)||2===i||3===i||4===i||5===i||7===i,this.isScript=10===this.familyClass,this.flags=0,this.post.isFixedPitch&&(this.flags|=1),this.isSerif&&(this.flags|=2),this.isScript&&(this.flags|=8),0!==this.italicAngle&&(this.flags|=64),this.flags|=32,!this.cmap.unicode)throw new Error(\"No unicode cmap for font\")},t.prototype.characterToGlyph=function(t){var e;return(null!=(e=this.cmap.unicode)?e.codeMap[t]:void 0)||0},t.prototype.widthOfGlyph=function(t){var e;return e=1e3/this.head.unitsPerEm,this.hmtx.forGlyph(t).advance*e},t.prototype.widthOfString=function(t,e,r){var n,i,a,o;for(a=0,i=0,o=(t=\"\"+t).length;0<=o?i<o:i>o;i=0<=o?++i:--i)n=t.charCodeAt(i),a+=this.widthOfGlyph(this.characterToGlyph(n))+r*(1e3/e)||0;return a*(e/1e3)},t.prototype.lineHeight=function(t,e){var r;return null==e&&(e=!1),r=e?this.lineGap:0,(this.ascender+r-this.decender)/1e3*t},t}();var Qt,te=function(){function t(t){this.data=null!=t?t:[],this.pos=0,this.length=this.data.length}return t.prototype.readByte=function(){return this.data[this.pos++]},t.prototype.writeByte=function(t){return this.data[this.pos++]=t},t.prototype.readUInt32=function(){return 16777216*this.readByte()+(this.readByte()<<16)+(this.readByte()<<8)+this.readByte()},t.prototype.writeUInt32=function(t){return this.writeByte(t>>>24&255),this.writeByte(t>>16&255),this.writeByte(t>>8&255),this.writeByte(255&t)},t.prototype.readInt32=function(){var t;return(t=this.readUInt32())>=2147483648?t-4294967296:t},t.prototype.writeInt32=function(t){return t<0&&(t+=4294967296),this.writeUInt32(t)},t.prototype.readUInt16=function(){return this.readByte()<<8|this.readByte()},t.prototype.writeUInt16=function(t){return this.writeByte(t>>8&255),this.writeByte(255&t)},t.prototype.readInt16=function(){var t;return(t=this.readUInt16())>=32768?t-65536:t},t.prototype.writeInt16=function(t){return t<0&&(t+=65536),this.writeUInt16(t)},t.prototype.readString=function(t){var e,r;for(r=[],e=0;0<=t?e<t:e>t;e=0<=t?++e:--e)r[e]=String.fromCharCode(this.readByte());return r.join(\"\")},t.prototype.writeString=function(t){var e,r,n;for(n=[],e=0,r=t.length;0<=r?e<r:e>r;e=0<=r?++e:--e)n.push(this.writeByte(t.charCodeAt(e)));return n},t.prototype.readShort=function(){return this.readInt16()},t.prototype.writeShort=function(t){return this.writeInt16(t)},t.prototype.readLongLong=function(){var t,e,r,n,i,a,o,s;return t=this.readByte(),e=this.readByte(),r=this.readByte(),n=this.readByte(),i=this.readByte(),a=this.readByte(),o=this.readByte(),s=this.readByte(),128&t?-1*(72057594037927940*(255^t)+281474976710656*(255^e)+1099511627776*(255^r)+4294967296*(255^n)+16777216*(255^i)+65536*(255^a)+256*(255^o)+(255^s)+1):72057594037927940*t+281474976710656*e+1099511627776*r+4294967296*n+16777216*i+65536*a+256*o+s},t.prototype.writeLongLong=function(t){var e,r;return e=Math.floor(t/4294967296),r=4294967295&t,this.writeByte(e>>24&255),this.writeByte(e>>16&255),this.writeByte(e>>8&255),this.writeByte(255&e),this.writeByte(r>>24&255),this.writeByte(r>>16&255),this.writeByte(r>>8&255),this.writeByte(255&r)},t.prototype.readInt=function(){return this.readInt32()},t.prototype.writeInt=function(t){return this.writeInt32(t)},t.prototype.read=function(t){var e,r;for(e=[],r=0;0<=t?r<t:r>t;r=0<=t?++r:--r)e.push(this.readByte());return e},t.prototype.write=function(t){var e,r,n,i;for(i=[],r=0,n=t.length;r<n;r++)e=t[r],i.push(this.writeByte(e));return i},t}(),ee=function(){var t;function e(t){var e,r,n;for(this.scalarType=t.readInt(),this.tableCount=t.readShort(),this.searchRange=t.readShort(),this.entrySelector=t.readShort(),this.rangeShift=t.readShort(),this.tables={},r=0,n=this.tableCount;0<=n?r<n:r>n;r=0<=n?++r:--r)e={tag:t.readString(4),checksum:t.readInt(),offset:t.readInt(),length:t.readInt()},this.tables[e.tag]=e}return e.prototype.encode=function(e){var r,n,i,a,o,s,u,c,l,h,f,d,p;for(p in f=Object.keys(e).length,s=Math.log(2),l=16*Math.floor(Math.log(f)/s),a=Math.floor(l/s),c=16*f-l,(n=new te).writeInt(this.scalarType),n.writeShort(f),n.writeShort(l),n.writeShort(a),n.writeShort(c),i=16*f,u=n.pos+i,o=null,d=[],e)for(h=e[p],n.writeString(p),n.writeInt(t(h)),n.writeInt(u),n.writeInt(h.length),d=d.concat(h),\"head\"===p&&(o=u),u+=h.length;u%4;)d.push(0),u++;return n.write(d),r=2981146554-t(n.data),n.pos=o+8,n.writeUInt32(r),n.data},t=function(t){var e,r,n,i;for(t=pe.call(t);t.length%4;)t.push(0);for(n=new te(t),r=0,e=0,i=t.length;e<i;e=e+=4)r+=n.readUInt32();return 4294967295&r},e}(),re={}.hasOwnProperty,ne=function(t,e){for(var r in e)re.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t};Qt=function(){function t(t){var e;this.file=t,e=this.file.directory.tables[this.tag],this.exists=!!e,e&&(this.offset=e.offset,this.length=e.length,this.parse(this.file.contents))}return t.prototype.parse=function(){},t.prototype.encode=function(){},t.prototype.raw=function(){return this.exists?(this.file.contents.pos=this.offset,this.file.contents.read(this.length)):null},t}();var ie=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return ne(e,Qt),e.prototype.tag=\"head\",e.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.revision=t.readInt(),this.checkSumAdjustment=t.readInt(),this.magicNumber=t.readInt(),this.flags=t.readShort(),this.unitsPerEm=t.readShort(),this.created=t.readLongLong(),this.modified=t.readLongLong(),this.xMin=t.readShort(),this.yMin=t.readShort(),this.xMax=t.readShort(),this.yMax=t.readShort(),this.macStyle=t.readShort(),this.lowestRecPPEM=t.readShort(),this.fontDirectionHint=t.readShort(),this.indexToLocFormat=t.readShort(),this.glyphDataFormat=t.readShort()},e.prototype.encode=function(t){var e;return(e=new te).writeInt(this.version),e.writeInt(this.revision),e.writeInt(this.checkSumAdjustment),e.writeInt(this.magicNumber),e.writeShort(this.flags),e.writeShort(this.unitsPerEm),e.writeLongLong(this.created),e.writeLongLong(this.modified),e.writeShort(this.xMin),e.writeShort(this.yMin),e.writeShort(this.xMax),e.writeShort(this.yMax),e.writeShort(this.macStyle),e.writeShort(this.lowestRecPPEM),e.writeShort(this.fontDirectionHint),e.writeShort(t),e.writeShort(this.glyphDataFormat),e.data},e}(),ae=function(){function t(t,e){var r,n,i,a,o,s,u,c,l,h,f,d,p,g,m,v,b;switch(this.platformID=t.readUInt16(),this.encodingID=t.readShort(),this.offset=e+t.readInt(),l=t.pos,t.pos=this.offset,this.format=t.readUInt16(),this.length=t.readUInt16(),this.language=t.readUInt16(),this.isUnicode=3===this.platformID&&1===this.encodingID&&4===this.format||0===this.platformID&&4===this.format,this.codeMap={},this.format){case 0:for(s=0;s<256;++s)this.codeMap[s]=t.readByte();break;case 4:for(f=t.readUInt16(),h=f/2,t.pos+=6,i=function(){var e,r;for(r=[],s=e=0;0<=h?e<h:e>h;s=0<=h?++e:--e)r.push(t.readUInt16());return r}(),t.pos+=2,p=function(){var e,r;for(r=[],s=e=0;0<=h?e<h:e>h;s=0<=h?++e:--e)r.push(t.readUInt16());return r}(),u=function(){var e,r;for(r=[],s=e=0;0<=h?e<h:e>h;s=0<=h?++e:--e)r.push(t.readUInt16());return r}(),c=function(){var e,r;for(r=[],s=e=0;0<=h?e<h:e>h;s=0<=h?++e:--e)r.push(t.readUInt16());return r}(),n=(this.length-t.pos+this.offset)/2,o=function(){var e,r;for(r=[],s=e=0;0<=n?e<n:e>n;s=0<=n?++e:--e)r.push(t.readUInt16());return r}(),s=m=0,b=i.length;m<b;s=++m)for(g=i[s],r=v=d=p[s];d<=g?v<=g:v>=g;r=d<=g?++v:--v)0===c[s]?a=r+u[s]:0!==(a=o[c[s]/2+(r-d)-(h-s)]||0)&&(a+=u[s]),this.codeMap[r]=65535&a}t.pos=l}return t.encode=function(t,e){var r,n,i,a,o,s,u,c,l,h,f,d,p,g,m,v,b,y,w,N,L,A,x,S,_,P,k,I,F,C,j,O,B,M,E,q,R,D,T,U,z,H,V,W,G,Y;switch(I=new te,a=Object.keys(t).sort((function(t,e){return t-e})),e){case\"macroman\":for(p=0,g=function(){var t=[];for(d=0;d<256;++d)t.push(0);return t}(),v={0:0},i={},F=0,B=a.length;F<B;F++)null==v[V=t[n=a[F]]]&&(v[V]=++p),i[n]={old:t[n],new:v[t[n]]},g[n]=v[t[n]];return I.writeUInt16(1),I.writeUInt16(0),I.writeUInt32(12),I.writeUInt16(0),I.writeUInt16(262),I.writeUInt16(0),I.write(g),{charMap:i,subtable:I.data,maxGlyphID:p+1};case\"unicode\":for(P=[],l=[],b=0,v={},r={},m=u=null,C=0,M=a.length;C<M;C++)null==v[w=t[n=a[C]]]&&(v[w]=++b),r[n]={old:w,new:v[w]},o=v[w]-n,null!=m&&o===u||(m&&l.push(m),P.push(n),u=o),m=n;for(m&&l.push(m),l.push(65535),P.push(65535),S=2*(x=P.length),A=2*Math.pow(Math.log(x)/Math.LN2,2),h=Math.log(A/2)/Math.LN2,L=2*x-A,s=[],N=[],f=[],d=j=0,E=P.length;j<E;d=++j){if(_=P[d],c=l[d],65535===_){s.push(0),N.push(0);break}if(_-(k=r[_].new)>=32768)for(s.push(0),N.push(2*(f.length+x-d)),n=O=_;_<=c?O<=c:O>=c;n=_<=c?++O:--O)f.push(r[n].new);else s.push(k-_),N.push(0)}for(I.writeUInt16(3),I.writeUInt16(1),I.writeUInt32(12),I.writeUInt16(4),I.writeUInt16(16+8*x+2*f.length),I.writeUInt16(0),I.writeUInt16(S),I.writeUInt16(A),I.writeUInt16(h),I.writeUInt16(L),z=0,q=l.length;z<q;z++)n=l[z],I.writeUInt16(n);for(I.writeUInt16(0),H=0,R=P.length;H<R;H++)n=P[H],I.writeUInt16(n);for(W=0,D=s.length;W<D;W++)o=s[W],I.writeUInt16(o);for(G=0,T=N.length;G<T;G++)y=N[G],I.writeUInt16(y);for(Y=0,U=f.length;Y<U;Y++)p=f[Y],I.writeUInt16(p);return{charMap:r,subtable:I.data,maxGlyphID:b+1}}},t}(),oe=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return ne(e,Qt),e.prototype.tag=\"cmap\",e.prototype.parse=function(t){var e,r,n;for(t.pos=this.offset,this.version=t.readUInt16(),n=t.readUInt16(),this.tables=[],this.unicode=null,r=0;0<=n?r<n:r>n;r=0<=n?++r:--r)e=new ae(t,this.offset),this.tables.push(e),e.isUnicode&&null==this.unicode&&(this.unicode=e);return!0},e.encode=function(t,e){var r,n;return null==e&&(e=\"macroman\"),r=ae.encode(t,e),(n=new te).writeUInt16(0),n.writeUInt16(1),r.table=n.data.concat(r.subtable),r},e}(),se=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return ne(e,Qt),e.prototype.tag=\"hhea\",e.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.ascender=t.readShort(),this.decender=t.readShort(),this.lineGap=t.readShort(),this.advanceWidthMax=t.readShort(),this.minLeftSideBearing=t.readShort(),this.minRightSideBearing=t.readShort(),this.xMaxExtent=t.readShort(),this.caretSlopeRise=t.readShort(),this.caretSlopeRun=t.readShort(),this.caretOffset=t.readShort(),t.pos+=8,this.metricDataFormat=t.readShort(),this.numberOfMetrics=t.readUInt16()},e}(),ue=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return ne(e,Qt),e.prototype.tag=\"OS/2\",e.prototype.parse=function(t){if(t.pos=this.offset,this.version=t.readUInt16(),this.averageCharWidth=t.readShort(),this.weightClass=t.readUInt16(),this.widthClass=t.readUInt16(),this.type=t.readShort(),this.ySubscriptXSize=t.readShort(),this.ySubscriptYSize=t.readShort(),this.ySubscriptXOffset=t.readShort(),this.ySubscriptYOffset=t.readShort(),this.ySuperscriptXSize=t.readShort(),this.ySuperscriptYSize=t.readShort(),this.ySuperscriptXOffset=t.readShort(),this.ySuperscriptYOffset=t.readShort(),this.yStrikeoutSize=t.readShort(),this.yStrikeoutPosition=t.readShort(),this.familyClass=t.readShort(),this.panose=function(){var e,r;for(r=[],e=0;e<10;++e)r.push(t.readByte());return r}(),this.charRange=function(){var e,r;for(r=[],e=0;e<4;++e)r.push(t.readInt());return r}(),this.vendorID=t.readString(4),this.selection=t.readShort(),this.firstCharIndex=t.readShort(),this.lastCharIndex=t.readShort(),this.version>0&&(this.ascent=t.readShort(),this.descent=t.readShort(),this.lineGap=t.readShort(),this.winAscent=t.readShort(),this.winDescent=t.readShort(),this.codePageRange=function(){var e,r;for(r=[],e=0;e<2;e=++e)r.push(t.readInt());return r}(),this.version>1))return this.xHeight=t.readShort(),this.capHeight=t.readShort(),this.defaultChar=t.readShort(),this.breakChar=t.readShort(),this.maxContext=t.readShort()},e}(),ce=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return ne(e,Qt),e.prototype.tag=\"post\",e.prototype.parse=function(t){var e,r,n;switch(t.pos=this.offset,this.format=t.readInt(),this.italicAngle=t.readInt(),this.underlinePosition=t.readShort(),this.underlineThickness=t.readShort(),this.isFixedPitch=t.readInt(),this.minMemType42=t.readInt(),this.maxMemType42=t.readInt(),this.minMemType1=t.readInt(),this.maxMemType1=t.readInt(),this.format){case 65536:break;case 131072:var i;for(r=t.readUInt16(),this.glyphNameIndex=[],i=0;0<=r?i<r:i>r;i=0<=r?++i:--i)this.glyphNameIndex.push(t.readUInt16());for(this.names=[],n=[];t.pos<this.offset+this.length;)e=t.readByte(),n.push(this.names.push(t.readString(e)));return n;case 151552:return r=t.readUInt16(),this.offsets=t.read(r);case 196608:break;case 262144:return this.map=function(){var e,r,n;for(n=[],i=e=0,r=this.file.maxp.numGlyphs;0<=r?e<r:e>r;i=0<=r?++e:--e)n.push(t.readUInt32());return n}.call(this)}},e}(),le=function(t,e){this.raw=t,this.length=t.length,this.platformID=e.platformID,this.encodingID=e.encodingID,this.languageID=e.languageID},he=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return ne(e,Qt),e.prototype.tag=\"name\",e.prototype.parse=function(t){var e,r,n,i,a,o,s,u,c,l,h;for(t.pos=this.offset,t.readShort(),e=t.readShort(),o=t.readShort(),r=[],i=0;0<=e?i<e:i>e;i=0<=e?++i:--i)r.push({platformID:t.readShort(),encodingID:t.readShort(),languageID:t.readShort(),nameID:t.readShort(),length:t.readShort(),offset:this.offset+o+t.readShort()});for(s={},i=c=0,l=r.length;c<l;i=++c)n=r[i],t.pos=n.offset,u=t.readString(n.length),a=new le(u,n),null==s[h=n.nameID]&&(s[h]=[]),s[n.nameID].push(a);this.strings=s,this.copyright=s[0],this.fontFamily=s[1],this.fontSubfamily=s[2],this.uniqueSubfamily=s[3],this.fontName=s[4],this.version=s[5];try{this.postscriptName=s[6][0].raw.replace(/[\\x00-\\x19\\x80-\\xff]/g,\"\")}catch(t){this.postscriptName=s[4][0].raw.replace(/[\\x00-\\x19\\x80-\\xff]/g,\"\")}return this.trademark=s[7],this.manufacturer=s[8],this.designer=s[9],this.description=s[10],this.vendorUrl=s[11],this.designerUrl=s[12],this.license=s[13],this.licenseUrl=s[14],this.preferredFamily=s[15],this.preferredSubfamily=s[17],this.compatibleFull=s[18],this.sampleText=s[19]},e}(),fe=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return ne(e,Qt),e.prototype.tag=\"maxp\",e.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.numGlyphs=t.readUInt16(),this.maxPoints=t.readUInt16(),this.maxContours=t.readUInt16(),this.maxCompositePoints=t.readUInt16(),this.maxComponentContours=t.readUInt16(),this.maxZones=t.readUInt16(),this.maxTwilightPoints=t.readUInt16(),this.maxStorage=t.readUInt16(),this.maxFunctionDefs=t.readUInt16(),this.maxInstructionDefs=t.readUInt16(),this.maxStackElements=t.readUInt16(),this.maxSizeOfInstructions=t.readUInt16(),this.maxComponentElements=t.readUInt16(),this.maxComponentDepth=t.readUInt16()},e}(),de=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return ne(e,Qt),e.prototype.tag=\"hmtx\",e.prototype.parse=function(t){var e,r,n,i,a,o,s;for(t.pos=this.offset,this.metrics=[],e=0,o=this.file.hhea.numberOfMetrics;0<=o?e<o:e>o;e=0<=o?++e:--e)this.metrics.push({advance:t.readUInt16(),lsb:t.readInt16()});for(n=this.file.maxp.numGlyphs-this.file.hhea.numberOfMetrics,this.leftSideBearings=function(){var r,i;for(i=[],e=r=0;0<=n?r<n:r>n;e=0<=n?++r:--r)i.push(t.readInt16());return i}(),this.widths=function(){var t,e,r,n;for(n=[],t=0,e=(r=this.metrics).length;t<e;t++)i=r[t],n.push(i.advance);return n}.call(this),r=this.widths[this.widths.length-1],s=[],e=a=0;0<=n?a<n:a>n;e=0<=n?++a:--a)s.push(this.widths.push(r));return s},e.prototype.forGlyph=function(t){return t in this.metrics?this.metrics[t]:{advance:this.metrics[this.metrics.length-1].advance,lsb:this.leftSideBearings[t-this.metrics.length]}},e}(),pe=[].slice,ge=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return ne(e,Qt),e.prototype.tag=\"glyf\",e.prototype.parse=function(){return this.cache={}},e.prototype.glyphFor=function(t){var e,r,n,i,a,o,s,u,c,l;return t in this.cache?this.cache[t]:(i=this.file.loca,e=this.file.contents,r=i.indexOf(t),0===(n=i.lengthOf(t))?this.cache[t]=null:(e.pos=this.offset+r,a=(o=new te(e.read(n))).readShort(),u=o.readShort(),l=o.readShort(),s=o.readShort(),c=o.readShort(),this.cache[t]=-1===a?new ve(o,u,l,s,c):new me(o,a,u,l,s,c),this.cache[t]))},e.prototype.encode=function(t,e,r){var n,i,a,o,s;for(a=[],i=[],o=0,s=e.length;o<s;o++)n=t[e[o]],i.push(a.length),n&&(a=a.concat(n.encode(r)));return i.push(a.length),{table:a,offsets:i}},e}(),me=function(){function t(t,e,r,n,i,a){this.raw=t,this.numberOfContours=e,this.xMin=r,this.yMin=n,this.xMax=i,this.yMax=a,this.compound=!1}return t.prototype.encode=function(){return this.raw.data},t}(),ve=function(){function t(t,e,r,n,i){var a,o;for(this.raw=t,this.xMin=e,this.yMin=r,this.xMax=n,this.yMax=i,this.compound=!0,this.glyphIDs=[],this.glyphOffsets=[],a=this.raw;o=a.readShort(),this.glyphOffsets.push(a.pos),this.glyphIDs.push(a.readUInt16()),32&o;)a.pos+=1&o?4:2,128&o?a.pos+=8:64&o?a.pos+=4:8&o&&(a.pos+=2)}return 1,8,32,64,128,t.prototype.encode=function(){var t,e,r;for(e=new te(pe.call(this.raw.data)),t=0,r=this.glyphIDs.length;t<r;++t)e.pos=this.glyphOffsets[t];return e.data},t}(),be=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return ne(e,Qt),e.prototype.tag=\"loca\",e.prototype.parse=function(t){var e,r;return t.pos=this.offset,e=this.file.head.indexToLocFormat,this.offsets=0===e?function(){var e,n;for(n=[],r=0,e=this.length;r<e;r+=2)n.push(2*t.readUInt16());return n}.call(this):function(){var e,n;for(n=[],r=0,e=this.length;r<e;r+=4)n.push(t.readUInt32());return n}.call(this)},e.prototype.indexOf=function(t){return this.offsets[t]},e.prototype.lengthOf=function(t){return this.offsets[t+1]-this.offsets[t]},e.prototype.encode=function(t,e){for(var r=new Uint32Array(this.offsets.length),n=0,i=0,a=0;a<r.length;++a)if(r[a]=n,i<e.length&&e[i]==a){++i,r[a]=n;var o=this.offsets[a],s=this.offsets[a+1]-o;s>0&&(n+=s)}for(var u=new Array(4*r.length),c=0;c<r.length;++c)u[4*c+3]=255&r[c],u[4*c+2]=(65280&r[c])>>8,u[4*c+1]=(16711680&r[c])>>16,u[4*c]=(4278190080&r[c])>>24;return u},e}(),ye=function(){function t(t){this.font=t,this.subset={},this.unicodes={},this.next=33}return t.prototype.generateCmap=function(){var t,e,r,n,i;for(e in n=this.font.cmap.tables[0].codeMap,t={},i=this.subset)r=i[e],t[e]=n[r];return t},t.prototype.glyphsFor=function(t){var e,r,n,i,a,o,s;for(n={},a=0,o=t.length;a<o;a++)n[i=t[a]]=this.font.glyf.glyphFor(i);for(i in e=[],n)(null!=(r=n[i])?r.compound:void 0)&&e.push.apply(e,r.glyphIDs);if(e.length>0)for(i in s=this.glyphsFor(e))r=s[i],n[i]=r;return n},t.prototype.encode=function(t,e){var r,n,i,a,o,s,u,c,l,h,f,d,p,g,m;for(n in r=oe.encode(this.generateCmap(),\"unicode\"),a=this.glyphsFor(t),f={0:0},m=r.charMap)f[(s=m[n]).old]=s.new;for(d in h=r.maxGlyphID,a)d in f||(f[d]=h++);return c=function(t){var e,r;for(e in r={},t)r[t[e]]=e;return r}(f),l=Object.keys(c).sort((function(t,e){return t-e})),p=function(){var t,e,r;for(r=[],t=0,e=l.length;t<e;t++)o=l[t],r.push(c[o]);return r}(),i=this.font.glyf.encode(a,p,f),u=this.font.loca.encode(i.offsets,p),g={cmap:this.font.cmap.raw(),glyf:i.table,loca:u,hmtx:this.font.hmtx.raw(),hhea:this.font.hhea.raw(),maxp:this.font.maxp.raw(),post:this.font.post.raw(),name:this.font.name.raw(),head:this.font.head.encode(e)},this.font.os2.exists&&(g[\"OS/2\"]=this.font.os2.raw()),this.font.directory.encode(g)},t}();O.API.PDFObject=function(){var t;function e(){}return t=function(t,e){return(Array(e+1).join(\"0\")+t).slice(-e)},e.convert=function(r){var n,i,a,o;if(Array.isArray(r))return\"[\"+function(){var t,i,a;for(a=[],t=0,i=r.length;t<i;t++)n=r[t],a.push(e.convert(n));return a}().join(\" \")+\"]\";if(\"string\"==typeof r)return\"/\"+r;if(null!=r?r.isString:void 0)return\"(\"+r+\")\";if(r instanceof Date)return\"(D:\"+t(r.getUTCFullYear(),4)+t(r.getUTCMonth(),2)+t(r.getUTCDate(),2)+t(r.getUTCHours(),2)+t(r.getUTCMinutes(),2)+t(r.getUTCSeconds(),2)+\"Z)\";if(\"[object Object]\"==={}.toString.call(r)){for(i in a=[\"<<\"],r)o=r[i],a.push(\"/\"+i+\" \"+e.convert(o));return a.push(\">>\"),a.join(\"\\n\")}return\"\"+r},e}();export default O;export{Lt as AcroForm,wt as AcroFormAppearance,dt as AcroFormButton,vt as AcroFormCheckBox,ct as AcroFormChoiceField,ht as AcroFormComboBox,ft as AcroFormEditBox,lt as AcroFormListBox,yt as AcroFormPasswordField,pt as AcroFormPushButton,gt as AcroFormRadioButton,bt as AcroFormTextField,I as GState,C as ShadingPattern,j as TilingPattern,O as jsPDF};\n//# sourceMappingURL=jspdf.es.min.js.map\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.anchor` method\n// https://tc39.es/ecma262/#sec-string.prototype.anchor\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('anchor') }, {\n anchor: function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n }\n});\n","/*! https://mths.be/cssesc v3.0.0 by @mathias */\n'use strict';\n\nvar object = {};\nvar hasOwnProperty = object.hasOwnProperty;\nvar merge = function merge(options, defaults) {\n\tif (!options) {\n\t\treturn defaults;\n\t}\n\tvar result = {};\n\tfor (var key in defaults) {\n\t\t// `if (defaults.hasOwnProperty(key) { … }` is not needed here, since\n\t\t// only recognized option names are used.\n\t\tresult[key] = hasOwnProperty.call(options, key) ? options[key] : defaults[key];\n\t}\n\treturn result;\n};\n\nvar regexAnySingleEscape = /[ -,\\.\\/:-@\\[-\\^`\\{-~]/;\nvar regexSingleEscape = /[ -,\\.\\/:-@\\[\\]\\^`\\{-~]/;\nvar regexAlwaysEscape = /['\"\\\\]/;\nvar regexExcessiveSpaces = /(^|\\\\+)?(\\\\[A-F0-9]{1,6})\\x20(?![a-fA-F0-9\\x20])/g;\n\n// https://mathiasbynens.be/notes/css-escapes#css\nvar cssesc = function cssesc(string, options) {\n\toptions = merge(options, cssesc.options);\n\tif (options.quotes != 'single' && options.quotes != 'double') {\n\t\toptions.quotes = 'single';\n\t}\n\tvar quote = options.quotes == 'double' ? '\"' : '\\'';\n\tvar isIdentifier = options.isIdentifier;\n\n\tvar firstChar = string.charAt(0);\n\tvar output = '';\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar character = string.charAt(counter++);\n\t\tvar codePoint = character.charCodeAt();\n\t\tvar value = void 0;\n\t\t// If its not a printable ASCII character…\n\t\tif (codePoint < 0x20 || codePoint > 0x7E) {\n\t\t\tif (codePoint >= 0xD800 && codePoint <= 0xDBFF && counter < length) {\n\t\t\t\t// Its a high surrogate, and there is a next character.\n\t\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t\t// next character is low surrogate\n\t\t\t\t\tcodePoint = ((codePoint & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000;\n\t\t\t\t} else {\n\t\t\t\t\t// Its an unmatched surrogate; only append this code unit, in case\n\t\t\t\t\t// the next code unit is the high surrogate of a surrogate pair.\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t} else {\n\t\t\tif (options.escapeEverything) {\n\t\t\t\tif (regexAnySingleEscape.test(character)) {\n\t\t\t\t\tvalue = '\\\\' + character;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t\t}\n\t\t\t} else if (/[\\t\\n\\f\\r\\x0B]/.test(character)) {\n\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t} else if (character == '\\\\' || !isIdentifier && (character == '\"' && quote == character || character == '\\'' && quote == character) || isIdentifier && regexSingleEscape.test(character)) {\n\t\t\t\tvalue = '\\\\' + character;\n\t\t\t} else {\n\t\t\t\tvalue = character;\n\t\t\t}\n\t\t}\n\t\toutput += value;\n\t}\n\n\tif (isIdentifier) {\n\t\tif (/^-[-\\d]/.test(output)) {\n\t\t\toutput = '\\\\-' + output.slice(1);\n\t\t} else if (/\\d/.test(firstChar)) {\n\t\t\toutput = '\\\\3' + firstChar + ' ' + output.slice(1);\n\t\t}\n\t}\n\n\t// Remove spaces after `\\HEX` escapes that are not followed by a hex digit,\n\t// since theyre redundant. Note that this is only possible if the escape\n\t// sequence isnt preceded by an odd number of backslashes.\n\toutput = output.replace(regexExcessiveSpaces, function ($0, $1, $2) {\n\t\tif ($1 && $1.length % 2) {\n\t\t\t// Its not safe to remove the space, so dont.\n\t\t\treturn $0;\n\t\t}\n\t\t// Strip the space.\n\t\treturn ($1 || '') + $2;\n\t});\n\n\tif (!isIdentifier && options.wrap) {\n\t\treturn quote + output + quote;\n\t}\n\treturn output;\n};\n\n// Expose default options (so they can be overridden globally).\ncssesc.options = {\n\t'escapeEverything': false,\n\t'isIdentifier': false,\n\t'quotes': 'single',\n\t'wrap': false\n};\n\ncssesc.version = '3.0.0';\n\nmodule.exports = cssesc;\n","// parse\n// =====\n\n// states\n// ------\n\nvar PLAIN = 0;\nvar STRINGS = 1;\nvar ESCAPING = 2;\nvar IDENTIFIER = 3;\nvar SEPARATING = 4;\nvar SPACEAFTERIDENTIFIER = 5;\nvar ESCAPINGIDENTIFIER = 6;\n\n// patterns\n// --------\n\nvar identifierPattern = /[a-z0-9_-]/i;\nvar spacePattern = /[\\s\\t]/;\n\n// ---\n\nvar parse = function(str) {\n\n // vars\n // ----\n\n var starting = true;\n var state = PLAIN;\n var buffer = '';\n var i = 0;\n var quote;\n var c;\n\n // result\n // ------\n\n var names = [];\n\n // parse\n // -----\n\n while (true) {\n\n c = str[i];\n\n if (state === PLAIN) {\n\n if (!c && starting) {\n\n break;\n\n } else if (!c && !starting) {\n\n throw new Error('Parse error');\n\n } else if (c === '\"' || c === \"'\") {\n\n quote = c;\n state = STRINGS;\n starting = false;\n\n } else if (spacePattern.test(c)) {\n } else if (identifierPattern.test(c)) {\n\n state = IDENTIFIER;\n starting = false;\n i--;\n\n } else {\n\n throw new Error('Parse error');\n\n }\n\n } else if (state === STRINGS) {\n\n if (!c) {\n\n throw new Error('Parse Error');\n\n } else if (c === \"\\\\\") {\n\n state = ESCAPING;\n\n } else if (c === quote) {\n\n names.push(buffer);\n buffer = '';\n state = SEPARATING;\n\n } else {\n\n buffer += c;\n\n }\n\n } else if (state === ESCAPING) {\n\n if (c === quote || c === \"\\\\\") {\n\n buffer += c;\n state = STRINGS;\n\n } else {\n\n throw new Error('Parse error');\n\n }\n\n } else if (state === IDENTIFIER) {\n\n if (!c) {\n\n names.push(buffer);\n break;\n\n } else if (identifierPattern.test(c)) {\n\n buffer += c;\n\n } else if (c === ',') {\n\n names.push(buffer);\n buffer = '';\n state = PLAIN;\n\n } else if (spacePattern.test(c)) {\n\n state = SPACEAFTERIDENTIFIER;\n } else if (c === \"\\\\\") {\n\n state = ESCAPINGIDENTIFIER;\n } else {\n\n }\n } else if (state === ESCAPINGIDENTIFIER) {\n\n if (/[0-9a-f]/i.test(c)) {\n // TODO: Support escaped unicode characters (backslash followed by hex digits)\n // https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident\n\n throw new Error('Parse error');\n } else {\n buffer += c;\n state = IDENTIFIER;\n }\n } else if (state === SPACEAFTERIDENTIFIER) {\n\n if (!c) {\n\n names.push(buffer);\n break;\n\n } else if (identifierPattern.test(c)) {\n\n buffer += ' ' + c;\n state = IDENTIFIER;\n\n } else if (c === ',') {\n\n names.push(buffer);\n buffer = '';\n state = PLAIN;\n\n } else if (spacePattern.test(c)) {\n } else {\n\n throw new Error('Parse error');\n\n }\n\n } else if (state === SEPARATING) {\n\n if (!c) {\n\n break;\n\n } else if (c === ',') {\n\n state = PLAIN;\n\n } else if (spacePattern.test(c)) {\n } else {\n\n throw new Error('Parse error');\n\n }\n\n }\n\n i++;\n\n }\n\n // result\n // ------\n\n return names;\n\n};\n\n// stringify\n// =========\n\n// pattern\n// -------\n\nvar stringsPattern = /[^a-z0-9_-]/i;\n\n// ---\n\nvar stringify = function(names, options) {\n\n // quote\n // -----\n\n var quote = options && options.quote || '\"';\n if (quote !== '\"' && quote !== \"'\") {\n throw new Error('Quote must be `\\'` or `\"`');\n }\n var quotePattern = new RegExp(quote, 'g');\n\n // stringify\n // ---------\n\n var safeNames = [];\n\n for (var i = 0; i < names.length; ++i) {\n var name = names[i];\n\n if (stringsPattern.test(name)) {\n name = name\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(quotePattern, \"\\\\\" + quote);\n name = quote + name + quote;\n }\n safeNames.push(name);\n }\n\n // result\n // ------\n\n return safeNames.join(', ');\n};\n\n// export\n// ======\n\nmodule.exports = {\n parse: parse,\n stringify: stringify,\n};\n","'use strict';\n\n\nvar paramCounts = { a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0 };\n\nvar SPECIAL_SPACES = [\n 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006,\n 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF\n];\n\nfunction isSpace(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029) || // Line terminators\n // White spaces\n (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && SPECIAL_SPACES.indexOf(ch) >= 0);\n}\n\nfunction isCommand(code) {\n /*eslint-disable no-bitwise*/\n switch (code | 0x20) {\n case 0x6D/* m */:\n case 0x7A/* z */:\n case 0x6C/* l */:\n case 0x68/* h */:\n case 0x76/* v */:\n case 0x63/* c */:\n case 0x73/* s */:\n case 0x71/* q */:\n case 0x74/* t */:\n case 0x61/* a */:\n case 0x72/* r */:\n return true;\n }\n return false;\n}\n\nfunction isArc(code) {\n return (code | 0x20) === 0x61;\n}\n\nfunction isDigit(code) {\n return (code >= 48 && code <= 57); // 0..9\n}\n\nfunction isDigitStart(code) {\n return (code >= 48 && code <= 57) || /* 0..9 */\n code === 0x2B || /* + */\n code === 0x2D || /* - */\n code === 0x2E; /* . */\n}\n\n\nfunction State(path) {\n this.index = 0;\n this.path = path;\n this.max = path.length;\n this.result = [];\n this.param = 0.0;\n this.err = '';\n this.segmentStart = 0;\n this.data = [];\n}\n\nfunction skipSpaces(state) {\n while (state.index < state.max && isSpace(state.path.charCodeAt(state.index))) {\n state.index++;\n }\n}\n\n\nfunction scanFlag(state) {\n var ch = state.path.charCodeAt(state.index);\n\n if (ch === 0x30/* 0 */) {\n state.param = 0;\n state.index++;\n return;\n }\n\n if (ch === 0x31/* 1 */) {\n state.param = 1;\n state.index++;\n return;\n }\n\n state.err = 'SvgPath: arc flag can be 0 or 1 only (at pos ' + state.index + ')';\n}\n\n\nfunction scanParam(state) {\n var start = state.index,\n index = start,\n max = state.max,\n zeroFirst = false,\n hasCeiling = false,\n hasDecimal = false,\n hasDot = false,\n ch;\n\n if (index >= max) {\n state.err = 'SvgPath: missed param (at pos ' + index + ')';\n return;\n }\n ch = state.path.charCodeAt(index);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n index++;\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n }\n\n // This logic is shamelessly borrowed from Esprima\n // https://github.com/ariya/esprimas\n //\n if (!isDigit(ch) && ch !== 0x2E/* . */) {\n state.err = 'SvgPath: param should start with 0..9 or `.` (at pos ' + index + ')';\n return;\n }\n\n if (ch !== 0x2E/* . */) {\n zeroFirst = (ch === 0x30/* 0 */);\n index++;\n\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n\n if (zeroFirst && index < max) {\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDigit(ch)) {\n state.err = 'SvgPath: numbers started with `0` such as `09` are illegal (at pos ' + start + ')';\n return;\n }\n }\n\n while (index < max && isDigit(state.path.charCodeAt(index))) {\n index++;\n hasCeiling = true;\n }\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n }\n\n if (ch === 0x2E/* . */) {\n hasDot = true;\n index++;\n while (isDigit(state.path.charCodeAt(index))) {\n index++;\n hasDecimal = true;\n }\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n }\n\n if (ch === 0x65/* e */ || ch === 0x45/* E */) {\n if (hasDot && !hasCeiling && !hasDecimal) {\n state.err = 'SvgPath: invalid float exponent (at pos ' + index + ')';\n return;\n }\n\n index++;\n\n ch = (index < max) ? state.path.charCodeAt(index) : 0;\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n index++;\n }\n if (index < max && isDigit(state.path.charCodeAt(index))) {\n while (index < max && isDigit(state.path.charCodeAt(index))) {\n index++;\n }\n } else {\n state.err = 'SvgPath: invalid float exponent (at pos ' + index + ')';\n return;\n }\n }\n\n state.index = index;\n state.param = parseFloat(state.path.slice(start, index)) + 0.0;\n}\n\n\nfunction finalizeSegment(state) {\n var cmd, cmdLC;\n\n // Process duplicated commands (without comand name)\n\n // This logic is shamelessly borrowed from Raphael\n // https://github.com/DmitryBaranovskiy/raphael/\n //\n cmd = state.path[state.segmentStart];\n cmdLC = cmd.toLowerCase();\n\n var params = state.data;\n\n if (cmdLC === 'm' && params.length > 2) {\n state.result.push([ cmd, params[0], params[1] ]);\n params = params.slice(2);\n cmdLC = 'l';\n cmd = (cmd === 'm') ? 'l' : 'L';\n }\n\n if (cmdLC === 'r') {\n state.result.push([ cmd ].concat(params));\n } else {\n\n while (params.length >= paramCounts[cmdLC]) {\n state.result.push([ cmd ].concat(params.splice(0, paramCounts[cmdLC])));\n if (!paramCounts[cmdLC]) {\n break;\n }\n }\n }\n}\n\n\nfunction scanSegment(state) {\n var max = state.max,\n cmdCode, is_arc, comma_found, need_params, i;\n\n state.segmentStart = state.index;\n cmdCode = state.path.charCodeAt(state.index);\n is_arc = isArc(cmdCode);\n\n if (!isCommand(cmdCode)) {\n state.err = 'SvgPath: bad command ' + state.path[state.index] + ' (at pos ' + state.index + ')';\n return;\n }\n\n need_params = paramCounts[state.path[state.index].toLowerCase()];\n\n state.index++;\n skipSpaces(state);\n\n state.data = [];\n\n if (!need_params) {\n // Z\n finalizeSegment(state);\n return;\n }\n\n comma_found = false;\n\n for (;;) {\n for (i = need_params; i > 0; i--) {\n if (is_arc && (i === 3 || i === 4)) scanFlag(state);\n else scanParam(state);\n\n if (state.err.length) {\n return;\n }\n state.data.push(state.param);\n\n skipSpaces(state);\n comma_found = false;\n\n if (state.index < max && state.path.charCodeAt(state.index) === 0x2C/* , */) {\n state.index++;\n skipSpaces(state);\n comma_found = true;\n }\n }\n\n // after ',' param is mandatory\n if (comma_found) {\n continue;\n }\n\n if (state.index >= state.max) {\n break;\n }\n\n // Stop on next segment\n if (!isDigitStart(state.path.charCodeAt(state.index))) {\n break;\n }\n }\n\n finalizeSegment(state);\n}\n\n\n/* Returns array of segments:\n *\n * [\n * [ command, coord1, coord2, ... ]\n * ]\n */\nmodule.exports = function pathParse(svgPath) {\n var state = new State(svgPath);\n var max = state.max;\n\n skipSpaces(state);\n\n while (state.index < max && !state.err.length) {\n scanSegment(state);\n }\n\n if (state.err.length) {\n state.result = [];\n\n } else if (state.result.length) {\n\n if ('mM'.indexOf(state.result[0][0]) < 0) {\n state.err = 'SvgPath: string should start with `M` or `m`';\n state.result = [];\n } else {\n state.result[0][0] = 'M';\n }\n }\n\n return {\n err: state.err,\n segments: state.result\n };\n};\n","'use strict';\n\n// combine 2 matrixes\n// m1, m2 - [a, b, c, d, e, g]\n//\nfunction combine(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5]\n ];\n}\n\n\nfunction Matrix() {\n if (!(this instanceof Matrix)) { return new Matrix(); }\n this.queue = []; // list of matrixes to apply\n this.cache = null; // combined matrix cache\n}\n\n\nMatrix.prototype.matrix = function (m) {\n if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0) {\n return this;\n }\n this.cache = null;\n this.queue.push(m);\n return this;\n};\n\n\nMatrix.prototype.translate = function (tx, ty) {\n if (tx !== 0 || ty !== 0) {\n this.cache = null;\n this.queue.push([ 1, 0, 0, 1, tx, ty ]);\n }\n return this;\n};\n\n\nMatrix.prototype.scale = function (sx, sy) {\n if (sx !== 1 || sy !== 1) {\n this.cache = null;\n this.queue.push([ sx, 0, 0, sy, 0, 0 ]);\n }\n return this;\n};\n\n\nMatrix.prototype.rotate = function (angle, rx, ry) {\n var rad, cos, sin;\n\n if (angle !== 0) {\n this.translate(rx, ry);\n\n rad = angle * Math.PI / 180;\n cos = Math.cos(rad);\n sin = Math.sin(rad);\n\n this.queue.push([ cos, sin, -sin, cos, 0, 0 ]);\n this.cache = null;\n\n this.translate(-rx, -ry);\n }\n return this;\n};\n\n\nMatrix.prototype.skewX = function (angle) {\n if (angle !== 0) {\n this.cache = null;\n this.queue.push([ 1, 0, Math.tan(angle * Math.PI / 180), 1, 0, 0 ]);\n }\n return this;\n};\n\n\nMatrix.prototype.skewY = function (angle) {\n if (angle !== 0) {\n this.cache = null;\n this.queue.push([ 1, Math.tan(angle * Math.PI / 180), 0, 1, 0, 0 ]);\n }\n return this;\n};\n\n\n// Flatten queue\n//\nMatrix.prototype.toArray = function () {\n if (this.cache) {\n return this.cache;\n }\n\n if (!this.queue.length) {\n this.cache = [ 1, 0, 0, 1, 0, 0 ];\n return this.cache;\n }\n\n this.cache = this.queue[0];\n\n if (this.queue.length === 1) {\n return this.cache;\n }\n\n for (var i = 1; i < this.queue.length; i++) {\n this.cache = combine(this.cache, this.queue[i]);\n }\n\n return this.cache;\n};\n\n\n// Apply list of matrixes to (x,y) point.\n// If `isRelative` set, `translate` component of matrix will be skipped\n//\nMatrix.prototype.calc = function (x, y, isRelative) {\n var m;\n\n // Don't change point on empty transforms queue\n if (!this.queue.length) { return [ x, y ]; }\n\n // Calculate final matrix, if not exists\n //\n // NB. if you deside to apply transforms to point one-by-one,\n // they should be taken in reverse order\n\n if (!this.cache) {\n this.cache = this.toArray();\n }\n\n m = this.cache;\n\n // Apply matrix to point\n return [\n x * m[0] + y * m[2] + (isRelative ? 0 : m[4]),\n x * m[1] + y * m[3] + (isRelative ? 0 : m[5])\n ];\n};\n\n\nmodule.exports = Matrix;\n","'use strict';\n\n\nvar Matrix = require('./matrix');\n\nvar operations = {\n matrix: true,\n scale: true,\n rotate: true,\n translate: true,\n skewX: true,\n skewY: true\n};\n\nvar CMD_SPLIT_RE = /\\s*(matrix|translate|scale|rotate|skewX|skewY)\\s*\\(\\s*(.+?)\\s*\\)[\\s,]*/;\nvar PARAMS_SPLIT_RE = /[\\s,]+/;\n\n\nmodule.exports = function transformParse(transformString) {\n var matrix = new Matrix();\n var cmd, params;\n\n // Split value into ['', 'translate', '10 50', '', 'scale', '2', '', 'rotate', '-45', '']\n transformString.split(CMD_SPLIT_RE).forEach(function (item) {\n\n // Skip empty elements\n if (!item.length) { return; }\n\n // remember operation\n if (typeof operations[item] !== 'undefined') {\n cmd = item;\n return;\n }\n\n // extract params & att operation to matrix\n params = item.split(PARAMS_SPLIT_RE).map(function (i) {\n return +i || 0;\n });\n\n // If params count is not correct - ignore command\n switch (cmd) {\n case 'matrix':\n if (params.length === 6) {\n matrix.matrix(params);\n }\n return;\n\n case 'scale':\n if (params.length === 1) {\n matrix.scale(params[0], params[0]);\n } else if (params.length === 2) {\n matrix.scale(params[0], params[1]);\n }\n return;\n\n case 'rotate':\n if (params.length === 1) {\n matrix.rotate(params[0], 0, 0);\n } else if (params.length === 3) {\n matrix.rotate(params[0], params[1], params[2]);\n }\n return;\n\n case 'translate':\n if (params.length === 1) {\n matrix.translate(params[0], 0);\n } else if (params.length === 2) {\n matrix.translate(params[0], params[1]);\n }\n return;\n\n case 'skewX':\n if (params.length === 1) {\n matrix.skewX(params[0]);\n }\n return;\n\n case 'skewY':\n if (params.length === 1) {\n matrix.skewY(params[0]);\n }\n return;\n }\n });\n\n return matrix;\n};\n","// Convert an arc to a sequence of cubic bézier curves\n//\n'use strict';\n\n\nvar TAU = Math.PI * 2;\n\n\n/* eslint-disable space-infix-ops */\n\n// Calculate an angle between two unit vectors\n//\n// Since we measure angle between radii of circular arcs,\n// we can use simplified math (without length normalization)\n//\nfunction unit_vector_angle(ux, uy, vx, vy) {\n var sign = (ux * vy - uy * vx < 0) ? -1 : 1;\n var dot = ux * vx + uy * vy;\n\n // Add this to work with arbitrary vectors:\n // dot /= Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);\n\n // rounding errors, e.g. -1.0000000000000002 can screw up this\n if (dot > 1.0) { dot = 1.0; }\n if (dot < -1.0) { dot = -1.0; }\n\n return sign * Math.acos(dot);\n}\n\n\n// Convert from endpoint to center parameterization,\n// see http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n//\n// Return [cx, cy, theta1, delta_theta]\n//\nfunction get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi) {\n // Step 1.\n //\n // Moving an ellipse so origin will be the middlepoint between our two\n // points. After that, rotate it to line up ellipse axes with coordinate\n // axes.\n //\n var x1p = cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n var rx_sq = rx * rx;\n var ry_sq = ry * ry;\n var x1p_sq = x1p * x1p;\n var y1p_sq = y1p * y1p;\n\n // Step 2.\n //\n // Compute coordinates of the centre of this ellipse (cx', cy')\n // in the new coordinate system.\n //\n var radicant = (rx_sq * ry_sq) - (rx_sq * y1p_sq) - (ry_sq * x1p_sq);\n\n if (radicant < 0) {\n // due to rounding errors it might be e.g. -1.3877787807814457e-17\n radicant = 0;\n }\n\n radicant /= (rx_sq * y1p_sq) + (ry_sq * x1p_sq);\n radicant = Math.sqrt(radicant) * (fa === fs ? -1 : 1);\n\n var cxp = radicant * rx/ry * y1p;\n var cyp = radicant * -ry/rx * x1p;\n\n // Step 3.\n //\n // Transform back to get centre coordinates (cx, cy) in the original\n // coordinate system.\n //\n var cx = cos_phi*cxp - sin_phi*cyp + (x1+x2)/2;\n var cy = sin_phi*cxp + cos_phi*cyp + (y1+y2)/2;\n\n // Step 4.\n //\n // Compute angles (theta1, delta_theta).\n //\n var v1x = (x1p - cxp) / rx;\n var v1y = (y1p - cyp) / ry;\n var v2x = (-x1p - cxp) / rx;\n var v2y = (-y1p - cyp) / ry;\n\n var theta1 = unit_vector_angle(1, 0, v1x, v1y);\n var delta_theta = unit_vector_angle(v1x, v1y, v2x, v2y);\n\n if (fs === 0 && delta_theta > 0) {\n delta_theta -= TAU;\n }\n if (fs === 1 && delta_theta < 0) {\n delta_theta += TAU;\n }\n\n return [ cx, cy, theta1, delta_theta ];\n}\n\n//\n// Approximate one unit arc segment with bézier curves,\n// see http://math.stackexchange.com/questions/873224\n//\nfunction approximate_unit_arc(theta1, delta_theta) {\n var alpha = 4/3 * Math.tan(delta_theta/4);\n\n var x1 = Math.cos(theta1);\n var y1 = Math.sin(theta1);\n var x2 = Math.cos(theta1 + delta_theta);\n var y2 = Math.sin(theta1 + delta_theta);\n\n return [ x1, y1, x1 - y1*alpha, y1 + x1*alpha, x2 + y2*alpha, y2 - x2*alpha, x2, y2 ];\n}\n\nmodule.exports = function a2c(x1, y1, x2, y2, fa, fs, rx, ry, phi) {\n var sin_phi = Math.sin(phi * TAU / 360);\n var cos_phi = Math.cos(phi * TAU / 360);\n\n // Make sure radii are valid\n //\n var x1p = cos_phi*(x1-x2)/2 + sin_phi*(y1-y2)/2;\n var y1p = -sin_phi*(x1-x2)/2 + cos_phi*(y1-y2)/2;\n\n if (x1p === 0 && y1p === 0) {\n // we're asked to draw line to itself\n return [];\n }\n\n if (rx === 0 || ry === 0) {\n // one of the radii is zero\n return [];\n }\n\n\n // Compensate out-of-range radii\n //\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n\n\n // Get center parameters (cx, cy, theta1, delta_theta)\n //\n var cc = get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi);\n\n var result = [];\n var theta1 = cc[2];\n var delta_theta = cc[3];\n\n // Split an arc to multiple segments, so each segment\n // will be less than τ/4 (= 90°)\n //\n var segments = Math.max(Math.ceil(Math.abs(delta_theta) / (TAU / 4)), 1);\n delta_theta /= segments;\n\n for (var i = 0; i < segments; i++) {\n result.push(approximate_unit_arc(theta1, delta_theta));\n theta1 += delta_theta;\n }\n\n // We have a bezier approximation of a unit circle,\n // now need to transform back to the original ellipse\n //\n return result.map(function (curve) {\n for (var i = 0; i < curve.length; i += 2) {\n var x = curve[i + 0];\n var y = curve[i + 1];\n\n // scale\n x *= rx;\n y *= ry;\n\n // rotate\n var xp = cos_phi*x - sin_phi*y;\n var yp = sin_phi*x + cos_phi*y;\n\n // translate\n curve[i + 0] = xp + cc[0];\n curve[i + 1] = yp + cc[1];\n }\n\n return curve;\n });\n};\n","'use strict';\n\n/* eslint-disable space-infix-ops */\n\n// The precision used to consider an ellipse as a circle\n//\nvar epsilon = 0.0000000001;\n\n// To convert degree in radians\n//\nvar torad = Math.PI / 180;\n\n// Class constructor :\n// an ellipse centred at 0 with radii rx,ry and x - axis - angle ax.\n//\nfunction Ellipse(rx, ry, ax) {\n if (!(this instanceof Ellipse)) { return new Ellipse(rx, ry, ax); }\n this.rx = rx;\n this.ry = ry;\n this.ax = ax;\n}\n\n// Apply a linear transform m to the ellipse\n// m is an array representing a matrix :\n// - -\n// | m[0] m[2] |\n// | m[1] m[3] |\n// - -\n//\nEllipse.prototype.transform = function (m) {\n // We consider the current ellipse as image of the unit circle\n // by first scale(rx,ry) and then rotate(ax) ...\n // So we apply ma = m x rotate(ax) x scale(rx,ry) to the unit circle.\n var c = Math.cos(this.ax * torad), s = Math.sin(this.ax * torad);\n var ma = [\n this.rx * (m[0]*c + m[2]*s),\n this.rx * (m[1]*c + m[3]*s),\n this.ry * (-m[0]*s + m[2]*c),\n this.ry * (-m[1]*s + m[3]*c)\n ];\n\n // ma * transpose(ma) = [ J L ]\n // [ L K ]\n // L is calculated later (if the image is not a circle)\n var J = ma[0]*ma[0] + ma[2]*ma[2],\n K = ma[1]*ma[1] + ma[3]*ma[3];\n\n // the discriminant of the characteristic polynomial of ma * transpose(ma)\n var D = ((ma[0]-ma[3])*(ma[0]-ma[3]) + (ma[2]+ma[1])*(ma[2]+ma[1])) *\n ((ma[0]+ma[3])*(ma[0]+ma[3]) + (ma[2]-ma[1])*(ma[2]-ma[1]));\n\n // the \"mean eigenvalue\"\n var JK = (J + K) / 2;\n\n // check if the image is (almost) a circle\n if (D < epsilon * JK) {\n // if it is\n this.rx = this.ry = Math.sqrt(JK);\n this.ax = 0;\n return this;\n }\n\n // if it is not a circle\n var L = ma[0]*ma[1] + ma[2]*ma[3];\n\n D = Math.sqrt(D);\n\n // {l1,l2} = the two eigen values of ma * transpose(ma)\n var l1 = JK + D/2,\n l2 = JK - D/2;\n // the x - axis - rotation angle is the argument of the l1 - eigenvector\n /*eslint-disable indent*/\n this.ax = (Math.abs(L) < epsilon && Math.abs(l1 - K) < epsilon) ?\n 90\n :\n Math.atan(Math.abs(L) > Math.abs(l1 - K) ?\n (l1 - J) / L\n :\n L / (l1 - K)\n ) * 180 / Math.PI;\n /*eslint-enable indent*/\n\n // if ax > 0 => rx = sqrt(l1), ry = sqrt(l2), else exchange axes and ax += 90\n if (this.ax >= 0) {\n // if ax in [0,90]\n this.rx = Math.sqrt(l1);\n this.ry = Math.sqrt(l2);\n } else {\n // if ax in ]-90,0[ => exchange axes\n this.ax += 90;\n this.rx = Math.sqrt(l2);\n this.ry = Math.sqrt(l1);\n }\n\n return this;\n};\n\n// Check if the ellipse is (almost) degenerate, i.e. rx = 0 or ry = 0\n//\nEllipse.prototype.isDegenerate = function () {\n return (this.rx < epsilon * this.ry || this.ry < epsilon * this.rx);\n};\n\nmodule.exports = Ellipse;\n","// SVG Path transformations library\n//\n// Usage:\n//\n// SvgPath('...')\n// .translate(-150, -100)\n// .scale(0.5)\n// .translate(-150, -100)\n// .toFixed(1)\n// .toString()\n//\n\n'use strict';\n\n\nvar pathParse = require('./path_parse');\nvar transformParse = require('./transform_parse');\nvar matrix = require('./matrix');\nvar a2c = require('./a2c');\nvar ellipse = require('./ellipse');\n\n\n// Class constructor\n//\nfunction SvgPath(path) {\n if (!(this instanceof SvgPath)) { return new SvgPath(path); }\n\n var pstate = pathParse(path);\n\n // Array of path segments.\n // Each segment is array [command, param1, param2, ...]\n this.segments = pstate.segments;\n\n // Error message on parse error.\n this.err = pstate.err;\n\n // Transforms stack for lazy evaluation\n this.__stack = [];\n}\n\nSvgPath.from = function (src) {\n if (typeof src === 'string') return new SvgPath(src);\n\n if (src instanceof SvgPath) {\n // Create empty object\n var s = new SvgPath('');\n\n // Clone properies\n s.err = src.err;\n s.segments = src.segments.map(function (sgm) { return sgm.slice(); });\n s.__stack = src.__stack.map(function (m) {\n return matrix().matrix(m.toArray());\n });\n\n return s;\n }\n\n throw new Error('SvgPath.from: invalid param type ' + src);\n};\n\n\nSvgPath.prototype.__matrix = function (m) {\n var self = this, i;\n\n // Quick leave for empty matrix\n if (!m.queue.length) { return; }\n\n this.iterate(function (s, index, x, y) {\n var p, result, name, isRelative;\n\n switch (s[0]) {\n\n // Process 'assymetric' commands separately\n case 'v':\n p = m.calc(0, s[1], true);\n result = (p[0] === 0) ? [ 'v', p[1] ] : [ 'l', p[0], p[1] ];\n break;\n\n case 'V':\n p = m.calc(x, s[1], false);\n result = (p[0] === m.calc(x, y, false)[0]) ? [ 'V', p[1] ] : [ 'L', p[0], p[1] ];\n break;\n\n case 'h':\n p = m.calc(s[1], 0, true);\n result = (p[1] === 0) ? [ 'h', p[0] ] : [ 'l', p[0], p[1] ];\n break;\n\n case 'H':\n p = m.calc(s[1], y, false);\n result = (p[1] === m.calc(x, y, false)[1]) ? [ 'H', p[0] ] : [ 'L', p[0], p[1] ];\n break;\n\n case 'a':\n case 'A':\n // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n\n // Drop segment if arc is empty (end point === start point)\n /*if ((s[0] === 'A' && s[6] === x && s[7] === y) ||\n (s[0] === 'a' && s[6] === 0 && s[7] === 0)) {\n return [];\n }*/\n\n // Transform rx, ry and the x-axis-rotation\n var ma = m.toArray();\n var e = ellipse(s[1], s[2], s[3]).transform(ma);\n\n // flip sweep-flag if matrix is not orientation-preserving\n if (ma[0] * ma[3] - ma[1] * ma[2] < 0) {\n s[5] = s[5] ? '0' : '1';\n }\n\n // Transform end point as usual (without translation for relative notation)\n p = m.calc(s[6], s[7], s[0] === 'a');\n\n // Empty arcs can be ignored by renderer, but should not be dropped\n // to avoid collisions with `S A S` and so on. Replace with empty line.\n if ((s[0] === 'A' && s[6] === x && s[7] === y) ||\n (s[0] === 'a' && s[6] === 0 && s[7] === 0)) {\n result = [ s[0] === 'a' ? 'l' : 'L', p[0], p[1] ];\n break;\n }\n\n // if the resulting ellipse is (almost) a segment ...\n if (e.isDegenerate()) {\n // replace the arc by a line\n result = [ s[0] === 'a' ? 'l' : 'L', p[0], p[1] ];\n } else {\n // if it is a real ellipse\n // s[0], s[4] and s[5] are not modified\n result = [ s[0], e.rx, e.ry, e.ax, s[4], s[5], p[0], p[1] ];\n }\n\n break;\n\n case 'm':\n // Edge case. The very first `m` should be processed as absolute, if happens.\n // Make sense for coord shift transforms.\n isRelative = index > 0;\n\n p = m.calc(s[1], s[2], isRelative);\n result = [ 'm', p[0], p[1] ];\n break;\n\n default:\n name = s[0];\n result = [ name ];\n isRelative = (name.toLowerCase() === name);\n\n // Apply transformations to the segment\n for (i = 1; i < s.length; i += 2) {\n p = m.calc(s[i], s[i + 1], isRelative);\n result.push(p[0], p[1]);\n }\n }\n\n self.segments[index] = result;\n }, true);\n};\n\n\n// Apply stacked commands\n//\nSvgPath.prototype.__evaluateStack = function () {\n var m, i;\n\n if (!this.__stack.length) { return; }\n\n if (this.__stack.length === 1) {\n this.__matrix(this.__stack[0]);\n this.__stack = [];\n return;\n }\n\n m = matrix();\n i = this.__stack.length;\n\n while (--i >= 0) {\n m.matrix(this.__stack[i].toArray());\n }\n\n this.__matrix(m);\n this.__stack = [];\n};\n\n\n// Convert processed SVG Path back to string\n//\nSvgPath.prototype.toString = function () {\n var elements = [], skipCmd, cmd;\n\n this.__evaluateStack();\n\n for (var i = 0; i < this.segments.length; i++) {\n // remove repeating commands names\n cmd = this.segments[i][0];\n skipCmd = i > 0 && cmd !== 'm' && cmd !== 'M' && cmd === this.segments[i - 1][0];\n elements = elements.concat(skipCmd ? this.segments[i].slice(1) : this.segments[i]);\n }\n\n return elements.join(' ')\n // Optimizations: remove spaces around commands & before `-`\n //\n // We could also remove leading zeros for `0.5`-like values,\n // but their count is too small to spend time for.\n .replace(/ ?([achlmqrstvz]) ?/gi, '$1')\n .replace(/ \\-/g, '-')\n // workaround for FontForge SVG importing bug\n .replace(/zm/g, 'z m');\n};\n\n\n// Translate path to (x [, y])\n//\nSvgPath.prototype.translate = function (x, y) {\n this.__stack.push(matrix().translate(x, y || 0));\n return this;\n};\n\n\n// Scale path to (sx [, sy])\n// sy = sx if not defined\n//\nSvgPath.prototype.scale = function (sx, sy) {\n this.__stack.push(matrix().scale(sx, (!sy && (sy !== 0)) ? sx : sy));\n return this;\n};\n\n\n// Rotate path around point (sx [, sy])\n// sy = sx if not defined\n//\nSvgPath.prototype.rotate = function (angle, rx, ry) {\n this.__stack.push(matrix().rotate(angle, rx || 0, ry || 0));\n return this;\n};\n\n\n// Skew path along the X axis by `degrees` angle\n//\nSvgPath.prototype.skewX = function (degrees) {\n this.__stack.push(matrix().skewX(degrees));\n return this;\n};\n\n\n// Skew path along the Y axis by `degrees` angle\n//\nSvgPath.prototype.skewY = function (degrees) {\n this.__stack.push(matrix().skewY(degrees));\n return this;\n};\n\n\n// Apply matrix transform (array of 6 elements)\n//\nSvgPath.prototype.matrix = function (m) {\n this.__stack.push(matrix().matrix(m));\n return this;\n};\n\n\n// Transform path according to \"transform\" attr of SVG spec\n//\nSvgPath.prototype.transform = function (transformString) {\n if (!transformString.trim()) {\n return this;\n }\n this.__stack.push(transformParse(transformString));\n return this;\n};\n\n\n// Round coords with given decimal precition.\n// 0 by default (to integers)\n//\nSvgPath.prototype.round = function (d) {\n var contourStartDeltaX = 0, contourStartDeltaY = 0, deltaX = 0, deltaY = 0, l;\n\n d = d || 0;\n\n this.__evaluateStack();\n\n this.segments.forEach(function (s) {\n var isRelative = (s[0].toLowerCase() === s[0]);\n\n switch (s[0]) {\n case 'H':\n case 'h':\n if (isRelative) { s[1] += deltaX; }\n deltaX = s[1] - s[1].toFixed(d);\n s[1] = +s[1].toFixed(d);\n return;\n\n case 'V':\n case 'v':\n if (isRelative) { s[1] += deltaY; }\n deltaY = s[1] - s[1].toFixed(d);\n s[1] = +s[1].toFixed(d);\n return;\n\n case 'Z':\n case 'z':\n deltaX = contourStartDeltaX;\n deltaY = contourStartDeltaY;\n return;\n\n case 'M':\n case 'm':\n if (isRelative) {\n s[1] += deltaX;\n s[2] += deltaY;\n }\n\n deltaX = s[1] - s[1].toFixed(d);\n deltaY = s[2] - s[2].toFixed(d);\n\n contourStartDeltaX = deltaX;\n contourStartDeltaY = deltaY;\n\n s[1] = +s[1].toFixed(d);\n s[2] = +s[2].toFixed(d);\n return;\n\n case 'A':\n case 'a':\n // [cmd, rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n if (isRelative) {\n s[6] += deltaX;\n s[7] += deltaY;\n }\n\n deltaX = s[6] - s[6].toFixed(d);\n deltaY = s[7] - s[7].toFixed(d);\n\n s[1] = +s[1].toFixed(d);\n s[2] = +s[2].toFixed(d);\n s[3] = +s[3].toFixed(d + 2); // better precision for rotation\n s[6] = +s[6].toFixed(d);\n s[7] = +s[7].toFixed(d);\n return;\n\n default:\n // a c l q s t\n l = s.length;\n\n if (isRelative) {\n s[l - 2] += deltaX;\n s[l - 1] += deltaY;\n }\n\n deltaX = s[l - 2] - s[l - 2].toFixed(d);\n deltaY = s[l - 1] - s[l - 1].toFixed(d);\n\n s.forEach(function (val, i) {\n if (!i) { return; }\n s[i] = +s[i].toFixed(d);\n });\n return;\n }\n });\n\n return this;\n};\n\n\n// Apply iterator function to all segments. If function returns result,\n// current segment will be replaced to array of returned segments.\n// If empty array is returned, current regment will be deleted.\n//\nSvgPath.prototype.iterate = function (iterator, keepLazyStack) {\n var segments = this.segments,\n replacements = {},\n needReplace = false,\n lastX = 0,\n lastY = 0,\n countourStartX = 0,\n countourStartY = 0;\n var i, j, newSegments;\n\n if (!keepLazyStack) {\n this.__evaluateStack();\n }\n\n segments.forEach(function (s, index) {\n\n var res = iterator(s, index, lastX, lastY);\n\n if (Array.isArray(res)) {\n replacements[index] = res;\n needReplace = true;\n }\n\n var isRelative = (s[0] === s[0].toLowerCase());\n\n // calculate absolute X and Y\n switch (s[0]) {\n case 'm':\n case 'M':\n lastX = s[1] + (isRelative ? lastX : 0);\n lastY = s[2] + (isRelative ? lastY : 0);\n countourStartX = lastX;\n countourStartY = lastY;\n return;\n\n case 'h':\n case 'H':\n lastX = s[1] + (isRelative ? lastX : 0);\n return;\n\n case 'v':\n case 'V':\n lastY = s[1] + (isRelative ? lastY : 0);\n return;\n\n case 'z':\n case 'Z':\n // That make sence for multiple contours\n lastX = countourStartX;\n lastY = countourStartY;\n return;\n\n default:\n lastX = s[s.length - 2] + (isRelative ? lastX : 0);\n lastY = s[s.length - 1] + (isRelative ? lastY : 0);\n }\n });\n\n // Replace segments if iterator return results\n\n if (!needReplace) { return this; }\n\n newSegments = [];\n\n for (i = 0; i < segments.length; i++) {\n if (typeof replacements[i] !== 'undefined') {\n for (j = 0; j < replacements[i].length; j++) {\n newSegments.push(replacements[i][j]);\n }\n } else {\n newSegments.push(segments[i]);\n }\n }\n\n this.segments = newSegments;\n\n return this;\n};\n\n\n// Converts segments from relative to absolute\n//\nSvgPath.prototype.abs = function () {\n\n this.iterate(function (s, index, x, y) {\n var name = s[0],\n nameUC = name.toUpperCase(),\n i;\n\n // Skip absolute commands\n if (name === nameUC) { return; }\n\n s[0] = nameUC;\n\n switch (name) {\n case 'v':\n // v has shifted coords parity\n s[1] += y;\n return;\n\n case 'a':\n // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n // touch x, y only\n s[6] += x;\n s[7] += y;\n return;\n\n default:\n for (i = 1; i < s.length; i++) {\n s[i] += i % 2 ? x : y; // odd values are X, even - Y\n }\n }\n }, true);\n\n return this;\n};\n\n\n// Converts segments from absolute to relative\n//\nSvgPath.prototype.rel = function () {\n\n this.iterate(function (s, index, x, y) {\n var name = s[0],\n nameLC = name.toLowerCase(),\n i;\n\n // Skip relative commands\n if (name === nameLC) { return; }\n\n // Don't touch the first M to avoid potential confusions.\n if (index === 0 && name === 'M') { return; }\n\n s[0] = nameLC;\n\n switch (name) {\n case 'V':\n // V has shifted coords parity\n s[1] -= y;\n return;\n\n case 'A':\n // ARC is: ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n // touch x, y only\n s[6] -= x;\n s[7] -= y;\n return;\n\n default:\n for (i = 1; i < s.length; i++) {\n s[i] -= i % 2 ? x : y; // odd values are X, even - Y\n }\n }\n }, true);\n\n return this;\n};\n\n\n// Converts arcs to cubic bézier curves\n//\nSvgPath.prototype.unarc = function () {\n this.iterate(function (s, index, x, y) {\n var new_segments, nextX, nextY, result = [], name = s[0];\n\n // Skip anything except arcs\n if (name !== 'A' && name !== 'a') { return null; }\n\n if (name === 'a') {\n // convert relative arc coordinates to absolute\n nextX = x + s[6];\n nextY = y + s[7];\n } else {\n nextX = s[6];\n nextY = s[7];\n }\n\n new_segments = a2c(x, y, nextX, nextY, s[4], s[5], s[1], s[2], s[3]);\n\n // Degenerated arcs can be ignored by renderer, but should not be dropped\n // to avoid collisions with `S A S` and so on. Replace with empty line.\n if (new_segments.length === 0) {\n return [ [ s[0] === 'a' ? 'l' : 'L', s[6], s[7] ] ];\n }\n\n new_segments.forEach(function (s) {\n result.push([ 'C', s[2], s[3], s[4], s[5], s[6], s[7] ]);\n });\n\n return result;\n });\n\n return this;\n};\n\n\n// Converts smooth curves (with missed control point) to generic curves\n//\nSvgPath.prototype.unshort = function () {\n var segments = this.segments;\n var prevControlX, prevControlY, prevSegment;\n var curControlX, curControlY;\n\n // TODO: add lazy evaluation flag when relative commands supported\n\n this.iterate(function (s, idx, x, y) {\n var name = s[0], nameUC = name.toUpperCase(), isRelative;\n\n // First command MUST be M|m, it's safe to skip.\n // Protect from access to [-1] for sure.\n if (!idx) { return; }\n\n if (nameUC === 'T') { // quadratic curve\n isRelative = (name === 't');\n\n prevSegment = segments[idx - 1];\n\n if (prevSegment[0] === 'Q') {\n prevControlX = prevSegment[1] - x;\n prevControlY = prevSegment[2] - y;\n } else if (prevSegment[0] === 'q') {\n prevControlX = prevSegment[1] - prevSegment[3];\n prevControlY = prevSegment[2] - prevSegment[4];\n } else {\n prevControlX = 0;\n prevControlY = 0;\n }\n\n curControlX = -prevControlX;\n curControlY = -prevControlY;\n\n if (!isRelative) {\n curControlX += x;\n curControlY += y;\n }\n\n segments[idx] = [\n isRelative ? 'q' : 'Q',\n curControlX, curControlY,\n s[1], s[2]\n ];\n\n } else if (nameUC === 'S') { // cubic curve\n isRelative = (name === 's');\n\n prevSegment = segments[idx - 1];\n\n if (prevSegment[0] === 'C') {\n prevControlX = prevSegment[3] - x;\n prevControlY = prevSegment[4] - y;\n } else if (prevSegment[0] === 'c') {\n prevControlX = prevSegment[3] - prevSegment[5];\n prevControlY = prevSegment[4] - prevSegment[6];\n } else {\n prevControlX = 0;\n prevControlY = 0;\n }\n\n curControlX = -prevControlX;\n curControlY = -prevControlY;\n\n if (!isRelative) {\n curControlX += x;\n curControlY += y;\n }\n\n segments[idx] = [\n isRelative ? 'c' : 'C',\n curControlX, curControlY,\n s[1], s[2], s[3], s[4]\n ];\n }\n });\n\n return this;\n};\n\n\nmodule.exports = SvgPath;\n","// Calculate the specificity for a selector by dividing it into simple selectors and counting them\nvar calculate = function(input) {\n\tvar selectors,\n\t\tselector,\n\t\ti,\n\t\tlen,\n\t\tresults = [];\n\n\t// Separate input by commas\n\tselectors = input.split(',');\n\n\tfor (i = 0, len = selectors.length; i < len; i += 1) {\n\t\tselector = selectors[i];\n\t\tif (selector.length > 0) {\n\t\t\tresults.push(calculateSingle(selector));\n\t\t}\n\t}\n\n\treturn results;\n};\n\n/**\n * Calculates the specificity of CSS selectors\n * http://www.w3.org/TR/css3-selectors/#specificity\n *\n * Returns an object with the following properties:\n * - selector: the input\n * - specificity: e.g. 0,1,0,0\n * - parts: array with details about each part of the selector that counts towards the specificity\n * - specificityArray: e.g. [0, 1, 0, 0]\n */\nvar calculateSingle = function(input) {\n\tvar selector = input,\n\t\tfindMatch,\n\t\ttypeCount = {\n\t\t\t'a': 0,\n\t\t\t'b': 0,\n\t\t\t'c': 0\n\t\t},\n\t\tparts = [],\n\t\t// The following regular expressions assume that selectors matching the preceding regular expressions have been removed\n\t\tattributeRegex = /(\\[[^\\]]+\\])/g,\n\t\tidRegex = /(#[^\\#\\s\\+>~\\.\\[:\\)]+)/g,\n\t\tclassRegex = /(\\.[^\\s\\+>~\\.\\[:\\)]+)/g,\n\t\tpseudoElementRegex = /(::[^\\s\\+>~\\.\\[:]+|:first-line|:first-letter|:before|:after)/gi,\n\t\t// A regex for pseudo classes with brackets - :nth-child(), :nth-last-child(), :nth-of-type(), :nth-last-type(), :lang()\n\t\t// The negation psuedo class (:not) is filtered out because specificity is calculated on its argument\n\t\t// :global and :local are filtered out - they look like psuedo classes but are an identifier for CSS Modules\n\t\tpseudoClassWithBracketsRegex = /(:(?!not|global|local)[\\w-]+\\([^\\)]*\\))/gi,\n\t\t// A regex for other pseudo classes, which don't have brackets\n\t\tpseudoClassRegex = /(:(?!not|global|local)[^\\s\\+>~\\.\\[:]+)/g,\n\t\telementRegex = /([^\\s\\+>~\\.\\[:]+)/g;\n\n\t// Find matches for a regular expression in a string and push their details to parts\n\t// Type is \"a\" for IDs, \"b\" for classes, attributes and pseudo-classes and \"c\" for elements and pseudo-elements\n\tfindMatch = function(regex, type) {\n\t\tvar matches, i, len, match, index, length;\n\t\tif (regex.test(selector)) {\n\t\t\tmatches = selector.match(regex);\n\t\t\tfor (i = 0, len = matches.length; i < len; i += 1) {\n\t\t\t\ttypeCount[type] += 1;\n\t\t\t\tmatch = matches[i];\n\t\t\t\tindex = selector.indexOf(match);\n\t\t\t\tlength = match.length;\n\t\t\t\tparts.push({\n\t\t\t\t\tselector: input.substr(index, length),\n\t\t\t\t\ttype: type,\n\t\t\t\t\tindex: index,\n\t\t\t\t\tlength: length\n\t\t\t\t});\n\t\t\t\t// Replace this simple selector with whitespace so it won't be counted in further simple selectors\n\t\t\t\tselector = selector.replace(match, Array(length + 1).join(' '));\n\t\t\t}\n\t\t}\n\t};\n\n\t// Replace escaped characters with plain text, using the \"A\" character\n\t// https://www.w3.org/TR/CSS21/syndata.html#characters\n\t(function() {\n\t\tvar replaceWithPlainText = function(regex) {\n\t\t\t\tvar matches, i, len, match;\n\t\t\t\tif (regex.test(selector)) {\n\t\t\t\t\tmatches = selector.match(regex);\n\t\t\t\t\tfor (i = 0, len = matches.length; i < len; i += 1) {\n\t\t\t\t\t\tmatch = matches[i];\n\t\t\t\t\t\tselector = selector.replace(match, Array(match.length + 1).join('A'));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Matches a backslash followed by six hexadecimal digits followed by an optional single whitespace character\n\t\t\tescapeHexadecimalRegex = /\\\\[0-9A-Fa-f]{6}\\s?/g,\n\t\t\t// Matches a backslash followed by fewer than six hexadecimal digits followed by a mandatory single whitespace character\n\t\t\tescapeHexadecimalRegex2 = /\\\\[0-9A-Fa-f]{1,5}\\s/g,\n\t\t\t// Matches a backslash followed by any character\n\t\t\tescapeSpecialCharacter = /\\\\./g;\n\n\t\treplaceWithPlainText(escapeHexadecimalRegex);\n\t\treplaceWithPlainText(escapeHexadecimalRegex2);\n\t\treplaceWithPlainText(escapeSpecialCharacter);\n\t}());\n\n\t// Remove anything after a left brace in case a user has pasted in a rule, not just a selector\n\t(function() {\n\t\tvar regex = /{[^]*/gm,\n\t\t\tmatches, i, len, match;\n\t\tif (regex.test(selector)) {\n\t\t\tmatches = selector.match(regex);\n\t\t\tfor (i = 0, len = matches.length; i < len; i += 1) {\n\t\t\t\tmatch = matches[i];\n\t\t\t\tselector = selector.replace(match, Array(match.length + 1).join(' '));\n\t\t\t}\n\t\t}\n\t}());\n\n\t// Add attribute selectors to parts collection (type b)\n\tfindMatch(attributeRegex, 'b');\n\n\t// Add ID selectors to parts collection (type a)\n\tfindMatch(idRegex, 'a');\n\n\t// Add class selectors to parts collection (type b)\n\tfindMatch(classRegex, 'b');\n\n\t// Add pseudo-element selectors to parts collection (type c)\n\tfindMatch(pseudoElementRegex, 'c');\n\n\t// Add pseudo-class selectors to parts collection (type b)\n\tfindMatch(pseudoClassWithBracketsRegex, 'b');\n\tfindMatch(pseudoClassRegex, 'b');\n\n\t// Remove universal selector and separator characters\n\tselector = selector.replace(/[\\*\\s\\+>~]/g, ' ');\n\n\t// Remove any stray dots or hashes which aren't attached to words\n\t// These may be present if the user is live-editing this selector\n\tselector = selector.replace(/[#\\.]/g, ' ');\n\n\t// Remove the negation psuedo-class (:not) but leave its argument because specificity is calculated on its argument\n \t// Remove non-standard :local and :global CSS Module identifiers because they do not effect the specificity\n\tselector = selector.replace(/:not/g, ' ');\n\tselector = selector.replace(/:local/g, ' ');\n\tselector = selector.replace(/:global/g, ' ');\n\tselector = selector.replace(/[\\(\\)]/g, ' ');\n\n\t// The only things left should be element selectors (type c)\n\tfindMatch(elementRegex, 'c');\n\n\t// Order the parts in the order they appear in the original selector\n\t// This is neater for external apps to deal with\n\tparts.sort(function(a, b) {\n\t\treturn a.index - b.index;\n\t});\n\n\treturn {\n\t\tselector: input,\n\t\tspecificity: '0,' + typeCount.a.toString() + ',' + typeCount.b.toString() + ',' + typeCount.c.toString(),\n\t\tspecificityArray: [0, typeCount.a, typeCount.b, typeCount.c],\n\t\tparts: parts\n\t};\n};\n\n/**\n * Compares two CSS selectors for specificity\n * Alternatively you can replace one of the CSS selectors with a specificity array\n *\n * - it returns -1 if a has a lower specificity than b\n * - it returns 1 if a has a higher specificity than b\n * - it returns 0 if a has the same specificity than b\n */\nvar compare = function(a, b) {\n\tvar aSpecificity,\n\t\tbSpecificity,\n\t\ti;\n\n\tif (typeof a ==='string') {\n\t\tif (a.indexOf(',') !== -1) {\n\t\t\tthrow 'Invalid CSS selector';\n\t\t} else {\n\t\t\taSpecificity = calculateSingle(a)['specificityArray'];\n\t\t}\n\t} else if (Array.isArray(a)) {\n\t\tif (a.filter(function(e) { return (typeof e === 'number'); }).length !== 4) {\n\t\t\tthrow 'Invalid specificity array';\n\t\t} else {\n\t\t\taSpecificity = a;\n\t\t}\n\t} else {\n\t\tthrow 'Invalid CSS selector or specificity array';\n\t}\n\n\tif (typeof b ==='string') {\n\t\tif (b.indexOf(',') !== -1) {\n\t\t\tthrow 'Invalid CSS selector';\n\t\t} else {\n\t\t\tbSpecificity = calculateSingle(b)['specificityArray'];\n\t\t}\n\t} else if (Array.isArray(b)) {\n\t\tif (b.filter(function(e) { return (typeof e === 'number'); }).length !== 4) {\n\t\t\tthrow 'Invalid specificity array';\n\t\t} else {\n\t\t\tbSpecificity = b;\n\t\t}\n\t} else {\n\t\tthrow 'Invalid CSS selector or specificity array';\n\t}\n\n\tfor (i = 0; i < 4; i += 1) {\n\t\tif (aSpecificity[i] < bSpecificity[i]) {\n\t\t\treturn -1;\n\t\t} else if (aSpecificity[i] > bSpecificity[i]) {\n\t\t\treturn 1;\n\t\t}\n\t}\n\n\treturn 0;\n};\n\nexport { calculate, compare };\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2015-2020 yWorks GmbH\n * Copyright (c) 2013-2015 by Vitaly Puzrin\n *\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport cssEsc from 'cssesc';\nimport FontFamily from 'font-family-papandreou';\nimport { GState, ShadingPattern, TilingPattern, jsPDF } from 'jspdf';\nimport SvgPath from 'svgpath';\nimport { compare } from 'specificity';\n\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nfunction __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/explicit-module-boundary-types */\nvar RGBColor = /** @class */ (function () {\n function RGBColor(colorString) {\n this.a = undefined;\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.simpleColors = {};\n // eslint-disable-next-line @typescript-eslint/ban-types\n this.colorDefs = [];\n this.ok = false;\n if (!colorString) {\n return;\n }\n // strip any leading #\n if (colorString.charAt(0) == '#') {\n // remove # if any\n colorString = colorString.substr(1, 6);\n }\n colorString = colorString.replace(/ /g, '');\n colorString = colorString.toLowerCase();\n // before getting into regexps, try simple matches\n // and overwrite the input\n this.simpleColors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgrey: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n feldspar: 'd19275',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n grey: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslateblue: '8470ff',\n lightslategray: '778899',\n lightslategrey: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n violetred: 'd02090',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n for (var key in this.simpleColors) {\n if (colorString == key) {\n colorString = this.simpleColors[key];\n }\n }\n // emd of simple type-in colors\n // array of color definition objects\n this.colorDefs = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],\n process: function (bits) {\n return [parseInt(bits[1]), parseInt(bits[2]), parseInt(bits[3])];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n example: ['#00ff00', '336699'],\n process: function (bits) {\n return [parseInt(bits[1], 16), parseInt(bits[2], 16), parseInt(bits[3], 16)];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n example: ['#fb0', 'f0f'],\n process: function (bits) {\n return [\n parseInt(bits[1] + bits[1], 16),\n parseInt(bits[2] + bits[2], 16),\n parseInt(bits[3] + bits[3], 16)\n ];\n }\n }\n ];\n // search through the definitions to find a match\n for (var i = 0; i < this.colorDefs.length; i++) {\n var re = this.colorDefs[i].re;\n var processor = this.colorDefs[i].process;\n var bits = re.exec(colorString);\n if (bits) {\n var channels = processor(bits);\n this.r = channels[0];\n this.g = channels[1];\n this.b = channels[2];\n this.ok = true;\n }\n }\n // validate/cleanup values\n this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r;\n this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g;\n this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b;\n }\n RGBColor.prototype.toRGB = function () {\n return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';\n };\n RGBColor.prototype.toRGBA = function () {\n return 'rgba(' + this.r + ', ' + this.g + ', ' + this.b + ', ' + (this.a || '1') + ')';\n };\n RGBColor.prototype.toHex = function () {\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n if (r.length == 1)\n r = '0' + r;\n if (g.length == 1)\n g = '0' + g;\n if (b.length == 1)\n b = '0' + b;\n return '#' + r + g + b;\n };\n // help\n RGBColor.prototype.getHelpXML = function () {\n var examples = [];\n // add regexps\n for (var i = 0; i < this.colorDefs.length; i++) {\n var example = this.colorDefs[i].example;\n for (var j = 0; j < example.length; j++) {\n examples[examples.length] = example[j];\n }\n }\n // add type-in colors\n for (var sc in this.simpleColors) {\n examples[examples.length] = sc;\n }\n var xml = document.createElement('ul');\n xml.setAttribute('id', 'rgbcolor-examples');\n for (var i = 0; i < examples.length; i++) {\n try {\n var listItem = document.createElement('li');\n var listColor = new RGBColor(examples[i]);\n var exampleDiv = document.createElement('div');\n exampleDiv.style.cssText =\n 'margin: 3px; ' +\n 'border: 1px solid black; ' +\n 'background:' +\n listColor.toHex() +\n '; ' +\n 'color:' +\n listColor.toHex();\n exampleDiv.appendChild(document.createTextNode('test'));\n var listItemValue = document.createTextNode(' ' + examples[i] + ' -> ' + listColor.toRGB() + ' -> ' + listColor.toHex());\n listItem.appendChild(exampleDiv);\n listItem.appendChild(listItemValue);\n xml.appendChild(listItem);\n }\n catch (e) { }\n }\n return xml;\n };\n return RGBColor;\n}());\n\nvar ColorFill = /** @class */ (function () {\n function ColorFill(color) {\n this.color = color;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ColorFill.prototype.getFillData = function (forNode, context) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, undefined];\n });\n });\n };\n return ColorFill;\n}());\n\nvar AttributeState = /** @class */ (function () {\n function AttributeState() {\n this.xmlSpace = '';\n this.fill = null;\n this.fillOpacity = 1.0;\n // public fillRule: string = null\n this.fontFamily = '';\n this.fontSize = 16;\n this.fontStyle = '';\n // public fontVariant: string\n this.fontWeight = '';\n this.opacity = 1.0;\n this.stroke = null;\n this.strokeDasharray = null;\n this.strokeDashoffset = 0;\n this.strokeLinecap = '';\n this.strokeLinejoin = '';\n this.strokeMiterlimit = 4.0;\n this.strokeOpacity = 1.0;\n this.strokeWidth = 1.0;\n // public textAlign: string\n this.alignmentBaseline = '';\n this.textAnchor = '';\n this.visibility = '';\n this.color = null;\n }\n AttributeState.prototype.clone = function () {\n var clone = new AttributeState();\n clone.xmlSpace = this.xmlSpace;\n clone.fill = this.fill;\n clone.fillOpacity = this.fillOpacity;\n // clone.fillRule = this.fillRule;\n clone.fontFamily = this.fontFamily;\n clone.fontSize = this.fontSize;\n clone.fontStyle = this.fontStyle;\n // clone.fontVariant = this.fontVariant;\n clone.fontWeight = this.fontWeight;\n clone.opacity = this.opacity;\n clone.stroke = this.stroke;\n clone.strokeDasharray = this.strokeDasharray;\n clone.strokeDashoffset = this.strokeDashoffset;\n clone.strokeLinecap = this.strokeLinecap;\n clone.strokeLinejoin = this.strokeLinejoin;\n clone.strokeMiterlimit = this.strokeMiterlimit;\n clone.strokeOpacity = this.strokeOpacity;\n clone.strokeWidth = this.strokeWidth;\n // clone.textAlign = this.textAlign;\n clone.textAnchor = this.textAnchor;\n clone.alignmentBaseline = this.alignmentBaseline;\n clone.visibility = this.visibility;\n clone.color = this.color;\n return clone;\n };\n AttributeState.default = function () {\n var attributeState = new AttributeState();\n attributeState.xmlSpace = 'default';\n attributeState.fill = new ColorFill(new RGBColor('rgb(0, 0, 0)'));\n attributeState.fillOpacity = 1.0;\n // attributeState.fillRule = \"nonzero\";\n attributeState.fontFamily = 'times';\n attributeState.fontSize = 16;\n attributeState.fontStyle = 'normal';\n // attributeState.fontVariant = \"normal\";\n attributeState.fontWeight = 'normal';\n attributeState.opacity = 1.0;\n attributeState.stroke = null;\n attributeState.strokeDasharray = null;\n attributeState.strokeDashoffset = 0;\n attributeState.strokeLinecap = 'butt';\n attributeState.strokeLinejoin = 'miter';\n attributeState.strokeMiterlimit = 4.0;\n attributeState.strokeOpacity = 1.0;\n attributeState.strokeWidth = 1.0;\n // attributeState.textAlign = \"start\";\n attributeState.alignmentBaseline = 'baseline';\n attributeState.textAnchor = 'start';\n attributeState.visibility = 'visible';\n attributeState.color = new RGBColor('rgb(0, 0, 0)');\n return attributeState;\n };\n return AttributeState;\n}());\n\nvar iriReference = /url\\([\"']?#([^\"']+)[\"']?\\)/;\nvar alignmentBaselineMap = {\n bottom: 'bottom',\n 'text-bottom': 'bottom',\n top: 'top',\n 'text-top': 'top',\n hanging: 'hanging',\n middle: 'middle',\n central: 'middle',\n center: 'middle',\n mathematical: 'middle',\n ideographic: 'ideographic',\n alphabetic: 'alphabetic',\n baseline: 'alphabetic'\n};\nvar svgNamespaceURI = 'http://www.w3.org/2000/svg';\n\nvar TextMeasure = /** @class */ (function () {\n function TextMeasure() {\n this.measureMethods = {};\n }\n TextMeasure.prototype.getTextOffset = function (text, attributeState) {\n var textAnchor = attributeState.textAnchor;\n if (textAnchor === 'start') {\n return 0;\n }\n var width = this.measureTextWidth(text, attributeState);\n var xOffset = 0;\n switch (textAnchor) {\n case 'end':\n xOffset = width;\n break;\n case 'middle':\n xOffset = width / 2;\n break;\n }\n return xOffset;\n };\n TextMeasure.prototype.measureTextWidth = function (text, attributeState) {\n if (text.length === 0) {\n return 0;\n }\n var fontFamily = attributeState.fontFamily;\n var measure = this.getMeasureFunction(fontFamily);\n return measure.call(this, text, attributeState.fontFamily, attributeState.fontSize + 'px', attributeState.fontStyle, attributeState.fontWeight);\n };\n TextMeasure.prototype.getMeasurementTextNode = function () {\n if (!this.textMeasuringTextElement) {\n this.textMeasuringTextElement = document.createElementNS(svgNamespaceURI, 'text');\n var svg = document.createElementNS(svgNamespaceURI, 'svg');\n svg.appendChild(this.textMeasuringTextElement);\n svg.style.setProperty('position', 'absolute');\n svg.style.setProperty('visibility', 'hidden');\n document.body.appendChild(svg);\n }\n return this.textMeasuringTextElement;\n };\n TextMeasure.prototype.canvasTextMeasure = function (text, fontFamily, fontSize, fontStyle, fontWeight) {\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n if (context != null) {\n context.font = [fontStyle, fontWeight, fontSize, fontFamily].join(' ');\n return context.measureText(text).width;\n }\n return 0;\n };\n TextMeasure.prototype.svgTextMeasure = function (text, fontFamily, fontSize, fontStyle, fontWeight, measurementTextNode) {\n if (measurementTextNode === void 0) { measurementTextNode = this.getMeasurementTextNode(); }\n var textNode = measurementTextNode;\n textNode.setAttribute('font-family', fontFamily);\n textNode.setAttribute('font-size', fontSize);\n textNode.setAttribute('font-style', fontStyle);\n textNode.setAttribute('font-weight', fontWeight);\n textNode.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n textNode.textContent = text;\n return textNode.getBBox().width;\n };\n /**\n * Canvas text measuring is a lot faster than svg measuring. However, it is inaccurate for some fonts. So test each\n * font once and decide if canvas is accurate enough.\n */\n TextMeasure.prototype.getMeasureFunction = function (fontFamily) {\n var method = this.measureMethods[fontFamily];\n if (!method) {\n var fontSize = '16px';\n var fontStyle = 'normal';\n var fontWeight = 'normal';\n var canvasWidth = this.canvasTextMeasure(TextMeasure.testString, fontFamily, fontSize, fontStyle, fontWeight);\n var svgWidth = this.svgTextMeasure(TextMeasure.testString, fontFamily, fontSize, fontStyle, fontWeight);\n method =\n Math.abs(canvasWidth - svgWidth) < TextMeasure.epsilon\n ? this.canvasTextMeasure\n : this.svgTextMeasure;\n this.measureMethods[fontFamily] = method;\n }\n return method;\n };\n TextMeasure.prototype.cleanupTextMeasuring = function () {\n if (this.textMeasuringTextElement) {\n var parentNode = this.textMeasuringTextElement.parentNode;\n if (parentNode) {\n document.body.removeChild(parentNode);\n }\n this.textMeasuringTextElement = undefined;\n }\n };\n TextMeasure.testString = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789!\"$%&/()=?\\'\\\\+*-_.:,;^}][{#~|<>';\n TextMeasure.epsilon = 0.1;\n return TextMeasure;\n}());\n\n/**\n *\n * @package\n * @param values\n * @constructor\n * @property pdf\n * @property attributeState Keeps track of parent attributes that are inherited automatically\n * @property refsHandler The handler that will render references on demand\n * @property styleSheets\n * @property textMeasure\n * @property transform The current transformation matrix\n * @property withinClipPath\n */\nvar Context = /** @class */ (function () {\n function Context(pdf, values) {\n var _a, _b, _c, _d, _e, _f;\n this.pdf = pdf;\n this.svg2pdfParameters = values.svg2pdfParameters;\n this.attributeState = values.attributeState\n ? values.attributeState.clone()\n : AttributeState.default();\n this.viewport = values.viewport;\n this.refsHandler = (_a = values.refsHandler) !== null && _a !== void 0 ? _a : null;\n this.styleSheets = (_b = values.styleSheets) !== null && _b !== void 0 ? _b : null;\n this.textMeasure = (_c = values.textMeasure) !== null && _c !== void 0 ? _c : new TextMeasure();\n this.transform = (_d = values.transform) !== null && _d !== void 0 ? _d : this.pdf.unitMatrix;\n this.withinClipPath = (_e = values.withinClipPath) !== null && _e !== void 0 ? _e : false;\n this.withinUse = (_f = values.withinUse) !== null && _f !== void 0 ? _f : false;\n }\n Context.prototype.clone = function (values) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n if (values === void 0) { values = {}; }\n return new Context(this.pdf, {\n svg2pdfParameters: (_a = values.svg2pdfParameters) !== null && _a !== void 0 ? _a : this.svg2pdfParameters,\n attributeState: values.attributeState\n ? values.attributeState.clone()\n : this.attributeState.clone(),\n viewport: (_b = values.viewport) !== null && _b !== void 0 ? _b : this.viewport,\n refsHandler: (_c = values.refsHandler) !== null && _c !== void 0 ? _c : this.refsHandler,\n styleSheets: (_d = values.styleSheets) !== null && _d !== void 0 ? _d : this.styleSheets,\n textMeasure: (_e = values.textMeasure) !== null && _e !== void 0 ? _e : this.textMeasure,\n transform: (_f = values.transform) !== null && _f !== void 0 ? _f : this.transform,\n withinClipPath: (_g = values.withinClipPath) !== null && _g !== void 0 ? _g : this.withinClipPath,\n withinUse: (_h = values.withinUse) !== null && _h !== void 0 ? _h : this.withinUse\n });\n };\n return Context;\n}());\n\nvar ReferencesHandler = /** @class */ (function () {\n function ReferencesHandler(idMap) {\n this.renderedElements = {};\n this.idMap = idMap;\n }\n ReferencesHandler.prototype.getRendered = function (id, color, renderCallback) {\n return __awaiter(this, void 0, void 0, function () {\n var key, svgNode;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n key = ReferencesHandler.generateKey(id, color);\n if (this.renderedElements.hasOwnProperty(key)) {\n return [2 /*return*/, this.renderedElements[id]];\n }\n svgNode = this.get(id);\n this.renderedElements[key] = svgNode;\n return [4 /*yield*/, renderCallback(svgNode)];\n case 1:\n _a.sent();\n return [2 /*return*/, svgNode];\n }\n });\n });\n };\n ReferencesHandler.prototype.get = function (id) {\n return this.idMap[cssEsc(id, { isIdentifier: true })];\n };\n ReferencesHandler.generateKey = function (id, color) {\n return id + '|' + (color || new RGBColor('rgb(0,0,0)')).toRGBA();\n };\n return ReferencesHandler;\n}());\n\nfunction getAngle(from, to) {\n return Math.atan2(to[1] - from[1], to[0] - from[0]);\n}\nvar cToQ = 2 / 3; // ratio to convert quadratic bezier curves to cubic ones\n// transforms a cubic bezier control point to a quadratic one: returns from + (2/3) * (to - from)\nfunction toCubic(from, to) {\n return [cToQ * (to[0] - from[0]) + from[0], cToQ * (to[1] - from[1]) + from[1]];\n}\nfunction normalize(v) {\n var length = Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n return [v[0] / length, v[1] / length];\n}\nfunction getDirectionVector(from, to) {\n var v = [to[0] - from[0], to[1] - from[1]];\n return normalize(v);\n}\nfunction addVectors(v1, v2) {\n return [v1[0] + v2[0], v1[1] + v2[1]];\n}\n// multiplies a vector with a matrix: vec' = vec * matrix\nfunction multVecMatrix(vec, matrix) {\n var x = vec[0];\n var y = vec[1];\n return [matrix.a * x + matrix.c * y + matrix.e, matrix.b * x + matrix.d * y + matrix.f];\n}\n\nvar Path = /** @class */ (function () {\n function Path() {\n this.segments = [];\n }\n Path.prototype.moveTo = function (x, y) {\n this.segments.push(new MoveTo(x, y));\n return this;\n };\n Path.prototype.lineTo = function (x, y) {\n this.segments.push(new LineTo(x, y));\n return this;\n };\n Path.prototype.curveTo = function (x1, y1, x2, y2, x, y) {\n this.segments.push(new CurveTo(x1, y1, x2, y2, x, y));\n return this;\n };\n Path.prototype.close = function () {\n this.segments.push(new Close());\n return this;\n };\n /**\n * Transforms the path in place\n */\n Path.prototype.transform = function (matrix) {\n this.segments.forEach(function (seg) {\n if (seg instanceof MoveTo || seg instanceof LineTo || seg instanceof CurveTo) {\n var p = multVecMatrix([seg.x, seg.y], matrix);\n seg.x = p[0];\n seg.y = p[1];\n }\n if (seg instanceof CurveTo) {\n var p1 = multVecMatrix([seg.x1, seg.y1], matrix);\n var p2 = multVecMatrix([seg.x2, seg.y2], matrix);\n seg.x1 = p1[0];\n seg.y1 = p1[1];\n seg.x2 = p2[0];\n seg.y2 = p2[1];\n }\n });\n };\n Path.prototype.draw = function (context) {\n var p = context.pdf;\n this.segments.forEach(function (s) {\n if (s instanceof MoveTo) {\n p.moveTo(s.x, s.y);\n }\n else if (s instanceof LineTo) {\n p.lineTo(s.x, s.y);\n }\n else if (s instanceof CurveTo) {\n p.curveTo(s.x1, s.y1, s.x2, s.y2, s.x, s.y);\n }\n else {\n p.close();\n }\n });\n };\n return Path;\n}());\nvar MoveTo = /** @class */ (function () {\n function MoveTo(x, y) {\n this.x = x;\n this.y = y;\n }\n return MoveTo;\n}());\nvar LineTo = /** @class */ (function () {\n function LineTo(x, y) {\n this.x = x;\n this.y = y;\n }\n return LineTo;\n}());\nvar CurveTo = /** @class */ (function () {\n function CurveTo(x1, y1, x2, y2, x, y) {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n this.x = x;\n this.y = y;\n }\n return CurveTo;\n}());\nvar Close = /** @class */ (function () {\n function Close() {\n }\n return Close;\n}());\n\nfunction nodeIs(node, tagsString) {\n return tagsString.split(',').indexOf((node.nodeName || node.tagName).toLowerCase()) >= 0;\n}\nfunction forEachChild(node, fn) {\n // copy list of children, as the original might be modified\n var children = [];\n for (var i = 0; i < node.childNodes.length; i++) {\n var childNode = node.childNodes[i];\n if (childNode.nodeName.charAt(0) !== '#')\n children.push(childNode);\n }\n for (var i = 0; i < children.length; i++) {\n fn(i, children[i]);\n }\n}\n// returns an attribute of a node, either from the node directly or from css\nfunction getAttribute(node, styleSheets, propertyNode, propertyCss) {\n if (propertyCss === void 0) { propertyCss = propertyNode; }\n var attribute = node.style.getPropertyValue(propertyCss);\n if (attribute) {\n return attribute;\n }\n else {\n var propertyValue = styleSheets.getPropertyValue(node, propertyCss);\n if (propertyValue) {\n return propertyValue;\n }\n else if (node.hasAttribute(propertyNode)) {\n return node.getAttribute(propertyNode) || undefined;\n }\n else {\n return undefined;\n }\n }\n}\nfunction svgNodeIsVisible(svgNode, parentVisible, context) {\n if (getAttribute(svgNode.element, context.styleSheets, 'display') === 'none') {\n return false;\n }\n var visible = parentVisible;\n var visibility = getAttribute(svgNode.element, context.styleSheets, 'visibility');\n if (visibility) {\n visible = visibility !== 'hidden';\n }\n return visible;\n}\nfunction svgNodeAndChildrenVisible(svgNode, parentVisible, context) {\n var visible = svgNodeIsVisible(svgNode, parentVisible, context);\n if (svgNode.element.childNodes.length === 0) {\n return false;\n }\n svgNode.children.forEach(function (child) {\n if (child.isVisible(visible, context)) {\n visible = true;\n }\n });\n return visible;\n}\n\n/**\n * @constructor\n * @property {Marker[]} markers\n */\nvar MarkerList = /** @class */ (function () {\n function MarkerList() {\n this.markers = [];\n }\n MarkerList.prototype.addMarker = function (markers) {\n this.markers.push(markers);\n };\n MarkerList.prototype.draw = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var i, marker, tf, angle, anchor, cos, sin;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n i = 0;\n _a.label = 1;\n case 1:\n if (!(i < this.markers.length)) return [3 /*break*/, 4];\n marker = this.markers[i];\n tf = void 0;\n angle = marker.angle, anchor = marker.anchor;\n cos = Math.cos(angle);\n sin = Math.sin(angle);\n // position at and rotate around anchor\n tf = context.pdf.Matrix(cos, sin, -sin, cos, anchor[0], anchor[1]);\n // scale with stroke-width\n tf = context.pdf.matrixMult(context.pdf.Matrix(context.attributeState.strokeWidth, 0, 0, context.attributeState.strokeWidth, 0, 0), tf);\n tf = context.pdf.matrixMult(tf, context.transform);\n // as the marker is already scaled by the current line width we must not apply the line width twice!\n context.pdf.saveGraphicsState();\n context.pdf.setLineWidth(1.0);\n return [4 /*yield*/, context.refsHandler.getRendered(marker.id, null, function (node) {\n return node.apply(context);\n })];\n case 2:\n _a.sent();\n context.pdf.doFormObject(marker.id, tf);\n context.pdf.restoreGraphicsState();\n _a.label = 3;\n case 3:\n i++;\n return [3 /*break*/, 1];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n return MarkerList;\n}());\n/**\n * @param {string} id\n * @param {[number,number]} anchor\n * @param {number} angle\n */\nvar Marker = /** @class */ (function () {\n function Marker(id, anchor, angle) {\n this.id = id;\n this.anchor = anchor;\n this.angle = angle;\n }\n return Marker;\n}());\n\n/**\n * Convert em, px and bare number attributes to pixel values\n * @param {string} value\n * @param {number} pdfFontSize\n */\nfunction toPixels(value, pdfFontSize) {\n var match;\n // em\n match = value && value.toString().match(/^([\\-0-9.]+)em$/);\n if (match) {\n return parseFloat(match[1]) * pdfFontSize;\n }\n // pixels\n match = value && value.toString().match(/^([\\-0-9.]+)(px|)$/);\n if (match) {\n return parseFloat(match[1]);\n }\n return 0;\n}\nfunction mapAlignmentBaseline(value) {\n return alignmentBaselineMap[value] || 'alphabetic';\n}\n\n/**\n * parses a comma, sign and/or whitespace separated string of floats and returns\n * the single floats in an array\n */\nfunction parseFloats(str) {\n var floats = [];\n var regex = /[+-]?(?:(?:\\d+\\.?\\d*)|(?:\\d*\\.?\\d+))(?:[eE][+-]?\\d+)?/g;\n var match;\n while ((match = regex.exec(str))) {\n floats.push(parseFloat(match[0]));\n }\n return floats;\n}\n/**\n * extends RGBColor by rgba colors as RGBColor is not capable of it\n * currentcolor: the color to return if colorString === 'currentcolor'\n */\nfunction parseColor(colorString, currentcolor) {\n if (colorString === 'transparent') {\n var transparent = new RGBColor('rgb(0,0,0)');\n transparent.a = 0;\n return transparent;\n }\n if (colorString.toLowerCase() === 'currentcolor') {\n return currentcolor || new RGBColor('rgb(0,0,0)');\n }\n var match = /\\s*rgba\\(((?:[^,\\)]*,){3}[^,\\)]*)\\)\\s*/.exec(colorString);\n if (match) {\n var floats = parseFloats(match[1]);\n var color = new RGBColor('rgb(' + floats.slice(0, 3).join(',') + ')');\n color.a = floats[3];\n return color;\n }\n else {\n return new RGBColor(colorString);\n }\n}\n\nvar fontAliases = {\n 'sans-serif': 'helvetica',\n verdana: 'helvetica',\n arial: 'helvetica',\n fixed: 'courier',\n monospace: 'courier',\n terminal: 'courier',\n serif: 'times',\n cursive: 'times',\n fantasy: 'times'\n};\nfunction findFirstAvailableFontFamily(attributeState, fontFamilies, context) {\n var fontType = '';\n if (attributeState.fontWeight === 'bold') {\n fontType = 'bold';\n }\n if (attributeState.fontStyle === 'italic') {\n fontType += 'italic';\n }\n if (fontType === '') {\n fontType = 'normal';\n }\n var availableFonts = context.pdf.getFontList();\n var firstAvailable = '';\n var fontIsAvailable = fontFamilies.some(function (font) {\n var availableStyles = availableFonts[font];\n if (availableStyles && availableStyles.indexOf(fontType) >= 0) {\n firstAvailable = font;\n return true;\n }\n font = font.toLowerCase();\n if (fontAliases.hasOwnProperty(font)) {\n firstAvailable = font;\n return true;\n }\n return false;\n });\n if (!fontIsAvailable) {\n firstAvailable = 'times';\n }\n return firstAvailable;\n}\n\nfunction getBoundingBoxByChildren(context, svgnode) {\n if (getAttribute(svgnode.element, context.styleSheets, 'display') === 'none') {\n return [0, 0, 0, 0];\n }\n var boundingBox = [0, 0, 0, 0];\n svgnode.children.forEach(function (child) {\n var nodeBox = child.getBoundingBox(context);\n boundingBox = [\n Math.min(boundingBox[0], nodeBox[0]),\n Math.min(boundingBox[1], nodeBox[1]),\n Math.max(boundingBox[0] + boundingBox[2], nodeBox[0] + nodeBox[2]) -\n Math.min(boundingBox[0], nodeBox[0]),\n Math.max(boundingBox[1] + boundingBox[3], nodeBox[1] + nodeBox[3]) -\n Math.min(boundingBox[1], nodeBox[1])\n ];\n });\n return boundingBox;\n}\nfunction defaultBoundingBox(element, context) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var pf = parseFloat;\n // TODO: check if there are other possible coordinate attributes\n var x1 = pf(element.getAttribute('x1')) ||\n pf(getAttribute(element, context.styleSheets, 'x')) ||\n pf(getAttribute(element, context.styleSheets, 'cx')) -\n pf(getAttribute(element, context.styleSheets, 'r')) ||\n 0;\n var x2 = pf(element.getAttribute('x2')) ||\n x1 + pf(getAttribute(element, context.styleSheets, 'width')) ||\n pf(getAttribute(element, context.styleSheets, 'cx')) +\n pf(getAttribute(element, context.styleSheets, 'r')) ||\n 0;\n var y1 = pf(element.getAttribute('y1')) ||\n pf(getAttribute(element, context.styleSheets, 'y')) ||\n pf(getAttribute(element, context.styleSheets, 'cy')) -\n pf(getAttribute(element, context.styleSheets, 'r')) ||\n 0;\n var y2 = pf(element.getAttribute('y2')) ||\n y1 + pf(getAttribute(element, context.styleSheets, 'height')) ||\n pf(getAttribute(element, context.styleSheets, 'cy')) +\n pf(getAttribute(element, context.styleSheets, 'r')) ||\n 0;\n return [\n Math.min(x1, x2),\n Math.min(y1, y2),\n Math.max(x1, x2) - Math.min(x1, x2),\n Math.max(y1, y2) - Math.min(y1, y2)\n ];\n}\n\nfunction computeViewBoxTransform(node, viewBox, eX, eY, eWidth, eHeight, context, noTranslate) {\n if (noTranslate === void 0) { noTranslate = false; }\n var vbX = viewBox[0];\n var vbY = viewBox[1];\n var vbWidth = viewBox[2];\n var vbHeight = viewBox[3];\n var scaleX = eWidth / vbWidth;\n var scaleY = eHeight / vbHeight;\n var align, meetOrSlice;\n var preserveAspectRatio = node.getAttribute('preserveAspectRatio');\n if (preserveAspectRatio) {\n var alignAndMeetOrSlice = preserveAspectRatio.split(' ');\n if (alignAndMeetOrSlice[0] === 'defer') {\n alignAndMeetOrSlice = alignAndMeetOrSlice.slice(1);\n }\n align = alignAndMeetOrSlice[0];\n meetOrSlice = alignAndMeetOrSlice[1] || 'meet';\n }\n else {\n align = 'xMidYMid';\n meetOrSlice = 'meet';\n }\n if (align !== 'none') {\n if (meetOrSlice === 'meet') {\n // uniform scaling with min scale\n scaleX = scaleY = Math.min(scaleX, scaleY);\n }\n else if (meetOrSlice === 'slice') {\n // uniform scaling with max scale\n scaleX = scaleY = Math.max(scaleX, scaleY);\n }\n }\n if (noTranslate) {\n return context.pdf.Matrix(scaleX, 0, 0, scaleY, 0, 0);\n }\n var translateX = eX - vbX * scaleX;\n var translateY = eY - vbY * scaleY;\n if (align.indexOf('xMid') >= 0) {\n translateX += (eWidth - vbWidth * scaleX) / 2;\n }\n else if (align.indexOf('xMax') >= 0) {\n translateX += eWidth - vbWidth * scaleX;\n }\n if (align.indexOf('YMid') >= 0) {\n translateY += (eHeight - vbHeight * scaleY) / 2;\n }\n else if (align.indexOf('YMax') >= 0) {\n translateY += eHeight - vbHeight * scaleY;\n }\n var translate = context.pdf.Matrix(1, 0, 0, 1, translateX, translateY);\n var scale = context.pdf.Matrix(scaleX, 0, 0, scaleY, 0, 0);\n return context.pdf.matrixMult(scale, translate);\n}\n// parses the \"transform\" string\nfunction parseTransform(transformString, context) {\n if (!transformString || transformString === 'none')\n return context.pdf.unitMatrix;\n var mRegex = /^[\\s,]*matrix\\(([^)]+)\\)\\s*/, tRegex = /^[\\s,]*translate\\(([^)]+)\\)\\s*/, rRegex = /^[\\s,]*rotate\\(([^)]+)\\)\\s*/, sRegex = /^[\\s,]*scale\\(([^)]+)\\)\\s*/, sXRegex = /^[\\s,]*skewX\\(([^)]+)\\)\\s*/, sYRegex = /^[\\s,]*skewY\\(([^)]+)\\)\\s*/;\n var resultMatrix = context.pdf.unitMatrix;\n var m;\n var tSLength;\n while (transformString.length > 0 && transformString.length !== tSLength) {\n tSLength = transformString.length;\n var match = mRegex.exec(transformString);\n if (match) {\n m = parseFloats(match[1]);\n resultMatrix = context.pdf.matrixMult(context.pdf.Matrix(m[0], m[1], m[2], m[3], m[4], m[5]), resultMatrix);\n transformString = transformString.substr(match[0].length);\n }\n match = rRegex.exec(transformString);\n if (match) {\n m = parseFloats(match[1]);\n var a = (Math.PI * m[0]) / 180;\n resultMatrix = context.pdf.matrixMult(context.pdf.Matrix(Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0), resultMatrix);\n if (m[1] || m[2]) {\n var t1 = context.pdf.Matrix(1, 0, 0, 1, m[1], m[2]);\n var t2 = context.pdf.Matrix(1, 0, 0, 1, -m[1], -m[2]);\n resultMatrix = context.pdf.matrixMult(t2, context.pdf.matrixMult(resultMatrix, t1));\n }\n transformString = transformString.substr(match[0].length);\n }\n match = tRegex.exec(transformString);\n if (match) {\n m = parseFloats(match[1]);\n resultMatrix = context.pdf.matrixMult(context.pdf.Matrix(1, 0, 0, 1, m[0], m[1] || 0), resultMatrix);\n transformString = transformString.substr(match[0].length);\n }\n match = sRegex.exec(transformString);\n if (match) {\n m = parseFloats(match[1]);\n if (!m[1])\n m[1] = m[0];\n resultMatrix = context.pdf.matrixMult(context.pdf.Matrix(m[0], 0, 0, m[1], 0, 0), resultMatrix);\n transformString = transformString.substr(match[0].length);\n }\n match = sXRegex.exec(transformString);\n if (match) {\n m = parseFloat(match[1]);\n m *= Math.PI / 180;\n resultMatrix = context.pdf.matrixMult(context.pdf.Matrix(1, 0, Math.tan(m), 1, 0, 0), resultMatrix);\n transformString = transformString.substr(match[0].length);\n }\n match = sYRegex.exec(transformString);\n if (match) {\n m = parseFloat(match[1]);\n m *= Math.PI / 180;\n resultMatrix = context.pdf.matrixMult(context.pdf.Matrix(1, Math.tan(m), 0, 1, 0, 0), resultMatrix);\n transformString = transformString.substr(match[0].length);\n }\n }\n return resultMatrix;\n}\n\nvar SvgNode = /** @class */ (function () {\n function SvgNode(element, children) {\n this.element = element;\n this.children = children;\n this.parent = null;\n }\n SvgNode.prototype.setParent = function (parent) {\n this.parent = parent;\n };\n SvgNode.prototype.getParent = function () {\n return this.parent;\n };\n SvgNode.prototype.getBoundingBox = function (context) {\n if (getAttribute(this.element, context.styleSheets, 'display') === 'none') {\n return [0, 0, 0, 0];\n }\n return this.getBoundingBoxCore(context);\n };\n SvgNode.prototype.computeNodeTransform = function (context) {\n var nodeTransform = this.computeNodeTransformCore(context);\n var transformString = getAttribute(this.element, context.styleSheets, 'transform');\n if (!transformString)\n return nodeTransform;\n else\n return context.pdf.matrixMult(nodeTransform, parseTransform(transformString, context));\n };\n return SvgNode;\n}());\n\nvar NonRenderedNode = /** @class */ (function (_super) {\n __extends(NonRenderedNode, _super);\n function NonRenderedNode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NonRenderedNode.prototype.render = function (parentContext) {\n return Promise.resolve();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NonRenderedNode.prototype.getBoundingBoxCore = function (context) {\n return [];\n };\n NonRenderedNode.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n return NonRenderedNode;\n}(SvgNode));\n\nvar Gradient = /** @class */ (function (_super) {\n __extends(Gradient, _super);\n function Gradient(pdfGradientType, element, children) {\n var _this = _super.call(this, element, children) || this;\n _this.pdfGradientType = pdfGradientType;\n _this.contextColor = undefined;\n return _this;\n }\n Gradient.prototype.apply = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var id, ancestor, colorAttr, colors, opacitySum, hasOpacity, gState, pattern;\n var _this = this;\n return __generator(this, function (_a) {\n id = this.element.getAttribute('id');\n if (!id) {\n return [2 /*return*/];\n }\n // Only need to calculate contextColor once\n if (this.contextColor === undefined) {\n this.contextColor = null;\n ancestor = this;\n while (ancestor) {\n colorAttr = getAttribute(ancestor.element, context.styleSheets, 'color');\n if (colorAttr) {\n this.contextColor = parseColor(colorAttr, null);\n break;\n }\n ancestor = ancestor.getParent();\n }\n }\n colors = [];\n opacitySum = 0;\n hasOpacity = false;\n this.children.forEach(function (stop) {\n if (stop.element.tagName.toLowerCase() === 'stop') {\n var colorAttr = getAttribute(stop.element, context.styleSheets, 'color');\n var color = parseColor(getAttribute(stop.element, context.styleSheets, 'stop-color') || '', colorAttr ? parseColor(colorAttr, null) : _this.contextColor);\n colors.push({\n offset: Gradient.parseGradientOffset(stop.element.getAttribute('offset') || '0'),\n color: [color.r, color.g, color.b]\n });\n var opacity = getAttribute(stop.element, context.styleSheets, 'stop-opacity');\n if (opacity && opacity !== '1') {\n opacitySum += parseFloat(opacity);\n hasOpacity = true;\n }\n }\n });\n if (hasOpacity) {\n gState = new GState({ opacity: opacitySum / colors.length });\n }\n pattern = new ShadingPattern(this.pdfGradientType, this.getCoordinates(), colors, gState);\n context.pdf.addShadingPattern(id, pattern);\n return [2 /*return*/];\n });\n });\n };\n Gradient.prototype.getBoundingBoxCore = function (context) {\n return defaultBoundingBox(this.element, context);\n };\n Gradient.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n Gradient.prototype.isVisible = function (parentVisible, context) {\n return svgNodeAndChildrenVisible(this, parentVisible, context);\n };\n /**\n * Convert percentage to decimal\n */\n Gradient.parseGradientOffset = function (value) {\n var parsedValue = parseFloat(value);\n if (!isNaN(parsedValue) && value.indexOf('%') >= 0) {\n return parsedValue / 100;\n }\n return parsedValue;\n };\n return Gradient;\n}(NonRenderedNode));\n\nvar LinearGradient = /** @class */ (function (_super) {\n __extends(LinearGradient, _super);\n function LinearGradient(element, children) {\n return _super.call(this, 'axial', element, children) || this;\n }\n LinearGradient.prototype.getCoordinates = function () {\n return [\n parseFloat(this.element.getAttribute('x1') || '0'),\n parseFloat(this.element.getAttribute('y1') || '0'),\n parseFloat(this.element.getAttribute('x2') || '1'),\n parseFloat(this.element.getAttribute('y2') || '0')\n ];\n };\n return LinearGradient;\n}(Gradient));\n\nvar RadialGradient = /** @class */ (function (_super) {\n __extends(RadialGradient, _super);\n function RadialGradient(element, children) {\n return _super.call(this, 'radial', element, children) || this;\n }\n RadialGradient.prototype.getCoordinates = function () {\n var cx = this.element.getAttribute('cx');\n var cy = this.element.getAttribute('cy');\n var fx = this.element.getAttribute('fx');\n var fy = this.element.getAttribute('fy');\n return [\n parseFloat(fx || cx || '0.5'),\n parseFloat(fy || cy || '0.5'),\n 0,\n parseFloat(cx || '0.5'),\n parseFloat(cy || '0.5'),\n parseFloat(this.element.getAttribute('r') || '0.5')\n ];\n };\n return RadialGradient;\n}(Gradient));\n\nvar GradientFill = /** @class */ (function () {\n function GradientFill(key, gradient) {\n this.key = key;\n this.gradient = gradient;\n }\n GradientFill.prototype.getFillData = function (forNode, context) {\n return __awaiter(this, void 0, void 0, function () {\n var gradientUnitsMatrix, bBox, gradientTransform;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, context.refsHandler.getRendered(this.key, null, function (node) {\n return node.apply(new Context(context.pdf, {\n refsHandler: context.refsHandler,\n textMeasure: context.textMeasure,\n styleSheets: context.styleSheets,\n viewport: context.viewport,\n svg2pdfParameters: context.svg2pdfParameters\n }));\n })\n // matrix to convert between gradient space and user space\n // for \"userSpaceOnUse\" this is the current transformation: tfMatrix\n // for \"objectBoundingBox\" or default, the gradient gets scaled and transformed to the bounding box\n ];\n case 1:\n _a.sent();\n if (!this.gradient.element.hasAttribute('gradientUnits') ||\n this.gradient.element.getAttribute('gradientUnits').toLowerCase() === 'objectboundingbox') {\n bBox = forNode.getBoundingBox(context);\n gradientUnitsMatrix = context.pdf.Matrix(bBox[2], 0, 0, bBox[3], bBox[0], bBox[1]);\n }\n else {\n gradientUnitsMatrix = context.pdf.unitMatrix;\n }\n gradientTransform = parseTransform(getAttribute(this.gradient.element, context.styleSheets, 'gradientTransform', 'transform'), context);\n return [2 /*return*/, {\n key: this.key,\n matrix: context.pdf.matrixMult(gradientTransform, gradientUnitsMatrix)\n }];\n }\n });\n });\n };\n return GradientFill;\n}());\n\nvar Pattern = /** @class */ (function (_super) {\n __extends(Pattern, _super);\n function Pattern() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Pattern.prototype.apply = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var id, bBox, pattern, _i, _a, child;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n id = this.element.getAttribute('id');\n if (!id) {\n return [2 /*return*/];\n }\n bBox = this.getBoundingBox(context);\n pattern = new TilingPattern([bBox[0], bBox[1], bBox[0] + bBox[2], bBox[1] + bBox[3]], bBox[2], bBox[3]);\n context.pdf.beginTilingPattern(pattern);\n _i = 0, _a = this.children;\n _b.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3 /*break*/, 4];\n child = _a[_i];\n return [4 /*yield*/, child.render(new Context(context.pdf, {\n attributeState: context.attributeState,\n refsHandler: context.refsHandler,\n styleSheets: context.styleSheets,\n viewport: context.viewport,\n svg2pdfParameters: context.svg2pdfParameters\n }))];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n _i++;\n return [3 /*break*/, 1];\n case 4:\n context.pdf.endTilingPattern(id, pattern);\n return [2 /*return*/];\n }\n });\n });\n };\n Pattern.prototype.getBoundingBoxCore = function (context) {\n return defaultBoundingBox(this.element, context);\n };\n Pattern.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n Pattern.prototype.isVisible = function (parentVisible, context) {\n return svgNodeAndChildrenVisible(this, parentVisible, context);\n };\n return Pattern;\n}(NonRenderedNode));\n\nvar PatternFill = /** @class */ (function () {\n function PatternFill(key, pattern) {\n this.key = key;\n this.pattern = pattern;\n }\n PatternFill.prototype.getFillData = function (forNode, context) {\n return __awaiter(this, void 0, void 0, function () {\n var patternData, bBox, patternUnitsMatrix, fillBBox, x, y, width, height, patternContentUnitsMatrix, fillBBox, x, y, width, height, patternTransformMatrix, patternTransform, matrix;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, context.refsHandler.getRendered(this.key, null, function (node) {\n return node.apply(new Context(context.pdf, {\n refsHandler: context.refsHandler,\n textMeasure: context.textMeasure,\n styleSheets: context.styleSheets,\n viewport: context.viewport,\n svg2pdfParameters: context.svg2pdfParameters\n }));\n })];\n case 1:\n _a.sent();\n patternData = {\n key: this.key,\n boundingBox: undefined,\n xStep: 0,\n yStep: 0,\n matrix: undefined\n };\n patternUnitsMatrix = context.pdf.unitMatrix;\n if (!this.pattern.element.hasAttribute('patternUnits') ||\n this.pattern.element.getAttribute('patternUnits').toLowerCase() === 'objectboundingbox') {\n bBox = forNode.getBoundingBox(context);\n patternUnitsMatrix = context.pdf.Matrix(1, 0, 0, 1, bBox[0], bBox[1]);\n fillBBox = this.pattern.getBoundingBox(context);\n x = fillBBox[0] * bBox[0] || 0;\n y = fillBBox[1] * bBox[1] || 0;\n width = fillBBox[2] * bBox[2] || 0;\n height = fillBBox[3] * bBox[3] || 0;\n patternData.boundingBox = [x, y, x + width, y + height];\n patternData.xStep = width;\n patternData.yStep = height;\n }\n patternContentUnitsMatrix = context.pdf.unitMatrix;\n if (this.pattern.element.hasAttribute('patternContentUnits') &&\n this.pattern.element.getAttribute('patternContentUnits').toLowerCase() ===\n 'objectboundingbox') {\n bBox || (bBox = forNode.getBoundingBox(context));\n patternContentUnitsMatrix = context.pdf.Matrix(bBox[2], 0, 0, bBox[3], 0, 0);\n fillBBox = patternData.boundingBox || this.pattern.getBoundingBox(context);\n x = fillBBox[0] / bBox[0] || 0;\n y = fillBBox[1] / bBox[1] || 0;\n width = fillBBox[2] / bBox[2] || 0;\n height = fillBBox[3] / bBox[3] || 0;\n patternData.boundingBox = [x, y, x + width, y + height];\n patternData.xStep = width;\n patternData.yStep = height;\n }\n patternTransformMatrix = context.pdf.unitMatrix;\n patternTransform = getAttribute(this.pattern.element, context.styleSheets, 'patternTransform', 'transform');\n if (patternTransform) {\n patternTransformMatrix = parseTransform(patternTransform, context);\n }\n matrix = patternContentUnitsMatrix;\n matrix = context.pdf.matrixMult(matrix, patternUnitsMatrix); // translate by\n matrix = context.pdf.matrixMult(matrix, patternTransformMatrix);\n matrix = context.pdf.matrixMult(matrix, context.transform);\n patternData.matrix = matrix;\n return [2 /*return*/, patternData];\n }\n });\n });\n };\n return PatternFill;\n}());\n\nfunction parseFill(fill, context) {\n var url = iriReference.exec(fill);\n if (url) {\n var fillUrl = url[1];\n var fillNode = context.refsHandler.get(fillUrl);\n if (fillNode && (fillNode instanceof LinearGradient || fillNode instanceof RadialGradient)) {\n return new GradientFill(fillUrl, fillNode);\n }\n else if (fillNode && fillNode instanceof Pattern) {\n return new PatternFill(fillUrl, fillNode);\n }\n else {\n // unsupported fill argument -> fill black\n return new ColorFill(new RGBColor('rgb(0, 0, 0)'));\n }\n }\n else {\n // plain color\n var fillColor = parseColor(fill, context.attributeState.color);\n if (fillColor.ok) {\n return new ColorFill(fillColor);\n }\n else if (fill === 'none') {\n return null;\n }\n else {\n return null;\n }\n }\n}\n\nfunction parseAttributes(context, svgNode, node) {\n var domNode = node || svgNode.element;\n // update color first so currentColor becomes available for this node\n var color = getAttribute(domNode, context.styleSheets, 'color');\n if (color) {\n var fillColor = parseColor(color, context.attributeState.color);\n if (fillColor.ok) {\n context.attributeState.color = fillColor;\n }\n else {\n // invalid color passed, reset to black\n context.attributeState.color = new RGBColor('rgb(0,0,0)');\n }\n }\n var visibility = getAttribute(domNode, context.styleSheets, 'visibility');\n if (visibility) {\n context.attributeState.visibility = visibility;\n }\n // fill mode\n var fill = getAttribute(domNode, context.styleSheets, 'fill');\n if (fill) {\n context.attributeState.fill = parseFill(fill, context);\n }\n // opacity is realized via a pdf graphics state\n var fillOpacity = getAttribute(domNode, context.styleSheets, 'fill-opacity');\n if (fillOpacity) {\n context.attributeState.fillOpacity = parseFloat(fillOpacity);\n }\n var strokeOpacity = getAttribute(domNode, context.styleSheets, 'stroke-opacity');\n if (strokeOpacity) {\n context.attributeState.strokeOpacity = parseFloat(strokeOpacity);\n }\n var opacity = getAttribute(domNode, context.styleSheets, 'opacity');\n if (opacity) {\n context.attributeState.opacity = parseFloat(opacity);\n }\n // stroke mode\n var strokeWidth = getAttribute(domNode, context.styleSheets, 'stroke-width');\n if (strokeWidth !== void 0 && strokeWidth !== '') {\n context.attributeState.strokeWidth = Math.abs(parseFloat(strokeWidth));\n }\n var stroke = getAttribute(domNode, context.styleSheets, 'stroke');\n if (stroke) {\n if (stroke === 'none') {\n context.attributeState.stroke = null;\n }\n else {\n // gradients, patterns not supported for strokes ...\n var strokeRGB = parseColor(stroke, context.attributeState.color);\n if (strokeRGB.ok) {\n context.attributeState.stroke = new ColorFill(strokeRGB);\n }\n }\n }\n var lineCap = getAttribute(domNode, context.styleSheets, 'stroke-linecap');\n if (lineCap) {\n context.attributeState.strokeLinecap = lineCap;\n }\n var lineJoin = getAttribute(domNode, context.styleSheets, 'stroke-linejoin');\n if (lineJoin) {\n context.attributeState.strokeLinejoin = lineJoin;\n }\n var dashArray = getAttribute(domNode, context.styleSheets, 'stroke-dasharray');\n if (dashArray) {\n var dashOffset = parseInt(getAttribute(domNode, context.styleSheets, 'stroke-dashoffset') || '0');\n context.attributeState.strokeDasharray = parseFloats(dashArray);\n context.attributeState.strokeDashoffset = dashOffset;\n }\n var miterLimit = getAttribute(domNode, context.styleSheets, 'stroke-miterlimit');\n if (miterLimit !== void 0 && miterLimit !== '') {\n context.attributeState.strokeMiterlimit = parseFloat(miterLimit);\n }\n var xmlSpace = domNode.getAttribute('xml:space');\n if (xmlSpace) {\n context.attributeState.xmlSpace = xmlSpace;\n }\n var fontWeight = getAttribute(domNode, context.styleSheets, 'font-weight');\n if (fontWeight) {\n context.attributeState.fontWeight = fontWeight;\n }\n var fontStyle = getAttribute(domNode, context.styleSheets, 'font-style');\n if (fontStyle) {\n context.attributeState.fontStyle = fontStyle;\n }\n var fontFamily = getAttribute(domNode, context.styleSheets, 'font-family');\n if (fontFamily) {\n var fontFamilies = FontFamily.parse(fontFamily);\n context.attributeState.fontFamily = findFirstAvailableFontFamily(context.attributeState, fontFamilies, context);\n }\n var fontSize = getAttribute(domNode, context.styleSheets, 'font-size');\n if (fontSize) {\n var pdfFontSize = context.pdf.getFontSize();\n context.attributeState.fontSize = toPixels(fontSize, pdfFontSize);\n }\n var alignmentBaseline = getAttribute(domNode, context.styleSheets, 'vertical-align') ||\n getAttribute(domNode, context.styleSheets, 'alignment-baseline');\n if (alignmentBaseline) {\n var matchArr = alignmentBaseline.match(/(baseline|text-bottom|alphabetic|ideographic|middle|central|mathematical|text-top|bottom|center|top|hanging)/);\n if (matchArr) {\n context.attributeState.alignmentBaseline = matchArr[0];\n }\n }\n var textAnchor = getAttribute(domNode, context.styleSheets, 'text-anchor');\n if (textAnchor) {\n context.attributeState.textAnchor = textAnchor;\n }\n}\nfunction applyAttributes(childContext, parentContext, node) {\n var fillOpacity = 1.0, strokeOpacity = 1.0;\n fillOpacity *= childContext.attributeState.fillOpacity;\n fillOpacity *= childContext.attributeState.opacity;\n if (childContext.attributeState.fill instanceof ColorFill &&\n typeof childContext.attributeState.fill.color.a !== 'undefined') {\n fillOpacity *= childContext.attributeState.fill.color.a;\n }\n strokeOpacity *= childContext.attributeState.strokeOpacity;\n strokeOpacity *= childContext.attributeState.opacity;\n if (childContext.attributeState.stroke instanceof ColorFill &&\n typeof childContext.attributeState.stroke.color.a !== 'undefined') {\n strokeOpacity *= childContext.attributeState.stroke.color.a;\n }\n var hasFillOpacity = fillOpacity < 1.0;\n var hasStrokeOpacity = strokeOpacity < 1.0;\n // This is a workaround for symbols that are used multiple times with different\n // fill/stroke attributes. All paths within symbols are both filled and stroked\n // and we set the fill/stroke to transparent if the use element has\n // fill/stroke=\"none\".\n if (nodeIs(node, 'use')) {\n hasFillOpacity = true;\n hasStrokeOpacity = true;\n fillOpacity *= childContext.attributeState.fill ? 1 : 0;\n strokeOpacity *= childContext.attributeState.stroke ? 1 : 0;\n }\n else if (childContext.withinUse) {\n if (childContext.attributeState.fill !== parentContext.attributeState.fill) {\n hasFillOpacity = true;\n fillOpacity *= childContext.attributeState.fill ? 1 : 0;\n }\n else if (hasFillOpacity && !childContext.attributeState.fill) {\n fillOpacity = 0;\n }\n if (childContext.attributeState.stroke !== parentContext.attributeState.stroke) {\n hasStrokeOpacity = true;\n strokeOpacity *= childContext.attributeState.stroke ? 1 : 0;\n }\n else if (hasStrokeOpacity && !childContext.attributeState.stroke) {\n strokeOpacity = 0;\n }\n }\n if (hasFillOpacity || hasStrokeOpacity) {\n var gState = {};\n hasFillOpacity && (gState['opacity'] = fillOpacity);\n hasStrokeOpacity && (gState['stroke-opacity'] = strokeOpacity);\n childContext.pdf.setGState(new GState(gState));\n }\n if (childContext.attributeState.fill &&\n childContext.attributeState.fill !== parentContext.attributeState.fill &&\n childContext.attributeState.fill instanceof ColorFill &&\n childContext.attributeState.fill.color.ok &&\n !nodeIs(node, 'text')) {\n // text fill color will be applied through setTextColor()\n childContext.pdf.setFillColor(childContext.attributeState.fill.color.r, childContext.attributeState.fill.color.g, childContext.attributeState.fill.color.b);\n }\n if (childContext.attributeState.strokeWidth !== parentContext.attributeState.strokeWidth) {\n childContext.pdf.setLineWidth(childContext.attributeState.strokeWidth);\n }\n if (childContext.attributeState.stroke !== parentContext.attributeState.stroke &&\n childContext.attributeState.stroke instanceof ColorFill) {\n childContext.pdf.setDrawColor(childContext.attributeState.stroke.color.r, childContext.attributeState.stroke.color.g, childContext.attributeState.stroke.color.b);\n }\n if (childContext.attributeState.strokeLinecap !== parentContext.attributeState.strokeLinecap) {\n childContext.pdf.setLineCap(childContext.attributeState.strokeLinecap);\n }\n if (childContext.attributeState.strokeLinejoin !== parentContext.attributeState.strokeLinejoin) {\n childContext.pdf.setLineJoin(childContext.attributeState.strokeLinejoin);\n }\n if ((childContext.attributeState.strokeDasharray !== parentContext.attributeState.strokeDasharray ||\n childContext.attributeState.strokeDashoffset !==\n parentContext.attributeState.strokeDashoffset) &&\n childContext.attributeState.strokeDasharray) {\n childContext.pdf.setLineDashPattern(childContext.attributeState.strokeDasharray, childContext.attributeState.strokeDashoffset);\n }\n if (childContext.attributeState.strokeMiterlimit !== parentContext.attributeState.strokeMiterlimit) {\n childContext.pdf.setLineMiterLimit(childContext.attributeState.strokeMiterlimit);\n }\n var font;\n if (childContext.attributeState.fontFamily !== parentContext.attributeState.fontFamily) {\n if (fontAliases.hasOwnProperty(childContext.attributeState.fontFamily)) {\n font = fontAliases[childContext.attributeState.fontFamily];\n }\n else {\n font = childContext.attributeState.fontFamily;\n }\n }\n if (childContext.attributeState.fill &&\n childContext.attributeState.fill !== parentContext.attributeState.fill &&\n childContext.attributeState.fill instanceof ColorFill &&\n childContext.attributeState.fill.color.ok) {\n var fillColor = childContext.attributeState.fill.color;\n childContext.pdf.setTextColor(fillColor.r, fillColor.g, fillColor.b);\n }\n var fontStyle;\n if (childContext.attributeState.fontWeight !== parentContext.attributeState.fontWeight ||\n childContext.attributeState.fontStyle !== parentContext.attributeState.fontStyle) {\n fontStyle = '';\n if (childContext.attributeState.fontWeight === 'bold') {\n fontStyle = 'bold';\n }\n if (childContext.attributeState.fontStyle === 'italic') {\n fontStyle += 'italic';\n }\n if (fontStyle === '') {\n fontStyle = 'normal';\n }\n }\n if (font !== undefined || fontStyle !== undefined) {\n if (font === undefined) {\n if (fontAliases.hasOwnProperty(childContext.attributeState.fontFamily)) {\n font = fontAliases[childContext.attributeState.fontFamily];\n }\n else {\n font = childContext.attributeState.fontFamily;\n }\n }\n childContext.pdf.setFont(font, fontStyle);\n }\n if (childContext.attributeState.fontSize !== parentContext.attributeState.fontSize) {\n // correct for a jsPDF-instance measurement unit that differs from `pt`\n childContext.pdf.setFontSize(childContext.attributeState.fontSize * childContext.pdf.internal.scaleFactor);\n }\n}\n\nfunction getClipPathNode(targetNode, context) {\n var clipPathAttr = getAttribute(targetNode.element, context.styleSheets, 'clip-path');\n if (!clipPathAttr) {\n return undefined;\n }\n var match = iriReference.exec(clipPathAttr);\n if (!match) {\n return undefined;\n }\n var clipPathId = match[1];\n var clipNode = context.refsHandler.get(clipPathId);\n return clipNode || undefined;\n}\nfunction applyClipPath(targetNode, clipPathNode, context) {\n return __awaiter(this, void 0, void 0, function () {\n var clipContext, bBox;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n clipContext = context.clone();\n if (clipPathNode.element.hasAttribute('clipPathUnits') &&\n clipPathNode.element.getAttribute('clipPathUnits').toLowerCase() === 'objectboundingbox') {\n bBox = targetNode.getBoundingBox(context);\n clipContext.transform = context.pdf.matrixMult(context.pdf.Matrix(bBox[2], 0, 0, bBox[3], bBox[0], bBox[1]), context.transform);\n }\n return [4 /*yield*/, clipPathNode.apply(clipContext)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n}\n\nvar RenderedNode = /** @class */ (function (_super) {\n __extends(RenderedNode, _super);\n function RenderedNode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n RenderedNode.prototype.render = function (parentContext) {\n return __awaiter(this, void 0, void 0, function () {\n var context, hasClipPath, clipNode;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isVisible(parentContext.attributeState.visibility !== 'hidden', parentContext)) {\n return [2 /*return*/];\n }\n context = parentContext.clone();\n context.transform = context.pdf.matrixMult(this.computeNodeTransform(context), parentContext.transform);\n parseAttributes(context, this);\n hasClipPath = this.element.hasAttribute('clip-path') &&\n getAttribute(this.element, context.styleSheets, 'clip-path') !== 'none';\n if (!hasClipPath) return [3 /*break*/, 3];\n clipNode = getClipPathNode(this, context);\n if (!(clipNode && clipNode.isVisible(true, context))) return [3 /*break*/, 2];\n context.pdf.saveGraphicsState();\n return [4 /*yield*/, applyClipPath(this, clipNode, context)];\n case 1:\n _a.sent();\n return [3 /*break*/, 3];\n case 2: return [2 /*return*/];\n case 3:\n if (!context.withinClipPath) {\n context.pdf.saveGraphicsState();\n }\n applyAttributes(context, parentContext, this.element);\n return [4 /*yield*/, this.renderCore(context)];\n case 4:\n _a.sent();\n if (!context.withinClipPath) {\n context.pdf.restoreGraphicsState();\n }\n if (hasClipPath) {\n context.pdf.restoreGraphicsState();\n }\n return [2 /*return*/];\n }\n });\n });\n };\n return RenderedNode;\n}(SvgNode));\n\nvar GraphicsNode = /** @class */ (function (_super) {\n __extends(GraphicsNode, _super);\n function GraphicsNode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return GraphicsNode;\n}(RenderedNode));\n\nvar GeometryNode = /** @class */ (function (_super) {\n __extends(GeometryNode, _super);\n function GeometryNode(hasMarkers, element, children) {\n var _this = _super.call(this, element, children) || this;\n _this.cachedPath = null;\n _this.hasMarkers = hasMarkers;\n return _this;\n }\n GeometryNode.prototype.renderCore = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var path;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n path = this.getCachedPath(context);\n if (path === null || path.segments.length === 0) {\n return [2 /*return*/];\n }\n if (context.withinClipPath) {\n path.transform(context.transform);\n }\n else {\n context.pdf.setCurrentTransformationMatrix(context.transform);\n }\n path.draw(context);\n return [4 /*yield*/, this.fillOrStroke(context)];\n case 1:\n _a.sent();\n if (!this.hasMarkers) return [3 /*break*/, 3];\n return [4 /*yield*/, this.drawMarkers(context, path)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n GeometryNode.prototype.getCachedPath = function (context) {\n return this.cachedPath || (this.cachedPath = this.getPath(context));\n };\n GeometryNode.prototype.drawMarkers = function (context, path) {\n return __awaiter(this, void 0, void 0, function () {\n var markers;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n markers = this.getMarkers(path, context);\n return [4 /*yield*/, markers.draw(context.clone({ transform: context.pdf.unitMatrix }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n GeometryNode.prototype.fillOrStroke = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var fill, stroke, fillData, _a, isNodeFillRuleEvenOdd;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (context.withinClipPath) {\n return [2 /*return*/];\n }\n fill = context.attributeState.fill;\n stroke = context.attributeState.stroke && context.attributeState.strokeWidth !== 0;\n if (!fill) return [3 /*break*/, 2];\n return [4 /*yield*/, fill.getFillData(this, context)];\n case 1:\n _a = _b.sent();\n return [3 /*break*/, 3];\n case 2:\n _a = undefined;\n _b.label = 3;\n case 3:\n fillData = _a;\n isNodeFillRuleEvenOdd = getAttribute(this.element, context.styleSheets, 'fill-rule') === 'evenodd';\n // This is a workaround for symbols that are used multiple times with different\n // fill/stroke attributes. All paths within symbols are both filled and stroked\n // and we set the fill/stroke to transparent if the use element has\n // fill/stroke=\"none\".\n if ((fill && stroke) || context.withinUse) {\n if (isNodeFillRuleEvenOdd) {\n context.pdf.fillStrokeEvenOdd(fillData);\n }\n else {\n context.pdf.fillStroke(fillData);\n }\n }\n else if (fill) {\n if (isNodeFillRuleEvenOdd) {\n context.pdf.fillEvenOdd(fillData);\n }\n else {\n context.pdf.fill(fillData);\n }\n }\n else if (stroke) {\n context.pdf.stroke();\n }\n else {\n context.pdf.discardPath();\n }\n return [2 /*return*/];\n }\n });\n });\n };\n GeometryNode.prototype.getBoundingBoxCore = function (context) {\n var path = this.getCachedPath(context);\n if (!path) {\n return [0, 0, 0, 0];\n }\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n var maxX = Number.NEGATIVE_INFINITY;\n var maxY = Number.NEGATIVE_INFINITY;\n var x = 0, y = 0;\n for (var i = 0; i < path.segments.length; i++) {\n var seg = path.segments[i];\n if (seg instanceof MoveTo || seg instanceof LineTo || seg instanceof CurveTo) {\n x = seg.x;\n y = seg.y;\n }\n if (seg instanceof CurveTo) {\n minX = Math.min(minX, x, seg.x1, seg.x2, seg.x);\n maxX = Math.max(maxX, x, seg.x1, seg.x2, seg.x);\n minY = Math.min(minY, y, seg.y1, seg.y2, seg.y);\n maxY = Math.max(maxY, y, seg.y1, seg.y2, seg.y);\n }\n else {\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n }\n return [minX, minY, maxX - minX, maxY - minY];\n };\n GeometryNode.prototype.getMarkers = function (path, context) {\n var markerStart = getAttribute(this.element, context.styleSheets, 'marker-start');\n var markerMid = getAttribute(this.element, context.styleSheets, 'marker-mid');\n var markerEnd = getAttribute(this.element, context.styleSheets, 'marker-end');\n var markers = new MarkerList();\n if (markerStart || markerMid || markerEnd) {\n markerEnd && (markerEnd = iri(markerEnd));\n markerStart && (markerStart = iri(markerStart));\n markerMid && (markerMid = iri(markerMid));\n var list_1 = path.segments;\n var prevAngle = [1, 0], curAngle = void 0, first = false, firstAngle = [1, 0], last_1 = false;\n var _loop_1 = function (i) {\n var curr = list_1[i];\n var hasStartMarker = markerStart &&\n (i === 1 || (!(list_1[i] instanceof MoveTo) && list_1[i - 1] instanceof MoveTo));\n if (hasStartMarker) {\n list_1.forEach(function (value, index) {\n if (!last_1 && value instanceof Close && index > i) {\n var tmp = list_1[index - 1];\n last_1 =\n (tmp instanceof MoveTo || tmp instanceof LineTo || tmp instanceof CurveTo) && tmp;\n }\n });\n }\n var hasEndMarker = markerEnd &&\n (i === list_1.length - 1 || (!(list_1[i] instanceof MoveTo) && list_1[i + 1] instanceof MoveTo));\n var hasMidMarker = markerMid && i > 0 && !(i === 1 && list_1[i - 1] instanceof MoveTo);\n var prev = list_1[i - 1] || null;\n if (prev instanceof MoveTo || prev instanceof LineTo || prev instanceof CurveTo) {\n if (curr instanceof CurveTo) {\n hasStartMarker &&\n markers.addMarker(new Marker(markerStart, [prev.x, prev.y], \n // @ts-ignore\n getAngle(last_1 ? [last_1.x, last_1.y] : [prev.x, prev.y], [curr.x1, curr.y1])));\n hasEndMarker &&\n markers.addMarker(new Marker(markerEnd, [curr.x, curr.y], getAngle([curr.x2, curr.y2], [curr.x, curr.y])));\n if (hasMidMarker) {\n curAngle = getDirectionVector([prev.x, prev.y], [curr.x1, curr.y1]);\n curAngle =\n prev instanceof MoveTo ? curAngle : normalize(addVectors(prevAngle, curAngle));\n markers.addMarker(new Marker(markerMid, [prev.x, prev.y], Math.atan2(curAngle[1], curAngle[0])));\n }\n prevAngle = getDirectionVector([curr.x2, curr.y2], [curr.x, curr.y]);\n }\n else if (curr instanceof MoveTo || curr instanceof LineTo) {\n curAngle = getDirectionVector([prev.x, prev.y], [curr.x, curr.y]);\n if (hasStartMarker) {\n // @ts-ignore\n var angle = last_1 ? getDirectionVector([last_1.x, last_1.y], [curr.x, curr.y]) : curAngle;\n markers.addMarker(new Marker(markerStart, [prev.x, prev.y], Math.atan2(angle[1], angle[0])));\n }\n hasEndMarker &&\n markers.addMarker(new Marker(markerEnd, [curr.x, curr.y], Math.atan2(curAngle[1], curAngle[0])));\n if (hasMidMarker) {\n var angle = curr instanceof MoveTo\n ? prevAngle\n : prev instanceof MoveTo\n ? curAngle\n : normalize(addVectors(prevAngle, curAngle));\n markers.addMarker(new Marker(markerMid, [prev.x, prev.y], Math.atan2(angle[1], angle[0])));\n }\n prevAngle = curAngle;\n }\n else if (curr instanceof Close) {\n // @ts-ignore\n curAngle = getDirectionVector([prev.x, prev.y], [first.x, first.y]);\n if (hasMidMarker) {\n var angle = prev instanceof MoveTo ? curAngle : normalize(addVectors(prevAngle, curAngle));\n markers.addMarker(new Marker(markerMid, [prev.x, prev.y], Math.atan2(angle[1], angle[0])));\n }\n if (hasEndMarker) {\n var angle = normalize(addVectors(curAngle, firstAngle));\n markers.addMarker(\n // @ts-ignore\n new Marker(markerEnd, [first.x, first.y], Math.atan2(angle[1], angle[0])));\n }\n prevAngle = curAngle;\n }\n }\n else {\n first = curr instanceof MoveTo && curr;\n var next = list_1[i + 1];\n if (next instanceof MoveTo || next instanceof LineTo || next instanceof CurveTo) {\n // @ts-ignore\n firstAngle = getDirectionVector([first.x, first.y], [next.x, next.y]);\n }\n }\n };\n for (var i = 0; i < list_1.length; i++) {\n _loop_1(i);\n }\n }\n return markers;\n };\n return GeometryNode;\n}(GraphicsNode));\nfunction iri(attribute) {\n var match = iriReference.exec(attribute);\n return (match && match[1]) || undefined;\n}\n\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line(node, children) {\n return _super.call(this, true, node, children) || this;\n }\n Line.prototype.getPath = function (context) {\n if (context.withinClipPath || context.attributeState.stroke === null) {\n return null;\n }\n var x1 = parseFloat(this.element.getAttribute('x1') || '0'), y1 = parseFloat(this.element.getAttribute('y1') || '0');\n var x2 = parseFloat(this.element.getAttribute('x2') || '0'), y2 = parseFloat(this.element.getAttribute('y2') || '0');\n if (!(x1 || x2 || y1 || y2)) {\n return null;\n }\n return new Path().moveTo(x1, y1).lineTo(x2, y2);\n };\n Line.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n Line.prototype.isVisible = function (parentVisible, context) {\n return svgNodeIsVisible(this, parentVisible, context);\n };\n Line.prototype.fillOrStroke = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n context.attributeState.fill = null;\n return [4 /*yield*/, _super.prototype.fillOrStroke.call(this, context)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return Line;\n}(GeometryNode));\n\nvar Symbol$1 = /** @class */ (function (_super) {\n __extends(Symbol, _super);\n function Symbol() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Symbol.prototype.apply = function (parentContext) {\n return __awaiter(this, void 0, void 0, function () {\n var context, hasClipPath, clipNode, _i, _a, child;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.isVisible(parentContext.attributeState.visibility !== 'hidden', parentContext)) {\n return [2 /*return*/];\n }\n context = parentContext.clone();\n context.transform = context.pdf.unitMatrix;\n parseAttributes(context, this);\n hasClipPath = this.element.hasAttribute('clip-path') &&\n getAttribute(this.element, context.styleSheets, 'clip-path') !== 'none';\n if (!hasClipPath) return [3 /*break*/, 3];\n clipNode = getClipPathNode(this, context);\n if (!(clipNode && clipNode.isVisible(true, context))) return [3 /*break*/, 2];\n return [4 /*yield*/, applyClipPath(this, clipNode, context)];\n case 1:\n _b.sent();\n return [3 /*break*/, 3];\n case 2: return [2 /*return*/];\n case 3:\n applyAttributes(context, parentContext, this.element);\n _i = 0, _a = this.children;\n _b.label = 4;\n case 4:\n if (!(_i < _a.length)) return [3 /*break*/, 7];\n child = _a[_i];\n return [4 /*yield*/, child.render(context)];\n case 5:\n _b.sent();\n _b.label = 6;\n case 6:\n _i++;\n return [3 /*break*/, 4];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n Symbol.prototype.getBoundingBoxCore = function (context) {\n return getBoundingBoxByChildren(context, this);\n };\n Symbol.prototype.isVisible = function (parentVisible, context) {\n return svgNodeAndChildrenVisible(this, parentVisible, context);\n };\n Symbol.prototype.computeNodeTransformCore = function (context) {\n var x = parseFloat(getAttribute(this.element, context.styleSheets, 'x') || '0');\n var y = parseFloat(getAttribute(this.element, context.styleSheets, 'y') || '0');\n // TODO: implement refX/refY - this is still to do because common browsers don't seem to support the feature yet\n // x += parseFloat(this.element.getAttribute(\"refX\")) || 0; ???\n // y += parseFloat(this.element.getAttribute(\"refY\")) || 0; ???\n var viewBox = this.element.getAttribute('viewBox');\n if (viewBox) {\n var box = parseFloats(viewBox);\n var width = parseFloat(getAttribute(this.element, context.styleSheets, 'width') ||\n getAttribute(this.element.ownerSVGElement, context.styleSheets, 'width') ||\n viewBox[2]);\n var height = parseFloat(getAttribute(this.element, context.styleSheets, 'height') ||\n getAttribute(this.element.ownerSVGElement, context.styleSheets, 'height') ||\n viewBox[3]);\n return computeViewBoxTransform(this.element, box, x, y, width, height, context);\n }\n else {\n return context.pdf.Matrix(1, 0, 0, 1, x, y);\n }\n };\n return Symbol;\n}(NonRenderedNode));\n\nvar Viewport = /** @class */ (function () {\n function Viewport(width, height) {\n this.width = width;\n this.height = height;\n }\n return Viewport;\n}());\n\n/**\n * Draws the element referenced by a use node, makes use of pdf's XObjects/FormObjects so nodes are only written once\n * to the pdf document. This highly reduces the file size and computation time.\n */\nvar Use = /** @class */ (function (_super) {\n __extends(Use, _super);\n function Use() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Use.prototype.renderCore = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var pf, url, id, refNode, refNodeOpensViewport, x, y, width, height, t, viewBox, refContext, color;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n pf = parseFloat;\n url = this.element.getAttribute('href') || this.element.getAttribute('xlink:href');\n // just in case someone has the idea to use empty use-tags, wtf???\n if (!url)\n return [2 /*return*/];\n id = url.substring(1);\n refNode = context.refsHandler.get(id);\n refNodeOpensViewport = nodeIs(refNode.element, 'symbol,svg') && refNode.element.hasAttribute('viewBox');\n x = pf(getAttribute(this.element, context.styleSheets, 'x') || '0');\n y = pf(getAttribute(this.element, context.styleSheets, 'y') || '0');\n width = undefined;\n height = undefined;\n if (refNodeOpensViewport) {\n // <use> inherits width/height only to svg/symbol\n // if there is no viewBox attribute, width/height don't have an effect\n // in theory, the default value for width/height is 100%, but we currently don't support this\n width = pf(getAttribute(this.element, context.styleSheets, 'width') ||\n getAttribute(refNode.element, context.styleSheets, 'width') ||\n '0');\n height = pf(getAttribute(this.element, context.styleSheets, 'height') ||\n getAttribute(refNode.element, context.styleSheets, 'height') ||\n '0');\n // accumulate x/y to calculate the viewBox transform\n x += pf(getAttribute(refNode.element, context.styleSheets, 'x') || '0');\n y += pf(getAttribute(refNode.element, context.styleSheets, 'y') || '0');\n viewBox = parseFloats(refNode.element.getAttribute('viewBox'));\n t = computeViewBoxTransform(refNode.element, viewBox, x, y, width, height, context);\n }\n else {\n t = context.pdf.Matrix(1, 0, 0, 1, x, y);\n }\n refContext = new Context(context.pdf, {\n refsHandler: context.refsHandler,\n styleSheets: context.styleSheets,\n withinUse: true,\n viewport: refNodeOpensViewport ? new Viewport(width, height) : context.viewport,\n svg2pdfParameters: context.svg2pdfParameters\n });\n color = context.attributeState.color;\n return [4 /*yield*/, context.refsHandler.getRendered(id, color, function (node) {\n return Use.renderReferencedNode(node, id, color, refContext);\n })];\n case 1:\n _a.sent();\n context.pdf.saveGraphicsState();\n context.pdf.setCurrentTransformationMatrix(context.transform);\n // apply the bbox (i.e. clip) if needed\n if (refNodeOpensViewport &&\n getAttribute(refNode.element, context.styleSheets, 'overflow') !== 'visible') {\n context.pdf.rect(x, y, width, height);\n context.pdf.clip().discardPath();\n }\n context.pdf.doFormObject(ReferencesHandler.generateKey(id, color), t);\n context.pdf.restoreGraphicsState();\n return [2 /*return*/];\n }\n });\n });\n };\n Use.renderReferencedNode = function (node, id, color, refContext) {\n return __awaiter(this, void 0, void 0, function () {\n var bBox;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n bBox = node.getBoundingBox(refContext);\n // The content of a PDF form object is implicitly clipped at its /BBox property.\n // SVG, however, applies its clip rect at the <use> attribute, which may modify it.\n // So, make the bBox a lot larger than it needs to be and hope any thick strokes are\n // still within.\n bBox = [bBox[0] - 0.5 * bBox[2], bBox[1] - 0.5 * bBox[3], bBox[2] * 2, bBox[3] * 2];\n // set the color to use for the referenced node\n refContext.attributeState.color = color;\n refContext.pdf.beginFormObject(bBox[0], bBox[1], bBox[2], bBox[3], refContext.pdf.unitMatrix);\n if (!(node instanceof Symbol$1)) return [3 /*break*/, 2];\n return [4 /*yield*/, node.apply(refContext)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, node.render(refContext)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4:\n refContext.pdf.endFormObject(ReferencesHandler.generateKey(id, color));\n return [2 /*return*/];\n }\n });\n });\n };\n Use.prototype.getBoundingBoxCore = function (context) {\n return defaultBoundingBox(this.element, context);\n };\n Use.prototype.isVisible = function (parentVisible, context) {\n return svgNodeIsVisible(this, parentVisible, context);\n };\n Use.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n return Use;\n}(GraphicsNode));\n\nvar Rect = /** @class */ (function (_super) {\n __extends(Rect, _super);\n function Rect(element, children) {\n return _super.call(this, false, element, children) || this;\n }\n Rect.prototype.getPath = function (context) {\n var w = parseFloat(getAttribute(this.element, context.styleSheets, 'width') || '0');\n var h = parseFloat(getAttribute(this.element, context.styleSheets, 'height') || '0');\n if (!isFinite(w) || w <= 0 || !isFinite(h) || h <= 0) {\n return null;\n }\n var rxAttr = getAttribute(this.element, context.styleSheets, 'rx');\n var ryAttr = getAttribute(this.element, context.styleSheets, 'ry');\n var rx = Math.min(parseFloat(rxAttr || ryAttr || '0'), w * 0.5);\n var ry = Math.min(parseFloat(ryAttr || rxAttr || '0'), h * 0.5);\n var x = parseFloat(getAttribute(this.element, context.styleSheets, 'x') || '0');\n var y = parseFloat(getAttribute(this.element, context.styleSheets, 'y') || '0');\n var arc = (4 / 3) * (Math.SQRT2 - 1);\n if (rx === 0 && ry === 0) {\n return new Path()\n .moveTo(x, y)\n .lineTo(x + w, y)\n .lineTo(x + w, y + h)\n .lineTo(x, y + h)\n .close();\n }\n else {\n return new Path()\n .moveTo((x += rx), y)\n .lineTo((x += w - 2 * rx), y)\n .curveTo(x + rx * arc, y, x + rx, y + (ry - ry * arc), (x += rx), (y += ry))\n .lineTo(x, (y += h - 2 * ry))\n .curveTo(x, y + ry * arc, x - rx * arc, y + ry, (x -= rx), (y += ry))\n .lineTo((x += -w + 2 * rx), y)\n .curveTo(x - rx * arc, y, x - rx, y - ry * arc, (x -= rx), (y -= ry))\n .lineTo(x, (y += -h + 2 * ry))\n .curveTo(x, y - ry * arc, x + rx * arc, y - ry, (x += rx), (y -= ry))\n .close();\n }\n };\n Rect.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n Rect.prototype.isVisible = function (parentVisible, context) {\n return svgNodeIsVisible(this, parentVisible, context);\n };\n return Rect;\n}(GeometryNode));\n\nvar EllipseBase = /** @class */ (function (_super) {\n __extends(EllipseBase, _super);\n function EllipseBase(element, children) {\n return _super.call(this, false, element, children) || this;\n }\n EllipseBase.prototype.getPath = function (context) {\n var rx = this.getRx(context);\n var ry = this.getRy(context);\n if (!isFinite(rx) || ry <= 0 || !isFinite(ry) || ry <= 0) {\n return null;\n }\n var x = parseFloat(getAttribute(this.element, context.styleSheets, 'cx') || '0'), y = parseFloat(getAttribute(this.element, context.styleSheets, 'cy') || '0');\n var lx = (4 / 3) * (Math.SQRT2 - 1) * rx, ly = (4 / 3) * (Math.SQRT2 - 1) * ry;\n return new Path()\n .moveTo(x + rx, y)\n .curveTo(x + rx, y - ly, x + lx, y - ry, x, y - ry)\n .curveTo(x - lx, y - ry, x - rx, y - ly, x - rx, y)\n .curveTo(x - rx, y + ly, x - lx, y + ry, x, y + ry)\n .curveTo(x + lx, y + ry, x + rx, y + ly, x + rx, y);\n };\n EllipseBase.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n EllipseBase.prototype.isVisible = function (parentVisible, context) {\n return svgNodeIsVisible(this, parentVisible, context);\n };\n return EllipseBase;\n}(GeometryNode));\n\nvar Ellipse = /** @class */ (function (_super) {\n __extends(Ellipse, _super);\n function Ellipse(element, children) {\n return _super.call(this, element, children) || this;\n }\n Ellipse.prototype.getRx = function (context) {\n return parseFloat(getAttribute(this.element, context.styleSheets, 'rx') || '0');\n };\n Ellipse.prototype.getRy = function (context) {\n return parseFloat(getAttribute(this.element, context.styleSheets, 'ry') || '0');\n };\n return Ellipse;\n}(EllipseBase));\n\nfunction getTextRenderingMode(attributeState) {\n var renderingMode = 'invisible';\n if (attributeState.fill && attributeState.stroke) {\n renderingMode = 'fillThenStroke';\n }\n else if (attributeState.fill) {\n renderingMode = 'fill';\n }\n else if (attributeState.stroke) {\n renderingMode = 'stroke';\n }\n return renderingMode;\n}\nfunction transformXmlSpace(trimmedText, attributeState) {\n trimmedText = removeNewlines(trimmedText);\n trimmedText = replaceTabsBySpace(trimmedText);\n if (attributeState.xmlSpace === 'default') {\n trimmedText = trimmedText.trim();\n trimmedText = consolidateSpaces(trimmedText);\n }\n return trimmedText;\n}\nfunction removeNewlines(str) {\n return str.replace(/[\\n\\r]/g, '');\n}\nfunction replaceTabsBySpace(str) {\n return str.replace(/[\\t]/g, ' ');\n}\nfunction consolidateSpaces(str) {\n return str.replace(/ +/g, ' ');\n}\n// applies text transformations to a text node\nfunction transformText(node, text, context) {\n var textTransform = getAttribute(node, context.styleSheets, 'text-transform');\n switch (textTransform) {\n case 'uppercase':\n return text.toUpperCase();\n case 'lowercase':\n return text.toLowerCase();\n default:\n return text;\n // TODO: capitalize, full-width\n }\n}\nfunction trimLeft(str) {\n return str.replace(/^\\s+/, '');\n}\nfunction trimRight(str) {\n return str.replace(/\\s+$/, '');\n}\n\n/**\n * @param {string} textAnchor\n * @param {number} originX\n * @param {number} originY\n * @constructor\n */\nvar TextChunk = /** @class */ (function () {\n function TextChunk(parent, textAnchor, originX, originY) {\n this.textNode = parent;\n this.texts = [];\n this.textNodes = [];\n this.contexts = [];\n this.textAnchor = textAnchor;\n this.originX = originX;\n this.originY = originY;\n this.textMeasures = [];\n }\n TextChunk.prototype.setX = function (originX) {\n this.originX = originX;\n };\n TextChunk.prototype.setY = function (originY) {\n this.originY = originY;\n };\n TextChunk.prototype.add = function (tSpan, text, context) {\n this.texts.push(text);\n this.textNodes.push(tSpan);\n this.contexts.push(context);\n };\n TextChunk.prototype.rightTrimText = function () {\n for (var r = this.texts.length - 1; r >= 0; r--) {\n if (this.contexts[r].attributeState.xmlSpace === 'default') {\n this.texts[r] = trimRight(this.texts[r]);\n }\n // If find a letter, stop right-trimming\n if (this.texts[r].match(/[^\\s]/)) {\n return false;\n }\n }\n return true;\n };\n TextChunk.prototype.measureText = function (context) {\n for (var i = 0; i < this.texts.length; i++) {\n this.textMeasures.push({\n width: context.textMeasure.measureTextWidth(this.texts[i], this.contexts[i].attributeState),\n length: this.texts[i].length\n });\n }\n };\n TextChunk.prototype.put = function (context, charSpace) {\n var i, textNode, textNodeContext, textMeasure;\n var alreadySeen = [];\n var xs = [], ys = [];\n var currentTextX = this.originX, currentTextY = this.originY;\n var minX = currentTextX, maxX = currentTextX;\n for (i = 0; i < this.textNodes.length; i++) {\n textNode = this.textNodes[i];\n textNodeContext = this.contexts[i];\n textMeasure = this.textMeasures[i] || {\n width: context.textMeasure.measureTextWidth(this.texts[i], this.contexts[i].attributeState),\n length: this.texts[i].length\n };\n var x = currentTextX;\n var y = currentTextY;\n if (textNode.nodeName !== '#text') {\n if (!alreadySeen.includes(textNode)) {\n alreadySeen.push(textNode);\n var tSpanDx = textNode.getAttribute('dx');\n if (tSpanDx !== null) {\n x += toPixels(tSpanDx, textNodeContext.attributeState.fontSize);\n }\n var tSpanDy = textNode.getAttribute('dy');\n if (tSpanDy !== null) {\n y += toPixels(tSpanDy, textNodeContext.attributeState.fontSize);\n }\n }\n }\n xs[i] = x;\n ys[i] = y;\n currentTextX = x + textMeasure.width + textMeasure.length * charSpace;\n currentTextY = y;\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, currentTextX);\n }\n var textOffset = 0;\n switch (this.textAnchor) {\n case 'start':\n textOffset = 0;\n break;\n case 'middle':\n textOffset = (maxX - minX) / 2;\n break;\n case 'end':\n textOffset = maxX - minX;\n break;\n }\n for (i = 0; i < this.textNodes.length; i++) {\n textNode = this.textNodes[i];\n textNodeContext = this.contexts[i];\n if (textNode.nodeName !== '#text') {\n if (textNodeContext.attributeState.visibility === 'hidden') {\n continue;\n }\n }\n context.pdf.saveGraphicsState();\n applyAttributes(textNodeContext, context, textNode);\n var alignmentBaseline = textNodeContext.attributeState.alignmentBaseline;\n var textRenderingMode = getTextRenderingMode(textNodeContext.attributeState);\n context.pdf.text(this.texts[i], xs[i] - textOffset, ys[i], {\n baseline: mapAlignmentBaseline(alignmentBaseline),\n angle: context.transform,\n renderingMode: textRenderingMode === 'fill' ? void 0 : textRenderingMode,\n charSpace: charSpace === 0 ? void 0 : charSpace\n });\n context.pdf.restoreGraphicsState();\n }\n return [currentTextX, currentTextY];\n };\n return TextChunk;\n}());\n\nvar TextNode = /** @class */ (function (_super) {\n __extends(TextNode, _super);\n function TextNode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n TextNode.prototype.processTSpans = function (textNode, node, context, textChunks, currentTextSegment, trimInfo) {\n var pdfFontSize = context.pdf.getFontSize();\n var xmlSpace = context.attributeState.xmlSpace;\n var firstText = true, initialSpace = false;\n for (var i = 0; i < node.childNodes.length; i++) {\n var childNode = node.childNodes[i];\n if (!childNode.textContent) {\n continue;\n }\n var textContent = childNode.textContent;\n if (childNode.nodeName === '#text') {\n var trimmedText = removeNewlines(textContent);\n trimmedText = replaceTabsBySpace(trimmedText);\n if (xmlSpace === 'default') {\n trimmedText = consolidateSpaces(trimmedText);\n // If first text in tspan and starts with a space\n if (firstText && trimmedText.match(/^\\s/)) {\n initialSpace = true;\n }\n // No longer the first text if we've found a letter\n if (trimmedText.match(/[^\\s]/)) {\n firstText = false;\n }\n // Consolidate spaces across different children\n if (trimInfo.prevText.match(/\\s$/)) {\n trimmedText = trimLeft(trimmedText);\n }\n }\n var transformedText = transformText(node, trimmedText, context);\n currentTextSegment.add(node, transformedText, context);\n trimInfo.prevText = textContent;\n trimInfo.prevContext = context;\n }\n else if (nodeIs(childNode, 'title')) ;\n else if (nodeIs(childNode, 'tspan')) {\n var tSpan = childNode;\n var tSpanAbsX = tSpan.getAttribute('x');\n if (tSpanAbsX !== null) {\n var x = toPixels(tSpanAbsX, pdfFontSize);\n currentTextSegment = new TextChunk(this, getAttribute(tSpan, context.styleSheets, 'text-anchor') ||\n context.attributeState.textAnchor, x, 0);\n textChunks.push({ type: 'y', chunk: currentTextSegment });\n }\n var tSpanAbsY = tSpan.getAttribute('y');\n if (tSpanAbsY !== null) {\n var y = toPixels(tSpanAbsY, pdfFontSize);\n currentTextSegment = new TextChunk(this, getAttribute(tSpan, context.styleSheets, 'text-anchor') ||\n context.attributeState.textAnchor, 0, y);\n textChunks.push({ type: 'x', chunk: currentTextSegment });\n }\n var childContext = context.clone();\n parseAttributes(childContext, textNode, tSpan);\n this.processTSpans(textNode, tSpan, childContext, textChunks, currentTextSegment, trimInfo);\n }\n }\n return initialSpace;\n };\n TextNode.prototype.renderCore = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var xOffset, charSpace, lengthAdjustment, pdfFontSize, textX, textY, dx, dy, textLength, visibility, tSpanCount, textContent, trimmedText, transformedText, defaultSize, alignmentBaseline, textRenderingMode, textChunks, currentTextSegment, initialSpace, trimRight, r, totalDefaultWidth_1, totalLength_1;\n return __generator(this, function (_a) {\n context.pdf.saveGraphicsState();\n xOffset = 0;\n charSpace = 0;\n lengthAdjustment = 1;\n pdfFontSize = context.pdf.getFontSize();\n textX = toPixels(this.element.getAttribute('x'), pdfFontSize);\n textY = toPixels(this.element.getAttribute('y'), pdfFontSize);\n dx = toPixels(this.element.getAttribute('dx'), pdfFontSize);\n dy = toPixels(this.element.getAttribute('dy'), pdfFontSize);\n textLength = parseFloat(this.element.getAttribute('textLength') || '0');\n visibility = context.attributeState.visibility;\n tSpanCount = this.element.childElementCount;\n if (tSpanCount === 0) {\n textContent = this.element.textContent || '';\n trimmedText = transformXmlSpace(textContent, context.attributeState);\n transformedText = transformText(this.element, trimmedText, context);\n xOffset = context.textMeasure.getTextOffset(transformedText, context.attributeState);\n if (textLength > 0) {\n defaultSize = context.textMeasure.measureTextWidth(transformedText, context.attributeState);\n if (context.attributeState.xmlSpace === 'default' && textContent.match(/^\\s/)) {\n lengthAdjustment = 0;\n }\n charSpace = (textLength - defaultSize) / (transformedText.length - lengthAdjustment) || 0;\n }\n if (visibility === 'visible') {\n alignmentBaseline = context.attributeState.alignmentBaseline;\n textRenderingMode = getTextRenderingMode(context.attributeState);\n context.pdf.text(transformedText, textX + dx - xOffset, textY + dy, {\n baseline: mapAlignmentBaseline(alignmentBaseline),\n angle: context.transform,\n renderingMode: textRenderingMode === 'fill' ? void 0 : textRenderingMode,\n charSpace: charSpace === 0 ? void 0 : charSpace\n });\n }\n }\n else {\n textChunks = [];\n currentTextSegment = new TextChunk(this, context.attributeState.textAnchor, textX + dx, textY + dy);\n textChunks.push({ type: '', chunk: currentTextSegment });\n initialSpace = this.processTSpans(this, this.element, context, textChunks, currentTextSegment, \n // Set prevText to ' ' so any spaces on left of <text> are trimmed\n { prevText: ' ', prevContext: context });\n lengthAdjustment = initialSpace ? 0 : 1;\n trimRight = true;\n for (r = textChunks.length - 1; r >= 0; r--) {\n if (trimRight) {\n trimRight = textChunks[r].chunk.rightTrimText();\n }\n }\n if (textLength > 0) {\n totalDefaultWidth_1 = 0;\n totalLength_1 = 0;\n textChunks.forEach(function (_a) {\n var chunk = _a.chunk;\n chunk.measureText(context);\n chunk.textMeasures.forEach(function (_a) {\n var width = _a.width, length = _a.length;\n totalDefaultWidth_1 += width;\n totalLength_1 += length;\n });\n });\n charSpace = (textLength - totalDefaultWidth_1) / (totalLength_1 - lengthAdjustment);\n }\n // Put the textchunks\n textChunks.reduce(function (lastPositions, _a) {\n var type = _a.type, chunk = _a.chunk;\n if (type === 'x') {\n chunk.setX(lastPositions[0]);\n }\n else if (type === 'y') {\n chunk.setY(lastPositions[1]);\n }\n return chunk.put(context, charSpace);\n }, [0, 0]);\n }\n context.pdf.restoreGraphicsState();\n return [2 /*return*/];\n });\n });\n };\n TextNode.prototype.isVisible = function (parentVisible, context) {\n return svgNodeAndChildrenVisible(this, parentVisible, context);\n };\n TextNode.prototype.getBoundingBoxCore = function (context) {\n return defaultBoundingBox(this.element, context);\n };\n TextNode.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n return TextNode;\n}(GraphicsNode));\n\nvar PathNode = /** @class */ (function (_super) {\n __extends(PathNode, _super);\n function PathNode(node, children) {\n return _super.call(this, true, node, children) || this;\n }\n PathNode.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n PathNode.prototype.isVisible = function (parentVisible, context) {\n return svgNodeIsVisible(this, parentVisible, context);\n };\n PathNode.prototype.getPath = function (context) {\n var svgPath = new SvgPath(getAttribute(this.element, context.styleSheets, 'd') || '')\n .unshort()\n .unarc()\n .abs();\n var path = new Path();\n var prevX;\n var prevY;\n svgPath.iterate(function (seg) {\n var type = seg[0];\n switch (type) {\n case 'M':\n path.moveTo(seg[1], seg[2]);\n break;\n case 'L':\n path.lineTo(seg[1], seg[2]);\n break;\n case 'H':\n path.lineTo(seg[1], prevY);\n break;\n case 'V':\n path.lineTo(prevX, seg[1]);\n break;\n case 'C':\n path.curveTo(seg[1], seg[2], seg[3], seg[4], seg[5], seg[6]);\n break;\n case 'Q':\n var p2 = toCubic([prevX, prevY], [seg[1], seg[2]]);\n var p3 = toCubic([seg[3], seg[4]], [seg[1], seg[2]]);\n path.curveTo(p2[0], p2[1], p3[0], p3[1], seg[3], seg[4]);\n break;\n case 'Z':\n path.close();\n break;\n }\n switch (type) {\n case 'M':\n case 'L':\n prevX = seg[1];\n prevY = seg[2];\n break;\n case 'H':\n prevX = seg[1];\n break;\n case 'V':\n prevY = seg[1];\n break;\n case 'C':\n prevX = seg[5];\n prevY = seg[6];\n break;\n case 'Q':\n prevX = seg[3];\n prevY = seg[4];\n break;\n }\n });\n return path;\n };\n return PathNode;\n}(GeometryNode));\n\n// groups: 1: mime-type (+ charset), 2: mime-type (w/o charset), 3: charset, 4: base64?, 5: body\nvar dataUriRegex = /^\\s*data:(([^/,;]+\\/[^/,;]+)(?:;([^,;=]+=[^,;=]+))?)?(?:;(base64))?,(.*\\s*)$/i;\nvar ImageNode = /** @class */ (function (_super) {\n __extends(ImageNode, _super);\n function ImageNode(element, children) {\n var _this = _super.call(this, element, children) || this;\n _this.imageLoadingPromise = null;\n _this.imageUrl = _this.element.getAttribute('xlink:href') || _this.element.getAttribute('href');\n if (_this.imageUrl) {\n // start loading the image as early as possible\n _this.imageLoadingPromise = ImageNode.fetchImageData(_this.imageUrl);\n }\n return _this;\n }\n ImageNode.prototype.renderCore = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var width, height, x, y, _a, data, format, parser, svgElement, preserveAspectRatio, idMap, svgnode, dataUri;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.imageLoadingPromise) {\n return [2 /*return*/];\n }\n context.pdf.setCurrentTransformationMatrix(context.transform);\n width = parseFloat(getAttribute(this.element, context.styleSheets, 'width') || '0'), height = parseFloat(getAttribute(this.element, context.styleSheets, 'height') || '0'), x = parseFloat(getAttribute(this.element, context.styleSheets, 'x') || '0'), y = parseFloat(getAttribute(this.element, context.styleSheets, 'y') || '0');\n if (!isFinite(width) || width <= 0 || !isFinite(height) || height <= 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.imageLoadingPromise];\n case 1:\n _a = _b.sent(), data = _a.data, format = _a.format;\n if (!(format.indexOf('svg') === 0)) return [3 /*break*/, 3];\n parser = new DOMParser();\n svgElement = parser.parseFromString(data, 'image/svg+xml').firstElementChild;\n preserveAspectRatio = this.element.getAttribute('preserveAspectRatio');\n if (!preserveAspectRatio ||\n preserveAspectRatio.indexOf('defer') < 0 ||\n !svgElement.getAttribute('preserveAspectRatio')) {\n svgElement.setAttribute('preserveAspectRatio', preserveAspectRatio || '');\n }\n svgElement.setAttribute('x', String(x));\n svgElement.setAttribute('y', String(y));\n svgElement.setAttribute('width', String(width));\n svgElement.setAttribute('height', String(height));\n idMap = {};\n svgnode = parse(svgElement, idMap);\n return [4 /*yield*/, svgnode.render(new Context(context.pdf, {\n refsHandler: new ReferencesHandler(idMap),\n styleSheets: context.styleSheets,\n viewport: new Viewport(width, height),\n svg2pdfParameters: context.svg2pdfParameters\n }))];\n case 2:\n _b.sent();\n return [2 /*return*/];\n case 3:\n dataUri = \"data:image/\" + format + \";base64,\" + btoa(data);\n try {\n context.pdf.addImage(dataUri, '', // will be ignored anyways if imageUrl is a data url\n x, y, width, height);\n }\n catch (e) {\n typeof console === 'object' &&\n console.warn &&\n console.warn(\"Could not load image \" + this.imageUrl + \".\\n\" + e);\n }\n _b.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n ImageNode.prototype.getBoundingBoxCore = function (context) {\n return defaultBoundingBox(this.element, context);\n };\n ImageNode.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n ImageNode.prototype.isVisible = function (parentVisible, context) {\n return svgNodeIsVisible(this, parentVisible, context);\n };\n ImageNode.fetchImageData = function (imageUrl) {\n return __awaiter(this, void 0, void 0, function () {\n var data, format, match, mimeType, mimeTypeParts;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n match = imageUrl.match(dataUriRegex);\n if (!match) return [3 /*break*/, 1];\n mimeType = match[2];\n mimeTypeParts = mimeType.split('/');\n if (mimeTypeParts[0] !== 'image') {\n throw new Error(\"Unsupported image URL: \" + imageUrl);\n }\n format = mimeTypeParts[1];\n data = match[5];\n if (match[4] === 'base64') {\n data = atob(data);\n }\n else {\n data = decodeURIComponent(data);\n }\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, ImageNode.fetchImage(imageUrl)];\n case 2:\n data = _a.sent();\n format = imageUrl.substring(imageUrl.lastIndexOf('.') + 1);\n _a.label = 3;\n case 3: return [2 /*return*/, {\n data: data,\n format: format\n }];\n }\n });\n });\n };\n ImageNode.fetchImage = function (imageUrl) {\n return new Promise(function (resolve, reject) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', imageUrl, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = function () {\n if (xhr.status !== 200) {\n throw new Error(\"Error \" + xhr.status + \": Failed to load image '\" + imageUrl + \"'\");\n }\n var bytes = new Uint8Array(xhr.response);\n var data = '';\n for (var i = 0; i < bytes.length; i++) {\n data += String.fromCharCode(bytes[i]);\n }\n resolve(data);\n };\n xhr.onerror = reject;\n xhr.onabort = reject;\n xhr.send(null);\n });\n };\n ImageNode.getMimeType = function (format) {\n format = format.toLowerCase();\n switch (format) {\n case 'jpg':\n case 'jpeg':\n return 'image/jpeg';\n default:\n return \"image/\" + format;\n }\n };\n return ImageNode;\n}(GraphicsNode));\n\nvar Traverse = /** @class */ (function (_super) {\n __extends(Traverse, _super);\n function Traverse(closed, node, children) {\n var _this = _super.call(this, true, node, children) || this;\n _this.closed = closed;\n return _this;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Traverse.prototype.getPath = function (context) {\n if (!this.element.hasAttribute('points') || this.element.getAttribute('points') === '') {\n return null;\n }\n // @ts-ignore\n var points = Traverse.parsePointsString(this.element.getAttribute('points'));\n var path = new Path();\n if (points.length < 1) {\n return path;\n }\n path.moveTo(points[0][0], points[0][1]);\n for (var i = 1; i < points.length; i++) {\n path.lineTo(points[i][0], points[i][1]);\n }\n if (this.closed) {\n path.close();\n }\n return path;\n };\n Traverse.prototype.isVisible = function (parentVisible, context) {\n return svgNodeIsVisible(this, parentVisible, context);\n };\n Traverse.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n Traverse.parsePointsString = function (string) {\n var floats = parseFloats(string);\n var result = [];\n for (var i = 0; i < floats.length - 1; i += 2) {\n var x = floats[i];\n var y = floats[i + 1];\n result.push([x, y]);\n }\n return result;\n };\n return Traverse;\n}(GeometryNode));\n\nvar Polygon = /** @class */ (function (_super) {\n __extends(Polygon, _super);\n function Polygon(node, children) {\n return _super.call(this, true, node, children) || this;\n }\n return Polygon;\n}(Traverse));\n\nvar VoidNode = /** @class */ (function (_super) {\n __extends(VoidNode, _super);\n function VoidNode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n VoidNode.prototype.render = function (parentContext) {\n return Promise.resolve();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n VoidNode.prototype.getBoundingBoxCore = function (context) {\n return [0, 0, 0, 0];\n };\n VoidNode.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n VoidNode.prototype.isVisible = function (parentVisible, context) {\n return svgNodeIsVisible(this, parentVisible, context);\n };\n return VoidNode;\n}(SvgNode));\n\nvar MarkerNode = /** @class */ (function (_super) {\n __extends(MarkerNode, _super);\n function MarkerNode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MarkerNode.prototype.apply = function (parentContext) {\n return __awaiter(this, void 0, void 0, function () {\n var tfMatrix, bBox, _i, _a, child;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n tfMatrix = this.computeNodeTransform(parentContext);\n bBox = this.getBoundingBox(parentContext);\n parentContext.pdf.beginFormObject(bBox[0], bBox[1], bBox[2], bBox[3], tfMatrix);\n _i = 0, _a = this.children;\n _b.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3 /*break*/, 4];\n child = _a[_i];\n return [4 /*yield*/, child.render(new Context(parentContext.pdf, {\n refsHandler: parentContext.refsHandler,\n styleSheets: parentContext.styleSheets,\n viewport: parentContext.viewport,\n svg2pdfParameters: parentContext.svg2pdfParameters\n }))];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n _i++;\n return [3 /*break*/, 1];\n case 4:\n parentContext.pdf.endFormObject(this.element.getAttribute('id'));\n return [2 /*return*/];\n }\n });\n });\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MarkerNode.prototype.getBoundingBoxCore = function (context) {\n var viewBox = this.element.getAttribute('viewBox');\n var vb;\n if (viewBox) {\n vb = parseFloats(viewBox);\n }\n return [\n (vb && vb[0]) || 0,\n (vb && vb[1]) || 0,\n (vb && vb[2]) || parseFloat(this.element.getAttribute('marker-width') || '0'),\n (vb && vb[3]) || parseFloat(this.element.getAttribute('marker-height') || '0')\n ];\n };\n MarkerNode.prototype.computeNodeTransformCore = function (context) {\n var refX = parseFloat(this.element.getAttribute('refX') || '0');\n var refY = parseFloat(this.element.getAttribute('refY') || '0');\n var viewBox = this.element.getAttribute('viewBox');\n var nodeTransform;\n if (viewBox) {\n var bounds = parseFloats(viewBox);\n // \"Markers are drawn such that their reference point (i.e., attributes refX and refY)\n // is positioned at the given vertex.\" - The \"translate\" part of the viewBox transform is\n // ignored.\n nodeTransform = computeViewBoxTransform(this.element, bounds, 0, 0, parseFloat(this.element.getAttribute('markerWidth') || '3'), parseFloat(this.element.getAttribute('markerHeight') || '3'), context, true);\n nodeTransform = context.pdf.matrixMult(context.pdf.Matrix(1, 0, 0, 1, -refX, -refY), nodeTransform);\n }\n else {\n nodeTransform = context.pdf.Matrix(1, 0, 0, 1, -refX, -refY);\n }\n return nodeTransform;\n };\n MarkerNode.prototype.isVisible = function (parentVisible, context) {\n return svgNodeAndChildrenVisible(this, parentVisible, context);\n };\n return MarkerNode;\n}(NonRenderedNode));\n\nvar Circle = /** @class */ (function (_super) {\n __extends(Circle, _super);\n function Circle(node, children) {\n return _super.call(this, node, children) || this;\n }\n Circle.prototype.getR = function (context) {\n var _a;\n return ((_a = this.r) !== null && _a !== void 0 ? _a : (this.r = parseFloat(getAttribute(this.element, context.styleSheets, 'r') || '0')));\n };\n Circle.prototype.getRx = function (context) {\n return this.getR(context);\n };\n Circle.prototype.getRy = function (context) {\n return this.getR(context);\n };\n return Circle;\n}(EllipseBase));\n\nvar Polyline = /** @class */ (function (_super) {\n __extends(Polyline, _super);\n function Polyline(node, children) {\n return _super.call(this, false, node, children) || this;\n }\n return Polyline;\n}(Traverse));\n\nvar ContainerNode = /** @class */ (function (_super) {\n __extends(ContainerNode, _super);\n function ContainerNode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ContainerNode.prototype.renderCore = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var _i, _a, child;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _i = 0, _a = this.children;\n _b.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3 /*break*/, 4];\n child = _a[_i];\n return [4 /*yield*/, child.render(context)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n _i++;\n return [3 /*break*/, 1];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n ContainerNode.prototype.getBoundingBoxCore = function (context) {\n return getBoundingBoxByChildren(context, this);\n };\n return ContainerNode;\n}(RenderedNode));\n\nvar Svg = /** @class */ (function (_super) {\n __extends(Svg, _super);\n function Svg() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Svg.prototype.isVisible = function (parentVisible, context) {\n return svgNodeAndChildrenVisible(this, parentVisible, context);\n };\n Svg.prototype.render = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var x, y, width, height, transform;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isVisible(context.attributeState.visibility !== 'hidden', context)) {\n return [2 /*return*/];\n }\n x = this.getX(context);\n y = this.getY(context);\n width = this.getWidth(context);\n height = this.getHeight(context);\n context.pdf.saveGraphicsState();\n transform = context.transform;\n if (this.element.hasAttribute('transform')) {\n // SVG 2 allows transforms on SVG elements\n // \"The transform should be applied as if the svg had a parent element with that transform set.\"\n transform = context.pdf.matrixMult(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n parseTransform(this.element.getAttribute('transform'), context), transform);\n }\n context.pdf.setCurrentTransformationMatrix(transform);\n if (!context.withinUse &&\n getAttribute(this.element, context.styleSheets, 'overflow') !== 'visible') {\n // establish a new viewport\n context.pdf\n .rect(x, y, width, height)\n .clip()\n .discardPath();\n }\n return [4 /*yield*/, _super.prototype.render.call(this, context.clone({\n transform: context.pdf.unitMatrix,\n viewport: context.withinUse ? context.viewport : new Viewport(width, height)\n }))];\n case 1:\n _a.sent();\n context.pdf.restoreGraphicsState();\n return [2 /*return*/];\n }\n });\n });\n };\n Svg.prototype.computeNodeTransform = function (context) {\n return this.computeNodeTransformCore(context);\n };\n Svg.prototype.computeNodeTransformCore = function (context) {\n if (context.withinUse) {\n return context.pdf.unitMatrix;\n }\n var x = this.getX(context);\n var y = this.getY(context);\n var viewBox = this.getViewBox();\n var nodeTransform;\n if (viewBox) {\n var width = this.getWidth(context);\n var height = this.getHeight(context);\n nodeTransform = computeViewBoxTransform(this.element, viewBox, x, y, width, height, context);\n }\n else {\n nodeTransform = context.pdf.Matrix(1, 0, 0, 1, x, y);\n }\n return nodeTransform;\n };\n Svg.prototype.getWidth = function (context) {\n if (this.width !== undefined) {\n return this.width;\n }\n var width;\n var parameters = context.svg2pdfParameters;\n if (this.isOutermostSvg(context)) {\n // special treatment for the outermost SVG element\n if (parameters.width != null) {\n // if there is a user defined width, use it\n width = parameters.width;\n }\n else {\n // otherwise check if the SVG element defines the width itself\n var widthAttr = getAttribute(this.element, context.styleSheets, 'width');\n if (widthAttr) {\n width = parseFloat(widthAttr);\n }\n else {\n // if not, check if we can figure out the aspect ratio from the viewBox attribute\n var viewBox = this.getViewBox();\n if (viewBox &&\n (parameters.height != null || getAttribute(this.element, context.styleSheets, 'height'))) {\n // if there is a viewBox and the height is defined, use the width that matches the height together with the aspect ratio\n var aspectRatio = viewBox[2] / viewBox[3];\n width = this.getHeight(context) * aspectRatio;\n }\n else {\n // if there is no viewBox use a default of 300 or the largest size that fits into the outer viewport\n // at an aspect ratio of 2:1\n width = Math.min(300, context.viewport.width, context.viewport.height * 2);\n }\n }\n }\n }\n else {\n var widthAttr = getAttribute(this.element, context.styleSheets, 'width');\n width = widthAttr ? parseFloat(widthAttr) : context.viewport.width;\n }\n return (this.width = width);\n };\n Svg.prototype.getHeight = function (context) {\n if (this.height !== undefined) {\n return this.height;\n }\n var height;\n var parameters = context.svg2pdfParameters;\n if (this.isOutermostSvg(context)) {\n // special treatment for the outermost SVG element\n if (parameters.height != null) {\n // if there is a user defined height, use it\n height = parameters.height;\n }\n else {\n // otherwise check if the SVG element defines the height itself\n var heightAttr = getAttribute(this.element, context.styleSheets, 'height');\n if (heightAttr) {\n height = parseFloat(heightAttr);\n }\n else {\n // if not, check if we can figure out the aspect ratio from the viewBox attribute\n var viewBox = this.getViewBox();\n if (viewBox) {\n // if there is a viewBox, use the height that matches the width together with the aspect ratio\n var aspectRatio = viewBox[2] / viewBox[3];\n height = this.getWidth(context) / aspectRatio;\n }\n else {\n // if there is no viewBox use a default of 150 or the largest size that fits into the outer viewport\n // at an aspect ratio of 2:1\n height = Math.min(150, context.viewport.width / 2, context.viewport.height);\n }\n }\n }\n }\n else {\n var heightAttr = getAttribute(this.element, context.styleSheets, 'height');\n height = heightAttr ? parseFloat(heightAttr) : context.viewport.height;\n }\n return (this.height = height);\n };\n Svg.prototype.getX = function (context) {\n if (this.x !== undefined) {\n return this.x;\n }\n if (this.isOutermostSvg(context)) {\n return (this.x = 0);\n }\n var xAttr = getAttribute(this.element, context.styleSheets, 'x');\n return (this.x = xAttr ? parseFloat(xAttr) : 0);\n };\n Svg.prototype.getY = function (context) {\n if (this.y !== undefined) {\n return this.y;\n }\n if (this.isOutermostSvg(context)) {\n return (this.y = 0);\n }\n var yAttr = getAttribute(this.element, context.styleSheets, 'y');\n return (this.y = yAttr ? parseFloat(yAttr) : 0);\n };\n Svg.prototype.getViewBox = function () {\n if (this.viewBox !== undefined) {\n return this.viewBox;\n }\n var viewBox = this.element.getAttribute('viewBox');\n return (this.viewBox = viewBox ? parseFloats(viewBox) : undefined);\n };\n Svg.prototype.isOutermostSvg = function (context) {\n return context.svg2pdfParameters.element === this.element;\n };\n return Svg;\n}(ContainerNode));\n\nvar Group = /** @class */ (function (_super) {\n __extends(Group, _super);\n function Group() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Group.prototype.isVisible = function (parentVisible, context) {\n return svgNodeAndChildrenVisible(this, parentVisible, context);\n };\n Group.prototype.computeNodeTransformCore = function (context) {\n return context.pdf.unitMatrix;\n };\n return Group;\n}(ContainerNode));\n\nvar ClipPath = /** @class */ (function (_super) {\n __extends(ClipPath, _super);\n function ClipPath() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ClipPath.prototype.apply = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var clipPathMatrix, _i, _a, child;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.isVisible(true, context)) {\n return [2 /*return*/];\n }\n clipPathMatrix = context.pdf.matrixMult(this.computeNodeTransform(context), context.transform);\n context.pdf.setCurrentTransformationMatrix(clipPathMatrix);\n _i = 0, _a = this.children;\n _b.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3 /*break*/, 4];\n child = _a[_i];\n return [4 /*yield*/, child.render(new Context(context.pdf, {\n refsHandler: context.refsHandler,\n styleSheets: context.styleSheets,\n viewport: context.viewport,\n withinClipPath: true,\n svg2pdfParameters: context.svg2pdfParameters\n }))];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n _i++;\n return [3 /*break*/, 1];\n case 4:\n context.pdf.clip().discardPath();\n // as we cannot use restoreGraphicsState() to reset the transform (this would reset the clipping path, as well),\n // we must append the inverse instead\n context.pdf.setCurrentTransformationMatrix(clipPathMatrix.inversed());\n return [2 /*return*/];\n }\n });\n });\n };\n ClipPath.prototype.getBoundingBoxCore = function (context) {\n return getBoundingBoxByChildren(context, this);\n };\n ClipPath.prototype.isVisible = function (parentVisible, context) {\n return svgNodeAndChildrenVisible(this, parentVisible, context);\n };\n return ClipPath;\n}(NonRenderedNode));\n\nfunction parse(node, idMap) {\n var svgnode;\n var children = [];\n forEachChild(node, function (i, n) { return children.push(parse(n, idMap)); });\n switch (node.tagName.toLowerCase()) {\n case 'a':\n case 'g':\n svgnode = new Group(node, children);\n break;\n case 'circle':\n svgnode = new Circle(node, children);\n break;\n case 'clippath':\n svgnode = new ClipPath(node, children);\n break;\n case 'ellipse':\n svgnode = new Ellipse(node, children);\n break;\n case 'lineargradient':\n svgnode = new LinearGradient(node, children);\n break;\n case 'image':\n svgnode = new ImageNode(node, children);\n break;\n case 'line':\n svgnode = new Line(node, children);\n break;\n case 'marker':\n svgnode = new MarkerNode(node, children);\n break;\n case 'path':\n svgnode = new PathNode(node, children);\n break;\n case 'pattern':\n svgnode = new Pattern(node, children);\n break;\n case 'polygon':\n svgnode = new Polygon(node, children);\n break;\n case 'polyline':\n svgnode = new Polyline(node, children);\n break;\n case 'radialgradient':\n svgnode = new RadialGradient(node, children);\n break;\n case 'rect':\n svgnode = new Rect(node, children);\n break;\n case 'svg':\n svgnode = new Svg(node, children);\n break;\n case 'symbol':\n svgnode = new Symbol$1(node, children);\n break;\n case 'text':\n svgnode = new TextNode(node, children);\n break;\n case 'use':\n svgnode = new Use(node, children);\n break;\n default:\n svgnode = new VoidNode(node, children);\n break;\n }\n if (idMap != undefined && svgnode.element.hasAttribute('id')) {\n var id = cssEsc(svgnode.element.id, { isIdentifier: true });\n idMap[id] = idMap[id] || svgnode;\n }\n svgnode.children.forEach(function (c) { return c.setParent(svgnode); });\n return svgnode;\n}\n\nvar StyleSheets = /** @class */ (function () {\n function StyleSheets(rootSvg, loadExtSheets) {\n this.rootSvg = rootSvg;\n this.loadExternalSheets = loadExtSheets;\n this.styleSheets = [];\n }\n StyleSheets.prototype.load = function () {\n return __awaiter(this, void 0, void 0, function () {\n var sheetTexts;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.collectStyleSheetTexts()];\n case 1:\n sheetTexts = _a.sent();\n this.parseCssSheets(sheetTexts);\n return [2 /*return*/];\n }\n });\n });\n };\n StyleSheets.prototype.collectStyleSheetTexts = function () {\n return __awaiter(this, void 0, void 0, function () {\n var sheetTexts, i, node, styleElements, i, styleElement;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n sheetTexts = [];\n if (this.loadExternalSheets && this.rootSvg.ownerDocument) {\n for (i = 0; i < this.rootSvg.ownerDocument.childNodes.length; i++) {\n node = this.rootSvg.ownerDocument.childNodes[i];\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (node.nodeName === 'xml-stylesheet' && typeof node.data === 'string') {\n sheetTexts.push(StyleSheets.loadSheet(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n node.data\n .match(/href=[\"'].*?[\"']/)[0]\n .split('=')[1]\n .slice(1, -1)));\n }\n }\n }\n styleElements = this.rootSvg.querySelectorAll('style,link');\n for (i = 0; i < styleElements.length; i++) {\n styleElement = styleElements[i];\n if (nodeIs(styleElement, 'style')) {\n sheetTexts.push(styleElement.textContent);\n }\n else if (this.loadExternalSheets &&\n nodeIs(styleElement, 'link') &&\n styleElement.getAttribute('rel') === 'stylesheet' &&\n styleElement.hasAttribute('href')) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n sheetTexts.push(StyleSheets.loadSheet(styleElement.getAttribute('href')));\n }\n }\n return [4 /*yield*/, Promise.all(sheetTexts)];\n case 1: return [2 /*return*/, (_a.sent()).filter(function (sheet) { return sheet !== null; })];\n }\n });\n });\n };\n StyleSheets.prototype.parseCssSheets = function (sheetTexts) {\n var styleDoc = document.implementation.createHTMLDocument('');\n for (var _i = 0, sheetTexts_1 = sheetTexts; _i < sheetTexts_1.length; _i++) {\n var sheetText = sheetTexts_1[_i];\n var style = styleDoc.createElement('style');\n style.textContent = sheetText;\n styleDoc.body.appendChild(style);\n var sheet = style.sheet;\n if (sheet instanceof CSSStyleSheet) {\n for (var i = sheet.cssRules.length - 1; i >= 0; i--) {\n var cssRule = sheet.cssRules[i];\n if (!(cssRule instanceof CSSStyleRule)) {\n sheet.deleteRule(i);\n }\n var cssStyleRule = cssRule;\n if (cssStyleRule.selectorText.indexOf(',') >= 0) {\n sheet.deleteRule(i);\n var body = cssStyleRule.cssText.substring(cssStyleRule.selectorText.length);\n var selectors = StyleSheets.splitSelectorAtCommas(cssStyleRule.selectorText);\n for (var j = 0; j < selectors.length; j++) {\n sheet.insertRule(selectors[j] + body, i + j);\n }\n }\n }\n this.styleSheets.push(sheet);\n }\n }\n };\n StyleSheets.splitSelectorAtCommas = function (selectorText) {\n var initialRegex = /,|[\"']/g;\n var closingDoubleQuotesRegex = /[^\\\\][\"]/g;\n var closingSingleQuotesRegex = /[^\\\\][']/g;\n var parts = [];\n var state = 'initial';\n var match;\n var lastCommaIndex = -1;\n var closingQuotesRegex = closingDoubleQuotesRegex;\n for (var i = 0; i < selectorText.length;) {\n switch (state) {\n case 'initial':\n initialRegex.lastIndex = i;\n match = initialRegex.exec(selectorText);\n if (match) {\n if (match[0] === ',') {\n parts.push(selectorText.substring(lastCommaIndex + 1, initialRegex.lastIndex - 1).trim());\n lastCommaIndex = initialRegex.lastIndex - 1;\n }\n else {\n state = 'withinQuotes';\n closingQuotesRegex =\n match[0] === '\"' ? closingDoubleQuotesRegex : closingSingleQuotesRegex;\n }\n i = initialRegex.lastIndex;\n }\n else {\n parts.push(selectorText.substring(lastCommaIndex + 1).trim());\n i = selectorText.length;\n }\n break;\n case 'withinQuotes':\n closingQuotesRegex.lastIndex = i;\n match = closingQuotesRegex.exec(selectorText);\n if (match) {\n i = closingQuotesRegex.lastIndex;\n state = 'initial';\n }\n // else this is a syntax error - omit the last part...\n break;\n }\n }\n return parts;\n };\n StyleSheets.loadSheet = function (url) {\n return (new Promise(function (resolve, reject) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'text';\n xhr.onload = function () {\n if (xhr.status !== 200) {\n reject(new Error(\"Error \" + xhr.status + \": Failed to load '\" + url + \"'\"));\n }\n resolve(xhr.responseText);\n };\n xhr.onerror = reject;\n xhr.onabort = reject;\n xhr.send(null);\n })\n // ignore the error since some stylesheets may not be accessible\n // due to CORS policies\n .catch(function () { return null; }));\n };\n StyleSheets.prototype.getPropertyValue = function (node, propertyCss) {\n var matchingRules = [];\n for (var _i = 0, _a = this.styleSheets; _i < _a.length; _i++) {\n var sheet = _a[_i];\n for (var i = 0; i < sheet.cssRules.length; i++) {\n var rule = sheet.cssRules[i];\n if (rule.style.getPropertyValue(propertyCss) && node.matches(rule.selectorText)) {\n matchingRules.push(rule);\n }\n }\n }\n if (matchingRules.length === 0) {\n return undefined;\n }\n var compare$1 = function (a, b) {\n var priorityA = a.style.getPropertyPriority(propertyCss);\n var priorityB = b.style.getPropertyPriority(propertyCss);\n if (priorityA !== priorityB) {\n return priorityA === 'important' ? 1 : -1;\n }\n return compare(a.selectorText, b.selectorText);\n };\n var mostSpecificRule = matchingRules.reduce(function (previousValue, currentValue) {\n return compare$1(previousValue, currentValue) === 1 ? previousValue : currentValue;\n });\n return mostSpecificRule.style.getPropertyValue(propertyCss) || undefined;\n };\n return StyleSheets;\n}());\n\nfunction svg2pdf(element, pdf, options) {\n var _a, _b, _c;\n if (options === void 0) { options = {}; }\n return __awaiter(this, void 0, void 0, function () {\n var x, y, extCss, idMap, refsHandler, styleSheets, viewport, svg2pdfParameters, context, fill, node;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n x = (_a = options.x) !== null && _a !== void 0 ? _a : 0.0;\n y = (_b = options.y) !== null && _b !== void 0 ? _b : 0.0;\n extCss = (_c = options.loadExternalStyleSheets) !== null && _c !== void 0 ? _c : false;\n idMap = {};\n refsHandler = new ReferencesHandler(idMap);\n styleSheets = new StyleSheets(element, extCss);\n return [4 /*yield*/, styleSheets.load()\n // start with the entire page size as viewport\n ];\n case 1:\n _d.sent();\n viewport = new Viewport(pdf.internal.pageSize.getWidth(), pdf.internal.pageSize.getHeight());\n svg2pdfParameters = __assign(__assign({}, options), { element: element });\n context = new Context(pdf, { refsHandler: refsHandler, styleSheets: styleSheets, viewport: viewport, svg2pdfParameters: svg2pdfParameters });\n pdf.advancedAPI();\n pdf.saveGraphicsState();\n // set offsets\n pdf.setCurrentTransformationMatrix(pdf.Matrix(1, 0, 0, 1, x, y));\n // set default values that differ from pdf defaults\n pdf.setLineWidth(context.attributeState.strokeWidth);\n fill = context.attributeState.fill.color;\n pdf.setFillColor(fill.r, fill.g, fill.b);\n pdf.setFont(context.attributeState.fontFamily);\n // correct for a jsPDF-instance measurement unit that differs from `pt`\n pdf.setFontSize(context.attributeState.fontSize * pdf.internal.scaleFactor);\n node = parse(element, idMap);\n return [4 /*yield*/, node.render(context)];\n case 2:\n _d.sent();\n pdf.restoreGraphicsState();\n pdf.compatAPI();\n context.textMeasure.cleanupTextMeasuring();\n return [2 /*return*/, pdf];\n }\n });\n });\n}\njsPDF.API.svg = function (element, options) {\n if (options === void 0) { options = {}; }\n return svg2pdf(element, this, options);\n};\n\nexport { svg2pdf };\n//# sourceMappingURL=svg2pdf.es.js.map\n","/* globals jQuery */\n/**\n * Tools for svg.\n * @module svg\n * @license MIT\n * @copyright 2011 Jeff Schiller\n */\n\nimport {jsPDF} from 'jspdf/dist/jspdf.es.min.js';\nimport 'svg2pdf.js/dist/svg2pdf.es.js';\nimport jQueryPluginSVG from './jQuery.attr.js';\nimport * as hstry from './history.js';\nimport {\n text2xml, cleanupElement, findDefs, getHref, preventClickDefault,\n toXml, getStrokedBBoxDefaultVisible, encode64, createObjectURL,\n dataURLToObjectURL, walkTree, getBBox as utilsGetBBox\n} from './utilities.js';\nimport {\n transformPoint, transformListToTransform\n} from './math.js';\nimport {resetListMap} from './svgtransformlist.js';\nimport {\n convertUnit, shortFloat, convertToNum\n} from '../common/units.js';\nimport {isGecko, isChrome, isWebkit} from '../common/browser.js';\nimport * as pathModule from './path.js';\nimport {NS} from '../common/namespaces.js';\nimport * as draw from './draw.js';\nimport {\n recalculateDimensions\n} from './recalculate.js';\n\nconst {\n InsertElementCommand, RemoveElementCommand,\n ChangeElementCommand, BatchCommand\n} = hstry;\n\nconst $ = jQueryPluginSVG(jQuery);\n\nlet svgContext_ = null;\n\n/**\n* @function module:svg-exec.init\n* @param {module:svg-exec.SvgCanvas#init} svgContext\n* @returns {void}\n*/\nexport const init = function (svgContext) {\n svgContext_ = svgContext;\n};\n\n/**\n* Main function to set up the SVG content for output.\n* @function module:svgcanvas.SvgCanvas#svgCanvasToString\n* @returns {string} The SVG image for output\n*/\nexport const svgCanvasToString = function () {\n // keep calling it until there are none to remove\n while (svgContext_.getCanvas().removeUnusedDefElems() > 0) {} // eslint-disable-line no-empty\n\n svgContext_.getCanvas().pathActions.clear(true);\n\n // Keep SVG-Edit comment on top\n $.each(svgContext_.getSVGContent().childNodes, function (i, node) {\n if (i && node.nodeType === 8 && node.data.includes('Created with')) {\n svgContext_.getSVGContent().firstChild.before(node);\n }\n });\n\n // Move out of in-group editing mode\n if (svgContext_.getCurrentGroup()) {\n draw.leaveContext();\n svgContext_.getCanvas().selectOnly([svgContext_.getCurrentGroup()]);\n }\n\n const nakedSvgs = [];\n\n // Unwrap gsvg if it has no special attributes (only id and style)\n $(svgContext_.getSVGContent()).find('g[data-gsvg]').each(function () {\n const attrs = this.attributes;\n let len = attrs.length;\n for (let i = 0; i < len; i++) {\n if (attrs[i].nodeName === 'id' || attrs[i].nodeName === 'style') {\n len--;\n }\n }\n // No significant attributes, so ungroup\n if (len <= 0) {\n const svg = this.firstChild;\n nakedSvgs.push(svg);\n $(this).replaceWith(svg);\n }\n });\n const output = this.svgToString(svgContext_.getSVGContent(), 0);\n\n // Rewrap gsvg\n if (nakedSvgs.length) {\n $(nakedSvgs).each(function () {\n svgContext_.getCanvas().groupSvgElem(this);\n });\n }\n\n return output;\n};\n\n/**\n* Sub function ran on each SVG element to convert it to a string as desired.\n* @function module:svgcanvas.SvgCanvas#svgToString\n* @param {Element} elem - The SVG element to convert\n* @param {Integer} indent - Number of spaces to indent this tag\n* @returns {string} The given element as an SVG tag\n*/\nexport const svgToString = function (elem, indent) {\n const curConfig = svgContext_.getCurConfig();\n const nsMap = svgContext_.getNsMap();\n const out = [];\n const unit = curConfig.baseUnit;\n const unitRe = new RegExp('^-?[\\\\d\\\\.]+' + unit + '$');\n\n if (elem) {\n cleanupElement(elem);\n const attrs = [...elem.attributes];\n const childs = elem.childNodes;\n attrs.sort((a, b) => {\n return a.name > b.name ? -1 : 1;\n });\n\n for (let i = 0; i < indent; i++) { out.push(' '); }\n out.push('<'); out.push(elem.nodeName);\n if (elem.id === 'svgcontent') {\n // Process root element separately\n const res = svgContext_.getCanvas().getResolution();\n\n const vb = '';\n // TODO: Allow this by dividing all values by current baseVal\n // Note that this also means we should properly deal with this on import\n // if (curConfig.baseUnit !== 'px') {\n // const unit = curConfig.baseUnit;\n // const unitM = getTypeMap()[unit];\n // res.w = shortFloat(res.w / unitM);\n // res.h = shortFloat(res.h / unitM);\n // vb = ' viewBox=\"' + [0, 0, res.w, res.h].join(' ') + '\"';\n // res.w += unit;\n // res.h += unit;\n // }\n\n if (unit !== 'px') {\n res.w = convertUnit(res.w, unit) + unit;\n res.h = convertUnit(res.h, unit) + unit;\n }\n\n out.push(' width=\"' + res.w + '\" height=\"' + res.h + '\"' + vb + ' xmlns=\"' + NS.SVG + '\"');\n\n const nsuris = {};\n\n // Check elements for namespaces, add if found\n $(elem).find('*').andSelf().each(function () {\n // const el = this;\n // for some elements have no attribute\n const uri = this.namespaceURI;\n if (uri && !nsuris[uri] && nsMap[uri] && nsMap[uri] !== 'xmlns' && nsMap[uri] !== 'xml') {\n nsuris[uri] = true;\n out.push(' xmlns:' + nsMap[uri] + '=\"' + uri + '\"');\n }\n\n $.each(this.attributes, function (i, attr) {\n const u = attr.namespaceURI;\n if (u && !nsuris[u] && nsMap[u] !== 'xmlns' && nsMap[u] !== 'xml') {\n nsuris[u] = true;\n out.push(' xmlns:' + nsMap[u] + '=\"' + u + '\"');\n }\n });\n });\n\n let i = attrs.length;\n const attrNames = ['width', 'height', 'xmlns', 'x', 'y', 'viewBox', 'id', 'overflow'];\n while (i--) {\n const attr = attrs[i];\n const attrVal = toXml(attr.value);\n\n // Namespaces have already been dealt with, so skip\n if (attr.nodeName.startsWith('xmlns:')) { continue; }\n\n // only serialize attributes we don't use internally\n if (attrVal !== '' && !attrNames.includes(attr.localName) && (!attr.namespaceURI || nsMap[attr.namespaceURI])) {\n out.push(' ');\n out.push(attr.nodeName); out.push('=\"');\n out.push(attrVal); out.push('\"');\n }\n }\n } else {\n // Skip empty defs\n if (elem.nodeName === 'defs' && !elem.firstChild) { return ''; }\n\n const mozAttrs = ['-moz-math-font-style', '_moz-math-font-style'];\n for (let i = attrs.length - 1; i >= 0; i--) {\n const attr = attrs[i];\n let attrVal = toXml(attr.value);\n // remove bogus attributes added by Gecko\n if (mozAttrs.includes(attr.localName)) { continue; }\n if (attrVal === 'null') {\n const styleName = attr.localName.replace(/-[a-z]/g, (s) => s[1].toUpperCase());\n if (Object.prototype.hasOwnProperty.call(elem.style, styleName)) { continue; }\n }\n if (attrVal !== '') {\n if (attrVal.startsWith('pointer-events')) { continue; }\n if (attr.localName === 'class' && attrVal.startsWith('se_')) { continue; }\n out.push(' ');\n if (attr.localName === 'd') { attrVal = svgContext_.getCanvas().pathActions.convertPath(elem, true); }\n if (!isNaN(attrVal)) {\n attrVal = shortFloat(attrVal);\n } else if (unitRe.test(attrVal)) {\n attrVal = shortFloat(attrVal) + unit;\n }\n\n // Embed images when saving\n if (svgContext_.getSvgOptionApply() &&\n elem.nodeName === 'image' &&\n attr.localName === 'href' &&\n svgContext_.getSvgOptionImages() &&\n svgContext_.getSvgOptionImages() === 'embed'\n ) {\n const img = svgContext_.getEncodableImages(attrVal);\n if (img) { attrVal = img; }\n }\n\n // map various namespaces to our fixed namespace prefixes\n // (the default xmlns attribute itself does not get a prefix)\n if (!attr.namespaceURI || attr.namespaceURI === NS.SVG || nsMap[attr.namespaceURI]) {\n out.push(attr.nodeName); out.push('=\"');\n out.push(attrVal); out.push('\"');\n }\n }\n }\n }\n\n if (elem.hasChildNodes()) {\n out.push('>');\n indent++;\n let bOneLine = false;\n\n for (let i = 0; i < childs.length; i++) {\n const child = childs.item(i);\n switch (child.nodeType) {\n case 1: // element node\n out.push('\\n');\n out.push(this.svgToString(child, indent));\n break;\n case 3: { // text node\n const str = child.nodeValue.replace(/^\\s+|\\s+$/g, '');\n if (str !== '') {\n bOneLine = true;\n out.push(String(toXml(str)));\n }\n break;\n } case 4: // cdata node\n out.push('\\n');\n out.push(new Array(indent + 1).join(' '));\n out.push('<![CDATA[');\n out.push(child.nodeValue);\n out.push(']]>');\n break;\n case 8: // comment\n out.push('\\n');\n out.push(new Array(indent + 1).join(' '));\n out.push('<!--');\n out.push(child.data);\n out.push('-->');\n break;\n } // switch on node type\n }\n indent--;\n if (!bOneLine) {\n out.push('\\n');\n for (let i = 0; i < indent; i++) { out.push(' '); }\n }\n out.push('</'); out.push(elem.nodeName); out.push('>');\n } else {\n out.push('/>');\n }\n }\n return out.join('');\n}; // end svgToString()\n\n/**\n* This function sets the current drawing as the input SVG XML.\n* @function module:svgcanvas.SvgCanvas#setSvgString\n* @param {string} xmlString - The SVG as XML text.\n* @param {boolean} [preventUndo=false] - Indicates if we want to do the\n* changes without adding them to the undo stack - e.g. for initializing a\n* drawing on page load.\n* @fires module:svgcanvas.SvgCanvas#event:setnonce\n* @fires module:svgcanvas.SvgCanvas#event:unsetnonce\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {boolean} This function returns `false` if the set was\n* unsuccessful, `true` otherwise.\n*/\nexport const setSvgString = function (xmlString, preventUndo) {\n const curConfig = svgContext_.getCurConfig();\n try {\n // convert string into XML document\n const newDoc = text2xml(xmlString);\n if (newDoc.firstElementChild &&\n newDoc.firstElementChild.namespaceURI !== NS.SVG) {\n return false;\n }\n\n this.prepareSvg(newDoc);\n\n const batchCmd = new BatchCommand('Change Source');\n\n // remove old svg document\n const {nextSibling} = svgContext_.getSVGContent();\n\n svgContext_.getSVGContent().remove();\n const oldzoom = svgContext_.getSVGContent();\n batchCmd.addSubCommand(new RemoveElementCommand(oldzoom, nextSibling, svgContext_.getSVGRoot()));\n\n // set new svg document\n // If DOM3 adoptNode() available, use it. Otherwise fall back to DOM2 importNode()\n if (svgContext_.getDOMDocument().adoptNode) {\n svgContext_.setSVGContent(svgContext_.getDOMDocument().adoptNode(newDoc.documentElement));\n } else {\n svgContext_.setSVGContent(svgContext_.getDOMDocument().importNode(newDoc.documentElement, true));\n }\n\n svgContext_.getSVGRoot().append(svgContext_.getSVGContent());\n const content = $(svgContext_.getSVGContent());\n\n svgContext_.getCanvas().current_drawing_ = new draw.Drawing(svgContext_.getSVGContent(), svgContext_.getIdPrefix());\n\n // retrieve or set the nonce\n const nonce = svgContext_.getCanvas().getCurrentDrawing().getNonce();\n if (nonce) {\n svgContext_.call('setnonce', nonce);\n } else {\n svgContext_.call('unsetnonce');\n }\n\n // change image href vals if possible\n content.find('image').each(function () {\n const image = this;\n preventClickDefault(image);\n const val = svgContext_.getCanvas().getHref(this);\n if (val) {\n if (val.startsWith('data:')) {\n // Check if an SVG-edit data URI\n const m = val.match(/svgedit_url=(.*?);/);\n // const m = val.match(/svgedit_url=(?<url>.*?);/);\n if (m) {\n const url = decodeURIComponent(m[1]);\n // const url = decodeURIComponent(m.groups.url);\n $(new Image()).load(function () {\n image.setAttributeNS(NS.XLINK, 'xlink:href', url);\n }).attr('src', url);\n }\n }\n // Add to encodableImages if it loads\n svgContext_.getCanvas().embedImage(val);\n }\n });\n\n // Wrap child SVGs in group elements\n content.find('svg').each(function () {\n // Skip if it's in a <defs>\n if ($(this).closest('defs').length) { return; }\n\n svgContext_.getCanvas().uniquifyElems(this);\n\n // Check if it already has a gsvg group\n const pa = this.parentNode;\n if (pa.childNodes.length === 1 && pa.nodeName === 'g') {\n $(pa).data('gsvg', this);\n pa.id = pa.id || svgContext_.getCanvas().getNextId();\n } else {\n svgContext_.getCanvas().groupSvgElem(this);\n }\n });\n\n // For Firefox: Put all paint elems in defs\n if (isGecko()) {\n content.find('linearGradient, radialGradient, pattern').appendTo(findDefs());\n }\n\n // Set ref element for <use> elements\n\n // TODO: This should also be done if the object is re-added through \"redo\"\n svgContext_.getCanvas().setUseData(content);\n\n svgContext_.getCanvas().convertGradients(content[0]);\n\n const attrs = {\n id: 'svgcontent',\n overflow: curConfig.show_outside_canvas ? 'visible' : 'hidden'\n };\n\n let percs = false;\n\n // determine proper size\n if (content.attr('viewBox')) {\n const vb = content.attr('viewBox').split(' ');\n attrs.width = vb[2];\n attrs.height = vb[3];\n // handle content that doesn't have a viewBox\n } else {\n $.each(['width', 'height'], function (i, dim) {\n // Set to 100 if not given\n const val = content.attr(dim) || '100%';\n\n if (String(val).substr(-1) === '%') {\n // Use user units if percentage given\n percs = true;\n } else {\n attrs[dim] = convertToNum(dim, val);\n }\n });\n }\n\n // identify layers\n draw.identifyLayers();\n\n // Give ID for any visible layer children missing one\n content.children().find(svgContext_.getVisElems()).each(function () {\n if (!this.id) { this.id = svgContext_.getCanvas().getNextId(); }\n });\n\n // Percentage width/height, so let's base it on visible elements\n if (percs) {\n const bb = getStrokedBBoxDefaultVisible();\n attrs.width = bb.width + bb.x;\n attrs.height = bb.height + bb.y;\n }\n\n // Just in case negative numbers are given or\n // result from the percs calculation\n if (attrs.width <= 0) { attrs.width = 100; }\n if (attrs.height <= 0) { attrs.height = 100; }\n\n content.attr(attrs);\n this.contentW = attrs.width;\n this.contentH = attrs.height;\n\n batchCmd.addSubCommand(new InsertElementCommand(svgContext_.getSVGContent()));\n // update root to the correct size\n const changes = content.attr(['width', 'height']);\n batchCmd.addSubCommand(new ChangeElementCommand(svgContext_.getSVGRoot(), changes));\n\n // reset zoom\n svgContext_.setCurrentZoom(1);\n\n // reset transform lists\n resetListMap();\n svgContext_.getCanvas().clearSelection();\n pathModule.clearData();\n svgContext_.getSVGRoot().append(svgContext_.getCanvas().selectorManager.selectorParentGroup);\n\n if (!preventUndo) svgContext_.addCommandToHistory(batchCmd);\n svgContext_.call('changed', [svgContext_.getSVGContent()]);\n } catch (e) {\n console.log(e); \n return false;\n }\n\n return true;\n};\n\n/**\n* This function imports the input SVG XML as a `<symbol>` in the `<defs>`, then adds a\n* `<use>` to the current layer.\n* @function module:svgcanvas.SvgCanvas#importSvgString\n* @param {string} xmlString - The SVG as XML text.\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {null|Element} This function returns null if the import was unsuccessful, or the element otherwise.\n* @todo\n* - properly handle if namespace is introduced by imported content (must add to svgcontent\n* and update all prefixes in the imported node)\n* - properly handle recalculating dimensions, `recalculateDimensions()` doesn't handle\n* arbitrary transform lists, but makes some assumptions about how the transform list\n* was obtained\n*/\nexport const importSvgString = function (xmlString) {\n let j, ts, useEl;\n try {\n // Get unique ID\n const uid = encode64(xmlString.length + xmlString).substr(0, 32);\n\n let useExisting = false;\n // Look for symbol and make sure symbol exists in image\n if (svgContext_.getImportIds(uid) && $(svgContext_.getImportIds(uid).symbol).parents('#svgroot').length) {\n useExisting = true;\n }\n\n const batchCmd = new BatchCommand('Import Image');\n let symbol;\n if (useExisting) {\n ({symbol} = svgContext_.getImportIds());\n ts = svgContext_.getImportIds(uid).xform;\n } else {\n // convert string into XML document\n const newDoc = text2xml(xmlString);\n\n this.prepareSvg(newDoc);\n\n // import new svg document into our document\n // If DOM3 adoptNode() available, use it. Otherwise fall back to DOM2 importNode()\n const svg = svgContext_.getDOMDocument().adoptNode\n ? svgContext_.getDOMDocument().adoptNode(newDoc.documentElement)\n : svgContext_.getDOMDocument().importNode(newDoc.documentElement, true);\n\n svgContext_.getCanvas().uniquifyElems(svg);\n\n const innerw = convertToNum('width', svg.getAttribute('width')),\n innerh = convertToNum('height', svg.getAttribute('height')),\n innervb = svg.getAttribute('viewBox'),\n // if no explicit viewbox, create one out of the width and height\n vb = innervb ? innervb.split(' ') : [0, 0, innerw, innerh];\n for (j = 0; j < 4; ++j) {\n vb[j] = Number(vb[j]);\n }\n\n // TODO: properly handle preserveAspectRatio\n const // canvasw = +svgcontent.getAttribute('width'),\n canvash = Number(svgContext_.getSVGContent().getAttribute('height'));\n // imported content should be 1/3 of the canvas on its largest dimension\n\n ts = innerh > innerw ? 'scale(' + (canvash / 3) / vb[3] + ')' : 'scale(' + (canvash / 3) / vb[2] + ')';\n\n // Hack to make recalculateDimensions understand how to scale\n ts = 'translate(0) ' + ts + ' translate(0)';\n\n symbol = svgContext_.getDOMDocument().createElementNS(NS.SVG, 'symbol');\n const defs = findDefs();\n\n if (isGecko()) {\n // Move all gradients into root for Firefox, workaround for this bug:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=353575\n // TODO: Make this properly undo-able.\n $(svg).find('linearGradient, radialGradient, pattern').appendTo(defs);\n }\n\n while (svg.firstChild) {\n const first = svg.firstChild;\n symbol.append(first);\n }\n const attrs = svg.attributes;\n for (const attr of attrs) { // Ok for `NamedNodeMap`\n symbol.setAttribute(attr.nodeName, attr.value);\n }\n symbol.id = svgContext_.getCanvas().getNextId();\n\n // Store data\n svgContext_.setImportIds(uid, {\n symbol,\n xform: ts\n });\n\n findDefs().append(symbol);\n batchCmd.addSubCommand(new InsertElementCommand(symbol));\n }\n\n useEl = svgContext_.getDOMDocument().createElementNS(NS.SVG, 'use');\n useEl.id = svgContext_.getCanvas().getNextId();\n svgContext_.getCanvas().setHref(useEl, '#' + symbol.id);\n\n (svgContext_.getCurrentGroup() || svgContext_.getCanvas().getCurrentDrawing().getCurrentLayer()).append(useEl);\n batchCmd.addSubCommand(new InsertElementCommand(useEl));\n svgContext_.getCanvas().clearSelection();\n\n useEl.setAttribute('transform', ts);\n recalculateDimensions(useEl);\n $(useEl).data('symbol', symbol).data('ref', symbol);\n svgContext_.getCanvas().addToSelection([useEl]);\n\n // TODO: Find way to add this in a recalculateDimensions-parsable way\n // if (vb[0] !== 0 || vb[1] !== 0) {\n // ts = 'translate(' + (-vb[0]) + ',' + (-vb[1]) + ') ' + ts;\n // }\n svgContext_.addCommandToHistory(batchCmd);\n svgContext_.call('changed', [svgContext_.getSVGContent()]);\n } catch (e) {\n console.log(e); \n return null;\n }\n\n // we want to return the element so we can automatically select it\n return useEl;\n};\n/**\n * Function to run when image data is found.\n * @callback module:svgcanvas.ImageEmbeddedCallback\n * @param {string|false} result Data URL\n * @returns {void}\n */\n/**\n* Converts a given image file to a data URL when possible, then runs a given callback.\n* @function module:svgcanvas.SvgCanvas#embedImage\n* @param {string} src - The path/URL of the image\n* @returns {Promise<string|false>} Resolves to a Data URL (string|false)\n*/\nexport const embedImage = function (src) {\n // Todo: Remove this Promise in favor of making an async/await `Image.load` utility\n return new Promise(function (resolve, reject) {\n // load in the image and once it's loaded, get the dimensions\n $(new Image()).load(function (response, status, xhr) {\n if (status === 'error') {\n reject(new Error('Error loading image: ' + xhr.status + ' ' + xhr.statusText));\n return;\n }\n // create a canvas the same size as the raster image\n const cvs = document.createElement('canvas');\n cvs.width = this.width;\n cvs.height = this.height;\n // load the raster image into the canvas\n cvs.getContext('2d').drawImage(this, 0, 0);\n // retrieve the data: URL\n try {\n let urldata = ';svgedit_url=' + encodeURIComponent(src);\n urldata = cvs.toDataURL().replace(';base64', urldata + ';base64');\n svgContext_.setEncodableImages(src, urldata);\n } catch (e) {\n svgContext_.setEncodableImages(src, false);\n }\n svgContext_.getCanvas().setGoodImage(src);\n resolve(svgContext_.getEncodableImages(src));\n }).attr('src', src);\n });\n};\n\n/**\n* Serializes the current drawing into SVG XML text and passes it to the 'saved' handler.\n* This function also includes the XML prolog. Clients of the `SvgCanvas` bind their save\n* function to the 'saved' event.\n* @function module:svgcanvas.SvgCanvas#save\n* @param {module:svgcanvas.SaveOptions} opts\n* @fires module:svgcanvas.SvgCanvas#event:saved\n* @returns {void}\n*/\nexport const save = function (opts) {\n // remove the selected outline before serializing\n svgContext_.getCanvas().clearSelection();\n // Update save options if provided\n if (opts) { $.extend(svgContext_.getSvgOption(), opts); }\n svgContext_.setSvgOption('apply', true);\n\n // no need for doctype, see https://jwatt.org/svg/authoring/#doctype-declaration\n const str = svgContext_.getCanvas().svgCanvasToString();\n svgContext_.call('saved', str);\n};\n/**\n* @typedef {PlainObject} module:svgcanvas.IssuesAndCodes\n* @property {string[]} issueCodes The locale-independent code names\n* @property {string[]} issues The localized descriptions\n*/\n\n/**\n* Codes only is useful for locale-independent detection.\n* @returns {module:svgcanvas.IssuesAndCodes}\n*/\nfunction getIssues () {\n const uiStrings = svgContext_.getUIStrings();\n // remove the selected outline before serializing\n svgContext_.getCanvas().clearSelection();\n\n // Check for known CanVG issues\n const issues = [];\n const issueCodes = [];\n\n // Selector and notice\n const issueList = {\n feGaussianBlur: uiStrings.exportNoBlur,\n foreignObject: uiStrings.exportNoforeignObject,\n '[stroke-dasharray]': uiStrings.exportNoDashArray\n };\n const content = $(svgContext_.getSVGContent());\n\n // Add font/text check if Canvas Text API is not implemented\n if (!('font' in $('<canvas>')[0].getContext('2d'))) {\n issueList.text = uiStrings.exportNoText;\n }\n\n $.each(issueList, function (sel, descr) {\n if (content.find(sel).length) {\n issueCodes.push(sel);\n issues.push(descr);\n }\n });\n return {issues, issueCodes};\n}\n/**\n* @typedef {PlainObject} module:svgcanvas.ImageExportedResults\n* @property {string} datauri Contents as a Data URL\n* @property {string} bloburl May be the empty string\n* @property {string} svg The SVG contents as a string\n* @property {string[]} issues The localization messages of `issueCodes`\n* @property {module:svgcanvas.IssueCode[]} issueCodes CanVG issues found with the SVG\n* @property {\"PNG\"|\"JPEG\"|\"BMP\"|\"WEBP\"|\"ICO\"} type The chosen image type\n* @property {\"image/png\"|\"image/jpeg\"|\"image/bmp\"|\"image/webp\"} mimeType The image MIME type\n* @property {Float} quality A decimal between 0 and 1 (for use with JPEG or WEBP)\n* @property {string} exportWindowName A convenience for passing along a `window.name` to target a window on which the export could be added\n*/\n\n/**\n* Generates a PNG (or JPG, BMP, WEBP) Data URL based on the current image,\n* then calls \"exported\" with an object including the string, image\n* information, and any issues found.\n* @function module:svgcanvas.SvgCanvas#rasterExport\n* @param {\"PNG\"|\"JPEG\"|\"BMP\"|\"WEBP\"|\"ICO\"} [imgType=\"PNG\"]\n* @param {Float} [quality] Between 0 and 1\n* @param {string} [exportWindowName]\n* @param {PlainObject} [opts]\n* @param {boolean} [opts.avoidEvent]\n* @fires module:svgcanvas.SvgCanvas#event:exported\n* @todo Confirm/fix ICO type\n* @returns {Promise<module:svgcanvas.ImageExportedResults>} Resolves to {@link module:svgcanvas.ImageExportedResults}\n*/\nexport const rasterExport = async function (imgType, quality, exportWindowName, opts = {}) {\n const type = imgType === 'ICO' ? 'BMP' : (imgType || 'PNG');\n const mimeType = 'image/' + type.toLowerCase();\n const {issues, issueCodes} = getIssues();\n const svg = this.svgCanvasToString();\n\n if (!$('#export_canvas').length) {\n $('<canvas>', {id: 'export_canvas'}).hide().appendTo('body');\n }\n const c = $('#export_canvas')[0];\n c.width = svgContext_.getCanvas().contentW;\n c.height = svgContext_.getCanvas().contentH;\n const canvg = svgContext_.getcanvg();\n const ctx = c.getContext('2d');\n const v = canvg.fromString(ctx, svg);\n // Render only first frame, ignoring animations.\n await v.render();\n // Todo: Make async/await utility in place of `toBlob`, so we can remove this constructor\n return new Promise((resolve, reject) => {\n const dataURLType = type.toLowerCase();\n const datauri = quality\n ? c.toDataURL('image/' + dataURLType, quality)\n : c.toDataURL('image/' + dataURLType);\n let bloburl;\n /**\n * Called when `bloburl` is available for export.\n * @returns {void}\n */\n function done () {\n const obj = {\n datauri, bloburl, svg, issues, issueCodes, type: imgType,\n mimeType, quality, exportWindowName\n };\n if (!opts.avoidEvent) {\n svgContext_.call('exported', obj);\n }\n resolve(obj);\n }\n if (c.toBlob) {\n c.toBlob((blob) => {\n bloburl = createObjectURL(blob);\n done();\n }, mimeType, quality);\n return;\n }\n bloburl = dataURLToObjectURL(datauri);\n done();\n });\n};\n\n/**\n* @typedef {void|\"save\"|\"arraybuffer\"|\"blob\"|\"datauristring\"|\"dataurlstring\"|\"dataurlnewwindow\"|\"datauri\"|\"dataurl\"} external:jsPDF.OutputType\n* @todo Newer version to add also allows these `outputType` values \"bloburi\"|\"bloburl\" which return strings, so document here and for `outputType` of `module:svgcanvas.PDFExportedResults` below if added\n*/\n/**\n* @typedef {PlainObject} module:svgcanvas.PDFExportedResults\n* @property {string} svg The SVG PDF output\n* @property {string|ArrayBuffer|Blob|window} output The output based on the `outputType`;\n* if `undefined`, \"datauristring\", \"dataurlstring\", \"datauri\",\n* or \"dataurl\", will be a string (`undefined` gives a document, while the others\n* build as Data URLs; \"datauri\" and \"dataurl\" change the location of the current page); if\n* \"arraybuffer\", will return `ArrayBuffer`; if \"blob\", returns a `Blob`;\n* if \"dataurlnewwindow\", will change the current page's location and return a string\n* if in Safari and no window object is found; otherwise opens in, and returns, a new `window`\n* object; if \"save\", will have the same return as \"dataurlnewwindow\" if\n* `navigator.getUserMedia` support is found without `URL.createObjectURL` support; otherwise\n* returns `undefined` but attempts to save\n* @property {external:jsPDF.OutputType} outputType\n* @property {string[]} issues The human-readable localization messages of corresponding `issueCodes`\n* @property {module:svgcanvas.IssueCode[]} issueCodes\n* @property {string} exportWindowName\n*/\n\n/**\n* Generates a PDF based on the current image, then calls \"exportedPDF\" with\n* an object including the string, the data URL, and any issues found.\n* @function module:svgcanvas.SvgCanvas#exportPDF\n* @param {string} [exportWindowName] Will also be used for the download file name here\n* @param {external:jsPDF.OutputType} [outputType=\"dataurlstring\"]\n* @fires module:svgcanvas.SvgCanvas#event:exportedPDF\n* @returns {Promise<module:svgcanvas.PDFExportedResults>} Resolves to {@link module:svgcanvas.PDFExportedResults}\n*/\nexport const exportPDF = async (\n exportWindowName,\n outputType = isChrome() ? 'save' : undefined\n) => {\n const res = svgContext_.getCanvas().getResolution();\n const orientation = res.w > res.h ? 'landscape' : 'portrait';\n const unit = 'pt'; // curConfig.baseUnit; // We could use baseUnit, but that is presumably not intended for export purposes\n\n // Todo: Give options to use predefined jsPDF formats like \"a4\", etc. from pull-down (with option to keep customizable)\n const doc = jsPDF({\n orientation,\n unit,\n format: [res.w, res.h]\n // , compressPdf: true\n });\n const docTitle = svgContext_.getCanvas().getDocumentTitle();\n doc.setProperties({\n title: docTitle /* ,\n subject: '',\n author: '',\n keywords: '',\n creator: '' */\n });\n const {issues, issueCodes} = getIssues();\n // const svg = this.svgCanvasToString();\n // await doc.addSvgAsImage(svg)\n await doc.svg(svgContext_.getSVGContent(), {x: 0, y: 0, width: res.w, height: res.h});\n\n // doc.output('save'); // Works to open in a new\n // window; todo: configure this and other export\n // options to optionally work in this manner as\n // opposed to opening a new tab\n outputType = outputType || 'dataurlstring';\n const obj = {issues, issueCodes, exportWindowName, outputType};\n obj.output = doc.output(outputType, outputType === 'save' ? (exportWindowName || 'svg.pdf') : undefined);\n svgContext_.call('exportedPDF', obj);\n return obj;\n};\n/**\n* Ensure each element has a unique ID.\n* @function module:svgcanvas.SvgCanvas#uniquifyElems\n* @param {Element} g - The parent element of the tree to give unique IDs\n* @returns {void}\n*/\nexport const uniquifyElemsMethod = function (g) {\n const ids = {};\n // TODO: Handle markers and connectors. These are not yet re-identified properly\n // as their referring elements do not get remapped.\n //\n // <marker id='se_marker_end_svg_7'/>\n // <polyline id='svg_7' se:connector='svg_1 svg_6' marker-end='url(#se_marker_end_svg_7)'/>\n //\n // Problem #1: if svg_1 gets renamed, we do not update the polyline's se:connector attribute\n // Problem #2: if the polyline svg_7 gets renamed, we do not update the marker id nor the polyline's marker-end attribute\n const refElems = ['filter', 'linearGradient', 'pattern', 'radialGradient', 'symbol', 'textPath', 'use'];\n\n walkTree(g, function (n) {\n // if it's an element node\n if (n.nodeType === 1) {\n // and the element has an ID\n if (n.id) {\n // and we haven't tracked this ID yet\n if (!(n.id in ids)) {\n // add this id to our map\n ids[n.id] = {elem: null, attrs: [], hrefs: []};\n }\n ids[n.id].elem = n;\n }\n\n // now search for all attributes on this element that might refer\n // to other elements\n $.each(svgContext_.getrefAttrs(), function (i, attr) {\n const attrnode = n.getAttributeNode(attr);\n if (attrnode) {\n // the incoming file has been sanitized, so we should be able to safely just strip off the leading #\n const url = svgContext_.getCanvas().getUrlFromAttr(attrnode.value),\n refid = url ? url.substr(1) : null;\n if (refid) {\n if (!(refid in ids)) {\n // add this id to our map\n ids[refid] = {elem: null, attrs: [], hrefs: []};\n }\n ids[refid].attrs.push(attrnode);\n }\n }\n });\n\n // check xlink:href now\n const href = svgContext_.getCanvas().getHref(n);\n // TODO: what if an <image> or <a> element refers to an element internally?\n if (href && refElems.includes(n.nodeName)) {\n const refid = href.substr(1);\n if (refid) {\n if (!(refid in ids)) {\n // add this id to our map\n ids[refid] = {elem: null, attrs: [], hrefs: []};\n }\n ids[refid].hrefs.push(n);\n }\n }\n }\n });\n\n // in ids, we now have a map of ids, elements and attributes, let's re-identify\n for (const oldid in ids) {\n if (!oldid) { continue; }\n const {elem} = ids[oldid];\n if (elem) {\n const newid = svgContext_.getCanvas().getNextId();\n\n // assign element its new id\n elem.id = newid;\n\n // remap all url() attributes\n const {attrs} = ids[oldid];\n let j = attrs.length;\n while (j--) {\n const attr = attrs[j];\n attr.ownerElement.setAttribute(attr.name, 'url(#' + newid + ')');\n }\n\n // remap all href attributes\n const hreffers = ids[oldid].hrefs;\n let k = hreffers.length;\n while (k--) {\n const hreffer = hreffers[k];\n svgContext_.getCanvas().setHref(hreffer, '#' + newid);\n }\n }\n }\n};\n\n/**\n* Assigns reference data for each use element.\n* @function module:svgcanvas.SvgCanvas#setUseData\n* @param {Element} parent\n* @returns {void}\n*/\nexport const setUseDataMethod = function (parent) {\n let elems = $(parent);\n\n if (parent.tagName !== 'use') {\n elems = elems.find('use');\n }\n\n elems.each(function () {\n const id = svgContext_.getCanvas().getHref(this).substr(1);\n const refElem = svgContext_.getCanvas().getElem(id);\n if (!refElem) { return; }\n $(this).data('ref', refElem);\n if (refElem.tagName === 'symbol' || refElem.tagName === 'svg') {\n $(this).data('symbol', refElem).data('ref', refElem);\n }\n });\n};\n\n/**\n* Looks at DOM elements inside the `<defs>` to see if they are referred to,\n* removes them from the DOM if they are not.\n* @function module:svgcanvas.SvgCanvas#removeUnusedDefElems\n* @returns {Integer} The number of elements that were removed\n*/\nexport const removeUnusedDefElemsMethod = function () {\n const defs = svgContext_.getSVGContent().getElementsByTagNameNS(NS.SVG, 'defs');\n if (!defs || !defs.length) { return 0; }\n\n // if (!defs.firstChild) { return; }\n\n const defelemUses = [];\n let numRemoved = 0;\n const attrs = ['fill', 'stroke', 'filter', 'marker-start', 'marker-mid', 'marker-end'];\n const alen = attrs.length;\n\n const allEls = svgContext_.getSVGContent().getElementsByTagNameNS(NS.SVG, '*');\n const allLen = allEls.length;\n\n let i, j;\n for (i = 0; i < allLen; i++) {\n const el = allEls[i];\n for (j = 0; j < alen; j++) {\n const ref = svgContext_.getCanvas().getUrlFromAttr(el.getAttribute(attrs[j]));\n if (ref) {\n defelemUses.push(ref.substr(1));\n }\n }\n\n // gradients can refer to other gradients\n const href = getHref(el);\n if (href && href.startsWith('#')) {\n defelemUses.push(href.substr(1));\n }\n }\n\n const defelems = $(defs).find('linearGradient, radialGradient, filter, marker, svg, symbol');\n i = defelems.length;\n while (i--) {\n const defelem = defelems[i];\n const {id} = defelem;\n if (!defelemUses.includes(id)) {\n // Not found, so remove (but remember)\n svgContext_.setRemovedElements(id, defelem);\n defelem.remove();\n numRemoved++;\n }\n }\n\n return numRemoved;\n};\n/**\n* Converts gradients from userSpaceOnUse to objectBoundingBox.\n* @function module:svgcanvas.SvgCanvas#convertGradients\n* @param {Element} elem\n* @returns {void}\n*/\nexport const convertGradientsMethod = function (elem) {\n let elems = $(elem).find('linearGradient, radialGradient');\n if (!elems.length && isWebkit()) {\n // Bug in webkit prevents regular *Gradient selector search\n elems = $(elem).find('*').filter(function () {\n return (this.tagName.includes('Gradient'));\n });\n }\n\n elems.each(function () {\n const grad = this;\n if ($(grad).attr('gradientUnits') === 'userSpaceOnUse') {\n const svgcontent = svgContext_.getSVGContent();\n // TODO: Support more than one element with this ref by duplicating parent grad\n const fillStrokeElems = $(svgcontent).find('[fill=\"url(#' + grad.id + ')\"],[stroke=\"url(#' + grad.id + ')\"]');\n if (!fillStrokeElems.length) { return; }\n\n // get object's bounding box\n const bb = utilsGetBBox(fillStrokeElems[0]);\n\n // This will occur if the element is inside a <defs> or a <symbol>,\n // in which we shouldn't need to convert anyway.\n if (!bb) { return; }\n\n if (grad.tagName === 'linearGradient') {\n const gCoords = $(grad).attr(['x1', 'y1', 'x2', 'y2']);\n\n // If has transform, convert\n const tlist = grad.gradientTransform.baseVal;\n if (tlist && tlist.numberOfItems > 0) {\n const m = transformListToTransform(tlist).matrix;\n const pt1 = transformPoint(gCoords.x1, gCoords.y1, m);\n const pt2 = transformPoint(gCoords.x2, gCoords.y2, m);\n\n gCoords.x1 = pt1.x;\n gCoords.y1 = pt1.y;\n gCoords.x2 = pt2.x;\n gCoords.y2 = pt2.y;\n grad.removeAttribute('gradientTransform');\n }\n\n $(grad).attr({\n x1: (gCoords.x1 - bb.x) / bb.width,\n y1: (gCoords.y1 - bb.y) / bb.height,\n x2: (gCoords.x2 - bb.x) / bb.width,\n y2: (gCoords.y2 - bb.y) / bb.height\n });\n grad.removeAttribute('gradientUnits');\n }\n // else {\n // Note: radialGradient elements cannot be easily converted\n // because userSpaceOnUse will keep circular gradients, while\n // objectBoundingBox will x/y scale the gradient according to\n // its bbox.\n //\n // For now we'll do nothing, though we should probably have\n // the gradient be updated as the element is moved, as\n // inkscape/illustrator do.\n //\n // const gCoords = $(grad).attr(['cx', 'cy', 'r']);\n //\n // $(grad).attr({\n // cx: (gCoords.cx - bb.x) / bb.width,\n // cy: (gCoords.cy - bb.y) / bb.height,\n // r: gCoords.r\n // });\n //\n // grad.removeAttribute('gradientUnits');\n // }\n }\n });\n};\n","/* globals jQuery */\n/**\n * DOM element selection box tools.\n * @module select\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria, 2010 Jeff Schiller\n */\n\nimport {isTouch, isWebkit} from '../common/browser.js'; // , isOpera\nimport {getRotationAngle, getBBox, getStrokedBBox, isNullish} from './utilities.js';\nimport {transformListToTransform, transformBox, transformPoint} from './math.js';\nimport {getTransformList} from './svgtransformlist.js';\n\nconst $ = jQuery;\n\nlet svgFactory_;\nlet config_;\nlet selectorManager_; // A Singleton\nconst gripRadius = isTouch() ? 10 : 4;\n\n/**\n* Private class for DOM element selection boxes.\n*/\nexport class Selector {\n /**\n * @param {Integer} id - Internally identify the selector\n * @param {Element} elem - DOM element associated with this selector\n * @param {module:utilities.BBoxObject} [bbox] - Optional bbox to use for initialization (prevents duplicate `getBBox` call).\n */\n constructor (id, elem, bbox) {\n // this is the selector's unique number\n this.id = id;\n\n // this holds a reference to the element for which this selector is being used\n this.selectedElement = elem;\n\n // this is a flag used internally to track whether the selector is being used or not\n this.locked = true;\n\n // this holds a reference to the <g> element that holds all visual elements of the selector\n this.selectorGroup = svgFactory_.createSVGElement({\n element: 'g',\n attr: {id: ('selectorGroup' + this.id)}\n });\n\n // this holds a reference to the path rect\n this.selectorRect = svgFactory_.createSVGElement({\n element: 'path',\n attr: {\n id: ('selectedBox' + this.id),\n fill: 'none',\n stroke: '#22C',\n 'stroke-width': '1',\n 'stroke-dasharray': '5,5',\n // need to specify this so that the rect is not selectable\n style: 'pointer-events:none'\n }\n });\n this.selectorGroup.append(this.selectorRect);\n\n // this holds a reference to the grip coordinates for this selector\n this.gripCoords = {\n nw: null,\n n: null,\n ne: null,\n e: null,\n se: null,\n s: null,\n sw: null,\n w: null\n };\n\n this.reset(this.selectedElement, bbox);\n }\n\n /**\n * Used to reset the id and element that the selector is attached to.\n * @param {Element} e - DOM element associated with this selector\n * @param {module:utilities.BBoxObject} bbox - Optional bbox to use for reset (prevents duplicate getBBox call).\n * @returns {void}\n */\n reset (e, bbox) {\n this.locked = true;\n this.selectedElement = e;\n this.resize(bbox);\n this.selectorGroup.setAttribute('display', 'inline');\n }\n\n /**\n * Show the resize grips of this selector.\n * @param {boolean} show - Indicates whether grips should be shown or not\n * @returns {void}\n */\n showGrips (show) {\n const bShow = show ? 'inline' : 'none';\n selectorManager_.selectorGripsGroup.setAttribute('display', bShow);\n const elem = this.selectedElement;\n this.hasGrips = show;\n if (elem && show) {\n this.selectorGroup.append(selectorManager_.selectorGripsGroup);\n Selector.updateGripCursors(getRotationAngle(elem));\n }\n }\n\n /**\n * Updates the selector to match the element's size.\n * @param {module:utilities.BBoxObject} [bbox] - BBox to use for resize (prevents duplicate getBBox call).\n * @returns {void}\n */\n resize (bbox) {\n const selectedBox = this.selectorRect,\n mgr = selectorManager_,\n selectedGrips = mgr.selectorGrips,\n selected = this.selectedElement,\n sw = selected.getAttribute('stroke-width'),\n currentZoom = svgFactory_.getCurrentZoom();\n let offset = 1 / currentZoom;\n if (selected.getAttribute('stroke') !== 'none' && !isNaN(sw)) {\n offset += (sw / 2);\n }\n\n const {tagName} = selected;\n if (tagName === 'text') {\n offset += 2 / currentZoom;\n }\n\n // loop and transform our bounding box until we reach our first rotation\n const tlist = getTransformList(selected);\n const m = transformListToTransform(tlist).matrix;\n\n // This should probably be handled somewhere else, but for now\n // it keeps the selection box correctly positioned when zoomed\n m.e *= currentZoom;\n m.f *= currentZoom;\n\n if (!bbox) {\n bbox = getBBox(selected);\n }\n // TODO: getBBox (previous line) already knows to call getStrokedBBox when tagName === 'g'. Remove this?\n // TODO: getBBox doesn't exclude 'gsvg' and calls getStrokedBBox for any 'g'. Should getBBox be updated?\n if (tagName === 'g' && !$.data(selected, 'gsvg')) {\n // The bbox for a group does not include stroke vals, so we\n // get the bbox based on its children.\n const strokedBbox = getStrokedBBox([selected.childNodes]);\n if (strokedBbox) {\n bbox = strokedBbox;\n }\n }\n\n // apply the transforms\n const l = bbox.x, t = bbox.y, w = bbox.width, h = bbox.height;\n // bbox = {x: l, y: t, width: w, height: h}; // Not in use\n\n // we need to handle temporary transforms too\n // if skewed, get its transformed box, then find its axis-aligned bbox\n\n // *\n offset *= currentZoom;\n\n const nbox = transformBox(l * currentZoom, t * currentZoom, w * currentZoom, h * currentZoom, m),\n {aabox} = nbox;\n let nbax = aabox.x - offset,\n nbay = aabox.y - offset,\n nbaw = aabox.width + (offset * 2),\n nbah = aabox.height + (offset * 2);\n\n // now if the shape is rotated, un-rotate it\n const cx = nbax + nbaw / 2,\n cy = nbay + nbah / 2;\n\n const angle = getRotationAngle(selected);\n if (angle) {\n const rot = svgFactory_.svgRoot().createSVGTransform();\n rot.setRotate(-angle, cx, cy);\n const rotm = rot.matrix;\n nbox.tl = transformPoint(nbox.tl.x, nbox.tl.y, rotm);\n nbox.tr = transformPoint(nbox.tr.x, nbox.tr.y, rotm);\n nbox.bl = transformPoint(nbox.bl.x, nbox.bl.y, rotm);\n nbox.br = transformPoint(nbox.br.x, nbox.br.y, rotm);\n\n // calculate the axis-aligned bbox\n const {tl} = nbox;\n let minx = tl.x,\n miny = tl.y,\n maxx = tl.x,\n maxy = tl.y;\n\n const {min, max} = Math;\n\n minx = min(minx, min(nbox.tr.x, min(nbox.bl.x, nbox.br.x))) - offset;\n miny = min(miny, min(nbox.tr.y, min(nbox.bl.y, nbox.br.y))) - offset;\n maxx = max(maxx, max(nbox.tr.x, max(nbox.bl.x, nbox.br.x))) + offset;\n maxy = max(maxy, max(nbox.tr.y, max(nbox.bl.y, nbox.br.y))) + offset;\n\n nbax = minx;\n nbay = miny;\n nbaw = (maxx - minx);\n nbah = (maxy - miny);\n }\n\n const dstr = 'M' + nbax + ',' + nbay +\n ' L' + (nbax + nbaw) + ',' + nbay +\n ' ' + (nbax + nbaw) + ',' + (nbay + nbah) +\n ' ' + nbax + ',' + (nbay + nbah) + 'z';\n selectedBox.setAttribute('d', dstr);\n\n const xform = angle ? 'rotate(' + [angle, cx, cy].join(',') + ')' : '';\n this.selectorGroup.setAttribute('transform', xform);\n\n // TODO(codedread): Is this needed?\n // if (selected === selectedElements[0]) {\n this.gripCoords = {\n nw: [nbax, nbay],\n ne: [nbax + nbaw, nbay],\n sw: [nbax, nbay + nbah],\n se: [nbax + nbaw, nbay + nbah],\n n: [nbax + (nbaw) / 2, nbay],\n w: [nbax, nbay + (nbah) / 2],\n e: [nbax + nbaw, nbay + (nbah) / 2],\n s: [nbax + (nbaw) / 2, nbay + nbah]\n };\n Object.entries(this.gripCoords).forEach(([dir, coords]) => {\n selectedGrips[dir].setAttribute('cx', coords[0]);\n selectedGrips[dir].setAttribute('cy', coords[1]);\n });\n\n // we want to go 20 pixels in the negative transformed y direction, ignoring scale\n mgr.rotateGripConnector.setAttribute('x1', nbax + (nbaw) / 2);\n mgr.rotateGripConnector.setAttribute('y1', nbay);\n mgr.rotateGripConnector.setAttribute('x2', nbax + (nbaw) / 2);\n mgr.rotateGripConnector.setAttribute('y2', nbay - (gripRadius * 5));\n\n mgr.rotateGrip.setAttribute('cx', nbax + (nbaw) / 2);\n mgr.rotateGrip.setAttribute('cy', nbay - (gripRadius * 5));\n // }\n }\n\n // STATIC methods\n /**\n * Updates cursors for corner grips on rotation so arrows point the right way.\n * @param {Float} angle - Current rotation angle in degrees\n * @returns {void}\n */\n static updateGripCursors (angle) {\n const dirArr = Object.keys(selectorManager_.selectorGrips);\n let steps = Math.round(angle / 45);\n if (steps < 0) { steps += 8; }\n while (steps > 0) {\n dirArr.push(dirArr.shift());\n steps--;\n }\n Object.values(selectorManager_.selectorGrips).forEach((gripElement, i) => {\n gripElement.setAttribute('style', ('cursor:' + dirArr[i] + '-resize'));\n });\n }\n}\n\n/**\n* Manage all selector objects (selection boxes).\n*/\nexport class SelectorManager {\n /**\n * Sets up properties and calls `initGroup`.\n */\n constructor () {\n // this will hold the <g> element that contains all selector rects/grips\n this.selectorParentGroup = null;\n\n // this is a special rect that is used for multi-select\n this.rubberBandBox = null;\n\n // this will hold objects of type Selector (see above)\n this.selectors = [];\n\n // this holds a map of SVG elements to their Selector object\n this.selectorMap = {};\n\n // this holds a reference to the grip elements\n this.selectorGrips = {\n nw: null,\n n: null,\n ne: null,\n e: null,\n se: null,\n s: null,\n sw: null,\n w: null\n };\n\n this.selectorGripsGroup = null;\n this.rotateGripConnector = null;\n this.rotateGrip = null;\n\n this.initGroup();\n }\n\n /**\n * Resets the parent selector group element.\n * @returns {void}\n */\n initGroup () {\n // remove old selector parent group if it existed\n if (this.selectorParentGroup && this.selectorParentGroup.parentNode) {\n this.selectorParentGroup.remove();\n }\n\n // create parent selector group and add it to svgroot\n this.selectorParentGroup = svgFactory_.createSVGElement({\n element: 'g',\n attr: {id: 'selectorParentGroup'}\n });\n this.selectorGripsGroup = svgFactory_.createSVGElement({\n element: 'g',\n attr: {display: 'none'}\n });\n this.selectorParentGroup.append(this.selectorGripsGroup);\n svgFactory_.svgRoot().append(this.selectorParentGroup);\n\n this.selectorMap = {};\n this.selectors = [];\n this.rubberBandBox = null;\n\n // add the corner grips\n Object.keys(this.selectorGrips).forEach((dir) => {\n const grip = svgFactory_.createSVGElement({\n element: 'circle',\n attr: {\n id: ('selectorGrip_resize_' + dir),\n fill: '#22C',\n r: gripRadius,\n style: ('cursor:' + dir + '-resize'),\n // This expands the mouse-able area of the grips making them\n // easier to grab with the mouse.\n // This works in Opera and WebKit, but does not work in Firefox\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=500174\n 'stroke-width': 2,\n 'pointer-events': 'all'\n }\n });\n\n $.data(grip, 'dir', dir);\n $.data(grip, 'type', 'resize');\n this.selectorGrips[dir] = grip;\n this.selectorGripsGroup.append(grip);\n });\n\n // add rotator elems\n this.rotateGripConnector =\n svgFactory_.createSVGElement({\n element: 'line',\n attr: {\n id: ('selectorGrip_rotateconnector'),\n stroke: '#22C',\n 'stroke-width': '1'\n }\n });\n this.selectorGripsGroup.append(this.rotateGripConnector);\n\n this.rotateGrip =\n svgFactory_.createSVGElement({\n element: 'circle',\n attr: {\n id: 'selectorGrip_rotate',\n fill: 'lime',\n r: gripRadius,\n stroke: '#22C',\n 'stroke-width': 2,\n style: 'cursor:url(' + config_.imgPath + 'rotate.svg) 12 12, auto;'\n }\n });\n this.selectorGripsGroup.append(this.rotateGrip);\n $.data(this.rotateGrip, 'type', 'rotate');\n\n if ($('#canvasBackground').length) { return; }\n\n const [width, height] = config_.dimensions;\n const canvasbg = svgFactory_.createSVGElement({\n element: 'svg',\n attr: {\n id: 'canvasBackground',\n width,\n height,\n x: 0,\n y: 0,\n overflow: (isWebkit() ? 'none' : 'visible'), // Chrome 7 has a problem with this when zooming out\n style: 'pointer-events:none'\n }\n });\n\n const rect = svgFactory_.createSVGElement({\n element: 'rect',\n attr: {\n width: '100%',\n height: '100%',\n x: 0,\n y: 0,\n 'stroke-width': 1,\n stroke: '#000',\n fill: '#FFF',\n style: 'pointer-events:none'\n }\n });\n\n // Both Firefox and WebKit are too slow with this filter region (especially at higher\n // zoom levels) and Opera has at least one bug\n // if (!isOpera()) rect.setAttribute('filter', 'url(#canvashadow)');\n canvasbg.append(rect);\n svgFactory_.svgRoot().insertBefore(canvasbg, svgFactory_.svgContent());\n // Ok to replace above with `svgFactory_.svgContent().before(canvasbg);`?\n }\n\n /**\n *\n * @param {Element} elem - DOM element to get the selector for\n * @param {module:utilities.BBoxObject} [bbox] - Optional bbox to use for reset (prevents duplicate getBBox call).\n * @returns {Selector} The selector based on the given element\n */\n requestSelector (elem, bbox) {\n if (isNullish(elem)) { return null; }\n\n const N = this.selectors.length;\n // If we've already acquired one for this element, return it.\n if (typeof this.selectorMap[elem.id] === 'object') {\n this.selectorMap[elem.id].locked = true;\n return this.selectorMap[elem.id];\n }\n for (let i = 0; i < N; ++i) {\n if (this.selectors[i] && !this.selectors[i].locked) {\n this.selectors[i].locked = true;\n this.selectors[i].reset(elem, bbox);\n this.selectorMap[elem.id] = this.selectors[i];\n return this.selectors[i];\n }\n }\n // if we reached here, no available selectors were found, we create one\n this.selectors[N] = new Selector(N, elem, bbox);\n this.selectorParentGroup.append(this.selectors[N].selectorGroup);\n this.selectorMap[elem.id] = this.selectors[N];\n return this.selectors[N];\n }\n\n /**\n * Removes the selector of the given element (hides selection box).\n *\n * @param {Element} elem - DOM element to remove the selector for\n * @returns {void}\n */\n releaseSelector (elem) {\n if (isNullish(elem)) { return; }\n const N = this.selectors.length,\n sel = this.selectorMap[elem.id];\n if (sel && !sel.locked) {\n // TODO(codedread): Ensure this exists in this module.\n console.log('WARNING! selector was released but was already unlocked'); \n }\n for (let i = 0; i < N; ++i) {\n if (this.selectors[i] && this.selectors[i] === sel) {\n delete this.selectorMap[elem.id];\n sel.locked = false;\n sel.selectedElement = null;\n sel.showGrips(false);\n\n // remove from DOM and store reference in JS but only if it exists in the DOM\n try {\n sel.selectorGroup.setAttribute('display', 'none');\n } catch (e) {/* empty fn */}\n\n break;\n }\n }\n }\n\n /**\n * @returns {SVGRectElement} The rubberBandBox DOM element. This is the rectangle drawn by\n * the user for selecting/zooming\n */\n getRubberBandBox () {\n if (!this.rubberBandBox) {\n this.rubberBandBox =\n svgFactory_.createSVGElement({\n element: 'rect',\n attr: {\n id: 'selectorRubberBand',\n fill: '#22C',\n 'fill-opacity': 0.15,\n stroke: '#22C',\n 'stroke-width': 0.5,\n display: 'none',\n style: 'pointer-events:none'\n }\n });\n this.selectorParentGroup.append(this.rubberBandBox);\n }\n return this.rubberBandBox;\n }\n}\n\n/**\n * An object that creates SVG elements for the canvas.\n *\n * @interface module:select.SVGFactory\n */\n/**\n * @function module:select.SVGFactory#createSVGElement\n * @param {module:utilities.EditorContext#addSVGElementFromJson} jsonMap\n * @returns {SVGElement}\n */\n/**\n * @function module:select.SVGFactory#svgRoot\n * @returns {SVGSVGElement}\n */\n/**\n * @function module:select.SVGFactory#svgContent\n * @returns {SVGSVGElement}\n */\n/**\n * @function module:select.SVGFactory#getCurrentZoom\n * @returns {Float} The current zoom level\n */\n\n/**\n * @typedef {GenericArray} module:select.Dimensions\n * @property {Integer} length 2\n * @property {Float} 0 Width\n * @property {Float} 1 Height\n */\n/**\n * @typedef {PlainObject} module:select.Config\n * @property {string} imgPath\n * @property {module:select.Dimensions} dimensions\n */\n\n/**\n * Initializes this module.\n * @function module:select.init\n * @param {module:select.Config} config - An object containing configurable parameters (imgPath)\n * @param {module:select.SVGFactory} svgFactory - An object implementing the SVGFactory interface.\n * @returns {void}\n */\nexport const init = function (config, svgFactory) {\n config_ = config;\n svgFactory_ = svgFactory;\n selectorManager_ = new SelectorManager();\n};\n\n/**\n * @function module:select.getSelectorManager\n * @returns {module:select.SelectorManager} The SelectorManager instance.\n */\nexport const getSelectorManager = () => selectorManager_;\n","/* globals jQuery */\n/**\n * Tools for clear.\n * @module clear\n * @license MIT\n * @copyright 2011 Jeff Schiller\n */\nimport jQueryPluginSVG from './jQuery.attr.js';\nimport {NS} from '../common/namespaces.js';\n\nconst $ = jQueryPluginSVG(jQuery);\n\nlet clearContext_ = null;\n\n/**\n* @function module:clear.init\n* @param {module:clear.SvgCanvas#init} clearContext\n* @returns {void}\n*/\nexport const init = function (clearContext) {\n clearContext_ = clearContext;\n};\n\nexport const clearSvgContentElementInit = function () {\n const curConfig = clearContext_.getCurConfig();\n const {dimensions} = curConfig;\n $(clearContext_.getSVGContent()).empty();\n\n // TODO: Clear out all other attributes first?\n $(clearContext_.getSVGContent()).attr({\n id: 'svgcontent',\n width: dimensions[0],\n height: dimensions[1],\n x: dimensions[0],\n y: dimensions[1],\n overflow: curConfig.show_outside_canvas ? 'visible' : 'hidden',\n xmlns: NS.SVG,\n 'xmlns:se': NS.SE,\n 'xmlns:xlink': NS.XLINK\n }).appendTo(clearContext_.getSVGRoot());\n\n // TODO: make this string optional and set by the client\n const comment = clearContext_.getDOMDocument().createComment(' Created with SVG-edit - https://github.com/SVG-Edit/svgedit');\n clearContext_.getSVGContent().append(comment);\n};\n","/* globals jQuery */\n/**\n * Numerous tools for working with the editor's \"canvas\".\n * @module svgcanvas\n *\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria, 2010 Pavol Rusnak, 2010 Jeff Schiller\n *\n */\n\n/* Dependencies:\n1. Also expects jQuery UI for `svgCanvasToString` and\n`convertToGroup` use of `:data()` selector\n*/\n\nimport {Canvg as canvg} from 'canvg';\nimport 'pathseg';\n\nimport jQueryPluginSVG from './jQuery.attr.js'; // Needed for SVG attribute setting and array form with `attr`\n\nimport * as pathModule from './path.js';\nimport * as hstry from './history.js';\nimport * as draw from './draw.js';\nimport {\n init as pasteInit, pasteElementsMethod\n} from './paste-elem.js';\n\n// eslint-disable-next-line no-duplicate-imports\nimport {\n identifyLayers, createLayer, cloneLayer, deleteCurrentLayer,\n setCurrentLayer, renameCurrentLayer, setCurrentLayerPosition,\n setLayerVisibility, moveSelectedToLayer, mergeLayer, mergeAllLayers,\n leaveContext, setContext\n} from './draw.js';\nimport {svgRootElement} from './svgroot.js';\nimport {\n init as undoInit, getUndoManager, changeSelectedAttributeNoUndoMethod,\n changeSelectedAttributeMethod, ffClone\n} from './undo.js';\nimport {\n init as selectionInit, clearSelectionMethod, addToSelectionMethod, getMouseTargetMethod,\n getIntersectionListMethod, runExtensionsMethod, groupSvgElem, prepareSvg,\n recalculateAllSelectedDimensions, setRotationAngle\n} from './selection.js';\nimport {\n init as textActionsInit, textActionsMethod\n} from './text-actions.js';\nimport {\n init as eventInit, mouseMoveEvent, mouseUpEvent,\n dblClickEvent, mouseDownEvent, DOMMouseScrollEvent\n} from './event.js';\nimport {init as jsonInit, getJsonFromSvgElements, addSVGElementsFromJson} from './json.js';\nimport {\n init as elemInit, getResolutionMethod, getTitleMethod, setGroupTitleMethod,\n setDocumentTitleMethod, setResolutionMethod, getEditorNSMethod, setBBoxZoomMethod,\n setZoomMethod, setColorMethod, setGradientMethod, findDuplicateGradient, setPaintMethod,\n setStrokeWidthMethod, setStrokeAttrMethod, getBoldMethod, setBoldMethod, getItalicMethod,\n setItalicMethod, setTextAnchorMethod, getFontFamilyMethod, setFontFamilyMethod, setFontColorMethod, getFontColorMethod,\n getFontSizeMethod, setFontSizeMethod, getTextMethod, setTextContentMethod,\n setImageURLMethod, setLinkURLMethod, setRectRadiusMethod, makeHyperlinkMethod,\n removeHyperlinkMethod, setSegTypeMethod, setBackgroundMethod\n} from './elem-get-set.js';\nimport {\n init as selectedElemInit, moveToTopSelectedElem, moveToBottomSelectedElem,\n moveUpDownSelected, moveSelectedElements, cloneSelectedElements, alignSelectedElements,\n deleteSelectedElements, copySelectedElements, groupSelectedElements, pushGroupProperty,\n ungroupSelectedElement, cycleElement, updateCanvas\n} from './selected-elem.js';\nimport {\n init as blurInit, setBlurNoUndo, setBlurOffsets, setBlur\n} from './blur-event.js';\nimport {sanitizeSvg} from './sanitize.js';\nimport {getReverseNS, NS} from '../common/namespaces.js';\nimport {\n text2xml, assignAttributes, cleanupElement, getElem, getUrlFromAttr,\n findDefs, getHref, setHref, getRefElem, getRotationAngle, getPathBBox,\n preventClickDefault, walkTree, getBBoxOfElementAsPath, convertToPath, encode64, decode64,\n getVisibleElements, dropXMLInternalSubset, init as utilsInit,\n getBBox as utilsGetBBox, getStrokedBBoxDefaultVisible, isNullish, blankPageObjectURL,\n $id, $qa, $qq\n} from './utilities.js';\nimport {\n transformPoint, matrixMultiply, hasMatrixTransform, transformListToTransform,\n isIdentity, transformBox\n} from './math.js';\nimport {\n convertToNum, getTypeMap, init as unitsInit\n} from '../common/units.js';\nimport {\n svgCanvasToString, svgToString, setSvgString, save, exportPDF, setUseDataMethod,\n init as svgInit, importSvgString, embedImage, rasterExport,\n uniquifyElemsMethod, removeUnusedDefElemsMethod, convertGradientsMethod\n} from './svg-exec.js';\nimport {\n isChrome, isWebkit\n} from '../common/browser.js'; // , supportsEditableText\nimport {\n getTransformList, SVGTransformList as SVGEditTransformList\n} from './svgtransformlist.js';\nimport {\n remapElement,\n init as coordsInit\n} from './coords.js';\nimport {\n recalculateDimensions,\n init as recalculateInit\n} from './recalculate.js';\nimport {\n getSelectorManager,\n Selector,\n init as selectInit\n} from './select.js';\nimport {\n clearSvgContentElementInit,\n init as clearInit\n} from './clear.js';\n\nconst $ = jQueryPluginSVG(jQuery);\nconst {\n MoveElementCommand, InsertElementCommand, RemoveElementCommand,\n ChangeElementCommand, BatchCommand\n} = hstry;\n\nconst visElems = 'a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use';\nconst refAttrs = ['clip-path', 'fill', 'filter', 'marker-end', 'marker-mid', 'marker-start', 'mask', 'stroke'];\n\nif (!window.console) {\n window.console = {};\n window.console.log = function (_str) { /* empty fn */ };\n window.console.dir = function (_str) { /* empty fn */ };\n}\n\nif (window.opera) {\n window.console.log = function (str) { window.opera.postError(str); };\n window.console.dir = function (str) { /* empty fn */ };\n}\n\n// Reenable after fixing eslint-plugin-jsdoc to handle\n/**\n* The main SvgCanvas class that manages all SVG-related functions.\n* @memberof module:svgcanvas\n*\n* @borrows module:coords.remapElement as #remapElement\n* @borrows module:recalculate.recalculateDimensions as #recalculateDimensions\n*\n* @borrows module:utilities.cleanupElement as #cleanupElement\n* @borrows module:utilities.getStrokedBBoxDefaultVisible as #getStrokedBBox\n* @borrows module:utilities.getVisibleElements as #getVisibleElements\n* @borrows module:utilities.findDefs as #findDefs\n* @borrows module:utilities.getUrlFromAttr as #getUrlFromAttr\n* @borrows module:utilities.getHref as #getHref\n* @borrows module:utilities.setHref as #setHref\n* @borrows module:utilities.getRotationAngle as #getRotationAngle\n* @borrows module:utilities.getBBox as #getBBox\n* @borrows module:utilities.getElem as #getElem\n* @borrows module:utilities.getRefElem as #getRefElem\n* @borrows module:utilities.assignAttributes as #assignAttributes\n*\n* @borrows module:SVGTransformList.getTransformList as #getTransformList\n* @borrows module:math.matrixMultiply as #matrixMultiply\n* @borrows module:math.hasMatrixTransform as #hasMatrixTransform\n* @borrows module:math.transformListToTransform as #transformListToTransform\n* @borrows module:units.convertToNum as #convertToNum\n* @borrows module:sanitize.sanitizeSvg as #sanitizeSvg\n* @borrows module:path.pathActions.linkControlPoints as #linkControlPoints\n*/\nclass SvgCanvas {\n /**\n * @param {HTMLElement} container - The container HTML element that should hold the SVG root element\n * @param {module:SVGeditor.configObj.curConfig} config - An object that contains configuration data\n */\n constructor (container, config) {\n // Alias Namespace constants\n\n // Default configuration options\n const curConfig = {\n show_outside_canvas: true,\n selectNew: true,\n dimensions: [640, 480]\n };\n\n // Update config with new one if given\n if (config) {\n $.extend(curConfig, config);\n }\n\n // Array with width/height of canvas\n const {dimensions} = curConfig;\n\n const canvas = this;\n\n this.isLayer = draw.Layer.isLayer;\n\n // \"document\" element associated with the container (same as window.document using default svg-editor.js)\n // NOTE: This is not actually a SVG document, but an HTML document.\n // JFH const svgdoc = container.ownerDocument;\n const svgdoc = window.document;\n\n // This is a container for the document being edited, not the document itself.\n /**\n * @name module:svgcanvas~svgroot\n * @type {SVGSVGElement}\n */\n const svgroot = svgRootElement(svgdoc, dimensions);\n const getSVGRoot = () => svgroot;\n container.append(svgroot);\n\n /**\n * The actual element that represents the final output SVG element.\n * @name module:svgcanvas~svgcontent\n * @type {SVGSVGElement}\n */\n let svgcontent = svgdoc.createElementNS(NS.SVG, 'svg');\n\n /**\n* This should really be an intersection implementing all rather than a union.\n* @type {module:draw.DrawCanvasInit#getSVGContent|module:utilities.EditorContext#getSVGContent}\n*/\n const getSVGContent = () => { return svgcontent; };\n\n clearInit(\n /**\n * @implements {module:utilities.EditorContext}\n */\n {\n getSVGContent,\n getDOMDocument () { return svgdoc; },\n getDOMContainer () { return container; },\n getSVGRoot,\n getCurConfig () { return curConfig; }\n }\n );\n /**\n* This function resets the svgcontent element while keeping it in the DOM.\n* @function module:svgcanvas.SvgCanvas#clearSvgContentElement\n* @returns {void}\n*/\n const clearSvgContentElement = canvas.clearSvgContentElement = clearSvgContentElementInit;\n clearSvgContentElement();\n\n // Prefix string for element IDs\n let idprefix = 'svg_';\n\n /**\n* Changes the ID prefix to the given value.\n* @function module:svgcanvas.SvgCanvas#setIdPrefix\n* @param {string} p - String with the new prefix\n* @returns {void}\n*/\n canvas.setIdPrefix = function (p) {\n idprefix = p;\n };\n\n /**\n* Current `draw.Drawing` object.\n* @type {module:draw.Drawing}\n* @name module:svgcanvas.SvgCanvas#current_drawing_\n*/\n canvas.current_drawing_ = new draw.Drawing(svgcontent, idprefix);\n\n /**\n* Returns the current Drawing.\n* @name module:svgcanvas.SvgCanvas#getCurrentDrawing\n* @type {module:draw.DrawCanvasInit#getCurrentDrawing}\n*/\n const getCurrentDrawing = canvas.getCurrentDrawing = function () {\n return canvas.current_drawing_;\n };\n\n /**\n* Float displaying the current zoom level (1 = 100%, .5 = 50%, etc.).\n* @type {Float}\n*/\n let currentZoom = 1;\n\n // pointer to current group (for in-group editing)\n let currentGroup = null;\n\n // Object containing data for the currently selected styles\n const allProperties = {\n shape: {\n fill: (curConfig.initFill.color === 'none' ? '' : '#') + curConfig.initFill.color,\n fill_paint: null,\n fill_opacity: curConfig.initFill.opacity,\n stroke: '#' + curConfig.initStroke.color,\n stroke_paint: null,\n stroke_opacity: curConfig.initStroke.opacity,\n stroke_width: curConfig.initStroke.width,\n stroke_dasharray: 'none',\n stroke_linejoin: 'miter',\n stroke_linecap: 'butt',\n opacity: curConfig.initOpacity\n }\n };\n\n allProperties.text = $.extend(true, {}, allProperties.shape);\n $.extend(allProperties.text, {\n fill: '#000000',\n stroke_width: curConfig.text && curConfig.text.stroke_width,\n font_size: curConfig.text && curConfig.text.font_size,\n font_family: curConfig.text && curConfig.text.font_family\n });\n\n // Current shape style properties\n const curShape = allProperties.shape;\n\n // Array with all the currently selected elements\n // default size of 1 until it needs to grow bigger\n let selectedElements = [];\n\n jsonInit(\n /**\n * @implements {module:json.jsonContext}\n */\n {\n getDOMDocument () { return svgdoc; },\n getDrawing () { return getCurrentDrawing(); },\n getCurShape () { return curShape; },\n getCurrentGroup () { return currentGroup; }\n }\n );\n\n /**\n* @typedef {PlainObject} module:svgcanvas.SVGAsJSON\n* @property {string} element\n* @property {PlainObject<string, string>} attr\n* @property {module:svgcanvas.SVGAsJSON[]} children\n*/\n\n /**\n* @function module:svgcanvas.SvgCanvas#getContentElem\n* @param {Text|Element} data\n* @returns {module:svgcanvas.SVGAsJSON}\n*/\n const getJsonFromSvgElement = this.getJsonFromSvgElement = getJsonFromSvgElements;\n\n /**\n* This should really be an intersection implementing all rather than a union.\n* @name module:svgcanvas.SvgCanvas#addSVGElementFromJson\n* @type {module:utilities.EditorContext#addSVGElementFromJson|module:path.EditorContext#addSVGElementFromJson}\n*/\n const addSVGElementFromJson = this.addSVGElementFromJson = addSVGElementsFromJson;\n\n canvas.getTransformList = getTransformList;\n canvas.matrixMultiply = matrixMultiply;\n canvas.hasMatrixTransform = hasMatrixTransform;\n canvas.transformListToTransform = transformListToTransform;\n\n /**\n* @type {module:utilities.EditorContext#getBaseUnit}\n*/\n const getBaseUnit = () => { return curConfig.baseUnit; };\n\n /**\n* Initialize from units.js.\n* Send in an object implementing the ElementContainer interface (see units.js).\n*/\n unitsInit(\n /**\n * @implements {module:units.ElementContainer}\n */\n {\n getBaseUnit,\n getElement: getElem,\n getHeight () { return svgcontent.getAttribute('height') / currentZoom; },\n getWidth () { return svgcontent.getAttribute('width') / currentZoom; },\n getRoundDigits () { return saveOptions.round_digits; }\n }\n );\n\n canvas.convertToNum = convertToNum;\n\n /**\n* Should really be an intersection with all needing to apply rather than a union.\n* @name module:svgcanvas.SvgCanvas#getSelectedElements\n* @type {module:utilities.EditorContext#getSelectedElements|module:draw.DrawCanvasInit#getSelectedElements|module:path.EditorContext#getSelectedElements}\n*/\n const getSelectedElements = this.getSelectedElems = function () {\n return selectedElements;\n };\n\n this.setSelectedElements = function (key, value) {\n selectedElements[key] = value;\n };\n this.setEmptySelectedElements = function () {\n selectedElements = [];\n };\n\n const {pathActions} = pathModule;\n\n /**\n* This should actually be an intersection as all interfaces should be met.\n* @type {module:utilities.EditorContext#getSVGRoot|module:recalculate.EditorContext#getSVGRoot|module:coords.EditorContext#getSVGRoot|module:path.EditorContext#getSVGRoot}\n*/\n\n utilsInit(\n /**\n * @implements {module:utilities.EditorContext}\n */\n {\n pathActions, // Ok since not modifying\n getSVGContent,\n addSVGElementFromJson,\n getSelectedElements,\n getDOMDocument () { return svgdoc; },\n getDOMContainer () { return container; },\n getSVGRoot,\n // TODO: replace this mostly with a way to get the current drawing.\n getBaseUnit,\n getSnappingStep () { return curConfig.snappingStep; }\n }\n );\n\n canvas.findDefs = findDefs;\n canvas.getUrlFromAttr = getUrlFromAttr;\n canvas.getHref = getHref;\n canvas.setHref = setHref;\n /* const getBBox = */ canvas.getBBox = utilsGetBBox;\n canvas.getRotationAngle = getRotationAngle;\n canvas.getElem = getElem;\n canvas.getRefElem = getRefElem;\n canvas.assignAttributes = assignAttributes;\n\n this.cleanupElement = cleanupElement;\n\n /**\n* This should actually be an intersection not a union as all should apply.\n* @type {module:coords.EditorContext#getGridSnapping|module:path.EditorContext#getGridSnapping}\n*/\n const getGridSnapping = () => { return curConfig.gridSnapping; };\n\n coordsInit(\n /**\n * @implements {module:coords.EditorContext}\n */\n {\n getDrawing () { return getCurrentDrawing(); },\n getSVGRoot,\n getGridSnapping\n }\n );\n this.remapElement = remapElement;\n\n recalculateInit(\n /**\n * @implements {module:recalculate.EditorContext}\n */\n {\n getSVGRoot,\n getStartTransform () { return startTransform; },\n setStartTransform (transform) { startTransform = transform; }\n }\n );\n this.recalculateDimensions = recalculateDimensions;\n\n // import from sanitize.js\n const nsMap = getReverseNS();\n canvas.sanitizeSvg = sanitizeSvg;\n\n /**\n* This should really be an intersection applying to all types rather than a union.\n* @name module:svgcanvas.SvgCanvas#getZoom\n* @type {module:path.EditorContext#getCurrentZoom|module:select.SVGFactory#getCurrentZoom}\n*/\n const getCurrentZoom = this.getZoom = function () { return currentZoom; };\n\n /**\n* This method rounds the incoming value to the nearest value based on the `currentZoom`\n* @name module:svgcanvas.SvgCanvas#round\n* @type {module:path.EditorContext#round}\n*/\n const round = this.round = function (val) {\n return Number.parseInt(val * currentZoom) / currentZoom;\n };\n\n selectInit(\n curConfig,\n /**\n * Export to select.js.\n * @implements {module:select.SVGFactory}\n */\n {\n createSVGElement (jsonMap) { return canvas.addSVGElementFromJson(jsonMap); },\n svgRoot () { return svgroot; },\n svgContent () { return svgcontent; },\n getCurrentZoom\n }\n );\n /**\n* This object manages selectors for us.\n* @name module:svgcanvas.SvgCanvas#selectorManager\n* @type {module:select.SelectorManager}\n*/\n const selectorManager = this.selectorManager = getSelectorManager();\n\n /**\n* @name module:svgcanvas.SvgCanvas#getNextId\n* @type {module:path.EditorContext#getNextId}\n*/\n const getNextId = canvas.getNextId = function () {\n return getCurrentDrawing().getNextId();\n };\n\n /**\n* @name module:svgcanvas.SvgCanvas#getId\n* @type {module:path.EditorContext#getId}\n*/\n const getId = canvas.getId = function () {\n return getCurrentDrawing().getId();\n };\n\n /**\n* The \"implements\" should really be an intersection applying to all types rather than a union.\n* @name module:svgcanvas.SvgCanvas#call\n* @type {module:draw.DrawCanvasInit#call|module:path.EditorContext#call}\n*/\n const call = function (ev, arg) {\n if (events[ev]) {\n return events[ev](window, arg);\n }\n return undefined;\n };\n\n const restoreRefElems = function (elem) {\n // Look for missing reference elements, restore any found\n const attrs = $(elem).attr(refAttrs);\n Object.values(attrs).forEach((val) => {\n if (val && val.startsWith('url(')) {\n const id = getUrlFromAttr(val).substr(1);\n const ref = getElem(id);\n if (!ref) {\n findDefs().append(removedElements[id]);\n delete removedElements[id];\n }\n }\n });\n\n const childs = elem.getElementsByTagName('*');\n\n if (childs.length) {\n for (let i = 0, l = childs.length; i < l; i++) {\n restoreRefElems(childs[i]);\n }\n }\n };\n\n undoInit(\n /**\n * @implements {module:undo.undoContext}\n */\n {\n call,\n restoreRefElems,\n getSVGContent,\n getCanvas () { return canvas; },\n getCurrentMode () { return currentMode; },\n getCurrentZoom,\n getSVGRoot,\n getSelectedElements\n }\n );\n\n /**\n* @name undoMgr\n* @memberof module:svgcanvas.SvgCanvas#\n* @type {module:history.HistoryEventHandler}\n*/\n const undoMgr = canvas.undoMgr = getUndoManager();\n\n /**\n* This should really be an intersection applying to all types rather than a union.\n* @name module:svgcanvas~addCommandToHistory\n* @type {module:path.EditorContext#addCommandToHistory|module:draw.DrawCanvasInit#addCommandToHistory}\n*/\n const addCommandToHistory = function (cmd) {\n canvas.undoMgr.addCommandToHistory(cmd);\n };\n selectionInit(\n /**\n * @implements {module:selection.selectionContext}\n */\n {\n getCanvas () { return canvas; },\n getCurrentGroup () { return currentGroup; },\n getSelectedElements,\n getSVGRoot,\n getSVGContent,\n getDOMContainer () { return container; },\n getExtensions () { return extensions; },\n setExtensions (key, value) { extensions[key] = value; },\n getCurrentZoom,\n getRubberBox () { return rubberBox; },\n setCurBBoxes (value) { curBBoxes = value; },\n getCurBBoxes (value) { return curBBoxes; },\n getCurrentResizeMode () { return currentResizeMode; },\n addCommandToHistory,\n getSelector () { return Selector; }\n }\n );\n\n /**\n* Clears the selection. The 'selected' handler is then optionally called.\n* This should really be an intersection applying to all types rather than a union.\n* @name module:svgcanvas.SvgCanvas#clearSelection\n* @type {module:draw.DrawCanvasInit#clearSelection|module:path.EditorContext#clearSelection}\n* @fires module:svgcanvas.SvgCanvas#event:selected\n*/\n const clearSelection = this.clearSelection = clearSelectionMethod;\n\n /**\n* Adds a list of elements to the selection. The 'selected' handler is then called.\n* @name module:svgcanvas.SvgCanvas#addToSelection\n* @type {module:path.EditorContext#addToSelection}\n* @fires module:svgcanvas.SvgCanvas#event:selected\n*/\n const addToSelection = this.addToSelection = addToSelectionMethod;\n\n /**\n * @type {module:path.EditorContext#getOpacity}\n */\n const getOpacity = function () {\n return curShape.opacity;\n };\n\n /**\n * @name module:svgcanvas.SvgCanvas#getMouseTarget\n * @type {module:path.EditorContext#getMouseTarget}\n */\n const getMouseTarget = this.getMouseTarget = getMouseTargetMethod;\n\n /**\n* @namespace {module:path.pathActions} pathActions\n* @memberof module:svgcanvas.SvgCanvas#\n* @see module:path.pathActions\n*/\n canvas.pathActions = pathActions;\n /**\n* @type {module:path.EditorContext#resetD}\n*/\n function resetD (p) {\n if (typeof pathActions.convertPath === 'function') {\n p.setAttribute('d', pathActions.convertPath(p));\n } else if (typeof pathActions.convertPaths === 'function') {\n p.setAttribute('d', pathActions.convertPaths(p));\n }\n }\n pathModule.init(\n /**\n * @implements {module:path.EditorContext}\n */\n {\n selectorManager, // Ok since not changing\n canvas, // Ok since not changing\n call,\n resetD,\n round,\n clearSelection,\n addToSelection,\n addCommandToHistory,\n remapElement,\n addSVGElementFromJson,\n getGridSnapping,\n getOpacity,\n getSelectedElements,\n getContainer () {\n return container;\n },\n setStarted (s) {\n started = s;\n },\n getRubberBox () {\n return rubberBox;\n },\n setRubberBox (rb) {\n rubberBox = rb;\n return rubberBox;\n },\n /**\n * @param {PlainObject} ptsInfo\n * @param {boolean} ptsInfo.closedSubpath\n * @param {SVGCircleElement[]} ptsInfo.grips\n * @fires module:svgcanvas.SvgCanvas#event:pointsAdded\n * @fires module:svgcanvas.SvgCanvas#event:selected\n * @returns {void}\n */\n addPtsToSelection ({closedSubpath, grips}) {\n // TODO: Correct this:\n pathActions.canDeleteNodes = true;\n pathActions.closed_subpath = closedSubpath;\n call('pointsAdded', {closedSubpath, grips});\n call('selected', grips);\n },\n /**\n * @param {PlainObject} changes\n * @param {ChangeElementCommand} changes.cmd\n * @param {SVGPathElement} changes.elem\n * @fires module:svgcanvas.SvgCanvas#event:changed\n * @returns {void}\n */\n endChanges ({cmd, elem}) {\n addCommandToHistory(cmd);\n call('changed', [elem]);\n },\n getCurrentZoom,\n getId,\n getNextId,\n getMouseTarget,\n getCurrentMode () {\n return currentMode;\n },\n setCurrentMode (cm) {\n currentMode = cm;\n return currentMode;\n },\n getDrawnPath () {\n return drawnPath;\n },\n setDrawnPath (dp) {\n drawnPath = dp;\n return drawnPath;\n },\n getSVGRoot\n }\n );\n\n // Interface strings, usually for title elements\n const uiStrings = {};\n\n const elData = $.data;\n\n // Animation element to change the opacity of any newly created element\n const opacAni = document.createElementNS(NS.SVG, 'animate');\n $(opacAni).attr({\n attributeName: 'opacity',\n begin: 'indefinite',\n dur: 1,\n fill: 'freeze'\n }).appendTo(svgroot);\n\n // (function () {\n // TODO For Issue 208: this is a start on a thumbnail\n // const svgthumb = svgdoc.createElementNS(NS.SVG, 'use');\n // svgthumb.setAttribute('width', '100');\n // svgthumb.setAttribute('height', '100');\n // setHref(svgthumb, '#svgcontent');\n // svgroot.append(svgthumb);\n // }());\n\n /**\n * @typedef {PlainObject} module:svgcanvas.SaveOptions\n * @property {boolean} apply\n * @property {\"embed\"} [image]\n * @property {Integer} round_digits\n */\n\n // Object to contain image data for raster images that were found encodable\n const encodableImages = {},\n\n // Object with save options\n /**\n * @type {module:svgcanvas.SaveOptions}\n */\n saveOptions = {round_digits: 5},\n\n // Object with IDs for imported files, to see if one was already added\n importIds = {},\n\n // Current text style properties\n curText = allProperties.text,\n\n // Object to contain all included extensions\n extensions = {},\n\n // Map of deleted reference elements\n removedElements = {};\n\n let\n // String with image URL of last loadable image\n lastGoodImgUrl = curConfig.imgPath + 'logo.svg',\n\n // Boolean indicating whether or not a draw action has been started\n started = false,\n\n // String with an element's initial transform attribute value\n startTransform = null,\n\n // String indicating the current editor mode\n currentMode = 'select',\n\n // String with the current direction in which an element is being resized\n currentResizeMode = 'none',\n\n // Current general properties\n curProperties = curShape,\n\n // Array with selected elements' Bounding box object\n // selectedBBoxes = new Array(1),\n\n // The DOM element that was just selected\n justSelected = null,\n\n // DOM element for selection rectangle drawn by the user\n rubberBox = null,\n\n // Array of current BBoxes, used in getIntersectionList().\n curBBoxes = [],\n\n // Canvas point for the most recent right click\n lastClickPoint = null;\n\n this.runExtension = function (name, action, vars) {\n return this.runExtensions(action, vars, false, (n) => n === name);\n };\n /**\n* @todo Consider: Should this return an array by default, so extension results aren't overwritten?\n* @todo Would be easier to document if passing in object with key of action and vars as value; could then define an interface which tied both together\n* @function module:svgcanvas.SvgCanvas#runExtensions\n* @param {\"mouseDown\"|\"mouseMove\"|\"mouseUp\"|\"zoomChanged\"|\"IDsUpdated\"|\"canvasUpdated\"|\"toolButtonStateUpdate\"|\"selectedChanged\"|\"elementTransition\"|\"elementChanged\"|\"langReady\"|\"langChanged\"|\"addLangData\"|\"onNewDocument\"|\"workareaResized\"} action\n* @param {module:svgcanvas.SvgCanvas#event:ext_mouseDown|module:svgcanvas.SvgCanvas#event:ext_mouseMove|module:svgcanvas.SvgCanvas#event:ext_mouseUp|module:svgcanvas.SvgCanvas#event:ext_zoomChanged|module:svgcanvas.SvgCanvas#event:ext_IDsUpdated|module:svgcanvas.SvgCanvas#event:ext_canvasUpdated|module:svgcanvas.SvgCanvas#event:ext_toolButtonStateUpdate|module:svgcanvas.SvgCanvas#event:ext_selectedChanged|module:svgcanvas.SvgCanvas#event:ext_elementTransition|module:svgcanvas.SvgCanvas#event:ext_elementChanged|module:svgcanvas.SvgCanvas#event:ext_langReady|module:svgcanvas.SvgCanvas#event:ext_langChanged|module:svgcanvas.SvgCanvas#event:ext_addLangData|module:svgcanvas.SvgCanvas#event:ext_onNewDocument|module:svgcanvas.SvgCanvas#event:ext_workareaResized|module:svgcanvas.ExtensionVarBuilder} [vars]\n* @param {boolean} [returnArray]\n* @param {module:svgcanvas.ExtensionNameFilter} nameFilter\n* @returns {GenericArray<module:svgcanvas.ExtensionStatus>|module:svgcanvas.ExtensionStatus|false} See {@tutorial ExtensionDocs} on the ExtensionStatus.\n*/\n this.runExtensions = runExtensionsMethod;\n\n /**\n* Add an extension to the editor.\n* @function module:svgcanvas.SvgCanvas#addExtension\n* @param {string} name - String with the ID of the extension. Used internally; no need for i18n.\n* @param {module:svgcanvas.ExtensionInitCallback} [extInitFunc] - Function supplied by the extension with its data\n* @param {module:svgcanvas.ExtensionInitArgs} initArgs\n* @fires module:svgcanvas.SvgCanvas#event:extension_added\n* @throws {TypeError|Error} `TypeError` if `extInitFunc` is not a function, `Error`\n* if extension of supplied name already exists\n* @returns {Promise<void>} Resolves to `undefined`\n*/\n this.addExtension = async function (name, extInitFunc, {$: jq, importLocale}) {\n if (typeof extInitFunc !== 'function') {\n throw new TypeError('Function argument expected for `svgcanvas.addExtension`');\n }\n if (name in extensions) {\n throw new Error('Cannot add extension \"' + name + '\", an extension by that name already exists.');\n }\n // Provide private vars/funcs here. Is there a better way to do this?\n /**\n * @typedef {module:svgcanvas.PrivateMethods} module:svgcanvas.ExtensionArgumentObject\n * @property {SVGSVGElement} svgroot See {@link module:svgcanvas~svgroot}\n * @property {SVGSVGElement} svgcontent See {@link module:svgcanvas~svgcontent}\n * @property {!(string|Integer)} nonce See {@link module:draw.Drawing#getNonce}\n * @property {module:select.SelectorManager} selectorManager\n * @property {module:SVGEditor~ImportLocale} importLocale\n */\n /**\n * @type {module:svgcanvas.ExtensionArgumentObject}\n * @see {@link module:svgcanvas.PrivateMethods} source for the other methods/properties\n */\n const argObj = $.extend(canvas.getPrivateMethods(), {\n $: jq,\n importLocale,\n svgroot,\n svgcontent,\n nonce: getCurrentDrawing().getNonce(),\n selectorManager\n });\n const extObj = await extInitFunc(argObj);\n if (extObj) {\n extObj.name = name;\n }\n\n extensions[name] = extObj;\n return call('extension_added', extObj);\n };\n\n /**\n* This method sends back an array or a NodeList full of elements that\n* intersect the multi-select rubber-band-box on the currentLayer only.\n*\n* We brute-force `getIntersectionList` for browsers that do not support it (Firefox).\n*\n* Reference:\n* Firefox does not implement `getIntersectionList()`, see {@link https://bugzilla.mozilla.org/show_bug.cgi?id=501421}.\n* @function module:svgcanvas.SvgCanvas#getIntersectionList\n* @param {SVGRect} rect\n* @returns {Element[]|NodeList} Bbox elements\n*/\n const getIntersectionList = this.getIntersectionList = getIntersectionListMethod;\n\n this.getStrokedBBox = getStrokedBBoxDefaultVisible;\n\n this.getVisibleElements = getVisibleElements;\n\n /**\n* Wrap an SVG element into a group element, mark the group as 'gsvg'.\n* @function module:svgcanvas.SvgCanvas#groupSvgElem\n* @param {Element} elem - SVG element to wrap\n* @returns {void}\n*/\n this.groupSvgElem = groupSvgElem;\n\n // Set scope for these functions\n\n // Object to contain editor event names and callback functions\n const events = {};\n\n canvas.call = call;\n /**\n * Array of what was changed (elements, layers).\n * @event module:svgcanvas.SvgCanvas#event:changed\n * @type {Element[]}\n */\n /**\n * Array of selected elements.\n * @event module:svgcanvas.SvgCanvas#event:selected\n * @type {Element[]}\n */\n /**\n * Array of selected elements.\n * @event module:svgcanvas.SvgCanvas#event:transition\n * @type {Element[]}\n */\n /**\n * The Element is always `SVGGElement`?\n * If not `null`, will be the set current group element.\n * @event module:svgcanvas.SvgCanvas#event:contextset\n * @type {null|Element}\n */\n /**\n * @event module:svgcanvas.SvgCanvas#event:pointsAdded\n * @type {PlainObject}\n * @property {boolean} closedSubpath\n * @property {SVGCircleElement[]} grips Grips elements\n */\n\n /**\n * @event module:svgcanvas.SvgCanvas#event:zoomed\n * @type {PlainObject}\n * @property {Float} x\n * @property {Float} y\n * @property {Float} width\n * @property {Float} height\n * @property {0.5|2} factor\n * @see module:SVGEditor.BBoxObjectWithFactor\n */\n /**\n * @event module:svgcanvas.SvgCanvas#event:updateCanvas\n * @type {PlainObject}\n * @property {false} center\n * @property {module:math.XYObject} newCtr\n */\n /**\n * @typedef {PlainObject} module:svgcanvas.ExtensionInitResponsePlusName\n * @implements {module:svgcanvas.ExtensionInitResponse}\n * @property {string} name The extension's resolved ID (whether explicit or based on file name)\n */\n /**\n * Generalized extension object response of\n * [`init()`]{@link module:svgcanvas.ExtensionInitCallback}\n * along with the name of the extension.\n * @event module:svgcanvas.SvgCanvas#event:extension_added\n * @type {module:svgcanvas.ExtensionInitResponsePlusName|void}\n */\n /**\n * @event module:svgcanvas.SvgCanvas#event:extensions_added\n * @type {void}\n*/\n /**\n * @typedef {PlainObject} module:svgcanvas.Message\n * @property {any} data The data\n * @property {string} origin The origin\n */\n /**\n * @event module:svgcanvas.SvgCanvas#event:message\n * @type {module:svgcanvas.Message}\n */\n /**\n * SVG canvas converted to string.\n * @event module:svgcanvas.SvgCanvas#event:saved\n * @type {string}\n */\n /**\n * @event module:svgcanvas.SvgCanvas#event:setnonce\n * @type {!(string|Integer)}\n */\n /**\n * @event module:svgcanvas.SvgCanvas#event:unsetnonce\n * @type {void}\n */\n /**\n * @event module:svgcanvas.SvgCanvas#event:zoomDone\n * @type {void}\n*/\n /**\n * @event module:svgcanvas.SvgCanvas#event:cleared\n * @type {void}\n*/\n\n /**\n * @event module:svgcanvas.SvgCanvas#event:exported\n * @type {module:svgcanvas.ImageExportedResults}\n */\n /**\n * @event module:svgcanvas.SvgCanvas#event:exportedPDF\n * @type {module:svgcanvas.PDFExportedResults}\n */\n /**\n * Creating a cover-all class until {@link https://github.com/jsdoc3/jsdoc/issues/1545} may be supported.\n * `undefined` may be returned by {@link module:svgcanvas.SvgCanvas#event:extension_added} if the extension's `init` returns `undefined` It is also the type for the following events \"zoomDone\", \"unsetnonce\", \"cleared\", and \"extensions_added\".\n * @event module:svgcanvas.SvgCanvas#event:GenericCanvasEvent\n * @type {module:svgcanvas.SvgCanvas#event:selected|module:svgcanvas.SvgCanvas#event:changed|module:svgcanvas.SvgCanvas#event:contextset|module:svgcanvas.SvgCanvas#event:pointsAdded|module:svgcanvas.SvgCanvas#event:extension_added|module:svgcanvas.SvgCanvas#event:extensions_added|module:svgcanvas.SvgCanvas#event:message|module:svgcanvas.SvgCanvas#event:transition|module:svgcanvas.SvgCanvas#event:zoomed|module:svgcanvas.SvgCanvas#event:updateCanvas|module:svgcanvas.SvgCanvas#event:saved|module:svgcanvas.SvgCanvas#event:exported|module:svgcanvas.SvgCanvas#event:exportedPDF|module:svgcanvas.SvgCanvas#event:setnonce|module:svgcanvas.SvgCanvas#event:unsetnonce|void}\n */\n\n /**\n * The promise return, if present, resolves to `undefined`\n * (`extension_added`, `exported`, `saved`).\n * @typedef {Promise<void>|void} module:svgcanvas.EventHandlerReturn\n*/\n\n /**\n* @callback module:svgcanvas.EventHandler\n* @param {external:Window} win\n* @param {module:svgcanvas.SvgCanvas#event:GenericCanvasEvent} arg\n* @listens module:svgcanvas.SvgCanvas#event:GenericCanvasEvent\n* @returns {module:svgcanvas.EventHandlerReturn}\n*/\n\n /**\n* Attaches a callback function to an event.\n* @function module:svgcanvas.SvgCanvas#bind\n* @param {\"changed\"|\"contextset\"|\"selected\"|\"pointsAdded\"|\"extension_added\"|\"extensions_added\"|\"message\"|\"transition\"|\"zoomed\"|\"updateCanvas\"|\"zoomDone\"|\"saved\"|\"exported\"|\"exportedPDF\"|\"setnonce\"|\"unsetnonce\"|\"cleared\"} ev - String indicating the name of the event\n* @param {module:svgcanvas.EventHandler} f - The callback function to bind to the event\n* @returns {module:svgcanvas.EventHandler} The previous event\n*/\n canvas.bind = function (ev, f) {\n const old = events[ev];\n events[ev] = f;\n return old;\n };\n\n /**\n* Runs the SVG Document through the sanitizer and then updates its paths.\n* @function module:svgcanvas.SvgCanvas#prepareSvg\n* @param {XMLDocument} newDoc - The SVG DOM document\n* @returns {void}\n*/\n this.prepareSvg = prepareSvg;\n\n /**\n* Removes any old rotations if present, prepends a new rotation at the\n* transformed center.\n* @function module:svgcanvas.SvgCanvas#setRotationAngle\n* @param {string|Float} val - The new rotation angle in degrees\n* @param {boolean} preventUndo - Indicates whether the action should be undoable or not\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\n this.setRotationAngle = setRotationAngle;\n\n /**\n* Runs `recalculateDimensions` on the selected elements,\n* adding the changes to a single batch command.\n* @function module:svgcanvas.SvgCanvas#recalculateAllSelectedDimensions\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\n this.recalculateAllSelectedDimensions = recalculateAllSelectedDimensions;\n\n /**\n * Debug tool to easily see the current matrix in the browser's console.\n * @function module:svgcanvas~logMatrix\n * @param {SVGMatrix} m The matrix\n * @returns {void}\n */\n const logMatrix = function (m) {\n console.log([m.a, m.b, m.c, m.d, m.e, m.f]); \n };\n\n // Root Current Transformation Matrix in user units\n let rootSctm = null;\n\n /**\n* Group: Selection.\n*/\n\n // TODO: do we need to worry about selectedBBoxes here?\n\n /**\n* Selects only the given elements, shortcut for `clearSelection(); addToSelection()`.\n* @function module:svgcanvas.SvgCanvas#selectOnly\n* @param {Element[]} elems - an array of DOM elements to be selected\n* @param {boolean} showGrips - Indicates whether the resize grips should be shown\n* @returns {void}\n*/\n const selectOnly = this.selectOnly = function (elems, showGrips) {\n clearSelection(true);\n addToSelection(elems, showGrips);\n };\n\n // TODO: could use slice here to make this faster?\n // TODO: should the 'selected' handler\n\n /**\n* Removes elements from the selection.\n* @function module:svgcanvas.SvgCanvas#removeFromSelection\n* @param {Element[]} elemsToRemove - An array of elements to remove from selection\n* @returns {void}\n*/\n /* const removeFromSelection = */ this.removeFromSelection = function (elemsToRemove) {\n if (isNullish(selectedElements[0])) { return; }\n if (!elemsToRemove.length) { return; }\n\n // find every element and remove it from our array copy\n const newSelectedItems = [],\n len = selectedElements.length;\n for (let i = 0; i < len; ++i) {\n const elem = selectedElements[i];\n if (elem) {\n // keep the item\n if (!elemsToRemove.includes(elem)) {\n newSelectedItems.push(elem);\n } else { // remove the item and its selector\n selectorManager.releaseSelector(elem);\n }\n }\n }\n // the copy becomes the master now\n selectedElements = newSelectedItems;\n };\n\n /**\n* Clears the selection, then adds all elements in the current layer to the selection.\n* @function module:svgcanvas.SvgCanvas#selectAllInCurrentLayer\n* @returns {void}\n*/\n this.selectAllInCurrentLayer = function () {\n const currentLayer = getCurrentDrawing().getCurrentLayer();\n if (currentLayer) {\n currentMode = 'select';\n selectOnly($(currentGroup || currentLayer).children());\n }\n };\n\n let drawnPath = null;\n\n // Mouse events\n (function () {\n const freehand = {\n minx: null,\n miny: null,\n maxx: null,\n maxy: null\n };\n const THRESHOLD_DIST = 0.8,\n STEP_COUNT = 10;\n let dAttr = null;\n let startX = null;\n let startY = null;\n let rStartX = null;\n let rStartY = null;\n let initBbox = {};\n let sumDistance = 0;\n const controllPoint2 = {x: 0, y: 0};\n const controllPoint1 = {x: 0, y: 0};\n let start = {x: 0, y: 0};\n const end = {x: 0, y: 0};\n let bSpline = {x: 0, y: 0};\n let nextPos = {x: 0, y: 0};\n let parameter;\n let nextParameter;\n\n /**\n * @function eventInit Initialize from event.js\n * @returns {void}\n */\n eventInit(\n /**\n * @implements {module:event.eventContext_}\n */\n {\n getStarted () { return started; },\n getCanvas () { return canvas; },\n getCurConfig () { return curConfig; },\n getCurrentMode () { return currentMode; },\n getrootSctm () { return rootSctm; },\n getStartX () { return startX; },\n setStartX (value) { startX = value; },\n getStartY () { return startY; },\n setStartY (value) { startY = value; },\n getRStartX () { return rStartX; },\n getRStartY () { return rStartY; },\n getRubberBox () { return rubberBox; },\n getInitBbox () { return initBbox; },\n getCurrentResizeMode () { return currentResizeMode; },\n getCurrentGroup () { return currentGroup; },\n getDrawnPath () { return drawnPath; },\n getJustSelected () { return justSelected; },\n getOpacAni () { return opacAni; },\n getParameter () { return parameter; },\n getNextParameter () { return nextParameter; },\n getStepCount () { return STEP_COUNT; },\n getThreSholdDist () { return THRESHOLD_DIST; },\n getSumDistance () { return sumDistance; },\n getStart (key) { return start[key]; },\n getEnd (key) { return end[key]; },\n getbSpline (key) { return bSpline[key]; },\n getNextPos (key) { return nextPos[key]; },\n getControllPoint1 (key) { return controllPoint1[key]; },\n getControllPoint2 (key) { return controllPoint2[key]; },\n getFreehand (key) { return freehand[key]; },\n getDrawing () { return getCurrentDrawing(); },\n getCurShape () { return curShape; },\n getDAttr () { return dAttr; },\n getLastGoodImgUrl () { return lastGoodImgUrl; },\n getCurText (key) { return curText[key]; },\n setDAttr (value) { dAttr = value; },\n setEnd (key, value) { end[key] = value; },\n setControllPoint1 (key, value) { controllPoint1[key] = value; },\n setControllPoint2 (key, value) { controllPoint2[key] = value; },\n setJustSelected (value) { justSelected = value; },\n setParameter (value) { parameter = value; },\n setStart (value) { start = value; },\n setRStartX (value) { rStartX = value; },\n setRStartY (value) { rStartY = value; },\n setSumDistance (value) { sumDistance = value; },\n setbSpline (value) { bSpline = value; },\n setNextPos (value) { nextPos = value; },\n setNextParameter (value) { nextParameter = value; },\n setCurProperties (key, value) { curProperties[key] = value; },\n setCurText (key, value) { curText[key] = value; },\n setStarted (s) { started = s; },\n setStartTransform (transform) { startTransform = transform; },\n setCurrentMode (cm) {\n currentMode = cm;\n return currentMode;\n },\n setFreehand (key, value) { freehand[key] = value; },\n setCurBBoxes (value) { curBBoxes = value; },\n setRubberBox (value) { rubberBox = value; },\n setInitBbox (value) { initBbox = value; },\n setRootSctm (value) { rootSctm = value; },\n setCurrentResizeMode (value) { currentResizeMode = value; },\n setLastClickPoint (value) { lastClickPoint = value; },\n getSelectedElements,\n getCurrentZoom,\n getId,\n addCommandToHistory,\n getSVGRoot,\n getSVGContent,\n call,\n elData,\n getIntersectionList\n }\n );\n\n /**\n * Follows these conditions:\n * - When we are in a create mode, the element is added to the canvas but the\n * action is not recorded until mousing up.\n * - When we are in select mode, select the element, remember the position\n * and do nothing else.\n * @param {MouseEvent} evt\n * @fires module:svgcanvas.SvgCanvas#event:ext_mouseDown\n * @returns {void}\n */\n const mouseDown = mouseDownEvent;\n\n // in this function we do not record any state changes yet (but we do update\n // any elements that are still being created, moved or resized on the canvas)\n /**\n *\n * @param {MouseEvent} evt\n * @fires module:svgcanvas.SvgCanvas#event:transition\n * @fires module:svgcanvas.SvgCanvas#event:ext_mouseMove\n * @returns {void}\n */\n const mouseMove = mouseMoveEvent;\n\n // - in create mode, the element's opacity is set properly, we create an InsertElementCommand\n // and store it on the Undo stack\n // - in move/resize mode, the element's attributes which were affected by the move/resize are\n // identified, a ChangeElementCommand is created and stored on the stack for those attrs\n // this is done in when we recalculate the selected dimensions()\n /**\n *\n * @param {MouseEvent} evt\n * @fires module:svgcanvas.SvgCanvas#event:zoomed\n * @fires module:svgcanvas.SvgCanvas#event:changed\n * @fires module:svgcanvas.SvgCanvas#event:ext_mouseUp\n * @returns {void}\n */\n const mouseUp = mouseUpEvent;\n\n const dblClick = dblClickEvent;\n\n // prevent links from being followed in the canvas\n const handleLinkInCanvas = function (e) {\n e.preventDefault();\n return false;\n };\n\n // Added mouseup to the container here.\n // TODO(codedread): Figure out why after the Closure compiler, the window mouseup is ignored.\n $(container).mousedown(mouseDown).mousemove(mouseMove).click(handleLinkInCanvas).dblclick(dblClick).mouseup(mouseUp);\n // $(window).mouseup(mouseUp);\n\n // TODO(rafaelcastrocouto): User preference for shift key and zoom factor\n $(container).bind('mousewheel DOMMouseScroll', DOMMouseScrollEvent);\n }());\n\n textActionsInit(\n /**\n * @implements {module:text-actions.textActionsContext}\n */\n {\n getCanvas () { return canvas; },\n getrootSctm () { return rootSctm; },\n getSelectedElements,\n getCurrentZoom,\n getCurrentMode () {\n return currentMode;\n },\n setCurrentMode (cm) {\n currentMode = cm;\n return currentMode;\n },\n getSVGRoot,\n call\n }\n );\n\n const textActions = canvas.textActions = textActionsMethod;\n\n /**\n* Group: Serialization.\n*/\n\n svgInit(\n /**\n * @implements {module:elem-get-set.elemInit}\n */\n {\n getCanvas () { return canvas; },\n getSVGContent,\n getSVGRoot,\n getUIStrings () { return uiStrings; },\n getCurrentGroup () { return currentGroup; },\n getCurConfig () { return curConfig; },\n getNsMap () { return nsMap; },\n getSvgOption () { return saveOptions; },\n setSvgOption (key, value) { saveOptions[key] = value; },\n getSvgOptionApply () { return saveOptions.apply; },\n getSvgOptionImages () { return saveOptions.images; },\n getEncodableImages (key) { return encodableImages[key]; },\n setEncodableImages (key, value) { encodableImages[key] = value; },\n call,\n getDOMDocument () { return svgdoc; },\n getVisElems () { return visElems; },\n getIdPrefix () { return idprefix; },\n setCurrentZoom (value) { currentZoom = value; },\n getImportIds (key) { return importIds[key]; },\n setImportIds (key, value) { importIds[key] = value; },\n setRemovedElements (key, value) { removedElements[key] = value; },\n setSVGContent (value) { svgcontent = value; },\n getrefAttrs () { return refAttrs; },\n getcanvg () { return canvg; },\n addCommandToHistory\n }\n );\n\n /**\n* Looks at DOM elements inside the `<defs>` to see if they are referred to,\n* removes them from the DOM if they are not.\n* @function module:svgcanvas.SvgCanvas#removeUnusedDefElems\n* @returns {Integer} The number of elements that were removed\n*/\n this.removeUnusedDefElems = removeUnusedDefElemsMethod;\n\n /**\n* Main function to set up the SVG content for output.\n* @function module:svgcanvas.SvgCanvas#svgCanvasToString\n* @returns {string} The SVG image for output\n*/\n this.svgCanvasToString = svgCanvasToString;\n\n /**\n* Sub function ran on each SVG element to convert it to a string as desired.\n* @function module:svgcanvas.SvgCanvas#svgToString\n* @param {Element} elem - The SVG element to convert\n* @param {Integer} indent - Number of spaces to indent this tag\n* @returns {string} The given element as an SVG tag\n*/\n this.svgToString = svgToString;\n\n /**\n * Function to run when image data is found.\n * @callback module:svgcanvas.ImageEmbeddedCallback\n * @param {string|false} result Data URL\n * @returns {void}\n */\n /**\n* Converts a given image file to a data URL when possible, then runs a given callback.\n* @function module:svgcanvas.SvgCanvas#embedImage\n* @param {string} src - The path/URL of the image\n* @returns {Promise<string|false>} Resolves to a Data URL (string|false)\n*/\n this.embedImage = embedImage;\n\n /**\n* Sets a given URL to be a \"last good image\" URL.\n* @function module:svgcanvas.SvgCanvas#setGoodImage\n* @param {string} val\n* @returns {void}\n*/\n this.setGoodImage = function (val) {\n lastGoodImgUrl = val;\n };\n\n /**\n* Does nothing by default, handled by optional widget/extension.\n* @function module:svgcanvas.SvgCanvas#open\n* @returns {void}\n*/\n this.open = function () {\n /* empty fn */\n };\n\n /**\n* Serializes the current drawing into SVG XML text and passes it to the 'saved' handler.\n* This function also includes the XML prolog. Clients of the `SvgCanvas` bind their save\n* function to the 'saved' event.\n* @function module:svgcanvas.SvgCanvas#save\n* @param {module:svgcanvas.SaveOptions} opts\n* @fires module:svgcanvas.SvgCanvas#event:saved\n* @returns {void}\n*/\n this.save = save;\n\n /**\n* @typedef {PlainObject} module:svgcanvas.IssuesAndCodes\n* @property {string[]} issueCodes The locale-independent code names\n* @property {string[]} issues The localized descriptions\n*/\n\n /**\n * @typedef {\"feGaussianBlur\"|\"foreignObject\"|\"[stroke-dasharray]\"|\"text\"} module:svgcanvas.IssueCode\n */\n /**\n* @typedef {PlainObject} module:svgcanvas.ImageExportedResults\n* @property {string} datauri Contents as a Data URL\n* @property {string} bloburl May be the empty string\n* @property {string} svg The SVG contents as a string\n* @property {string[]} issues The localization messages of `issueCodes`\n* @property {module:svgcanvas.IssueCode[]} issueCodes CanVG issues found with the SVG\n* @property {\"PNG\"|\"JPEG\"|\"BMP\"|\"WEBP\"|\"ICO\"} type The chosen image type\n* @property {\"image/png\"|\"image/jpeg\"|\"image/bmp\"|\"image/webp\"} mimeType The image MIME type\n* @property {Float} quality A decimal between 0 and 1 (for use with JPEG or WEBP)\n* @property {string} exportWindowName A convenience for passing along a `window.name` to target a window on which the export could be added\n*/\n\n /**\n* Generates a PNG (or JPG, BMP, WEBP) Data URL based on the current image,\n* then calls \"exported\" with an object including the string, image\n* information, and any issues found.\n* @function module:svgcanvas.SvgCanvas#rasterExport\n* @param {\"PNG\"|\"JPEG\"|\"BMP\"|\"WEBP\"|\"ICO\"} [imgType=\"PNG\"]\n* @param {Float} [quality] Between 0 and 1\n* @param {string} [exportWindowName]\n* @param {PlainObject} [opts]\n* @param {boolean} [opts.avoidEvent]\n* @fires module:svgcanvas.SvgCanvas#event:exported\n* @todo Confirm/fix ICO type\n* @returns {Promise<module:svgcanvas.ImageExportedResults>} Resolves to {@link module:svgcanvas.ImageExportedResults}\n*/\n this.rasterExport = rasterExport;\n\n /**\n * @typedef {void|\"save\"|\"arraybuffer\"|\"blob\"|\"datauristring\"|\"dataurlstring\"|\"dataurlnewwindow\"|\"datauri\"|\"dataurl\"} external:jsPDF.OutputType\n * @todo Newer version to add also allows these `outputType` values \"bloburi\"|\"bloburl\" which return strings, so document here and for `outputType` of `module:svgcanvas.PDFExportedResults` below if added\n*/\n /**\n* @typedef {PlainObject} module:svgcanvas.PDFExportedResults\n* @property {string} svg The SVG PDF output\n* @property {string|ArrayBuffer|Blob|window} output The output based on the `outputType`;\n* if `undefined`, \"datauristring\", \"dataurlstring\", \"datauri\",\n* or \"dataurl\", will be a string (`undefined` gives a document, while the others\n* build as Data URLs; \"datauri\" and \"dataurl\" change the location of the current page); if\n* \"arraybuffer\", will return `ArrayBuffer`; if \"blob\", returns a `Blob`;\n* if \"dataurlnewwindow\", will change the current page's location and return a string\n* if in Safari and no window object is found; otherwise opens in, and returns, a new `window`\n* object; if \"save\", will have the same return as \"dataurlnewwindow\" if\n* `navigator.getUserMedia` support is found without `URL.createObjectURL` support; otherwise\n* returns `undefined` but attempts to save\n* @property {external:jsPDF.OutputType} outputType\n* @property {string[]} issues The human-readable localization messages of corresponding `issueCodes`\n* @property {module:svgcanvas.IssueCode[]} issueCodes\n* @property {string} exportWindowName\n*/\n\n /**\n* Generates a PDF based on the current image, then calls \"exportedPDF\" with\n* an object including the string, the data URL, and any issues found.\n* @function module:svgcanvas.SvgCanvas#exportPDF\n* @param {string} [exportWindowName] Will also be used for the download file name here\n* @param {external:jsPDF.OutputType} [outputType=\"dataurlstring\"]\n* @fires module:svgcanvas.SvgCanvas#event:exportedPDF\n* @returns {Promise<module:svgcanvas.PDFExportedResults>} Resolves to {@link module:svgcanvas.PDFExportedResults}\n*/\n this.exportPDF = exportPDF;\n\n /**\n* Returns the current drawing as raw SVG XML text.\n* @function module:svgcanvas.SvgCanvas#getSvgString\n* @returns {string} The current drawing as raw SVG XML text.\n*/\n this.getSvgString = function () {\n saveOptions.apply = false;\n return this.svgCanvasToString();\n };\n\n /**\n* This function determines whether to use a nonce in the prefix, when\n* generating IDs for future documents in SVG-Edit.\n* If you're controlling SVG-Edit externally, and want randomized IDs, call\n* this BEFORE calling `svgCanvas.setSvgString`.\n* @function module:svgcanvas.SvgCanvas#randomizeIds\n* @param {boolean} [enableRandomization] If true, adds a nonce to the prefix. Thus\n* `svgCanvas.randomizeIds() <==> svgCanvas.randomizeIds(true)`\n* @returns {void}\n*/\n this.randomizeIds = function (enableRandomization) {\n if (arguments.length > 0 && enableRandomization === false) {\n draw.randomizeIds(false, getCurrentDrawing());\n } else {\n draw.randomizeIds(true, getCurrentDrawing());\n }\n };\n\n /**\n* Ensure each element has a unique ID.\n* @function module:svgcanvas.SvgCanvas#uniquifyElems\n* @param {Element} g - The parent element of the tree to give unique IDs\n* @returns {void}\n*/\n const uniquifyElems = this.uniquifyElems = uniquifyElemsMethod;\n\n /**\n* Assigns reference data for each use element.\n* @function module:svgcanvas.SvgCanvas#setUseData\n* @param {Element} parent\n* @returns {void}\n*/\n const setUseData = this.setUseData = setUseDataMethod;\n\n /**\n* Converts gradients from userSpaceOnUse to objectBoundingBox.\n* @function module:svgcanvas.SvgCanvas#convertGradients\n* @param {Element} elem\n* @returns {void}\n*/\n const convertGradients = this.convertGradients = convertGradientsMethod;\n\n /**\n* This function sets the current drawing as the input SVG XML.\n* @function module:svgcanvas.SvgCanvas#setSvgString\n* @param {string} xmlString - The SVG as XML text.\n* @param {boolean} [preventUndo=false] - Indicates if we want to do the\n* changes without adding them to the undo stack - e.g. for initializing a\n* drawing on page load.\n* @fires module:svgcanvas.SvgCanvas#event:setnonce\n* @fires module:svgcanvas.SvgCanvas#event:unsetnonce\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {boolean} This function returns `false` if the set was\n* unsuccessful, `true` otherwise.\n*/\n this.setSvgString = setSvgString;\n\n /**\n* This function imports the input SVG XML as a `<symbol>` in the `<defs>`, then adds a\n* `<use>` to the current layer.\n* @function module:svgcanvas.SvgCanvas#importSvgString\n* @param {string} xmlString - The SVG as XML text.\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {null|Element} This function returns null if the import was unsuccessful, or the element otherwise.\n* @todo\n* - properly handle if namespace is introduced by imported content (must add to svgcontent\n* and update all prefixes in the imported node)\n* - properly handle recalculating dimensions, `recalculateDimensions()` doesn't handle\n* arbitrary transform lists, but makes some assumptions about how the transform list\n* was obtained\n*/\n this.importSvgString = importSvgString;\n\n // Could deprecate, but besides external uses, their usage makes clear that\n // canvas is a dependency for all of these\n const dr = {\n identifyLayers, createLayer, cloneLayer, deleteCurrentLayer,\n setCurrentLayer, renameCurrentLayer, setCurrentLayerPosition,\n setLayerVisibility, moveSelectedToLayer, mergeLayer, mergeAllLayers,\n leaveContext, setContext\n };\n Object.entries(dr).forEach(([prop, propVal]) => {\n canvas[prop] = propVal;\n });\n draw.init(\n /**\n * @implements {module:draw.DrawCanvasInit}\n */\n {\n pathActions,\n getCurrentGroup () {\n return currentGroup;\n },\n setCurrentGroup (cg) {\n currentGroup = cg;\n },\n getSelectedElements,\n getSVGContent,\n undoMgr,\n elData,\n getCurrentDrawing,\n clearSelection,\n call,\n addCommandToHistory,\n /**\n * @fires module:svgcanvas.SvgCanvas#event:changed\n * @returns {void}\n */\n changeSVGContent () {\n call('changed', [svgcontent]);\n }\n }\n );\n\n /**\n* Group: Document functions.\n*/\n\n /**\n* Clears the current document. This is not an undoable action.\n* @function module:svgcanvas.SvgCanvas#clear\n* @fires module:svgcanvas.SvgCanvas#event:cleared\n* @returns {void}\n*/\n this.clear = function () {\n pathActions.clear();\n\n clearSelection();\n\n // clear the svgcontent node\n canvas.clearSvgContentElement();\n\n // create new document\n canvas.current_drawing_ = new draw.Drawing(svgcontent);\n\n // create empty first layer\n canvas.createLayer('Layer 1');\n\n // clear the undo stack\n canvas.undoMgr.resetUndoStack();\n\n // reset the selector manager\n selectorManager.initGroup();\n\n // reset the rubber band box\n rubberBox = selectorManager.getRubberBandBox();\n\n call('cleared');\n };\n\n // Alias function\n this.linkControlPoints = pathActions.linkControlPoints;\n\n /**\n* @function module:svgcanvas.SvgCanvas#getContentElem\n* @returns {Element} The content DOM element\n*/\n this.getContentElem = function () { return svgcontent; };\n\n /**\n* @function module:svgcanvas.SvgCanvas#getRootElem\n* @returns {SVGSVGElement} The root DOM element\n*/\n this.getRootElem = function () { return svgroot; };\n\n elemInit(\n /**\n * @implements {module:elem-get-set.elemInit}\n */\n {\n addCommandToHistory,\n getCurrentZoom,\n getSVGContent,\n getSelectedElements,\n call,\n changeSelectedAttributeNoUndoMethod,\n getDOMDocument () { return svgdoc; },\n getCanvas () { return canvas; },\n setCanvas (key, value) { canvas[key] = value; },\n setCurrentZoom (value) { currentZoom = value; },\n setCurProperties (key, value) { curProperties[key] = value; },\n getCurProperties (key) { return curProperties[key]; },\n setCurShape (key, value) { curShape[key] = value; },\n getCurText (key) { return curText[key]; },\n setCurText (key, value) { curText[key] = value; }\n }\n );\n\n /**\n* @typedef {PlainObject} DimensionsAndZoom\n* @property {Float} w Width\n* @property {Float} h Height\n* @property {Float} zoom Zoom\n*/\n\n /**\n* @function module:svgcanvas.SvgCanvas#getResolution\n* @returns {DimensionsAndZoom} The current dimensions and zoom level in an object\n*/\n const getResolution = this.getResolution = getResolutionMethod;\n\n /**\n* @function module:svgcanvas.SvgCanvas#getSnapToGrid\n* @returns {boolean} The current snap to grid setting\n*/\n this.getSnapToGrid = function () { return curConfig.gridSnapping; };\n\n /**\n* @function module:svgcanvas.SvgCanvas#getVersion\n* @returns {string} A string which describes the revision number of SvgCanvas.\n*/\n this.getVersion = function () {\n return 'svgcanvas.js ($Rev$)';\n };\n\n /**\n* Update interface strings with given values.\n* @function module:svgcanvas.SvgCanvas#setUiStrings\n* @param {module:path.uiStrings} strs - Object with strings (see the [locales API]{@link module:locale.LocaleStrings} and the [tutorial]{@tutorial LocaleDocs})\n* @returns {void}\n*/\n this.setUiStrings = function (strs) {\n Object.assign(uiStrings, strs.notification);\n pathModule.setUiStrings(strs);\n };\n\n /**\n* Update configuration options with given values.\n* @function module:svgcanvas.SvgCanvas#setConfig\n* @param {module:SVGEditor.Config} opts - Object with options\n* @returns {void}\n*/\n this.setConfig = function (opts) {\n Object.assign(curConfig, opts);\n };\n\n /**\n* @function module:svgcanvas.SvgCanvas#getTitle\n* @param {Element} [elem]\n* @returns {string|void} the current group/SVG's title contents or\n* `undefined` if no element is passed nd there are no selected elements.\n*/\n this.getTitle = getTitleMethod;\n\n /**\n* Sets the group/SVG's title content.\n* @function module:svgcanvas.SvgCanvas#setGroupTitle\n* @param {string} val\n* @todo Combine this with `setDocumentTitle`\n* @returns {void}\n*/\n this.setGroupTitle = setGroupTitleMethod;\n\n /**\n* @function module:svgcanvas.SvgCanvas#getDocumentTitle\n* @returns {string|void} The current document title or an empty string if not found\n*/\n this.getDocumentTitle = function () {\n return canvas.getTitle(svgcontent);\n };\n\n /**\n* Adds/updates a title element for the document with the given name.\n* This is an undoable action.\n* @function module:svgcanvas.SvgCanvas#setDocumentTitle\n* @param {string} newTitle - String with the new title\n* @returns {void}\n*/\n this.setDocumentTitle = setDocumentTitleMethod;\n\n /**\n* Returns the editor's namespace URL, optionally adding it to the root element.\n* @function module:svgcanvas.SvgCanvas#getEditorNS\n* @param {boolean} [add] - Indicates whether or not to add the namespace value\n* @returns {string} The editor's namespace URL\n*/\n this.getEditorNS = getEditorNSMethod;\n\n /**\n* Changes the document's dimensions to the given size.\n* @function module:svgcanvas.SvgCanvas#setResolution\n* @param {Float|\"fit\"} x - Number with the width of the new dimensions in user units.\n* Can also be the string \"fit\" to indicate \"fit to content\".\n* @param {Float} y - Number with the height of the new dimensions in user units.\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {boolean} Indicates if resolution change was successful.\n* It will fail on \"fit to content\" option with no content to fit to.\n*/\n this.setResolution = setResolutionMethod;\n\n /**\n* @typedef {module:jQueryAttr.Attributes} module:svgcanvas.ElementPositionInCanvas\n* @property {Float} x\n* @property {Float} y\n*/\n\n /**\n* @function module:svgcanvas.SvgCanvas#getOffset\n* @returns {module:svgcanvas.ElementPositionInCanvas} An object with `x`, `y` values indicating the svgcontent element's\n* position in the editor's canvas.\n*/\n this.getOffset = function () {\n return $(svgcontent).attr(['x', 'y']);\n };\n\n /**\n * @typedef {PlainObject} module:svgcanvas.ZoomAndBBox\n * @property {Float} zoom\n * @property {module:utilities.BBoxObject} bbox\n */\n /**\n* Sets the zoom level on the canvas-side based on the given value.\n* @function module:svgcanvas.SvgCanvas#setBBoxZoom\n* @param {\"selection\"|\"canvas\"|\"content\"|\"layer\"|module:SVGEditor.BBoxObjectWithFactor} val - Bounding box object to zoom to or string indicating zoom option. Note: the object value type is defined in `svg-editor.js`\n* @param {Integer} editorW - The editor's workarea box's width\n* @param {Integer} editorH - The editor's workarea box's height\n* @returns {module:svgcanvas.ZoomAndBBox|void}\n*/\n this.setBBoxZoom = setBBoxZoomMethod;\n\n /**\n* The zoom level has changed. Supplies the new zoom level as a number (not percentage).\n* @event module:svgcanvas.SvgCanvas#event:ext_zoomChanged\n* @type {Float}\n*/\n /**\n* The bottom panel was updated.\n* @event module:svgcanvas.SvgCanvas#event:ext_toolButtonStateUpdate\n* @type {PlainObject}\n* @property {boolean} nofill Indicates fill is disabled\n* @property {boolean} nostroke Indicates stroke is disabled\n*/\n /**\n* The element selection has changed (elements were added/removed from selection).\n* @event module:svgcanvas.SvgCanvas#event:ext_selectedChanged\n* @type {PlainObject}\n* @property {Element[]} elems Array of the newly selected elements\n* @property {Element|null} selectedElement The single selected element\n* @property {boolean} multiselected Indicates whether one or more elements were selected\n*/\n /**\n* Called when part of element is in process of changing, generally on\n* mousemove actions like rotate, move, etc.\n* @event module:svgcanvas.SvgCanvas#event:ext_elementTransition\n* @type {PlainObject}\n* @property {Element[]} elems Array of transitioning elements\n*/\n /**\n* One or more elements were changed.\n* @event module:svgcanvas.SvgCanvas#event:ext_elementChanged\n* @type {PlainObject}\n* @property {Element[]} elems Array of the affected elements\n*/\n /**\n* Invoked as soon as the locale is ready.\n* @event module:svgcanvas.SvgCanvas#event:ext_langReady\n* @type {PlainObject}\n* @property {string} lang The two-letter language code\n* @property {module:SVGEditor.uiStrings} uiStrings\n* @property {module:SVGEditor~ImportLocale} importLocale\n*/\n /**\n* The language was changed. Two-letter code of the new language.\n* @event module:svgcanvas.SvgCanvas#event:ext_langChanged\n* @type {string}\n*/\n /**\n* Means for an extension to add locale data. The two-letter language code.\n* @event module:svgcanvas.SvgCanvas#event:ext_addLangData\n* @type {PlainObject}\n* @property {string} lang\n* @property {module:SVGEditor~ImportLocale} importLocale\n*/\n /**\n * Called when new image is created.\n * @event module:svgcanvas.SvgCanvas#event:ext_onNewDocument\n * @type {void}\n */\n /**\n * Called when sidepanel is resized or toggled.\n * @event module:svgcanvas.SvgCanvas#event:ext_workareaResized\n * @type {void}\n*/\n /**\n * Called upon addition of the extension, or, if svgicons are set,\n * after the icons are ready when extension SVG icons have loaded.\n * @event module:svgcanvas.SvgCanvas#event:ext_callback\n * @type {void}\n*/\n\n /**\n* Sets the zoom to the given level.\n* @function module:svgcanvas.SvgCanvas#setZoom\n* @param {Float} zoomLevel - Float indicating the zoom level to change to\n* @fires module:svgcanvas.SvgCanvas#event:ext_zoomChanged\n* @returns {void}\n*/\n this.setZoom = setZoomMethod;\n\n /**\n* @function module:svgcanvas.SvgCanvas#getMode\n* @returns {string} The current editor mode string\n*/\n this.getMode = function () {\n return currentMode;\n };\n\n /**\n* Sets the editor's mode to the given string.\n* @function module:svgcanvas.SvgCanvas#setMode\n* @param {string} name - String with the new mode to change to\n* @returns {void}\n*/\n this.setMode = function (name) {\n pathActions.clear(true);\n textActions.clear();\n curProperties = (selectedElements[0] && selectedElements[0].nodeName === 'text') ? curText : curShape;\n currentMode = name;\n };\n\n /**\n* Group: Element Styling.\n*/\n\n /**\n* @typedef {PlainObject} module:svgcanvas.PaintOptions\n* @property {\"solidColor\"} type\n*/\n\n /**\n* @function module:svgcanvas.SvgCanvas#getColor\n* @param {string} type\n* @returns {string|module:svgcanvas.PaintOptions|Float|module:jGraduate~Paint} The current fill/stroke option\n*/\n this.getColor = function (type) {\n return curProperties[type];\n };\n\n /**\n* Change the current stroke/fill color/gradient value.\n* @function module:svgcanvas.SvgCanvas#setColor\n* @param {string} type - String indicating fill or stroke\n* @param {string} val - The value to set the stroke attribute to\n* @param {boolean} preventUndo - Boolean indicating whether or not this should be an undoable option\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\n this.setColor = setColorMethod;\n\n /**\n* Apply the current gradient to selected element's fill or stroke.\n* @function module:svgcanvas.SvgCanvas#setGradient\n* @param {\"fill\"|\"stroke\"} type - String indicating \"fill\" or \"stroke\" to apply to an element\n* @returns {void}\n*/\n this.setGradient = setGradientMethod;\n\n /**\n* Set a color/gradient to a fill/stroke.\n* @function module:svgcanvas.SvgCanvas#setPaint\n* @param {\"fill\"|\"stroke\"} type - String with \"fill\" or \"stroke\"\n* @param {module:jGraduate.jGraduatePaintOptions} paint - The jGraduate paint object to apply\n* @returns {void}\n*/\n this.setPaint = setPaintMethod;\n\n /**\n* @function module:svgcanvas.SvgCanvas#setStrokePaint\n* @param {module:jGraduate~Paint} paint\n* @returns {void}\n*/\n this.setStrokePaint = function (paint) {\n this.setPaint('stroke', paint);\n };\n\n /**\n* @function module:svgcanvas.SvgCanvas#setFillPaint\n* @param {module:jGraduate~Paint} paint\n* @returns {void}\n*/\n this.setFillPaint = function (paint) {\n this.setPaint('fill', paint);\n };\n\n /**\n* @function module:svgcanvas.SvgCanvas#getStrokeWidth\n* @returns {Float|string} The current stroke-width value\n*/\n this.getStrokeWidth = function () {\n return curProperties.stroke_width;\n };\n\n /**\n* Sets the stroke width for the current selected elements.\n* When attempting to set a line's width to 0, this changes it to 1 instead.\n* @function module:svgcanvas.SvgCanvas#setStrokeWidth\n* @param {Float} val - A Float indicating the new stroke width value\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\n this.setStrokeWidth = setStrokeWidthMethod;\n\n /**\n* Set the given stroke-related attribute the given value for selected elements.\n* @function module:svgcanvas.SvgCanvas#setStrokeAttr\n* @param {string} attr - String with the attribute name\n* @param {string|Float} val - String or number with the attribute value\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\n this.setStrokeAttr = setStrokeAttrMethod;\n\n /**\n* @typedef {PlainObject} module:svgcanvas.StyleOptions\n* @property {string} fill\n* @property {Float} fill_opacity\n* @property {string} stroke\n* @property {Float} stroke_width\n* @property {string} stroke_dasharray\n* @property {string} stroke_linejoin\n* @property {string} stroke_linecap\n* @property {Float} stroke_opacity\n* @property {Float} opacity\n*/\n\n /**\n* @function module:svgcanvas.SvgCanvas#getStyle\n* @returns {module:svgcanvas.StyleOptions} current style options\n*/\n this.getStyle = function () {\n return curShape;\n };\n\n /**\n* @function module:svgcanvas.SvgCanvas#getOpacity\n* @returns {Float} the current opacity\n*/\n this.getOpacity = getOpacity;\n\n /**\n* Sets the given opacity on the current selected elements.\n* @function module:svgcanvas.SvgCanvas#setOpacity\n* @param {string} val\n* @returns {void}\n*/\n this.setOpacity = function (val) {\n curShape.opacity = val;\n changeSelectedAttribute('opacity', val);\n };\n\n /**\n* @function module:svgcanvas.SvgCanvas#getFillOpacity\n* @returns {Float} the current fill opacity\n*/\n this.getFillOpacity = function () {\n return curShape.fill_opacity;\n };\n\n /**\n* @function module:svgcanvas.SvgCanvas#getStrokeOpacity\n* @returns {string} the current stroke opacity\n*/\n this.getStrokeOpacity = function () {\n return curShape.stroke_opacity;\n };\n\n /**\n* Sets the current fill/stroke opacity.\n* @function module:svgcanvas.SvgCanvas#setPaintOpacity\n* @param {string} type - String with \"fill\" or \"stroke\"\n* @param {Float} val - Float with the new opacity value\n* @param {boolean} preventUndo - Indicates whether or not this should be an undoable action\n* @returns {void}\n*/\n this.setPaintOpacity = function (type, val, preventUndo) {\n curShape[type + '_opacity'] = val;\n if (!preventUndo) {\n changeSelectedAttribute(type + '-opacity', val);\n } else {\n changeSelectedAttributeNoUndo(type + '-opacity', val);\n }\n };\n\n /**\n* Gets the current fill/stroke opacity.\n* @function module:svgcanvas.SvgCanvas#getPaintOpacity\n* @param {\"fill\"|\"stroke\"} type - String with \"fill\" or \"stroke\"\n* @returns {Float} Fill/stroke opacity\n*/\n this.getPaintOpacity = function (type) {\n return type === 'fill' ? this.getFillOpacity() : this.getStrokeOpacity();\n };\n\n /**\n* Gets the `stdDeviation` blur value of the given element.\n* @function module:svgcanvas.SvgCanvas#getBlur\n* @param {Element} elem - The element to check the blur value for\n* @returns {string} stdDeviation blur attribute value\n*/\n this.getBlur = function (elem) {\n let val = 0;\n // const elem = selectedElements[0];\n\n if (elem) {\n const filterUrl = elem.getAttribute('filter');\n if (filterUrl) {\n const blur = getElem(elem.id + '_blur');\n if (blur) {\n val = blur.firstChild.getAttribute('stdDeviation');\n }\n }\n }\n return val;\n };\n\n (function () {\n let curCommand = null;\n let filter = null;\n let filterHidden = false;\n\n blurInit(\n /**\n * @implements {module:elem-get-set.elemInit}\n */\n {\n getCanvas () { return canvas; },\n getCurCommand () { return curCommand; },\n setCurCommand (value) { curCommand = value; },\n getFilter () { return filter; },\n setFilter (value) { filter = value; },\n getFilterHidden () { return filterHidden; },\n setFilterHidden (value) { filterHidden = value; },\n changeSelectedAttributeNoUndoMethod,\n changeSelectedAttributeMethod,\n isWebkit,\n addCommandToHistory,\n getSelectedElements\n }\n );\n\n /**\n* Sets the `stdDeviation` blur value on the selected element without being undoable.\n* @function module:svgcanvas.SvgCanvas#setBlurNoUndo\n* @param {Float} val - The new `stdDeviation` value\n* @returns {void}\n*/\n canvas.setBlurNoUndo = setBlurNoUndo;\n\n /**\n* Sets the `x`, `y`, `width`, `height` values of the filter element in order to\n* make the blur not be clipped. Removes them if not neeeded.\n* @function module:svgcanvas.SvgCanvas#setBlurOffsets\n* @param {Element} filterElem - The filter DOM element to update\n* @param {Float} stdDev - The standard deviation value on which to base the offset size\n* @returns {void}\n*/\n canvas.setBlurOffsets = setBlurOffsets;\n\n /**\n* Adds/updates the blur filter to the selected element.\n* @function module:svgcanvas.SvgCanvas#setBlur\n* @param {Float} val - Float with the new `stdDeviation` blur value\n* @param {boolean} complete - Whether or not the action should be completed (to add to the undo manager)\n* @returns {void}\n*/\n canvas.setBlur = setBlur;\n }());\n\n /**\n* Check whether selected element is bold or not.\n* @function module:svgcanvas.SvgCanvas#getBold\n* @returns {boolean} Indicates whether or not element is bold\n*/\n this.getBold = getBoldMethod;\n\n /**\n* Make the selected element bold or normal.\n* @function module:svgcanvas.SvgCanvas#setBold\n* @param {boolean} b - Indicates bold (`true`) or normal (`false`)\n* @returns {void}\n*/\n this.setBold = setBoldMethod;\n\n /**\n* Check whether selected element is in italics or not.\n* @function module:svgcanvas.SvgCanvas#getItalic\n* @returns {boolean} Indicates whether or not element is italic\n*/\n this.getItalic = getItalicMethod;\n\n /**\n* Make the selected element italic or normal.\n* @function module:svgcanvas.SvgCanvas#setItalic\n* @param {boolean} i - Indicates italic (`true`) or normal (`false`)\n* @returns {void}\n*/\n this.setItalic = setItalicMethod;\n\n /**\n* Set the new text anchor.\n* @function module:svgcanvas.SvgCanvas#setTextAnchor\n* @param {string} textAnchor - The value of the text anchor (start, middle or end)\n* @returns {void}\n*/\n this.setTextAnchor = setTextAnchorMethod;\n\n /**\n* @function module:svgcanvas.SvgCanvas#getFontFamily\n* @returns {string} The current font family\n*/\n this.getFontFamily = getFontFamilyMethod;\n\n /**\n* Set the new font family.\n* @function module:svgcanvas.SvgCanvas#setFontFamily\n* @param {string} val - String with the new font family\n* @returns {void}\n*/\n this.setFontFamily = setFontFamilyMethod;\n\n /**\n* Set the new font color.\n* @function module:svgcanvas.SvgCanvas#setFontColor\n* @param {string} val - String with the new font color\n* @returns {void}\n*/\n this.setFontColor = setFontColorMethod;\n\n /**\n* @function module:svgcanvas.SvgCanvas#getFontColor\n* @returns {string} The current font color\n*/\n this.getFontColor = getFontColorMethod;\n\n /**\n* @function module:svgcanvas.SvgCanvas#getFontSize\n* @returns {Float} The current font size\n*/\n this.getFontSize = getFontSizeMethod;\n\n /**\n* Applies the given font size to the selected element.\n* @function module:svgcanvas.SvgCanvas#setFontSize\n* @param {Float} val - Float with the new font size\n* @returns {void}\n*/\n this.setFontSize = setFontSizeMethod;\n\n /**\n* @function module:svgcanvas.SvgCanvas#getText\n* @returns {string} The current text (`textContent`) of the selected element\n*/\n this.getText = getTextMethod;\n\n /**\n* Updates the text element with the given string.\n* @function module:svgcanvas.SvgCanvas#setTextContent\n* @param {string} val - String with the new text\n* @returns {void}\n*/\n this.setTextContent = setTextContentMethod;\n\n /**\n* Sets the new image URL for the selected image element. Updates its size if\n* a new URL is given.\n* @function module:svgcanvas.SvgCanvas#setImageURL\n* @param {string} val - String with the image URL/path\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\n this.setImageURL = setImageURLMethod;\n\n /**\n* Sets the new link URL for the selected anchor element.\n* @function module:svgcanvas.SvgCanvas#setLinkURL\n* @param {string} val - String with the link URL/path\n* @returns {void}\n*/\n this.setLinkURL = setLinkURLMethod;\n\n /**\n* Sets the `rx` and `ry` values to the selected `rect` element\n* to change its corner radius.\n* @function module:svgcanvas.SvgCanvas#setRectRadius\n* @param {string|Float} val - The new radius\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\n this.setRectRadius = setRectRadiusMethod;\n\n /**\n* Wraps the selected element(s) in an anchor element or converts group to one.\n* @function module:svgcanvas.SvgCanvas#makeHyperlink\n* @param {string} url\n* @returns {void}\n*/\n this.makeHyperlink = makeHyperlinkMethod;\n\n /**\n* @function module:svgcanvas.SvgCanvas#removeHyperlink\n* @returns {void}\n*/\n this.removeHyperlink = removeHyperlinkMethod;\n\n /**\n* Group: Element manipulation.\n*/\n\n /**\n* Sets the new segment type to the selected segment(s).\n* @function module:svgcanvas.SvgCanvas#setSegType\n* @param {Integer} newType - New segment type. See {@link https://www.w3.org/TR/SVG/paths.html#InterfaceSVGPathSeg} for list\n* @returns {void}\n*/\n this.setSegType = setSegTypeMethod;\n\n /**\n* Convert selected element to a path, or get the BBox of an element-as-path.\n* @function module:svgcanvas.SvgCanvas#convertToPath\n* @todo (codedread): Remove the getBBox argument and split this function into two.\n* @param {Element} elem - The DOM element to be converted\n* @param {boolean} getBBox - Boolean on whether or not to only return the path's BBox\n* @returns {void|DOMRect|false|SVGPathElement|null} If the getBBox flag is true, the resulting path's bounding box object.\n* Otherwise the resulting path element is returned.\n*/\n this.convertToPath = function (elem, getBBox) {\n if (isNullish(elem)) {\n const elems = selectedElements;\n $.each(elems, function (i, el) {\n if (el) { canvas.convertToPath(el); }\n });\n return undefined;\n }\n if (getBBox) {\n return getBBoxOfElementAsPath(elem, addSVGElementFromJson, pathActions);\n }\n // TODO: Why is this applying attributes from curShape, then inside utilities.convertToPath it's pulling addition attributes from elem?\n // TODO: If convertToPath is called with one elem, curShape and elem are probably the same; but calling with multiple is a bug or cool feature.\n const attrs = {\n fill: curShape.fill,\n 'fill-opacity': curShape.fill_opacity,\n stroke: curShape.stroke,\n 'stroke-width': curShape.stroke_width,\n 'stroke-dasharray': curShape.stroke_dasharray,\n 'stroke-linejoin': curShape.stroke_linejoin,\n 'stroke-linecap': curShape.stroke_linecap,\n 'stroke-opacity': curShape.stroke_opacity,\n opacity: curShape.opacity,\n visibility: 'hidden'\n };\n return convertToPath(\n elem, attrs, addSVGElementFromJson, pathActions,\n clearSelection, addToSelection, hstry, addCommandToHistory\n );\n };\n\n /**\n* This function makes the changes to the elements. It does not add the change\n* to the history stack.\n* @param {string} attr - Attribute name\n* @param {string|Float} newValue - String or number with the new attribute value\n* @param {Element[]} elems - The DOM elements to apply the change to\n* @returns {void}\n*/\n const changeSelectedAttributeNoUndo = changeSelectedAttributeNoUndoMethod;\n\n /**\n* Change the given/selected element and add the original value to the history stack.\n* If you want to change all `selectedElements`, ignore the `elems` argument.\n* If you want to change only a subset of `selectedElements`, then send the\n* subset to this function in the `elems` argument.\n* @function module:svgcanvas.SvgCanvas#changeSelectedAttribute\n* @param {string} attr - String with the attribute name\n* @param {string|Float} val - String or number with the new attribute value\n* @param {Element[]} elems - The DOM elements to apply the change to\n* @returns {void}\n*/\n const changeSelectedAttribute = this.changeSelectedAttribute = changeSelectedAttributeMethod;\n\n /**\n* Initialize from select-elem.js.\n* Send in an object implementing the ElementContainer interface (see select-elem.js).\n*/\n selectedElemInit(\n /**\n * @implements {module:selected-elem.elementContext}\n */\n {\n getSelectedElements,\n addCommandToHistory,\n getJsonFromSvgElement,\n addSVGElementFromJson,\n changeSelectedAttribute,\n flashStorage,\n call,\n getIntersectionList,\n setCurBBoxes (value) { curBBoxes = value; },\n getSVGRoot,\n gettingSelectorManager () { return selectorManager; },\n getCurrentZoom,\n getDrawing () { return getCurrentDrawing(); },\n getCurrentGroup () { return currentGroup; },\n addToSelection,\n getContentW () { return canvas.contentW; },\n getContentH () { return canvas.contentH; },\n getClipboardID () { return CLIPBOARD_ID; },\n getDOMDocument () { return svgdoc; },\n clearSelection,\n getNextId,\n selectOnly,\n uniquifyElems,\n setUseData,\n convertGradients,\n getSVGContent,\n getCanvas () { return canvas; },\n getVisElems () { return visElems; }\n }\n );\n\n /**\n* Removes all selected elements from the DOM and adds the change to the\n* history stack.\n* @function module:svgcanvas.SvgCanvas#deleteSelectedElements\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\n this.deleteSelectedElements = deleteSelectedElements;\n\n /**\n* Removes all selected elements from the DOM and adds the change to the\n* history stack. Remembers removed elements on the clipboard.\n* @function module:svgcanvas.SvgCanvas#cutSelectedElements\n* @returns {void}\n*/\n this.cutSelectedElements = function () {\n canvas.copySelectedElements();\n canvas.deleteSelectedElements();\n };\n\n const CLIPBOARD_ID = 'svgedit_clipboard';\n\n /**\n* Flash the clipboard data momentarily on localStorage so all tabs can see.\n* @returns {void}\n*/\n function flashStorage () {\n const data = sessionStorage.getItem(CLIPBOARD_ID);\n localStorage.setItem(CLIPBOARD_ID, data);\n setTimeout(function () {\n localStorage.removeItem(CLIPBOARD_ID);\n }, 1);\n }\n\n /**\n* Transfers sessionStorage from one tab to another.\n* @param {!Event} ev Storage event.\n* @returns {void}\n*/\n function storageChange (ev) {\n if (!ev.newValue) return; // This is a call from removeItem.\n if (ev.key === CLIPBOARD_ID + '_startup') {\n // Another tab asked for our sessionStorage.\n localStorage.removeItem(CLIPBOARD_ID + '_startup');\n flashStorage();\n } else if (ev.key === CLIPBOARD_ID) {\n // Another tab sent data.\n sessionStorage.setItem(CLIPBOARD_ID, ev.newValue);\n }\n }\n\n // Listen for changes to localStorage.\n window.addEventListener('storage', storageChange, false);\n // Ask other tabs for sessionStorage (this is ONLY to trigger event).\n localStorage.setItem(CLIPBOARD_ID + '_startup', Math.random());\n /**\n* Remembers the current selected elements on the clipboard.\n* @function module:svgcanvas.SvgCanvas#copySelectedElements\n* @returns {void}\n*/\n this.copySelectedElements = copySelectedElements;\n\n /**\n * @function pasteInit Initialize from paste-elem.js.\n * @returns {void}\n * paste element functionality\n */\n pasteInit(\n /**\n * @implements {module:event.eventContext_}\n */\n {\n getCanvas () { return canvas; },\n getClipBoardID () { return CLIPBOARD_ID; },\n getLastClickPoint (key) { return lastClickPoint[key]; },\n addCommandToHistory,\n restoreRefElems\n }\n );\n\n /**\n* @function module:svgcanvas.SvgCanvas#pasteElements\n* @param {\"in_place\"|\"point\"|void} type\n* @param {Integer|void} x Expected if type is \"point\"\n* @param {Integer|void} y Expected if type is \"point\"\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @fires module:svgcanvas.SvgCanvas#event:ext_IDsUpdated\n* @returns {void}\n*/\n this.pasteElements = pasteElementsMethod;\n\n /**\n* Wraps all the selected elements in a group (`g`) element.\n* @function module:svgcanvas.SvgCanvas#groupSelectedElements\n* @param {\"a\"|\"g\"} [type=\"g\"] - type of element to group into, defaults to `<g>`\n* @param {string} [urlArg]\n* @returns {void}\n*/\n this.groupSelectedElements = groupSelectedElements;\n\n /**\n* Pushes all appropriate parent group properties down to its children, then\n* removes them from the group.\n* @function module:svgcanvas.SvgCanvas#pushGroupProperties\n* @param {SVGAElement|SVGGElement} g\n* @param {boolean} undoable\n* @returns {BatchCommand|void}\n*/\n this.pushGroupProperties = pushGroupProperty;\n\n /**\n* Unwraps all the elements in a selected group (`g`) element. This requires\n* significant recalculations to apply group's transforms, etc. to its children.\n* @function module:svgcanvas.SvgCanvas#ungroupSelectedElement\n* @returns {void}\n*/\n this.ungroupSelectedElement = ungroupSelectedElement;\n\n /**\n* Repositions the selected element to the bottom in the DOM to appear on top of\n* other elements.\n* @function module:svgcanvas.SvgCanvas#moveToTopSelectedElement\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\n this.moveToTopSelectedElement = moveToTopSelectedElem;\n\n /**\n* Repositions the selected element to the top in the DOM to appear under\n* other elements.\n* @function module:svgcanvas.SvgCanvas#moveToBottomSelectedElement\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\n this.moveToBottomSelectedElement = moveToBottomSelectedElem;\n\n /**\n* Moves the select element up or down the stack, based on the visibly\n* intersecting elements.\n* @function module:svgcanvas.SvgCanvas#moveUpDownSelected\n* @param {\"Up\"|\"Down\"} dir - String that's either 'Up' or 'Down'\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {void}\n*/\n this.moveUpDownSelected = moveUpDownSelected;\n\n /**\n* Moves selected elements on the X/Y axis.\n* @function module:svgcanvas.SvgCanvas#moveSelectedElements\n* @param {Float} dx - Float with the distance to move on the x-axis\n* @param {Float} dy - Float with the distance to move on the y-axis\n* @param {boolean} undoable - Boolean indicating whether or not the action should be undoable\n* @fires module:svgcanvas.SvgCanvas#event:changed\n* @returns {BatchCommand|void} Batch command for the move\n*/\n this.moveSelectedElements = moveSelectedElements;\n\n /**\n* Create deep DOM copies (clones) of all selected elements and move them slightly\n* from their originals.\n* @function module:svgcanvas.SvgCanvas#cloneSelectedElements\n* @param {Float} x Float with the distance to move on the x-axis\n* @param {Float} y Float with the distance to move on the y-axis\n* @returns {void}\n*/\n this.cloneSelectedElements = cloneSelectedElements;\n\n /**\n* Aligns selected elements.\n* @function module:svgcanvas.SvgCanvas#alignSelectedElements\n* @param {string} type - String with single character indicating the alignment type\n* @param {\"selected\"|\"largest\"|\"smallest\"|\"page\"} relativeTo\n* @returns {void}\n*/\n this.alignSelectedElements = alignSelectedElements;\n\n /**\n* Group: Additional editor tools.\n*/\n\n /**\n* @name module:svgcanvas.SvgCanvas#contentW\n* @type {Float}\n*/\n this.contentW = getResolution().w;\n /**\n* @name module:svgcanvas.SvgCanvas#contentH\n* @type {Float}\n*/\n this.contentH = getResolution().h;\n\n /**\n* @typedef {PlainObject} module:svgcanvas.CanvasInfo\n* @property {Float} x - The canvas' new x coordinate\n* @property {Float} y - The canvas' new y coordinate\n* @property {string} oldX - The canvas' old x coordinate\n* @property {string} oldY - The canvas' old y coordinate\n* @property {Float} d_x - The x position difference\n* @property {Float} d_y - The y position difference\n*/\n\n /**\n* Updates the editor canvas width/height/position after a zoom has occurred.\n* @function module:svgcanvas.SvgCanvas#updateCanvas\n* @param {Float} w - Float with the new width\n* @param {Float} h - Float with the new height\n* @fires module:svgcanvas.SvgCanvas#event:ext_canvasUpdated\n* @returns {module:svgcanvas.CanvasInfo}\n*/\n this.updateCanvas = updateCanvas;\n\n /**\n* Set the background of the editor (NOT the actual document).\n* @function module:svgcanvas.SvgCanvas#setBackground\n* @param {string} color - String with fill color to apply\n* @param {string} url - URL or path to image to use\n* @returns {void}\n*/\n this.setBackground = setBackgroundMethod;\n\n /**\n* Select the next/previous element within the current layer.\n* @function module:svgcanvas.SvgCanvas#cycleElement\n* @param {boolean} next - true = next and false = previous element\n* @fires module:svgcanvas.SvgCanvas#event:selected\n* @returns {void}\n*/\n this.cycleElement = cycleElement;\n\n this.clear();\n\n /**\n* @interface module:svgcanvas.PrivateMethods\n* @type {PlainObject}\n* @property {module:svgcanvas~addCommandToHistory} addCommandToHistory\n* @property {module:history.HistoryCommand} BatchCommand\n* @property {module:history.HistoryCommand} ChangeElementCommand\n* @property {module:utilities.decode64} decode64\n* @property {module:utilities.dropXMLInternalSubset} dropXMLInternalSubset\n* @property {module:utilities.encode64} encode64\n* @property {module:svgcanvas~ffClone} ffClone\n* @property {module:svgcanvas~findDuplicateGradient} findDuplicateGradient\n* @property {module:utilities.getPathBBox} getPathBBox\n* @property {module:units.getTypeMap} getTypeMap\n* @property {module:draw.identifyLayers} identifyLayers\n* @property {module:history.HistoryCommand} InsertElementCommand\n* @property {module:browser.isChrome} isChrome\n* @property {module:math.isIdentity} isIdentity\n* @property {module:svgcanvas~logMatrix} logMatrix\n* @property {module:history.HistoryCommand} MoveElementCommand\n* @property {module:namespaces.NS} NS\n* @property {module:utilities.preventClickDefault} preventClickDefault\n* @property {module:history.HistoryCommand} RemoveElementCommand\n* @property {module:SVGTransformList.SVGEditTransformList} SVGEditTransformList\n* @property {module:utilities.text2xml} text2xml\n* @property {module:math.transformBox} transformBox\n* @property {module:math.transformPoint} transformPoint\n* @property {module:utilities.walkTree} walkTree\n*/\n /**\n* @deprecated getPrivateMethods\n* Since all methods are/should be public somehow, this function should be removed;\n* we might require `import` in place of this in the future once ES6 Modules\n* widespread\n\n* Being able to access private methods publicly seems wrong somehow,\n* but currently appears to be the best way to allow testing and provide\n* access to them to plugins.\n* @function module:svgcanvas.SvgCanvas#getPrivateMethods\n* @returns {module:svgcanvas.PrivateMethods}\n*/\n this.getPrivateMethods = function () {\n return {\n addCommandToHistory,\n BatchCommand,\n ChangeElementCommand,\n decode64,\n dropXMLInternalSubset,\n encode64,\n ffClone,\n findDefs,\n findDuplicateGradient,\n getElem,\n getPathBBox,\n getTypeMap,\n getUrlFromAttr,\n identifyLayers: draw.identifyLayers,\n InsertElementCommand,\n isChrome,\n isIdentity,\n logMatrix,\n MoveElementCommand,\n NS,\n preventClickDefault,\n RemoveElementCommand,\n SVGEditTransformList,\n text2xml,\n transformBox,\n transformPoint,\n walkTree\n };\n };\n } // End constructor\n} // End class\n\n// attach utilities function to the class that are used by SvgEdit so\n// we can avoid using the whole utilities.js file in svgEdit.js\nSvgCanvas.isNullish = isNullish;\nSvgCanvas.encode64 = encode64;\nSvgCanvas.decode64 = decode64;\nSvgCanvas.$id = $id;\nSvgCanvas.$qq = $qq;\nSvgCanvas.$qa = $qa;\nSvgCanvas.blankPageObjectURL = blankPageObjectURL;\n\nexport default SvgCanvas;\n","/**\n * Tools for SVG Root Element.\n * @module svgcanvas\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria, 2010 Jeff Schiller\n */\nimport {NS} from '../common/namespaces.js';\nimport {text2xml} from './utilities.js';\n\n/**\n* @function module:svgcanvas.svgRootElement svgRootElement the svg node and its children.\n* @param {Element} svgdoc - window.document\n* @param {ArgumentsArray} dimensions - dimensions of width and height\n* @returns {svgRootElement}\n*/\nexport const svgRootElement = function (svgdoc, dimensions) {\n return svgdoc.importNode(\n text2xml(\n `<svg id=\"svgroot\" xmlns=\"${NS.SVG}\" xlinkns=\"${NS.XLINK}\" width=\"${dimensions[0]}\" \n height=\"${dimensions[1]}\" x=\"${dimensions[0]}\" y=\"${dimensions[1]}\" overflow=\"visible\">\n <defs>\n <filter id=\"canvashadow\" filterUnits=\"objectBoundingBox\">\n <feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"4\" result=\"blur\"/>\n <feOffset in=\"blur\" dx=\"5\" dy=\"5\" result=\"offsetBlur\"/>\n <feMerge>\n <feMergeNode in=\"offsetBlur\"/>\n <feMergeNode in=\"SourceGraphic\"/>\n </feMerge>\n </filter>\n </defs>\n </svg>`\n ).documentElement,\n true\n );\n};\n","/**\n * Localizing script for SVG-edit UI.\n * @module locale\n * @license MIT\n *\n * @copyright 2010 Narendra Sisodya\n * @copyright 2010 Alexis Deveria\n *\n */\n\n/**\n * Used, for example, in the ImageLibs extension, to present libraries\n * (with name/URL/description) in order.\n * @typedef {GenericArray<module:locale.LocaleStrings>} module:locale.LocaleArray\n*/\n/**\n * The string keys of the object are two-letter language codes.\n * @tutorial LocaleDocs\n * @typedef {PlainObject<string, string|module:locale.LocaleStrings|module:locale.LocaleArray>} module:locale.LocaleStrings\n */\n// keyed to an array of objects with \"id\" and \"title\" or \"textContent\" properties\n/**\n * @typedef {PlainObject<string, string>} module:locale.LocaleSelectorValue\n */\n\nlet langParam;\n\n/**\n * Looks for elements to localize using the supplied `obj` to indicate\n * on which selectors (or IDs if `ids` is set to `true`) to set its\n * strings (with selectors relative to the editor root element). All\n * keys will be translated, but for each selector, only the first item\n * found matching will be modified.\n * If the type is `content`, the selector-identified element's children\n * will be checked, and the first (non-empty) text (placeholder) node\n * found will have its text replaced.\n * If the type is `title`, the element's `title`\n * property will be set.\n * If the type is `aria-label`, the element's `aria-label` attribute\n * will be set (i.e., instructions for screen readers when there is\n * otherwise no visible text to be read for the function of the form\n * control).\n * @param {\"content\"|\"title\"} type\n * @param {module:locale.LocaleSelectorValue} obj Selectors or IDs keyed to strings\n * @param {boolean} ids\n * @returns {void}\n*/\nexport const setStrings = function (type, obj, ids) {\n // Root element to look for element from\n const parent = document.getElementById('svg_editor').parentNode;\n Object.entries(obj).forEach(([sel, val]) => {\n if (!val) {\n console.log(sel);\n return; // keep old text when has no translation\n }\n\n if (ids) { sel = '#' + sel; }\n const elems = parent.querySelectorAll(sel);\n if (elems.length) {\n const elem = elems[0];\n\n switch (type) {\n case 'aria-label':\n elem.setAttribute('aria-label', val);\n break;\n case 'content':\n [...elems].some((node) => {\n if (node.nodeType === 3 /* Node.TEXT_NODE */ &&\n node.textContent.trim()\n ) {\n node.textContent = val;\n return true;\n }\n return false;\n });\n break;\n\n case 'title':\n elem.setAttribute('title', val);\n break;\n }\n } else {\n console.log('Missing element for localization: ' + sel); \n }\n });\n};\n\n/**\n* The \"data\" property is generally set to an an array of objects with\n* \"id\" and \"title\" or \"textContent\" properties.\n* @typedef {PlainObject} module:locale.AddLangExtensionLocaleData\n* @property {module:locale.LocaleStrings[]} data See {@tutorial LocaleDocs}\n*/\n\n/**\n* @interface module:locale.LocaleEditorInit\n*/\n/**\n * @function module:locale.LocaleEditorInit#addLangData\n * @param {string} langParam\n * @returns {module:locale.AddLangExtensionLocaleData}\n*/\n/**\n* @typedef {PlainObject} module:locale.LangAndData\n* @property {string} langParam\n* @property {module:locale.LocaleStrings} langData\n*/\n\n/**\n* @function module:locale.readLang\n* @param {module:locale.LocaleStrings} langData See {@tutorial LocaleDocs}\n* @fires module:svgcanvas.SvgCanvas#event:ext_addLangData\n* @returns {Promise<module:locale.LangAndData>} Resolves to [`LangAndData`]{@link module:locale.LangAndData}\n*/\nexport const readLang = function (langData) {\n const {\n tools,\n // misc,\n properties, config, layers, common, ui\n } = langData;\n\n setStrings('content', {\n // Todo: Add this powered by (probably by default) but with config to remove\n // copyrightLabel: misc.powered_by, // Currently commented out in svg-editor.html\n curve_segments: properties.curve_segments,\n fitToContent: tools.fitToContent,\n fit_to_all: tools.fit_to_all,\n fit_to_canvas: tools.fit_to_canvas,\n fit_to_layer_content: tools.fit_to_layer_content,\n fit_to_sel: tools.fit_to_sel,\n\n icon_large: config.icon_large,\n icon_medium: config.icon_medium,\n icon_small: config.icon_small,\n icon_xlarge: config.icon_xlarge,\n image_opt_embed: config.image_opt_embed,\n image_opt_ref: config.image_opt_ref,\n includedImages: config.included_images,\n\n largest_object: tools.largest_object,\n\n layersLabel: layers.layers,\n page: tools.page,\n relativeToLabel: tools.relativeTo,\n selLayerLabel: layers.move_elems_to,\n selectedPredefined: config.select_predefined,\n\n selected_objects: tools.selected_objects,\n smallest_object: tools.smallest_object,\n straight_segments: properties.straight_segments,\n\n svginfo_bg_url: config.editor_img_url + ':',\n svginfo_bg_note: config.editor_bg_note,\n svginfo_change_background: config.background,\n svginfo_dim: config.doc_dims,\n svginfo_editor_prefs: config.editor_prefs,\n svginfo_height: common.height,\n svginfo_icons: config.icon_size,\n svginfo_image_props: config.image_props,\n svginfo_lang: config.language,\n svginfo_title: config.doc_title,\n svginfo_width: common.width,\n\n tool_docprops_cancel: common.cancel,\n tool_docprops_save: common.ok,\n\n tool_source_cancel: common.cancel,\n tool_source_save: common.ok,\n\n tool_prefs_cancel: common.cancel,\n tool_prefs_save: common.ok,\n\n sidepanel_handle: layers.layers.split('').join(' '),\n\n tool_clear: tools.new_doc,\n tool_docprops: tools.docprops,\n tool_export: tools.export_img,\n tool_import: tools.import_doc,\n tool_open: tools.open_doc,\n tool_save: tools.save_doc,\n tool_editor_prefs: config.editor_prefs,\n tool_editor_homepage: tools.editor_homepage,\n\n svginfo_units_rulers: config.units_and_rulers,\n svginfo_rulers_onoff: config.show_rulers,\n svginfo_unit: config.base_unit,\n\n svginfo_grid_settings: config.grid,\n svginfo_snap_onoff: config.snapping_onoff,\n svginfo_snap_step: config.snapping_stepsize,\n svginfo_grid_color: config.grid_color\n }, true);\n\n // Context menus\n const opts = {};\n [\n 'cut', 'copy', 'paste', 'paste_in_place', 'delete',\n 'group', 'ungroup', 'move_front', 'move_up',\n 'move_down', 'move_back'\n ].forEach((item) => {\n opts['#cmenu_canvas a[href=\"#' + item + '\"]'] = tools[item];\n });\n\n ['dupe', 'merge_down', 'merge_all'].forEach((item) => {\n opts['#cmenu_layers a[href=\"#' + item + '\"]'] = layers[item];\n });\n\n opts['#cmenu_layers a[href=\"#delete\"]'] = layers.del;\n\n setStrings('content', opts);\n\n const ariaLabels = {};\n Object.entries({\n tool_blur: properties.blur,\n tool_position: tools.align_to_page,\n tool_font_family: properties.font_family,\n zoom_panel: ui.zoom_level,\n stroke_linejoin: properties.linejoin_miter,\n stroke_linecap: properties.linecap_butt,\n tool_opacity: properties.opacity\n }).forEach(([id, value]) => {\n ariaLabels['#' + id + ' button'] = value;\n });\n Object.entries({\n group_opacity: properties.opacity,\n zoom: ui.zoom_level\n }).forEach(([id, value]) => {\n ariaLabels['#' + id] = value;\n });\n setStrings('aria-label', ariaLabels);\n\n setStrings('title', {\n align_relative_to: tools.align_relative_to,\n circle_cx: properties.circle_cx,\n circle_cy: properties.circle_cy,\n circle_r: properties.circle_r,\n cornerRadiusLabel: properties.corner_radius,\n ellipse_cx: properties.ellipse_cx,\n ellipse_cy: properties.ellipse_cy,\n ellipse_rx: properties.ellipse_rx,\n ellipse_ry: properties.ellipse_ry,\n fill_color: properties.fill_color,\n font_family: properties.font_family,\n idLabel: properties.id,\n image_height: properties.image_height,\n image_url: properties.image_url,\n image_width: properties.image_width,\n layer_delete: layers.del,\n layer_down: layers.move_down,\n layer_new: layers.new,\n layer_rename: layers.rename,\n layer_moreopts: common.more_opts,\n layer_up: layers.move_up,\n line_x1: properties.line_x1,\n line_x2: properties.line_x2,\n line_y1: properties.line_y1,\n line_y2: properties.line_y2,\n linecap_butt: properties.linecap_butt,\n linecap_round: properties.linecap_round,\n linecap_square: properties.linecap_square,\n linejoin_bevel: properties.linejoin_bevel,\n linejoin_miter: properties.linejoin_miter,\n linejoin_round: properties.linejoin_round,\n main_icon: tools.main_menu,\n palette: ui.palette_info,\n zoom_panel: ui.zoom_level,\n path_node_x: properties.node_x,\n path_node_y: properties.node_y,\n rect_height_tool: properties.rect_height,\n rect_width_tool: properties.rect_width,\n seg_type: properties.seg_type,\n selLayerNames: layers.move_selected,\n selected_x: properties.pos_x,\n selected_y: properties.pos_y,\n stroke_color: properties.stroke_color,\n stroke_style: properties.stroke_style,\n stroke_width: properties.stroke_width,\n svginfo_title: config.doc_title,\n text: properties.text_contents,\n toggle_stroke_tools: ui.toggle_stroke_tools,\n tool_add_subpath: tools.add_subpath,\n tool_align_bottom: tools.align_bottom,\n tool_align_center: tools.align_center,\n tool_align_left: tools.align_left,\n tool_align_middle: tools.align_middle,\n tool_align_right: tools.align_right,\n tool_align_top: tools.align_top,\n tool_angle: properties.angle,\n tool_blur: properties.blur,\n tool_bold: properties.bold,\n tool_text_anchor_start: properties.text_anchor_start,\n tool_text_anchor_middle: properties.text_anchor_middle,\n tool_text_anchor_end: properties.text_anchor_end,\n tool_circle: tools.mode_circle,\n tool_clone: tools.clone,\n tool_clone_multi: tools.clone,\n tool_delete: tools.del,\n tool_delete_multi: tools.del,\n tool_ellipse: tools.mode_ellipse,\n tool_fhellipse: tools.mode_fhellipse,\n tool_fhpath: tools.mode_fhpath,\n tool_fhrect: tools.mode_fhrect,\n tool_font_size: properties.font_size,\n tool_group_elements: tools.group_elements,\n tool_make_link: tools.make_link,\n tool_link_url: tools.set_link_url,\n tool_image: tools.mode_image,\n tool_italic: properties.italic,\n\n tool_line: tools.mode_line,\n tool_move_bottom: tools.move_bottom,\n tool_move_top: tools.move_top,\n tool_node_clone: tools.node_clone,\n tool_node_delete: tools.node_delete,\n tool_node_link: tools.node_link,\n tool_opacity: properties.opacity,\n tool_openclose_path: tools.openclose_path,\n tool_path: tools.mode_path,\n tool_position: tools.align_to_page,\n tool_rect: tools.mode_rect,\n tool_redo: tools.redo,\n tool_reorient: tools.reorient_path,\n tool_select: tools.mode_select,\n tool_source: tools.source_save,\n tool_square: tools.mode_square,\n tool_text: tools.mode_text,\n tool_topath: tools.to_path,\n tool_undo: tools.undo,\n tool_ungroup: tools.ungroup,\n tool_wireframe: tools.wireframe_mode,\n tool_zoom: tools.mode_zoom,\n url_notice: tools.no_embed\n\n }, true);\n\n return {langParam, langData};\n};\n\n/**\n *\n * @function module:locale.putLocale\n * @param {string} givenParam\n * @param {string[]} goodLangs\n * @fires module:svgcanvas.SvgCanvas#event:ext_addLangData\n * @fires module:svgcanvas.SvgCanvas#event:ext_langReady\n * @fires module:svgcanvas.SvgCanvas#event:ext_langChanged\n * @returns {Promise<module:locale.LangAndData>} Resolves to result of {@link module:locale.readLang}\n*/\nexport const putLocale = async function (givenParam, goodLangs) {\n if (givenParam) {\n langParam = givenParam;\n } else if (navigator.userLanguage) { // Explorer\n langParam = navigator.userLanguage;\n } else if (navigator.language) { // FF, Opera, ...\n langParam = navigator.language;\n }\n\n console.log('Lang: ' + langParam); \n\n // Set to English if language is not in list of good langs\n if (!goodLangs.includes(langParam) && langParam !== 'test') {\n langParam = 'en';\n }\n const module = await import(`./locale/lang.${encodeURIComponent(langParam)}.js`);\n return readLang(module.default);\n};\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.deparam = factory());\n}(this, (function () { 'use strict';\n\n /**\n * Created by alexey2baranov on 28.01.17.\n */\n /*\n An extraction of the deparam method from Ben Alman's jQuery BBQ\n http://benalman.com/projects/jquery-bbq-plugin/\n */\n\n const coerce_types = {'true': !0, 'false': !1, 'null': null};\n\n function deparam (params, coerce) {\n // console.log(params)\n const obj = {};\n\n // Iterate over all name=value pairs.\n params.replace(/\\+/g, ' ').split('&').forEach(function (v) {\n const param = v.split('=');\n\n let\n key = decodeURIComponent(param[0]),\n // If key is more complex than 'foo', like 'a[]' or 'a[b][c]', split it\n // into its component parts.\n keys = key.split(']['),\n keys_last = keys.length - 1;\n\n // If the first keys part contains [ and the last ends with ], then []\n // are correctly balanced.\n if (/\\[/.test(keys[0]) && /\\]$/.test(keys[keys_last])) {\n // Remove the trailing ] from the last keys part.\n keys[keys_last] = keys[keys_last].replace(/\\]$/, '');\n\n // Split first keys part into two parts on the [ and add them back onto\n // the beginning of the keys array.\n keys = keys.shift().split('[').concat(keys);\n\n keys_last = keys.length - 1;\n } else {\n // Basic 'foo' style key.\n keys_last = 0;\n }\n\n // Are we dealing with a name=value pair, or just a name?\n if (param.length >= 2) {\n let val = decodeURIComponent(param.slice(1).join('='));\n\n // Coerce values.\n if (coerce) {\n val = val && !isNaN(val) ? +val // number\n : val === 'undefined' ? undefined // undefined\n : coerce_types[val] !== undefined ? coerce_types[val] // true, false, null\n : val; // string\n }\n\n if (keys_last) {\n let cur = obj;\n // Complex key, build deep object structure based on a few rules:\n // * The 'cur' pointer starts at the object top-level.\n // * [] = array push (n is set to array length), [n] = array if n is\n // numeric, otherwise object.\n // * If at the last keys part, set the value.\n // * For each keys part, if the current level is undefined create an\n // object or array based on the type of the next keys part.\n // * Move the 'cur' pointer to the next level.\n // * Rinse & repeat.\n for (let i = 0; i <= keys_last; i++) {\n key = keys[i] === '' ? cur.length : keys[i];\n cur = cur[key] = i < keys_last\n ? cur[key] || (keys[i + 1] && isNaN(keys[i + 1]) ? {} : [])\n : val;\n }\n\n } else {\n // Simple key, even simpler rules, since only scalars and shallow\n // arrays are allowed.\n\n if (Array.isArray(obj[key])) {\n // val is already an array, so push on the next value.\n obj[key].push(val);\n\n } else if (obj[key] !== undefined) {\n // val isn't an array, but since a second value has been specified,\n // convert val into an array.\n obj[key] = [obj[key], val];\n\n } else {\n // val is a scalar.\n obj[key] = val;\n }\n }\n\n } else if (key) {\n // No value was defined, so set something meaningful.\n obj[key] = coerce\n ? undefined\n : '';\n }\n });\n\n return obj;\n }\n\n return deparam;\n\n})));\n","// eslint-disable-next-line node/no-unpublished-import\nimport deparam from 'deparam';\nimport {mergeDeep} from './components/jgraduate/Util.js';\n\n/**\n* Escapes special characters in a regular expression.\n* @function regexEscape\n* @param {string} str\n* @returns {string}\n*/\nexport const regexEscape = function (str) {\n // Originally from: http://phpjs.org/functions\n return String(str).replace(/[.\\\\+*?[^\\]$(){}=!<>|:-]/g, '\\\\$&');\n};\n/**\n * @class configObj\n */\nexport default class ConfigObj {\n /**\n * @param {PlainObject} editor\n */\n constructor (editor) {\n /**\n * Preferences.\n * @interface module:SVGEditor.Prefs\n * @property {string} [lang=\"en\"] Two-letter language code. The language must exist in the Editor Preferences language list. Defaults to \"en\" if `locale.js` detection does not detect another language.\n * @property {module:SVGEditor.IconSize} [iconsize=\"s\" || \"m\"] Size of the toolbar icons. Will default to 's' if the window height is smaller than the minimum height and 'm' otherwise.\n * @property {string} [bkgd_color=\"#FFF\"] Color hex for canvas background color. Defaults to white.\n * @property {string} [bkgd_url=\"\"] Background raster image URL. This image will fill the background of the document; useful for tracing purposes.\n * @property {\"embed\"|\"ref\"} [img_save=\"embed\"] Defines whether included raster images should be saved as Data URIs when possible, or as URL references. Settable in the Document Properties dialog.\n * @property {boolean} [save_notice_done=false] Used to track alert status\n * @property {boolean} [export_notice_done=false] Used to track alert status\n * @todo `save_notice_done` and `export_notice_done` should be changed to flags rather than preferences\n */\n this.defaultPrefs = {\n // EDITOR OPTIONS (DIALOG)\n /**\n * Default to \"en\" if locale.js detection does not detect another language.\n */\n lang: '',\n /**\n * Will default to 's' if the window height is smaller than the minimum\n * height and 'm' otherwise.\n */\n iconsize: '',\n bkgd_color: '#FFF',\n bkgd_url: '',\n // DOCUMENT PROPERTIES (DIALOG)\n img_save: 'embed',\n // ALERT NOTICES\n // Only shows in UI as far as alert notices, but useful to remember, so keeping as pref\n save_notice_done: false,\n export_notice_done: false\n };\n /**\n * @tutorial ConfigOptions\n * @interface module:SVGEditor.Config\n * @property {string} [canvasName=\"default\"] Used to namespace storage provided via `ext-storage.js`; you can use this if you wish to have multiple independent instances of SVG Edit on the same domain\n * @property {boolean} [no_save_warning=false] If `true`, prevents the warning dialog box from appearing when closing/reloading the page. Mostly useful for testing.\n * @property {string} [imgPath=\"images/\"] The path where the SVG icons are located, with trailing slash. Note that as of version 2.7, this is not configurable by URL for security reasons.\n * @property {boolean} [preventAllURLConfig=false] Set to `true` to override the ability for URLs to set non-content configuration (including extension config). Must be set early, i.e., in `svgedit-config-iife.js`; extension loading is too late!\n * @property {boolean} [preventURLContentLoading=false] Set to `true` to override the ability for URLs to set URL-based SVG content. Must be set early, i.e., in `svgedit-config-iife.js`; extension loading is too late!\n * @property {boolean} [lockExtensions=false] Set to `true` to override the ability for URLs to set their own extensions; disallowed in URL setting. There is no need for this when `preventAllURLConfig` is used. Must be set early, i.e., in `svgedit-config-iife.js`; extension loading is too late!\n * @property {boolean} [noDefaultExtensions=false] If set to `true`, prohibits automatic inclusion of default extensions (though \"extensions\" can still be used to add back any desired default extensions along with any other extensions). This can only be meaningfully used in `svgedit-config-iife.js` or in the URL\n * @property {boolean} [noStorageOnLoad=false] Some interaction with `ext-storage.js`; prevent even the loading of previously saved local storage.\n * @property {boolean} [forceStorage=false] Some interaction with `ext-storage.js`; strongly discouraged from modification as it bypasses user privacy by preventing them from choosing whether to keep local storage or not (and may be required by law in some regions)\n * @property {boolean} [emptyStorageOnDecline=false] Used by `ext-storage.js`; empty any prior storage if the user declines to store\n * @property {boolean} [avoidClientSide=false] DEPRECATED (use `avoidClientSideDownload` instead); Used by `ext-server_opensave.js`; set to `true` if you wish to always save to server and not only as fallback when client support is lacking\n * @property {boolean} [avoidClientSideDownload=false] Used by `ext-server_opensave.js`; set to `true` if you wish to always save to server and not only as fallback when client support is lacking\n * @property {boolean} [avoidClientSideOpen=false] Used by `ext-server_opensave.js`; set to `true` if you wish to always open from the server and not only as fallback when FileReader client support is lacking\n * @property {string[]} [extensions=[]] Extensions to load on startup. Use an array in `setConfig` and comma separated file names in the URL. Extension names must begin with \"ext-\". Note that as of version 2.7, paths containing \"/\", \"\\\", or \":\", are disallowed for security reasons. Although previous versions of this list would entirely override the default list, as of version 2.7, the defaults will always be added to this explicit list unless the configuration `noDefaultExtensions` is included. See {@link module:SVGEditor~defaultExtensions}.\n * @property {string[]} [allowedOrigins=[]] Used by `ext-xdomain-messaging.js` to indicate which origins are permitted for cross-domain messaging (e.g., between the embedded editor and main editor code). Besides explicit domains, one might add '*' to allow all domains (not recommended for privacy/data integrity of your user's content!), `window.location.origin` for allowing the same origin (should be safe if you trust all apps on your domain), 'null' to allow `file:///` URL usage\n * @property {string} [paramurl] This was available via URL only. Allowed an un-encoded URL within the query string (use \"url\" or \"source\" with a data: URI instead)\n * @property {Float} [canvas_expansion=3] The minimum area visible outside the canvas, as a multiple of the image dimensions. The larger the number, the more one can scroll outside the canvas.\n * @property {PlainObject} [initFill] Init fill properties\n * @property {string} [initFill.color=\"FF0000\"] The initial fill color. Must be a hex code string. Defaults to solid red.\n * @property {Float} [initFill.opacity=1] The initial fill opacity. Must be a number between 0 and 1\n * @property {PlainObject} [initStroke] Init stroke properties\n * @property {Float} [initStroke.width=5] The initial stroke width. Must be a positive number.\n * @property {string} [initStroke.color=\"000000\"] The initial stroke color. Must be a hex code. Defaults to solid black.\n * @property {Float} [initStroke.opacity=1] The initial stroke opacity. Must be a number between 0 and 1.\n * @property {PlainObject} text Text style properties\n * @property {Float} [text.stroke_width=0] Text stroke width\n * @property {Float} [text.font_size=24] Text font size\n * @property {string} [text.font_family=\"serif\"] Text font family\n * @property {Float} [initOpacity=1] Initial opacity (multiplied by 100)\n * @property {module:SVGEditor.XYDimensions} [dimensions=[640, 480]] The default width/height of a new document. Use an array in `setConfig` (e.g., `[800, 600]`) and comma separated numbers in the URL.\n * @property {boolean} [gridSnapping=false] Enable snap to grid by default. Set in Editor Options.\n * @property {string} [gridColor=\"#000\"] Accepts hex, e.g., '#000'. Set in Editor Options. Defaults to black.\n * @property {string} [baseUnit=\"px\"] Set in Editor Options.\n * @property {Float} [snappingStep=10] Set the default grid snapping value. Set in Editor Options.\n * @property {boolean} [showRulers=true] Initial state of ruler display (v2.6). Set in Editor Options.\n * @property {string} [initTool=\"select\"] The initially selected tool. Must be either the ID of the button for the tool, or the ID without `tool_` prefix (e.g., \"select\").\n * @property {boolean} [wireframe=false] Start in wireframe mode\n * @property {boolean} [showlayers=false] Open the layers side-panel by default.\n * @property {\"new\"|\"same\"} [exportWindowType=\"new\"] Can be \"new\" or \"same\" to indicate whether new windows will be generated for each export; the `window.name` of the export window is namespaced based on the `canvasName` (and incremented if \"new\" is selected as the type). Introduced 2.8.\n * @property {boolean} [showGrid=false] Set by `ext-grid.js`; determines whether or not to show the grid by default\n * @property {boolean} [show_outside_canvas=true] Defines whether or not elements outside the canvas should be visible. Set and used in `svgcanvas.js`.\n * @property {boolean} [selectNew=true] If true, will replace the selection with the current element and automatically select element objects (when not in \"path\" mode) after they are created, showing their grips (v2.6). Set and used in `svgcanvas.js` (`mouseUp`).\n */\n this.defaultConfig = {\n canvasName: 'default',\n canvas_expansion: 3,\n initFill: {\n color: 'FF0000', // solid red\n opacity: 1\n },\n initStroke: {\n width: 5,\n color: '000000', // solid black\n opacity: 1\n },\n text: {\n stroke_width: 0,\n font_size: 24,\n font_family: 'serif'\n },\n initOpacity: 1,\n initTool: 'select',\n exportWindowType: 'new', // 'same' (todo: also support 'download')\n wireframe: false,\n showlayers: false,\n no_save_warning: false,\n // PATH CONFIGURATION\n // The following path configuration items are disallowed in the URL (as should any future path configurations)\n imgPath: './images/',\n // DOCUMENT PROPERTIES\n // Change the following to a preference (already in the Document Properties dialog)?\n dimensions: [640, 480],\n // EDITOR OPTIONS\n // Change the following to preferences (already in the Editor Options dialog)?\n gridSnapping: false,\n gridColor: '#000',\n baseUnit: 'px',\n snappingStep: 10,\n showRulers: true,\n // URL BEHAVIOR CONFIGURATION\n preventAllURLConfig: false,\n preventURLContentLoading: false,\n // EXTENSION CONFIGURATION (see also preventAllURLConfig)\n lockExtensions: false, // Disallowed in URL setting\n noDefaultExtensions: false, // noDefaultExtensions can only be meaningfully used in `svgedit-config-iife.js` or in the URL\n // EXTENSION-RELATED (GRID)\n showGrid: false, // Set by ext-grid.js\n // EXTENSION-RELATED (STORAGE)\n noStorageOnLoad: false, // Some interaction with ext-storage.js; prevent even the loading of previously saved local storage\n forceStorage: false, // Some interaction with ext-storage.js; strongly discouraged from modification as it bypasses user privacy by preventing them from choosing whether to keep local storage or not\n emptyStorageOnDecline: false, // Used by ext-storage.js; empty any prior storage if the user declines to store\n // EXTENSION (CLIENT VS. SERVER SAVING/OPENING)\n avoidClientSide: false, // Deprecated in favor of `avoidClientSideDownload`\n avoidClientSideDownload: false,\n avoidClientSideOpen: false\n };\n\n this.curPrefs = {};\n // Note: The difference between Prefs and Config is that Prefs\n // can be changed in the UI and are stored in the browser,\n // while config cannot\n this.urldata = {};\n /**\n * @name module:SVGEditor~defaultExtensions\n * @type {string[]}\n */\n this.defaultExtensions = [\n 'ext-connector',\n 'ext-eyedropper',\n 'ext-grid',\n 'ext-imagelib',\n 'ext-markers',\n 'ext-overview_window',\n 'ext-panning',\n 'ext-polygon',\n 'ext-shapes',\n 'ext-star',\n 'ext-storage',\n 'ext-opensave'\n ];\n this.curConfig = {\n // We do not put on defaultConfig to simplify object copying\n // procedures (we obtain instead from defaultExtensions)\n extensions: [],\n userExtensions: [],\n /**\n * Can use `location.origin` to indicate the current\n * origin. Can contain a '*' to allow all domains or 'null' (as\n * a string) to support all `file:///` URLs. Cannot be set by\n * URL for security reasons (not safe, at least for\n * privacy or data integrity of SVG content).\n * Might have been fairly safe to allow\n * `new URL(location.href).origin` by default but\n * avoiding it ensures some more security that even third\n * party apps on the same domain also cannot communicate\n * with this app by default.\n * For use with `ext-xdomain-messaging.js`\n * @todo We might instead make as a user-facing preference.\n */\n allowedOrigins: []\n };\n this.editor = editor;\n }\n /**\n * @function setupCurPrefs\n * @returns {void}\n */\n setupCurPrefs () {\n const curPrefs = {...this.defaultPrefs, ...this.curPrefs}; // Now safe to merge with priority for curPrefs in the event any are already set\n // Export updated prefs\n this.curPrefs = curPrefs;\n }\n /**\n * Sets up current config based on defaults.\n * @returns {void}\n */\n setupCurConfig () {\n const curConfig = {...this.defaultConfig, ...this.curConfig}; // Now safe to merge with priority for curConfig in the event any are already set\n\n // Now deal with extensions and other array config\n if (!curConfig.noDefaultExtensions) {\n curConfig.extensions = [...this.defaultExtensions];\n }\n // ...and remove any dupes\n /*\n ['extensions', 'allowedOrigins'].forEach(function (cfg) {\n curConfig[cfg] = $.grep(curConfig[cfg], function (n, i) { // Supposedly faster than filter per http://amandeep1986.blogspot.hk/2015/02/jquery-grep-vs-js-filter.html\n return i === curConfig[cfg].indexOf(n);\n });\n });\n */\n // Export updated config\n this.curConfig = curConfig;\n }\n /**\n * @function loadFromURL Load config/data from URL if given\n * @returns {void}\n */\n loadFromURL () {\n const {search, searchParams} = new URL(location);\n\n if (search) {\n this.urldata = deparam(searchParams.toString(), true);\n\n ['initStroke', 'initFill'].forEach((prop) => {\n if (searchParams.has(`${prop}[color]`)) {\n // Restore back to original non-deparamed value to avoid color\n // strings being converted to numbers\n this.urldata[prop].color = searchParams.get(`${prop}[color]`);\n }\n });\n\n if (searchParams.has('bkgd_color')) {\n this.urldata.bkgd_color = '#' + searchParams.get('bkgd_color');\n }\n\n if (this.urldata.dimensions) {\n this.urldata.dimensions = this.urldata.dimensions.split(',');\n }\n\n if (this.urldata.extensions) {\n // For security reasons, disallow cross-domain or cross-folder\n // extensions via URL\n this.urldata.extensions = (/[:/\\\\]/).test(this.urldata.extensions)\n ? ''\n : this.urldata.extensions.split(',');\n }\n\n // Disallowing extension paths via URL for\n // security reasons, even for same-domain\n // ones given potential to interact in undesirable\n // ways with other script resources\n ['userExtensions', 'imgPath']\n .forEach(function (pathConfig) {\n if (this.urldata[pathConfig]) {\n delete this.urldata[pathConfig];\n }\n });\n\n // Note: `source` and `url` (as with `storagePrompt` later) are not\n // set on config but are used below\n this.setConfig(this.urldata, {overwrite: false});\n this.setupCurConfig();\n\n if (!this.curConfig.preventURLContentLoading) {\n let {source} = this.urldata;\n if (!source) { // urldata.source may have been null if it ended with '='\n const src = searchParams.get('source');\n if (src && src.startsWith('data:')) {\n source = src;\n }\n }\n if (source) {\n if (source.startsWith('data:')) {\n this.editor.loadFromDataURI(source);\n } else {\n this.editor.loadFromString(source);\n }\n return;\n }\n if (this.urldata.url) {\n this.editor.loadFromURL(this.urldata.url);\n return;\n }\n }\n if (!this.urldata.noStorageOnLoad || this.curConfig.forceStorage) {\n this.loadContentAndPrefs();\n }\n } else {\n this.setupCurConfig();\n this.loadContentAndPrefs();\n }\n }\n /**\n * Where permitted, sets canvas and/or `configObj.defaultPrefs` based on previous\n * storage. This will override URL settings (for security reasons) but\n * not `svgedit-config-iife.js` configuration (unless initial user\n * overriding is explicitly permitted there via `allowInitialUserOverride`).\n * @function module:SVGEditor.loadContentAndPrefs\n * @todo Split `allowInitialUserOverride` into `allowOverrideByURL` and\n * `allowOverrideByUserStorage` so `svgedit-config-iife.js` can disallow some\n * individual items for URL setting but allow for user storage AND/OR\n * change URL setting so that it always uses a different namespace,\n * so it won't affect pre-existing user storage (but then if users saves\n * that, it will then be subject to tampering\n * @returns {void}\n */\n loadContentAndPrefs () {\n if (!this.curConfig.forceStorage &&\n (this.curConfig.noStorageOnLoad ||\n !(/(?:^|;\\s*)svgeditstore=(?:prefsAndContent|prefsOnly)/).test(document.cookie)\n )\n ) {\n return;\n }\n\n // LOAD CONTENT\n if (this.editor.storage && // Cookies do not have enough available memory to hold large documents\n (this.curConfig.forceStorage ||\n (!this.curConfig.noStorageOnLoad &&\n (/(?:^|;\\s*)svgeditstore=prefsAndContent/).test(document.cookie))\n )\n ) {\n const name = 'svgedit-' + this.curConfig.canvasName;\n const cached = this.editor.storage.getItem(name);\n if (cached) {\n this.editor.loadFromString(cached);\n }\n }\n\n // LOAD PREFS\n Object.keys(this.defaultPrefs).forEach((key) => {\n const storeKey = 'svg-edit-' + key;\n if (this.editor.storage) {\n const val = this.editor.storage.getItem(storeKey);\n if (val) {\n this.defaultPrefs[key] = String(val); // Convert to string for FF (.value fails in Webkit)\n }\n } else if (window.widget) {\n this.defaultPrefs[key] = window.widget.preferenceForKey(storeKey);\n } else {\n const result = document.cookie.match(\n new RegExp('(?:^|;\\\\s*)' + regexEscape(\n encodeURIComponent(storeKey)\n ) + '=([^;]+)')\n );\n this.defaultPrefs[key] = result ? decodeURIComponent(result[1]) : '';\n }\n });\n }\n\n /**\n * Allows setting of preferences or configuration (including extensions).\n * @function module:SVGEditor.setConfig\n * @param {module:SVGEditor.Config|module:SVGEditor.Prefs} opts The preferences or configuration (including extensions). See the tutorial on {@tutorial ConfigOptions} for info on config and preferences.\n * @param {PlainObject} [cfgCfg] Describes configuration which applies to the\n * particular batch of supplied options\n * @param {boolean} [cfgCfg.allowInitialUserOverride=false] Set to true if you wish\n * to allow initial overriding of settings by the user via the URL\n * (if permitted) or previously stored preferences (if permitted);\n * note that it will be too late if you make such calls in extension\n * code because the URL or preference storage settings will\n * have already taken place.\n * @param {boolean} [cfgCfg.overwrite=true] Set to false if you wish to\n * prevent the overwriting of prior-set preferences or configuration\n * (URL settings will always follow this requirement for security\n * reasons, so `svgedit-config-iife.js` settings cannot be overridden unless it\n * explicitly permits via `allowInitialUserOverride` but extension config\n * can be overridden as they will run after URL settings). Should\n * not be needed in `svgedit-config-iife.js`.\n * @returns {void}\n*/\n setConfig (opts, cfgCfg = {}) {\n /**\n *\n * @param {module:SVGEditor.Config|module:SVGEditor.Prefs} cfgObj\n * @param {string} key\n * @param {any} val See {@link module:SVGEditor.Config} or {@link module:SVGEditor.Prefs}\n * @returns {void}\n */\n const extendOrAdd = (cfgObj, key, val) => {\n if (cfgObj[key] && typeof cfgObj[key] === 'object') {\n // $.extend(true, cfgObj[key], val);\n cfgObj[key] = mergeDeep(cfgObj[key], val);\n } else {\n cfgObj[key] = val;\n }\n };\n Object.entries(opts).forEach(([key, val]) => {\n // Only allow prefs defined in configObj.defaultPrefs or...\n if (this.defaultPrefs[key]) {\n if (cfgCfg.overwrite === false && (\n this.curConfig.preventAllURLConfig ||\n this.curPrefs[key])\n ) {\n return;\n }\n if (cfgCfg.allowInitialUserOverride === true) {\n this.defaultPrefs[key] = val;\n } else {\n this.pref(key, val);\n }\n } else if (['extensions', 'userExtensions', 'allowedOrigins'].includes(key)) {\n if (cfgCfg.overwrite === false &&\n (\n this.curConfig.preventAllURLConfig ||\n ['allowedOrigins'].includes(key) ||\n (key === 'extensions' && this.curConfig.lockExtensions)\n )\n ) {\n return;\n }\n this.curConfig[key] = this.curConfig[key].concat(val); // We will handle any dupes later\n // Only allow other configObj.curConfig if defined in configObj.defaultConfig\n } else if ({}.hasOwnProperty.call(this.defaultConfig, key)) {\n if (cfgCfg.overwrite === false && (\n this.curConfig.preventAllURLConfig ||\n {}.hasOwnProperty.call(this.curConfig, key)\n )) {\n return;\n }\n // Potentially overwriting of previously set config\n if ({}.hasOwnProperty.call(this.curConfig, key)) {\n if (cfgCfg.overwrite === false) {\n return;\n }\n extendOrAdd(this.curConfig, key, val);\n } else if (cfgCfg.allowInitialUserOverride === true) {\n extendOrAdd(this.defaultConfig, key, val);\n } else if (this.defaultConfig[key] && typeof this.defaultConfig[key] === 'object') {\n this.curConfig[key] = Array.isArray(this.defaultConfig[key]) ? [] : {};\n this.curConfig[key] = mergeDeep(this.curConfig[key], val);\n // $.extend(true, this.curConfig[key], val); // Merge properties recursively, e.g., on initFill, initStroke objects\n } else {\n this.curConfig[key] = val;\n }\n }\n });\n }\n /**\n * Store and retrieve preferences.\n * @function pref\n * @param {string} key The preference name to be retrieved or set\n * @param {string} [val] The value. If the value supplied is missing or falsey, no change to the preference will\n * be made unless `mayBeEmpty` is set.\n * @param {boolean} [mayBeEmpty] If value may be falsey.\n * @returns {string|void} If val is missing or falsey and `mayBeEmpty` is not set, the\n * value of the previously stored preference will be returned.\n * @todo Review whether any remaining existing direct references to\n * getting `curPrefs` can be changed to use `svgEditor.configObj.pref()` getting to ensure\n * `defaultPrefs` fallback (also for sake of `allowInitialUserOverride`);\n * specifically, `bkgd_color` could be changed so that the pref dialog has a\n * button to auto-calculate background, but otherwise uses `svgEditor.configObj.pref()` to\n * be able to get default prefs or overridable settings\n */\n pref (key, val, mayBeEmpty) {\n if (mayBeEmpty || val) {\n this.curPrefs[key] = val;\n return undefined;\n }\n return (key in this.curPrefs) ? this.curPrefs[key] : this.defaultPrefs[key];\n }\n /**\n * @function load load Config\n * @returns {void}\n */\n load () {\n this.loadFromURL(this.editor);\n this.setupCurPrefs(this.editor);\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.bold` method\n// https://tc39.es/ecma262/#sec-string.prototype.bold\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('bold') }, {\n bold: function bold() {\n return createHTML(this, 'b', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.italics` method\n// https://tc39.es/ecma262/#sec-string.prototype.italics\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('italics') }, {\n italics: function italics() {\n return createHTML(this, 'i', '', '');\n }\n});\n","/**\n * Adds context menu functionality.\n * @module contextmenu\n * @license Apache-2.0\n * @author Adam Bender\n */\n\nlet contextMenuExtensions = {};\n\n/**\n * Signature depends on what the user adds; in the case of our uses with\n * SVGEditor, no parameters are passed nor anything expected for a return.\n * @callback module:contextmenu.MenuItemAction\n * @param {...args} args\n * @returns {any}\n*/\n\n/**\n* @typedef {PlainObject} module:contextmenu.MenuItem\n* @property {string} id\n* @property {string} label\n* @property {module:contextmenu.MenuItemAction} action\n*/\n\n/**\n* @param {module:contextmenu.MenuItem} menuItem\n* @returns {boolean}\n*/\nconst menuItemIsValid = function (menuItem) {\n return menuItem && menuItem.id && menuItem.label && menuItem.action && typeof menuItem.action === 'function';\n};\n\n/**\n* @function module:contextmenu.add\n* @param {module:contextmenu.MenuItem} menuItem\n* @throws {Error|TypeError}\n* @returns {void}\n*/\nexport const add = function (menuItem) {\n // menuItem: {id, label, shortcut, action}\n if (!menuItemIsValid(menuItem)) {\n throw new TypeError(\n 'Menu items must be defined and have at least properties: ' +\n 'id, label, action, where action must be a function'\n );\n }\n if (menuItem.id in contextMenuExtensions) {\n throw new Error('Cannot add extension \"' + menuItem.id + '\", an extension by that name already exists\"');\n }\n // Register menuItem action, see below for deferred menu dom injection\n console.log('Registered contextmenu item: {id:' + menuItem.id + ', label:' + menuItem.label + '}');\n contextMenuExtensions[menuItem.id] = menuItem;\n // TODO: Need to consider how to handle custom enable/disable behavior\n};\n\n/**\n* @function module:contextmenu.hasCustomHandler\n* @param {string} handlerKey\n* @returns {boolean}\n*/\nexport const hasCustomHandler = function (handlerKey) {\n return Boolean(contextMenuExtensions[handlerKey]);\n};\n\n/**\n* @function module:contextmenu.getCustomHandler\n* @param {string} handlerKey\n* @returns {module:contextmenu.MenuItemAction}\n*/\nexport const getCustomHandler = function (handlerKey) {\n return contextMenuExtensions[handlerKey].action;\n};\n\n/**\n* @param {module:contextmenu.MenuItem} menuItem\n* @returns {void}\n*/\nconst injectExtendedContextMenuItemIntoDom = function (menuItem) {\n if (!Object.keys(contextMenuExtensions).length) {\n // all menuItems appear at the bottom of the menu in their own container.\n // if this is the first extension menu we need to add the separator.\n document.getElementById('cmenu_canvas').appendChild(`<li class='separator'>`);\n }\n const shortcut = menuItem.shortcut || '';\n document.getElementById('cmenu_canvas').appendChild(`\n <li class='disabled'><a href='#${menuItem.id}'>${menuItem.label}<span class='shortcut'>${shortcut}</span></a></li>`);\n};\n\n/**\n* @function module:contextmenu.injectExtendedContextMenuItemsIntoDom\n* @returns {void}\n*/\nexport const injectExtendedContextMenuItemsIntoDom = function () {\n Object.values(contextMenuExtensions).forEach((menuItem) => {\n injectExtendedContextMenuItemIntoDom(menuItem);\n });\n};\n/**\n* @function module:contextmenu.resetCustomMenus\n* @returns {void}\n*/\nexport const resetCustomMenus = function () { contextMenuExtensions = {}; };\n","const editorTemplate = document.createElement('template');\n\neditorTemplate.innerHTML = `\n <style>\n #svgroot {\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n top: 0;\n left: 0;\n }\n #workarea {\n display: inline-table-cell;\n position:absolute;\n top: 40px;\n left: 40px;\n bottom: 40px;\n right: 14px;\n background-color: #A0A0A0;\n border: 1px solid var(--border-color);\n overflow: auto;\n text-align: center;\n }\n \n #svgcanvas {\n line-height: normal;\n display: inline-block;\n background: var(--canvas-bg-color);\n text-align: center;\n vertical-align: middle;\n width: 640px;\n height: 480px;\n /* for widget regions that shouldn't react to dragging */\n -apple-dashboard-region:dashboard-region(control rectangle 0px 0px 0px 0px);\n position: relative;\n }\n \n </style>\n</div>\n<div id=\"workarea\">\n <div id=\"svgcanvas\" style=\"position: relative;\">\n </div>\n</div>\n`;\n\nexport default editorTemplate;\n","/* eslint-disable no-alert */\n/* globals $ */\nimport SvgCanvas from '../../svgcanvas/svgcanvas.js';\n\nconst SIDEPANEL_MAXWIDTH = 300;\nconst SIDEPANEL_OPENWIDTH = 150;\nconst {$id} = SvgCanvas;\n\n/**\n *\n */\nclass LayersPanel {\n /**\n * @param {PlainObject} editor\n */\n constructor (editor) {\n this.svgCanvas = editor.svgCanvas;\n this.uiStrings = editor.uiStrings;\n this.updateContextPanel = editor.topPanelHandlers.updateContextPanel;\n this.sidedrag = -1;\n this.sidedragging = false;\n this.allowmove = false;\n this.editor = editor;\n }\n\n /**\n * @param {Float} delta\n * @fires module:svgcanvas.SvgCanvas#event:ext_workareaResized\n * @returns {void}\n */\n changeSidePanelWidth (delta) {\n const rulerX = $('#ruler_x');\n $('#sidepanels').width('+=' + delta);\n $('#layerpanel').width('+=' + delta);\n rulerX.css('right', Number.parseInt(rulerX.css('right')) + delta);\n this.editor.workarea.css('right', Number.parseInt(this.editor.workarea.css('right')) + delta);\n this.svgCanvas.runExtensions('workareaResized');\n }\n\n /**\n * @param {Event} evt\n * @returns {void}\n */\n resizeSidePanel (evt) {\n if (!this.allowmove) { return; }\n if (this.sidedrag === -1) { return; }\n this.sidedragging = true;\n let deltaX = this.sidedrag - evt.pageX;\n const sideWidth = $('#sidepanels').width();\n if (sideWidth + deltaX > SIDEPANEL_MAXWIDTH) {\n deltaX = SIDEPANEL_MAXWIDTH - sideWidth;\n // sideWidth = SIDEPANEL_MAXWIDTH;\n } else if (sideWidth + deltaX < 2) {\n deltaX = 2 - sideWidth;\n // sideWidth = 2;\n }\n if (deltaX === 0) { return; }\n this.sidedrag -= deltaX;\n this.changeSidePanelWidth(deltaX);\n }\n\n /**\n * If width is non-zero, then fully close it; otherwise fully open it.\n * @param {boolean} close Forces the side panel closed\n * @returns {void}\n */\n toggleSidePanel (close) {\n const dpr = window.devicePixelRatio || 1;\n const w = $('#sidepanels').width();\n const isOpened = (dpr < 1 ? w : w / dpr) > 2;\n const zoomAdjustedSidepanelWidth = (dpr < 1 ? 1 : dpr) * SIDEPANEL_OPENWIDTH;\n const deltaX = (isOpened || close ? 0 : zoomAdjustedSidepanelWidth) - w;\n this.changeSidePanelWidth(deltaX);\n }\n /**\n * @param {PlainObject} e event\n * @returns {void}\n */\n lmenuFunc (e) {\n const action = e?.detail?.trigger;\n switch (action) {\n case 'dupe':\n this.cloneLayer();\n break;\n case 'delete':\n this.deleteLayer();\n break;\n case 'merge_down':\n this.mergeLayer();\n break;\n case 'merge_all':\n this.svgCanvas.mergeAllLayers();\n this.updateContextPanel();\n this.populateLayers();\n break;\n }\n }\n /**\n * @returns {void}\n */\n init () {\n // layer menu added to DOM\n const menuMore = document.createElement('se-cmenu-layers');\n menuMore.setAttribute('id', 'se-cmenu-layers-more');\n menuMore.value = 'layer_moreopts';\n menuMore.setAttribute('leftclick', true);\n document.body.append(menuMore);\n const menuLayerBox = document.createElement('se-cmenu-layers');\n menuLayerBox.setAttribute('id', 'se-cmenu-layers-list');\n menuLayerBox.value = 'layerlist';\n menuLayerBox.setAttribute('leftclick', false);\n document.body.append(menuLayerBox);\n document.getElementById('layer_new').addEventListener('click', this.newLayer.bind(this));\n document.getElementById('layer_delete').addEventListener('click', this.deleteLayer.bind(this));\n document.getElementById('layer_up').addEventListener('click', () => this.moveLayer.bind(this)(-1));\n document.getElementById('layer_down').addEventListener('click', () => this.moveLayer.bind(this)(1));\n document.getElementById('layer_rename').addEventListener('click', this.layerRename.bind(this));\n $id('se-cmenu-layers-more').addEventListener('change', this.lmenuFunc.bind(this));\n $id('se-cmenu-layers-list').addEventListener('change', (e) => {\n this.lmenuFunc.bind(this)(e?.detail?.trigger, e?.detail?.source);\n });\n $id('sidepanel_handle').addEventListener('click', this.toggleSidePanel.bind(this));\n if (this.editor.configObj.curConfig.showlayers) {\n this.toggleSidePanel();\n }\n $id('sidepanel_handle').addEventListener('mousedown', (evt) => {\n this.sidedrag = evt.pageX;\n window.addEventListener('mousemove', this.resizeSidePanel.bind(this));\n this.allowmove = false;\n // Silly hack for Chrome, which always runs mousemove right after mousedown\n setTimeout(() => {\n this.allowmove = true;\n }, 20);\n });\n $id('sidepanel_handle').addEventListener('mouseup', (evt) => {\n if (!this.sidedragging) { this.toggleSidePanel(); }\n this.sidedrag = -1;\n this.sidedragging = false;\n });\n window.addEventListener('mouseup', (evt) => {\n this.sidedrag = -1;\n this.sidedragging = false;\n $id('svg_editor').removeEventListener('mousemove', this.resizeSidePanel.bind(this));\n });\n }\n /**\n * @returns {void}\n */\n newLayer () {\n let uniqName;\n let i = this.svgCanvas.getCurrentDrawing().getNumLayers();\n do {\n uniqName = this.uiStrings.layers.layer + ' ' + (++i);\n } while (this.svgCanvas.getCurrentDrawing().hasLayer(uniqName));\n\n const newName = prompt(this.uiStrings.notification.enterUniqueLayerName, uniqName);\n if (!newName) { return; }\n if (this.svgCanvas.getCurrentDrawing().hasLayer(newName)) {\n alert(this.uiStrings.notification.dupeLayerName);\n return;\n }\n this.svgCanvas.createLayer(newName);\n this.updateContextPanel();\n this.populateLayers();\n }\n\n /**\n *\n * @returns {void}\n */\n deleteLayer () {\n if (this.svgCanvas.deleteCurrentLayer()) {\n this.updateContextPanel();\n this.populateLayers();\n // This matches what this.svgCanvas does\n // TODO: make this behavior less brittle (svg-editor should get which\n // layer is selected from the canvas and then select that one in the UI)\n $('#layerlist tr.layer').removeClass('layersel');\n $('#layerlist tr.layer:first').addClass('layersel');\n }\n }\n\n /**\n *\n * @returns {void}\n */\n cloneLayer () {\n const name = this.svgCanvas.getCurrentDrawing().getCurrentLayerName() + ' copy';\n\n const newName = prompt(this.uiStrings.notification.enterUniqueLayerName, name);\n if (!newName) { return; }\n if (this.svgCanvas.getCurrentDrawing().hasLayer(newName)) {\n alert(this.uiStrings.notification.dupeLayerName);\n return;\n }\n this.svgCanvas.cloneLayer(newName);\n this.updateContextPanel();\n this.populateLayers();\n }\n\n /**\n *\n * @returns {void}\n */\n mergeLayer () {\n if ($('#layerlist tr.layersel').index() === this.svgCanvas.getCurrentDrawing().getNumLayers() - 1) {\n return;\n }\n this.svgCanvas.mergeLayer();\n this.updateContextPanel();\n this.populateLayers();\n }\n\n /**\n * @param {Integer} pos\n * @returns {void}\n */\n moveLayer (pos) {\n const total = this.svgCanvas.getCurrentDrawing().getNumLayers();\n\n let curIndex = $('#layerlist tr.layersel').index();\n if (curIndex > 0 || curIndex < total - 1) {\n curIndex += pos;\n this.svgCanvas.setCurrentLayerPosition(total - curIndex - 1);\n this.populateLayers();\n }\n }\n\n /**\n * @returns {void}\n */\n layerRename () {\n // const curIndex = $('#layerlist tr.layersel').prevAll().length; // Currently unused\n const oldName = $('#layerlist tr.layersel td.layername').text();\n const newName = prompt(this.uiStrings.notification.enterNewLayerName, '');\n if (!newName) { return; }\n if (oldName === newName || this.svgCanvas.getCurrentDrawing().hasLayer(newName)) {\n alert(this.uiStrings.notification.layerHasThatName);\n return;\n }\n this.svgCanvas.renameCurrentLayer(newName);\n this.populateLayers();\n }\n\n /**\n * This function highlights the layer passed in (by fading out the other layers).\n * If no layer is passed in, this function restores the other layers.\n * @param {string} [layerNameToHighlight]\n * @returns {void}\n */\n toggleHighlightLayer (layerNameToHighlight) {\n let i;\n const curNames = [], numLayers = this.svgCanvas.getCurrentDrawing().getNumLayers();\n for (i = 0; i < numLayers; i++) {\n curNames[i] = this.svgCanvas.getCurrentDrawing().getLayerName(i);\n }\n\n if (layerNameToHighlight) {\n curNames.forEach((curName) => {\n if (curName !== layerNameToHighlight) {\n this.svgCanvas.getCurrentDrawing().setLayerOpacity(curName, 0.5);\n }\n });\n } else {\n curNames.forEach((curName) => {\n this.svgCanvas.getCurrentDrawing().setLayerOpacity(curName, 1.0);\n });\n }\n }\n\n /**\n * @returns {void}\n */\n populateLayers () {\n this.svgCanvas.clearSelection();\n const layerlist = $('#layerlist tbody').empty();\n const selLayerNames = $('#selLayerNames').empty();\n const drawing = this.svgCanvas.getCurrentDrawing();\n const currentLayerName = drawing.getCurrentLayerName();\n let layer = this.svgCanvas.getCurrentDrawing().getNumLayers();\n // we get the layers in the reverse z-order (the layer rendered on top is listed first)\n while (layer--) {\n const name = drawing.getLayerName(layer);\n const layerTr = $('<tr class=\"layer\">').toggleClass('layersel', name === currentLayerName);\n const layerVis = $('<td class=\"layervis\">').toggleClass('layerinvis', !drawing.getLayerVisibility(name));\n const layerName = $('<td class=\"layername\">' + name + '</td>');\n layerlist.append(layerTr.append(layerVis, layerName));\n selLayerNames.append('<option value=\"' + name + '\">' + name + '</option>');\n }\n // handle selection of layer\n $('#layerlist td.layername')\n .mouseup((evt) => {\n $('#layerlist tr.layer').removeClass('layersel');\n $(evt.currentTarget.parentNode).addClass('layersel');\n this.svgCanvas.setCurrentLayer(evt.currentTarget.textContent);\n evt.preventDefault();\n })\n .mouseover((evt) => {\n this.toggleHighlightLayer(this.svgCanvas, evt.currentTarget.textContent);\n })\n .mouseout(() => {\n this.toggleHighlightLayer(this.svgCanvas);\n });\n $('#layerlist td.layervis').click((evt) => {\n const row = $(evt.currentTarget.parentNode).prevAll().length;\n const name = $('#layerlist tr.layer:eq(' + row + ') td.layername').text();\n const vis = $(evt.currentTarget).hasClass('layerinvis');\n this.svgCanvas.setLayerVisibility(name, vis);\n $(evt.currentTarget).toggleClass('layerinvis');\n });\n\n // if there were too few rows, let's add a few to make it not so lonely\n let num = 5 - $('#layerlist tr.layer').size();\n while (num-- > 0) {\n // TODO: there must a better way to do this\n layerlist.append('<tr><td style=\"color:white\">_</td><td/></tr>');\n }\n }\n}\n\nexport default LayersPanel;\n","import SvgCanvas from '../../svgcanvas/svgcanvas.js';\n\nconst {$id, $qa} = SvgCanvas;\n\n/*\n * register actions for left panel\n */\n/**\n * @type {module}\n*/\nclass LeftPanelHandlers {\n /**\n * @param {PlainObject} editor svgedit handler\n */\n constructor (editor) {\n this.editor = editor;\n this.svgCanvas = editor.svgCanvas;\n }\n /**\n * This is a common function used when a tool has been clicked (chosen).\n * It does several common things:\n * - Removes the pressed button from whatever tool currently has it.\n * - Adds the the pressed button to the button passed in.\n * @function this.updateLeftPanel\n * @param {string|Element} button The DOM element or string selector representing the toolbar button\n * @returns {boolean} Whether the button was disabled or not\n */\n // eslint-disable-next-line class-methods-use-this\n updateLeftPanel (button) {\n if (button.disabled) return false;\n // remove the pressed state on other(s) button(s)\n $qa('#tools_left *[pressed]').forEach((b) => { b.pressed = false; });\n // pressed state for the clicked button\n $id(button).pressed = true;\n return true;\n }\n\n /**\n * Unless the select toolbar button is disabled, sets the button\n * and sets the select mode and cursor styles.\n * @function module:SVGEditor.clickSelect\n * @returns {void}\n */\n clickSelect () {\n if (this.updateLeftPanel('tool_select')) {\n this.editor.workarea.css('cursor', 'auto');\n this.svgCanvas.setMode('select');\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickFHPath () {\n if (this.updateLeftPanel('tool_fhpath')) {\n this.svgCanvas.setMode('fhpath');\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickLine () {\n if (this.updateLeftPanel('tool_line')) {\n this.svgCanvas.setMode('line');\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickSquare () {\n if (this.updateLeftPanel('tool_square')) {\n this.svgCanvas.setMode('square');\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickRect () {\n if (this.updateLeftPanel('tool_rect')) {\n this.svgCanvas.setMode('rect');\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickFHRect () {\n if (this.updateLeftPanel('tool_fhrect')) {\n this.svgCanvas.setMode('fhrect');\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickCircle () {\n if (this.updateLeftPanel('tool_circle')) {\n this.svgCanvas.setMode('circle');\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickEllipse () {\n if (this.updateLeftPanel('tool_ellipse')) {\n this.svgCanvas.setMode('ellipse');\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickFHEllipse () {\n if (this.updateLeftPanel('tool_fhellipse')) {\n this.svgCanvas.setMode('fhellipse');\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickImage () {\n if (this.updateLeftPanel('tool_image')) {\n this.svgCanvas.setMode('image');\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickZoom () {\n if (this.updateLeftPanel('tool_zoom')) {\n this.svgCanvas.setMode('zoom');\n this.editor.workarea.css('cursor', this.editor.zoomInIcon);\n }\n }\n\n /**\n *\n * @returns {void}\n */\n dblclickZoom () {\n if (this.updateLeftPanel('tool_zoom')) {\n this.editor.zoomImage();\n this.clickSelect();\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickText () {\n if (this.updateLeftPanel('tool_text')) {\n this.svgCanvas.setMode('text');\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickPath () {\n if (this.updateLeftPanel('tool_path')) {\n this.svgCanvas.setMode('path');\n }\n }\n /**\n * @type {module}\n */\n add (id, handler) {\n $id(id).addEventListener('click', () => {\n if (this.updateLeftPanel(id)) {\n handler();\n }\n });\n }\n /**\n * @type {module}\n */\n init () {\n // register actions for left panel\n $id('tool_select').addEventListener('click', this.clickSelect.bind(this));\n $id('tool_fhpath').addEventListener('click', this.clickFHPath.bind(this));\n $id('tool_text').addEventListener('click', this.clickText.bind(this));\n $id('tool_image').addEventListener('click', this.clickImage.bind(this));\n $id('tool_zoom').addEventListener('click', this.clickZoom.bind(this));\n $id('tool_zoom').addEventListener('dblclick', this.dblclickZoom.bind(this));\n $id('tool_path').addEventListener('click', this.clickPath.bind(this));\n $id('tool_line').addEventListener('click', this.clickLine.bind(this));\n\n // flyout\n $id('tool_rect').addEventListener('click', this.clickRect.bind(this));\n $id('tool_square').addEventListener('click', this.clickSquare.bind(this));\n $id('tool_fhrect').addEventListener('click', this.clickFHRect.bind(this));\n $id('tool_ellipse').addEventListener('click', this.clickEllipse.bind(this));\n $id('tool_circle').addEventListener('click', this.clickCircle.bind(this));\n $id('tool_fhellipse').addEventListener('click', this.clickFHEllipse.bind(this));\n }\n}\n\nexport default LeftPanelHandlers;\n","/* globals $ */\nimport {jGraduate} from '../components/jgraduate/jQuery.jGraduate.js';\nimport SvgCanvas from '../../svgcanvas/svgcanvas.js';\n\nconst {$id} = SvgCanvas;\n\n/*\n * register actions for left panel\n */\n/**\n *\n */\nclass BottomPanelHandlers {\n /**\n * @param {PlainObject} editor svgedit handler\n */\n constructor (editor) {\n this.editor = editor;\n this.svgCanvas = editor.svgCanvas;\n }\n /**\n * @type {module}\n */\n get selectedElement () {\n return this.editor.selectedElement;\n }\n /**\n * @type {module}\n */\n get multiselected () {\n return this.editor.multiselected;\n }\n\n /**\n * @type {module}\n */\n changeStrokeWidth (e) {\n let val = e.target.value;\n if (val === 0 && this.selectedElement && ['line', 'polyline'].includes(this.selectedElement.nodeName)) {\n val = 1;\n }\n this.svgCanvas.setStrokeWidth(val);\n }\n\n /**\n * @type {module}\n */\n changeZoom (value) {\n switch (value) {\n case 'canvas':\n case 'selection':\n case 'layer':\n case 'content':\n this.editor.zoomChanged(window, value);\n break;\n default:\n {\n const zoomlevel = Number(value) / 100;\n if (zoomlevel < 0.001) {\n value = 0.1;\n return;\n }\n const zoom = this.svgCanvas.getZoom();\n const wArea = this.editor.workarea;\n\n this.editor.zoomChanged(window, {\n width: 0,\n height: 0,\n // center pt of scroll position\n x: (wArea[0].scrollLeft + wArea.width() / 2) / zoom,\n y: (wArea[0].scrollTop + wArea.height() / 2) / zoom,\n zoom: zoomlevel\n }, true);\n }\n }\n }\n /**\n * @fires module:svgcanvas.SvgCanvas#event:ext_toolButtonStateUpdate\n * @returns {void}\n */\n updateToolButtonState () {\n const bNoFill = (this.svgCanvas.getColor('fill') === 'none');\n const bNoStroke = (this.svgCanvas.getColor('stroke') === 'none');\n const buttonsNeedingStroke = ['tool_fhpath', 'tool_line'];\n const buttonsNeedingFillAndStroke = [\n 'tools_rect', 'tools_ellipse',\n 'tool_text', 'tool_path'\n ];\n\n if (bNoStroke) {\n buttonsNeedingStroke.forEach((btn) => {\n // if btn is pressed, change to select button\n if ($id(btn).pressed) {\n this.editor.leftPanelHandlers.clickSelect();\n }\n $(btn).disabled = true;\n });\n } else {\n buttonsNeedingStroke.forEach((btn) => {\n $id(btn).disabled = false;\n });\n }\n\n if (bNoStroke && bNoFill) {\n buttonsNeedingFillAndStroke.forEach((btn) => {\n // if btn is pressed, change to select button\n if ($id(btn).pressed) {\n this.editor.leftPanelHandlers.clickSelect();\n }\n $(btn).disabled = true;\n });\n } else {\n buttonsNeedingFillAndStroke.forEach((btn) => {\n $id(btn).disabled = false;\n });\n }\n\n this.svgCanvas.runExtensions(\n 'toolButtonStateUpdate',\n /** @type {module:svgcanvas.SvgCanvas#event:ext_toolButtonStateUpdate} */ {\n nofill: bNoFill,\n nostroke: bNoStroke\n }\n );\n }\n /**\n * @type {module}\n */\n updateColorpickers (apply) {\n $id('fill_color').update(this.svgCanvas, this.selectedElement, apply);\n $id('stroke_color').update(this.svgCanvas, this.selectedElement, apply);\n }\n\n /**\n * @type {module}\n */\n handleColorPicker (type, evt) {\n const {paint} = evt.detail;\n this.svgCanvas.setPaint(type, paint);\n this.updateToolButtonState();\n }\n /**\n * @type {module}\n */\n handleStrokeAttr (type, evt) {\n this.svgCanvas.setStrokeAttr(type, evt.detail.value);\n }\n /**\n * @type {module}\n */\n handleOpacity (evt) {\n // if ($(this).find('div').length) { return; }\n const val = Number.parseInt(evt.currentTarget.value.split('%')[0]);\n this.svgCanvas.setOpacity(val / 100);\n }\n /**\n * @type {module}\n */\n handlePalette (e) {\n e.preventDefault();\n // shift key or right click for stroke\n const {picker, color} = e.detail;\n // Webkit-based browsers returned 'initial' here for no stroke\n const paint = color === 'none' ? new jGraduate.Paint() : new jGraduate.Paint({alpha: 100, solidColor: color.substr(1)});\n if (picker === 'fill') {\n $id('fill_color').setPaint(paint);\n } else {\n $id('stroke_color').setPaint(paint);\n }\n this.svgCanvas.setColor(picker, color);\n if (color !== 'none' && this.svgCanvas.getPaintOpacity(picker) !== 1) {\n this.svgCanvas.setPaintOpacity(picker, 1.0);\n }\n this.updateToolButtonState();\n }\n\n /**\n * @type {module}\n */\n init () {\n // register actions for bottom panel\n $id('zoom').addEventListener('change', (e) => this.changeZoom.bind(this)(e.detail.value));\n $id('stroke_color').addEventListener('change', (evt) => this.handleColorPicker.bind(this)('stroke', evt));\n $id('fill_color').addEventListener('change', (evt) => this.handleColorPicker.bind(this)('fill', evt));\n $id('stroke_width').addEventListener('change', this.changeStrokeWidth.bind(this));\n $id('stroke_style').addEventListener('change', (evt) => this.handleStrokeAttr.bind(this)('stroke-dasharray', evt));\n $id('stroke_linejoin').addEventListener('change', (evt) => this.handleStrokeAttr.bind(this)('stroke-linejoin', evt));\n $id('stroke_linecap').addEventListener('change', (evt) => this.handleStrokeAttr.bind(this)('stroke-linecap', evt));\n $id('opacity').addEventListener('change', this.handleOpacity.bind(this));\n $id('palette').addEventListener('change', this.handlePalette.bind(this));\n const {curConfig} = this.editor.configObj;\n $id('fill_color').setPaint(new jGraduate.Paint({alpha: 100, solidColor: curConfig.initFill.color}));\n $id('stroke_color').setPaint(new jGraduate.Paint({alpha: 100, solidColor: curConfig.initStroke.color}));\n }\n}\n\nexport default BottomPanelHandlers;\n","/* globals $ */\nimport SvgCanvas from '../../svgcanvas/svgcanvas.js';\nimport {isValidUnit, getTypeMap, convertUnit} from '../../common/units.js';\n\nconst {$id, isNullish} = SvgCanvas;\n\n/*\n * register actions for left panel\n */\n/**\n *\n */\nclass TopPanelHandlers {\n /**\n * @param {PlainObject} editor svgedit handler\n */\n constructor (editor) {\n this.editor = editor;\n this.svgCanvas = editor.svgCanvas;\n this.uiStrings = editor.uiStrings;\n }\n /**\n * @type {module}\n */\n get selectedElement () {\n return this.editor.selectedElement;\n }\n /**\n * @type {module}\n */\n get multiselected () {\n return this.editor.multiselected;\n }\n /**\n * @type {module}\n */\n get path () {\n return this.svgCanvas.pathActions;\n }\n /**\n * @param {PlainObject} [opts={}]\n * @param {boolean} [opts.cancelDeletes=false]\n * @returns {void} Resolves to `undefined`\n */\n promptImgURL ({cancelDeletes = false} = {}) {\n let curhref = this.svgCanvas.getHref(this.selectedElement);\n curhref = curhref.startsWith('data:') ? '' : curhref;\n // eslint-disable-next-line no-alert\n const url = prompt(this.editor.uiStrings.notification.enterNewImgURL, curhref);\n if (url) {\n this.editor.setImageURL(url);\n } else if (cancelDeletes) {\n this.svgCanvas.deleteSelectedElements();\n }\n }\n /**\n * Updates the context panel tools based on the selected element.\n * @returns {void}\n */\n updateContextPanel () {\n const setInputWidth = (elem) => {\n const w = Math.min(Math.max(12 + elem.value.length * 6, 50), 300);\n $(elem).width(w);\n };\n\n let elem = this.selectedElement;\n // If element has just been deleted, consider it null\n if (!isNullish(elem) && !elem.parentNode) { elem = null; }\n const currentLayerName = this.svgCanvas.getCurrentDrawing().getCurrentLayerName();\n const currentMode = this.svgCanvas.getMode();\n const unit = this.editor.configObj.curConfig.baseUnit !== 'px' ? this.editor.configObj.curConfig.baseUnit : null;\n\n const isNode = currentMode === 'pathedit'; // elem ? (elem.id && elem.id.startsWith('pathpointgrip')) : false;\n const menuItems = document.getElementById('se-cmenu_canvas');\n $('#selected_panel, #multiselected_panel, #g_panel, #rect_panel, #circle_panel,' +\n '#ellipse_panel, #line_panel, #text_panel, #image_panel, #container_panel,' +\n ' #use_panel, #a_panel').hide();\n if (!isNullish(elem)) {\n const elname = elem.nodeName;\n // If this is a link with no transform and one child, pretend\n // its child is selected\n // if (elname === 'a') { // && !$(elem).attr('transform')) {\n // elem = elem.firstChild;\n // }\n\n const angle = this.svgCanvas.getRotationAngle(elem);\n $('#angle').val(angle);\n\n const blurval = this.svgCanvas.getBlur(elem) * 10;\n $id('blur').value = blurval;\n\n if (this.svgCanvas.addedNew &&\n elname === 'image' &&\n this.svgCanvas.getMode() === 'image' &&\n !this.svgCanvas.getHref(elem).startsWith('data:')) {\n /* await */ this.promptImgURL({cancelDeletes: true});\n }\n\n if (!isNode && currentMode !== 'pathedit') {\n $('#selected_panel').show();\n // Elements in this array already have coord fields\n if (['line', 'circle', 'ellipse'].includes(elname)) {\n $('#xy_panel').hide();\n } else {\n let x, y;\n\n // Get BBox vals for g, polyline and path\n if (['g', 'polyline', 'path'].includes(elname)) {\n const bb = this.svgCanvas.getStrokedBBox([elem]);\n if (bb) {\n ({x, y} = bb);\n }\n } else {\n x = elem.getAttribute('x');\n y = elem.getAttribute('y');\n }\n\n if (unit) {\n x = convertUnit(x);\n y = convertUnit(y);\n }\n\n $('#selected_x').val(x || 0);\n $('#selected_y').val(y || 0);\n $('#xy_panel').show();\n }\n\n // Elements in this array cannot be converted to a path\n $id('tool_topath').style.display = ['image', 'text', 'path', 'g', 'use'].includes(elname) ? 'none' : 'block';\n $id('tool_reorient').style.display = (elname === 'path') ? 'block' : 'none';\n $id('tool_reorient').disabled = (angle === 0);\n } else {\n const point = this.path.getNodePoint();\n $('#tool_add_subpath').pressed = false;\n $('#tool_node_delete').toggleClass('disabled', !this.path.canDeleteNodes);\n\n // Show open/close button based on selected point\n // setIcon('#tool_openclose_path', path.closed_subpath ? 'open_path' : 'close_path');\n\n if (point) {\n const segType = $('#seg_type');\n if (unit) {\n point.x = convertUnit(point.x);\n point.y = convertUnit(point.y);\n }\n $('#path_node_x').val(point.x);\n $('#path_node_y').val(point.y);\n if (point.type) {\n segType.val(point.type).removeAttr('disabled');\n } else {\n segType.val(4).attr('disabled', 'disabled');\n }\n }\n return;\n }\n\n // update contextual tools here\n const panels = {\n g: [],\n a: [],\n rect: ['rx', 'width', 'height'],\n image: ['width', 'height'],\n circle: ['cx', 'cy', 'r'],\n ellipse: ['cx', 'cy', 'rx', 'ry'],\n line: ['x1', 'y1', 'x2', 'y2'],\n text: [],\n use: []\n };\n\n const {tagName} = elem;\n\n // if ($(elem).data('gsvg')) {\n // $('#g_panel').show();\n // }\n\n let linkHref = null;\n if (tagName === 'a') {\n linkHref = this.svgCanvas.getHref(elem);\n $('#g_panel').show();\n }\n\n if (elem.parentNode.tagName === 'a' && !$(elem).siblings().length) {\n $('#a_panel').show();\n linkHref = this.svgCanvas.getHref(elem.parentNode);\n }\n\n // Hide/show the make_link buttons\n $('#tool_make_link, #tool_make_link_multi').toggle(!linkHref);\n\n if (linkHref) {\n $('#link_url').val(linkHref);\n }\n\n if (panels[tagName]) {\n const curPanel = panels[tagName];\n\n $('#' + tagName + '_panel').show();\n\n curPanel.forEach((item) => {\n let attrVal = elem.getAttribute(item);\n if (this.editor.configObj.curConfig.baseUnit !== 'px' && elem[item]) {\n const bv = elem[item].baseVal.value;\n attrVal = convertUnit(bv);\n }\n $id(`${tagName}_${item}`).value = attrVal || 0;\n });\n\n if (tagName === 'text') {\n $('#text_panel').css('display', 'inline-block');\n $('#tool_font_size').css('display', 'inline');\n $id('tool_italic').pressed = this.svgCanvas.getItalic();\n $id('tool_bold').pressed = this.svgCanvas.getBold();\n $('#tool_font_family').val(elem.getAttribute('font-family'));\n $('#font_size').val(elem.getAttribute('font-size'));\n $('#text').val(elem.textContent);\n const textAnchorStart = $id('tool_text_anchor_start');\n const textAnchorMiddle = $id('tool_text_anchor_middle');\n const textAnchorEnd = $id('tool_text_anchor_end');\n switch (elem.getAttribute('text-anchor')) {\n case 'start':\n textAnchorStart.pressed = true;\n textAnchorMiddle.pressed = false;\n textAnchorEnd.pressed = false;\n break;\n case 'middle':\n textAnchorStart.pressed = false;\n textAnchorMiddle.pressed = true;\n textAnchorEnd.pressed = false;\n break;\n case 'end':\n textAnchorStart.pressed = false;\n textAnchorMiddle.pressed = false;\n textAnchorEnd.pressed = true;\n break;\n }\n if (this.svgCanvas.addedNew) {\n // Timeout needed for IE9\n setTimeout(() => {\n $('#text').focus().select();\n }, 100);\n }\n // text\n } else if (tagName === 'image' && this.svgCanvas.getMode() === 'image') {\n this.svgCanvas.setImageURL(this.svgCanvas.getHref(elem));\n // image\n } else if (tagName === 'g' || tagName === 'use') {\n $('#container_panel').show();\n const title = this.svgCanvas.getTitle();\n const label = $('#g_title')[0];\n label.value = title;\n setInputWidth(label);\n $('#g_title').prop('disabled', tagName === 'use');\n }\n }\n menuItems.setAttribute((tagName === 'g' ? 'en' : 'dis') + 'ablemenuitems', '#ungroup');\n menuItems.setAttribute(((tagName === 'g' || !this.multiselected) ? 'dis' : 'en') + 'ablemenuitems', '#group');\n\n // if (!isNullish(elem))\n } else if (this.multiselected) {\n $('#multiselected_panel').show();\n menuItems.setAttribute('enablemenuitems', '#group');\n menuItems.setAttribute('disablemenuitems', '#ungroup');\n } else {\n menuItems.setAttribute('disablemenuitems', '#delete,#cut,#copy,#group,#ungroup,#move_front,#move_up,#move_down,#move_back');\n }\n\n // update history buttons\n $id('tool_undo').disabled = (this.svgCanvas.undoMgr.getUndoStackSize() === 0);\n $id('tool_redo').disabled = (this.svgCanvas.undoMgr.getRedoStackSize() === 0);\n\n this.svgCanvas.addedNew = false;\n\n if ((elem && !isNode) || this.multiselected) {\n // update the selected elements' layer\n $('#selLayerNames').removeAttr('disabled').val(currentLayerName);\n\n // Enable regular menu options\n const canCMenu = document.getElementById('se-cmenu_canvas');\n canCMenu.setAttribute('enablemenuitems', '#delete,#cut,#copy,#move_front,#move_up,#move_down,#move_back');\n } else {\n $('#selLayerNames').attr('disabled', 'disabled');\n }\n }\n /**\n * @param {Event} [e] Not used.\n * @param {boolean} forSaving\n * @returns {void}\n */\n showSourceEditor (e, forSaving) {\n const $editorDialog = document.getElementById('se-svg-editor-dialog');\n if ($editorDialog.getAttribute('dialog') === 'open') return;\n const origSource = this.svgCanvas.getSvgString();\n $editorDialog.setAttribute('dialog', 'open');\n $editorDialog.setAttribute('value', origSource);\n $editorDialog.setAttribute('copysec', Boolean(forSaving));\n $editorDialog.setAttribute('applysec', !forSaving);\n }\n /**\n *\n * @returns {void}\n */\n clickWireframe () {\n $id('tool_wireframe').pressed = !$id('tool_wireframe').pressed;\n this.editor.workarea.toggleClass('wireframe');\n\n const wfRules = $('#wireframe_rules');\n if (!wfRules.length) {\n /* wfRules = */ $('<style id=\"wireframe_rules\"></style>').appendTo('head');\n } else {\n wfRules.empty();\n }\n this.editor.updateWireFrame();\n }\n /**\n *\n * @returns {void}\n */\n clickUndo () {\n const {undoMgr} = this.editor.svgCanvas;\n if (undoMgr.getUndoStackSize() > 0) {\n undoMgr.undo();\n this.editor.layersPanel.populateLayers();\n }\n }\n\n /**\n *\n * @returns {void}\n */\n clickRedo () {\n const {undoMgr} = this.editor.svgCanvas;\n if (undoMgr.getRedoStackSize() > 0) {\n undoMgr.redo();\n this.editor.layersPanel.populateLayers();\n }\n }\n /**\n * @type {module}\n */\n changeRectRadius (e) {\n this.svgCanvas.setRectRadius(e.target.value);\n }\n\n /**\n* @type {module}\n*/\n changeFontSize (e) {\n this.svgCanvas.setFontSize(e.target.value);\n }\n\n /**\n* @type {module}\n*/\n changeRotationAngle (e) {\n this.svgCanvas.setRotationAngle(e.target.value);\n $('#tool_reorient').toggleClass('disabled', Number.parseInt(e.target.value) === 0);\n }\n\n /**\n* @param {PlainObject} e\n* @returns {void}\n*/\n changeBlur (e) {\n this.svgCanvas.setBlur(e.target.value / 10, true);\n }\n /**\n *\n * @returns {void}\n */\n clickGroup () {\n // group\n if (this.editor.multiselected) {\n this.svgCanvas.groupSelectedElements();\n // ungroup\n } else if (this.editor.selectedElement) {\n this.svgCanvas.ungroupSelectedElement();\n }\n }\n\n /**\n*\n* @returns {void}\n*/\n clickClone () {\n this.svgCanvas.cloneSelectedElements(20, 20);\n }\n\n /**\n* @param {PlainObject} evt\n* @returns {void}\n*/\n clickAlignEle (evt) {\n this.svgCanvas.alignSelectedElements(evt.detail.value, 'page');\n }\n\n /**\n* @param {string} pos indicate the alignment relative to top, bottom, middle etc..\n* @returns {void}\n*/\n clickAlign (pos) {\n let value = $('#tool_align_relative').val();\n if(value === ''){\n value = 'selected';\n }\n this.svgCanvas.alignSelectedElements(pos, value);\n }\n /**\n*\n* @type {module}\n*/\n attrChanger (e) {\n const attr = e.target.getAttribute('data-attr');\n let val = e.target.value;\n const valid = isValidUnit(attr, val, this.selectedElement);\n\n if (!valid) {\n e.target.value = this.selectedElement().getAttribute(attr);\n // eslint-disable-next-line no-alert\n alert(this.uiStrings.notification.invalidAttrValGiven);\n return false;\n }\n\n if (attr !== 'id' && attr !== 'class') {\n if (isNaN(val)) {\n val = this.svgCanvas.convertToNum(attr, val);\n } else if (this.editor.configObj.curConfig.baseUnit !== 'px') {\n // Convert unitless value to one with given unit\n\n const unitData = getTypeMap();\n\n if (this.selectedElement[attr] || this.svgCanvas.getMode() === 'pathedit' || attr === 'x' || attr === 'y') {\n val *= unitData[this.editor.configObj.curConfig.baseUnit];\n }\n }\n }\n\n // if the user is changing the id, then de-select the element first\n // change the ID, then re-select it with the new ID\n if (attr === 'id') {\n const elem = this.selectedElement;\n this.svgCanvas.clearSelection();\n elem.id = val;\n this.svgCanvas.addToSelection([elem], true);\n } else {\n this.svgCanvas.changeSelectedAttribute(attr, val);\n }\n return true;\n }\n /**\n *\n * @returns {void}\n */\n convertToPath () {\n if (!isNullish(this.selectedElement)) {\n this.svgCanvas.convertToPath();\n }\n }\n /**\n *\n * @returns {void}\n */\n reorientPath () {\n if (!isNullish(this.selectedElement)) {\n this.path.reorient();\n }\n }\n /**\n *\n * @returns {void} Resolves to `undefined`\n */\n makeHyperlink () {\n if (!isNullish(this.selectedElement) || this.multiselected) {\n // eslint-disable-next-line no-alert\n const url = prompt(this.uiStrings.notification.enterNewLinkURL, 'http://');\n if (url) {\n this.svgCanvas.makeHyperlink(url);\n }\n }\n }\n /**\n *\n * @returns {void}\n */\n linkControlPoints () {\n const linked = $id('tool_node_link').pressed;\n $id('tool_node_link').pressed = !linked;\n this.path.linkControlPoints(linked);\n }\n\n /**\n*\n* @returns {void}\n*/\n clonePathNode () {\n if (this.path.getNodePoint()) {\n this.path.clonePathNode();\n }\n }\n\n /**\n*\n* @returns {void}\n*/\n deletePathNode () {\n if (this.path.getNodePoint()) {\n this.path.deletePathNode();\n }\n }\n\n /**\n*\n* @returns {void}\n*/\n addSubPath () {\n const button = $('#tool_add_subpath');\n const sp = !button.hasClass('pressed');\n button.pressed = sp;\n // button.toggleClass('push_button_pressed tool_button');\n this.path.addSubPath(sp);\n }\n\n /**\n*\n* @returns {void}\n*/\n opencloseSubPath () {\n this.path.opencloseSubPath();\n }\n /**\n * Delete is a contextual tool that only appears in the ribbon if\n * an element has been selected.\n * @returns {void}\n */\n deleteSelected () {\n if (!isNullish(this.selectedElement) || this.multiselected) {\n this.svgCanvas.deleteSelectedElements();\n }\n }\n /**\n *\n * @returns {void}\n */\n moveToTopSelected () {\n if (!isNullish(this.selectedElement)) {\n this.svgCanvas.moveToTopSelectedElement();\n }\n }\n\n /**\n*\n* @returns {void}\n*/\n moveToBottomSelected () {\n if (!isNullish(this.selectedElement)) {\n this.svgCanvas.moveToBottomSelectedElement();\n }\n }\n /**\n *\n * @returns {false}\n */\n clickBold () {\n this.svgCanvas.setBold(!this.svgCanvas.getBold());\n this.updateContextPanel();\n return false;\n }\n\n /**\n*\n* @returns {false}\n*/\n clickItalic () {\n this.svgCanvas.setItalic(!this.svgCanvas.getItalic());\n this.updateContextPanel();\n return false;\n }\n\n /**\n *\n * @param {string} value \"start\",\"end\" or \"middle\"\n * @returns {false}\n */\n clickTextAnchor (value) {\n this.svgCanvas.setTextAnchor(value);\n this.updateContextPanel();\n return false;\n }\n\n /**\n * @type {module}\n */\n init () {\n // svg editor source dialoag added to DOM\n const newSeEditorDialog = document.createElement('se-svg-source-editor-dialog');\n newSeEditorDialog.setAttribute('id', 'se-svg-editor-dialog');\n document.body.append(newSeEditorDialog);\n // register action to top panel buttons\n $id('tool_source').addEventListener('click', this.showSourceEditor.bind(this));\n $id('tool_wireframe').addEventListener('click', this.clickWireframe.bind(this));\n $id('tool_undo').addEventListener('click', this.clickUndo.bind(this));\n $id('tool_redo').addEventListener('click', this.clickRedo.bind(this));\n $id('tool_clone').addEventListener('click', this.clickClone.bind(this));\n $id('tool_clone_multi').addEventListener('click', this.clickClone.bind(this));\n $id('tool_delete').addEventListener('click', this.deleteSelected.bind(this));\n $id('tool_delete_multi').addEventListener('click', this.deleteSelected.bind(this));\n $id('tool_move_top').addEventListener('click', this.moveToTopSelected.bind(this));\n $id('tool_move_bottom').addEventListener('click', this.moveToBottomSelected.bind(this));\n $id('tool_topath').addEventListener('click', this.convertToPath.bind(this));\n $id('tool_make_link').addEventListener('click', this.makeHyperlink.bind(this));\n $id('tool_make_link_multi').addEventListener('click', this.makeHyperlink.bind(this));\n $id('tool_reorient').addEventListener('click', this.reorientPath.bind(this));\n $id('tool_group_elements').addEventListener('click', this.clickGroup.bind(this));\n $id('tool_position').addEventListener('change', (evt) => this.clickAlignEle.bind(this)(evt));\n $id('tool_align_left').addEventListener('click', () => this.clickAlign.bind(this)('left'));\n $id('tool_align_right').addEventListener('click', () => this.clickAlign.bind(this)('right'));\n $id('tool_align_center').addEventListener('click', () => this.clickAlign.bind(this)('center'));\n $id('tool_align_top').addEventListener('click', () => this.clickAlign.bind(this)('top'));\n $id('tool_align_bottom').addEventListener('click', () => this.clickAlign.bind(this)('bottom'));\n $id('tool_align_middle').addEventListener('click', () => this.clickAlign.bind(this)('middle'));\n $id('tool_node_clone').addEventListener('click', this.clonePathNode.bind(this));\n $id('tool_node_delete').addEventListener('click', this.deletePathNode.bind(this));\n $id('tool_openclose_path').addEventListener('click', this.opencloseSubPath.bind(this));\n $id('tool_add_subpath').addEventListener('click', this.addSubPath.bind(this));\n $id('tool_node_link').addEventListener('click', this.linkControlPoints.bind(this));\n $id('angle').addEventListener('change', this.changeRotationAngle.bind(this));\n $id('blur').addEventListener('change', this.changeBlur.bind(this));\n $id('rect_rx').addEventListener('change', this.changeRectRadius.bind(this));\n $id('font_size').addEventListener('change', this.changeFontSize.bind(this));\n $id('tool_ungroup').addEventListener('click', this.clickGroup.bind(this));\n $id('tool_bold').addEventListener('click', this.clickBold.bind(this));\n $id('tool_italic').addEventListener('click', this.clickItalic.bind(this));\n $id('tool_text_anchor_start').addEventListener('click', () => this.clickTextAnchor.bind(this)('start'));\n $id('tool_text_anchor_middle').addEventListener('click', () => this.clickTextAnchor.bind(this)('middle'));\n $id('tool_text_anchor_end').addEventListener('click', () => this.clickTextAnchor.bind(this)('end'));\n $id('tool_unlink_use').addEventListener('click', this.clickGroup.bind(this));\n $id('change_image_url').addEventListener('click', this.promptImgURL.bind(this));\n // all top panel attributes\n ['elem_id', 'elem_class', 'circle_cx', 'circle_cy', 'circle_r', 'ellipse_cx',\n 'ellipse_cy', 'ellipse_rx', 'ellipse_ry', 'selected_x', 'selected_y', 'rect_width',\n 'rect_height', 'line_x1', 'line_x2', 'line_y2', 'image_width', 'image_height', 'path_node_x',\n 'path_node_y'].forEach((attrId) => $id(attrId).addEventListener('change', this.attrChanger.bind(this)));\n }\n}\n\nexport default TopPanelHandlers;\n","const rulersTemplate = document.createElement('template');\n\nrulersTemplate.innerHTML = `\n <style>\n \n /* Rulers\n——————————————————————————————————————*/\n\n#rulers > div {\n position: absolute;\n background: var(--ruler-color);\n z-index: 1;\n overflow: hidden;\n}\n\n#ruler_corner {\n top: 41px;\n left: 41px;\n width: 15px;\n height: 15px;\n}\n\n#ruler_x {\n height: 15px;\n top: 41px;\n left: 56px;\n right: 30px;\n border-bottom: 1px solid;\n border-left: 1px solid #777;\n}\n\n#ruler_y {\n width: 15px;\n top: 55px;\n left: 41px;\n bottom: 41px;\n border-right: 1px solid;\n border-top: 1px solid #777;\n}\n\n#ruler_x canvas:first-child {\n margin-left: -16px;\n}\n\n#ruler_x canvas {\n float: left;\n}\n\n#ruler_y canvas {\n margin-top: -16px;\n}\n\n#ruler_x > div,\n#ruler_y > div {\n overflow: hidden;\n}\n/*\n@media screen and (max-width: 1250px) {\n #rulers #ruler_corner,\n #rulers #ruler_x {\n top: 71px;\n }\n \n #rulers #ruler_y {\n top: 57px;\n }\n}\n*/\n </style>\n <div id=\"rulers\">\n <div id=\"ruler_corner\"></div>\n <div id=\"ruler_x\">\n <div>\n <canvas height=\"15\"></canvas>\n </div>\n </div>\n <div id=\"ruler_y\">\n <div>\n <canvas width=\"15\"></canvas>\n </div>\n </div>\n</div>\n`;\n\nexport default rulersTemplate;\n","/* globals $ */\nimport {getTypeMap} from '../common/units.js';\nimport rulersTemplate from './templates/rulersTemplate.js';\n/**\n *\n */\nclass Rulers {\n /**\n * @type {Module}\n */\n constructor (editor) {\n // Make [1,2,5] array\n this.rulerIntervals = [];\n for (let i = 0.1; i < 1e5; i *= 10) {\n this.rulerIntervals.push(i);\n this.rulerIntervals.push(2 * i);\n this.rulerIntervals.push(5 * i);\n }\n this.svgCanvas = editor.svgCanvas;\n this.editor = editor;\n // add rulers component to the DOM\n document.body.append(rulersTemplate.content.cloneNode(true));\n }\n /**\n * @type {Module}\n */\n manageScroll () {\n const rulerX = document.getElementById('ruler_x');\n const rulerY = document.getElementById('ruler_y');\n if (rulerX) rulerX.scrollLeft = this.editor.workarea[0].scrollLeft;\n if (rulerY) rulerY.scrollTop = this.editor.workarea[0].scrollTop;\n }\n\n /**\n *\n * @param {HTMLDivElement} [scanvas]\n * @param {Float} [zoom]\n * @returns {void}\n */\n updateRulers (scanvas, zoom) {\n if (!zoom) { zoom = this.svgCanvas.getZoom(); }\n if (!scanvas) { scanvas = $('#svgcanvas'); }\n\n let d, i;\n const limit = 30000;\n const contentElem = this.svgCanvas.getContentElem();\n const units = getTypeMap();\n const unit = units[this.editor.configObj.curConfig.baseUnit]; // 1 = 1px\n\n // draw x ruler then y ruler\n for (d = 0; d < 2; d++) {\n const isX = (d === 0);\n const dim = isX ? 'x' : 'y';\n const lentype = isX ? 'width' : 'height';\n const contentDim = Number(contentElem.getAttribute(dim));\n\n const $hcanvOrig = $('#ruler_' + dim + ' canvas:first');\n\n // Bit of a hack to fully clear the canvas in Safari & IE9\n const $hcanv = $hcanvOrig.clone();\n $hcanvOrig.replaceWith($hcanv);\n\n const hcanv = $hcanv[0];\n\n // Set the canvas size to the width of the container\n let rulerLen = scanvas[lentype]();\n const totalLen = rulerLen;\n hcanv.parentNode.style[lentype] = totalLen + 'px';\n let ctx = hcanv.getContext('2d');\n let ctxArr, num, ctxArrNum;\n\n ctx.fillStyle = 'rgb(200,0,0)';\n ctx.fillRect(0, 0, hcanv.width, hcanv.height);\n\n // Remove any existing canvasses\n $hcanv.siblings().remove();\n\n // Create multiple canvases when necessary (due to browser limits)\n if (rulerLen >= limit) {\n ctxArrNum = Number.parseInt(rulerLen / limit) + 1;\n ctxArr = [];\n ctxArr[0] = ctx;\n let copy;\n for (i = 1; i < ctxArrNum; i++) {\n hcanv[lentype] = limit;\n copy = hcanv.cloneNode(true);\n hcanv.parentNode.append(copy);\n ctxArr[i] = copy.getContext('2d');\n }\n\n copy[lentype] = rulerLen % limit;\n\n // set copy width to last\n rulerLen = limit;\n }\n\n hcanv[lentype] = rulerLen;\n\n const uMulti = unit * zoom;\n\n // Calculate the main number interval\n const rawM = 50 / uMulti;\n let multi = 1;\n for (i = 0; i < this.rulerIntervals.length; i++) {\n num = this.rulerIntervals[i];\n multi = num;\n if (rawM <= num) {\n break;\n }\n }\n\n const bigInt = multi * uMulti;\n\n ctx.font = '9px sans-serif';\n\n let rulerD = ((contentDim / uMulti) % multi) * uMulti;\n let labelPos = rulerD - bigInt;\n // draw big intervals\n let ctxNum = 0;\n while (rulerD < totalLen) {\n labelPos += bigInt;\n // const realD = rulerD - contentDim; // Currently unused\n\n const curD = Math.round(rulerD) + 0.5;\n if (isX) {\n ctx.moveTo(curD, 15);\n ctx.lineTo(curD, 0);\n } else {\n ctx.moveTo(15, curD);\n ctx.lineTo(0, curD);\n }\n\n num = (labelPos - contentDim) / uMulti;\n let label;\n if (multi >= 1) {\n label = Math.round(num);\n } else {\n const decs = String(multi).split('.')[1].length;\n label = num.toFixed(decs);\n }\n\n // Change 1000s to Ks\n if (label !== 0 && label !== 1000 && label % 1000 === 0) {\n label = (label / 1000) + 'K';\n }\n\n if (isX) {\n ctx.fillText(label, rulerD + 2, 8);\n } else {\n // draw label vertically\n const str = String(label).split('');\n for (i = 0; i < str.length; i++) {\n ctx.fillText(str[i], 1, (rulerD + 9) + i * 9);\n }\n }\n\n const part = bigInt / 10;\n // draw the small intervals\n for (i = 1; i < 10; i++) {\n let subD = Math.round(rulerD + part * i) + 0.5;\n if (ctxArr && subD > rulerLen) {\n ctxNum++;\n ctx.stroke();\n if (ctxNum >= ctxArrNum) {\n i = 10;\n rulerD = totalLen;\n continue;\n }\n ctx = ctxArr[ctxNum];\n rulerD -= limit;\n subD = Math.round(rulerD + part * i) + 0.5;\n }\n\n // odd lines are slighly longer\n const lineNum = (i % 2) ? 12 : 10;\n if (isX) {\n ctx.moveTo(subD, 15);\n ctx.lineTo(subD, lineNum);\n } else {\n ctx.moveTo(15, subD);\n ctx.lineTo(lineNum, subD);\n }\n }\n rulerD += bigInt;\n }\n ctx.strokeStyle = '#000';\n ctx.stroke();\n }\n }\n}\n\nexport default Rulers;\n","/* globals $ seConfirm seAlert */\nimport './touch.js';\nimport {convertUnit} from '../common/units.js';\nimport {\n hasCustomHandler, getCustomHandler, injectExtendedContextMenuItemsIntoDom\n} from './contextmenu.js';\nimport editorTemplate from './templates/editorTemplate.js';\nimport SvgCanvas from '../svgcanvas/svgcanvas.js';\nimport LayersPanel from './panels/LayersPanel.js';\nimport LeftPanelHandlers from './panels/LeftPanelHandlers.js';\nimport BottomPanelHandlers from './panels/BottomPanelHandlers.js';\nimport TopPanelHandlers from './panels/TopPanelHandlers.js';\nimport Rulers from './Rulers.js';\n\n/**\n * @fires module:svgcanvas.SvgCanvas#event:svgEditorReady\n * @returns {void}\n */\nconst readySignal = () => {\n // let the opener know SVG Edit is ready (now that config is set up)\n const w = window.opener || window.parent;\n if (w) {\n try {\n /**\n * Triggered on a containing `document` (of `window.opener`\n * or `window.parent`) when the editor is loaded.\n * @event module:SVGEditor#event:svgEditorReadyEvent\n * @type {Event}\n * @property {true} bubbles\n * @property {true} cancelable\n */\n /**\n * @name module:SVGthis.svgEditorReadyEvent\n * @type {module:SVGEditor#event:svgEditorReadyEvent}\n */\n const svgEditorReadyEvent = new w.CustomEvent('svgEditorReady', {\n bubbles: true,\n cancelable: true\n });\n w.document.documentElement.dispatchEvent(svgEditorReadyEvent);\n } catch (e) {/* empty fn */}\n }\n};\n\nconst {$id} = SvgCanvas;\n\n/**\n *\n */\nclass EditorStartup {\n /**\n *\n */\n constructor () {\n this.extensionsAdded = false;\n this.messageQueue = [];\n }\n /**\n * Auto-run after a Promise microtask.\n * @function module:SVGthis.init\n * @returns {void}\n */\n async init () {\n // allow to prepare the dom without display\n $id('svg_editor').style.visibility = 'hidden';\n try {\n // add editor components to the DOM\n document.body.append(editorTemplate.content.cloneNode(true));\n // Image props dialog added to DOM\n const newSeImgPropDialog = document.createElement('se-img-prop-dialog');\n newSeImgPropDialog.setAttribute('id', 'se-img-prop');\n document.body.append(newSeImgPropDialog);\n // editor prefences dialoag added to DOM\n const newSeEditPrefsDialog = document.createElement('se-edit-prefs-dialog');\n newSeEditPrefsDialog.setAttribute('id', 'se-edit-prefs');\n document.body.append(newSeEditPrefsDialog);\n // canvas menu added to DOM\n const dialogBox = document.createElement('se-cmenu_canvas-dialog');\n dialogBox.setAttribute('id', 'se-cmenu_canvas');\n document.body.append(dialogBox);\n // alertDialog added to DOM\n const alertBox = document.createElement('se-alert-dialog');\n alertBox.setAttribute('id', 'se-alert-dialog');\n document.body.append(alertBox);\n // promptDialog added to DOM\n const promptBox = document.createElement('se-prompt-dialog');\n promptBox.setAttribute('id', 'se-prompt-dialog');\n document.body.append(promptBox);\n // Export dialog added to DOM\n const exportDialog = document.createElement('se-export-dialog');\n exportDialog.setAttribute('id', 'se-export-dialog');\n document.body.append(exportDialog);\n } catch (err) {\n console.error(err);\n }\n\n if ('localStorage' in window) { // && onWeb removed so Webkit works locally\n this.storage = window.localStorage;\n }\n\n this.configObj.load();\n\n /**\n * @name module:SVGthis.canvas\n * @type {module:svgcanvas.SvgCanvas}\n */\n this.svgCanvas = new SvgCanvas(\n $id('svgcanvas'),\n this.configObj.curConfig\n );\n\n this.leftPanelHandlers = new LeftPanelHandlers(this);\n this.bottomPanelHandlers = new BottomPanelHandlers(this);\n this.topPanelHandlers = new TopPanelHandlers(this);\n this.layersPanel = new LayersPanel(this);\n\n const {undoMgr} = this.svgCanvas;\n this.workarea = $('#workarea');\n this.canvMenu = document.getElementById('se-cmenu_canvas');\n this.exportWindow = null;\n this.defaultImageURL = this.configObj.curConfig.imgPath + 'logo.svg';\n const zoomInIcon = 'crosshair';\n const zoomOutIcon = 'crosshair';\n this.uiContext = 'toolbars';\n\n // For external openers\n readySignal();\n\n this.rulers = new Rulers(this);\n\n this.layersPanel.populateLayers();\n this.selectedElement = null;\n this.multiselected = false;\n\n $('#cur_context_panel').delegate('a', 'click', (evt) => {\n const link = $(evt.currentTarget);\n if (link.attr('data-root')) {\n this.svgCanvas.leaveContext();\n } else {\n this.svgCanvas.setContext(link.text());\n }\n this.svgCanvas.clearSelection();\n return false;\n });\n // bind the selected event to our function that handles updates to the UI\n this.svgCanvas.bind('selected', this.selectedChanged.bind(this));\n this.svgCanvas.bind('transition', this.elementTransition.bind(this));\n this.svgCanvas.bind('changed', this.elementChanged.bind(this));\n this.svgCanvas.bind('exported', this.exportHandler.bind(this));\n this.svgCanvas.bind('exportedPDF', function (win, data) {\n if (!data.output) { // Ignore Chrome\n return;\n }\n const {exportWindowName} = data;\n if (exportWindowName) {\n this.exportWindow = window.open('', this.exportWindowName); // A hack to get the window via JSON-able name without opening a new one\n }\n if (!this.exportWindow || this.exportWindow.closed) {\n seAlert(this.uiStrings.notification.popupWindowBlocked);\n return;\n }\n this.exportWindow.location.href = data.output;\n }.bind(this));\n this.svgCanvas.bind('zoomed', this.zoomChanged.bind(this));\n this.svgCanvas.bind('zoomDone', this.zoomDone.bind(this));\n this.svgCanvas.bind(\n 'updateCanvas',\n /**\n * @param {external:Window} win\n * @param {PlainObject} centerInfo\n * @param {false} centerInfo.center\n * @param {module:math.XYObject} centerInfo.newCtr\n * @listens module:svgcanvas.SvgCanvas#event:updateCanvas\n * @returns {void}\n */\n function (win, {center, newCtr}) {\n this.updateCanvas(center, newCtr);\n }.bind(this)\n );\n this.svgCanvas.bind('contextset', this.contextChanged.bind(this));\n this.svgCanvas.bind('extension_added', this.extAdded.bind(this));\n this.svgCanvas.textActions.setInputElem($('#text')[0]);\n\n this.setBackground(this.configObj.pref('bkgd_color'), this.configObj.pref('bkgd_url'));\n\n // update resolution option with actual resolution\n const res = this.svgCanvas.getResolution();\n if (this.configObj.curConfig.baseUnit !== 'px') {\n res.w = convertUnit(res.w) + this.configObj.curConfig.baseUnit;\n res.h = convertUnit(res.h) + this.configObj.curConfig.baseUnit;\n }\n $('#se-img-prop').attr('dialog', 'close');\n $('#se-img-prop').attr('title', this.svgCanvas.getDocumentTitle());\n $('#se-img-prop').attr('width', res.w);\n $('#se-img-prop').attr('height', res.h);\n $('#se-img-prop').attr('save', this.configObj.pref('img_save'));\n\n // Lose focus for select elements when changed (Allows keyboard shortcuts to work better)\n $('select').change((evt) => { $(evt.currentTarget).blur(); });\n\n // fired when user wants to move elements to another layer\n let promptMoveLayerOnce = false;\n $('#selLayerNames').change((evt) => {\n const destLayer = evt.currentTarget.options[evt.currentTarget.selectedIndex].value;\n const confirmStr = this.uiStrings.notification.Qmovethis.elemsToLayer.replace('%s', destLayer);\n /**\n * @param {boolean} ok\n * @returns {void}\n */\n const moveToLayer = (ok) => {\n if (!ok) { return; }\n promptMoveLayerOnce = true;\n this.svgCanvas.moveSelectedToLayer(destLayer);\n this.svgCanvas.clearSelection();\n this.layersPanel.populateLayers();\n };\n if (destLayer) {\n if (promptMoveLayerOnce) {\n moveToLayer(true);\n } else {\n const ok = seConfirm(confirmStr);\n if (!ok) {\n return;\n }\n moveToLayer(true);\n }\n }\n });\n\n $('#tool_font_family').change((evt) => {\n this.svgCanvas.setFontFamily(evt.originalEvent.detail.value);\n });\n\n $('#seg_type').change((evt) => {\n this.svgCanvas.setSegType($(evt.currentTarget).val());\n });\n\n $('#text').bind('keyup input', (evt) => {\n this.svgCanvas.setTextContent(evt.currentTarget.value);\n });\n\n $('#image_url').change((evt) => {\n this.setImageURL(evt.currentTarget.value);\n });\n\n $('#link_url').change((evt) => {\n if (evt.currentTarget.value.length) {\n this.svgCanvas.setLinkURL(evt.currentTarget.value);\n } else {\n this.svgCanvas.removeHyperlink();\n }\n });\n\n $('#g_title').change((evt) => {\n this.svgCanvas.setGroupTitle(evt.currentTarget.value);\n });\n\n const wArea = this.workarea[0];\n\n let lastX = null, lastY = null,\n panning = false, keypan = false;\n\n $('#svgcanvas').bind('mousemove mouseup', function (evt) {\n if (panning === false) { return true; }\n\n wArea.scrollLeft -= (evt.clientX - lastX);\n wArea.scrollTop -= (evt.clientY - lastY);\n\n lastX = evt.clientX;\n lastY = evt.clientY;\n\n if (evt.type === 'mouseup') { panning = false; }\n return false;\n }).mousedown(function (evt) {\n if (evt.button === 1 || keypan === true) {\n panning = true;\n lastX = evt.clientX;\n lastY = evt.clientY;\n return false;\n }\n return true;\n });\n\n $(window).mouseup(() => {\n panning = false;\n });\n\n document.addEventListener('keydown', (e) => {\n if (e.target.nodeName !== 'BODY') return;\n if(e.code.toLowerCase() === 'space'){\n this.svgCanvas.spaceKey = keypan = true;\n e.preventDefault(); \n } else if((e.key.toLowerCase() === 'shift') && (this.svgCanvas.getMode() === 'zoom')){\n this.workarea.css('cursor', zoomOutIcon);\n e.preventDefault(); \n } else {\n return;\n }\n });\n\n document.addEventListener('keyup', (e) => {\n if (e.target.nodeName !== 'BODY') return;\n if(e.code.toLowerCase() === 'space'){\n this.svgCanvas.spaceKey = keypan = false;\n e.preventDefault(); \n } else if((e.key.toLowerCase() === 'shift') && (this.svgCanvas.getMode() === 'zoom')){\n this.workarea.css('cursor', zoomInIcon);\n e.preventDefault(); \n } else {\n return;\n }\n });\n\n\n /**\n * @function module:SVGthis.setPanning\n * @param {boolean} active\n * @returns {void}\n */\n this.setPanning = (active) => {\n this.svgCanvas.spaceKey = keypan = active;\n };\n\n const button = $('#main_icon');\n const overlay = $('#main_icon span');\n const list = $('#main_menu');\n\n let onButton = false;\n let height = 0;\n let jsHover = true;\n let setClick = false;\n\n $(window).mouseup(function (evt) {\n if (!onButton) {\n button.removeClass('buttondown');\n // do not hide if it was the file input as that input needs to be visible\n // for its change event to fire\n if (evt.target.tagName !== 'INPUT') {\n list.fadeOut(200);\n } else if (!setClick) {\n setClick = true;\n $(evt.target).click(() => {\n list.css('margin-left', '-9999px').show();\n });\n }\n }\n onButton = false;\n }).mousedown(function (evt) {\n // $('.contextMenu').hide();\n const islib = $(evt.target).closest('.contextMenu').length;\n if (!islib) {\n $('.contextMenu').fadeOut(250);\n }\n });\n\n overlay.bind('mousedown', () => {\n if (!button.hasClass('buttondown')) {\n // Margin must be reset in case it was changed before;\n list.css('margin-left', 0).show();\n if (!height) {\n height = list.height();\n }\n // Using custom animation as slideDown has annoying 'bounce effect'\n list.css('height', 0).animate({\n height\n }, 200);\n onButton = true;\n } else {\n list.fadeOut(200);\n }\n button.toggleClass('buttondown buttonup');\n }).hover(() => {\n onButton = true;\n }).mouseout(() => {\n onButton = false;\n });\n\n const listItems = $('#main_menu li');\n\n // Check if JS method of hovering needs to be used (Webkit bug)\n listItems.mouseover(function () {\n jsHover = ($(this).css('background-color') === 'rgba(0, 0, 0, 0)');\n\n listItems.unbind('mouseover');\n if (jsHover) {\n listItems.mouseover(() => {\n this.style.backgroundColor = '#FFC';\n }).mouseout((evt) => {\n evt.currentTarget.style.backgroundColor = 'transparent';\n return true;\n });\n }\n });\n // Unfocus text input when this.workarea is mousedowned.\n let inp;\n /**\n *\n * @returns {void}\n */\n const unfocus = () => {\n $(inp).blur();\n };\n\n $('#svg_editor').find('button, select, input:not(#text)').focus(() => {\n inp = this;\n this.uiContext = 'toolbars';\n this.workarea.mousedown(unfocus);\n }).blur(() => {\n this.uiContext = 'canvas';\n this.workarea.unbind('mousedown', unfocus);\n // Go back to selecting text if in textedit mode\n if (this.svgCanvas.getMode() === 'textedit') {\n $('#text').focus();\n }\n });\n const winWh = {width: $(window).width(), height: $(window).height()};\n\n window.addEventListener('resize', (evt) => {\n Object.entries(winWh).forEach(([type, val]) => {\n const curval = $(window)[type]();\n this.workarea[0]['scroll' + (type === 'width' ? 'Left' : 'Top')] -= (curval - val) / 2;\n winWh[type] = curval;\n });\n });\n\n this.workarea.scroll(() => {\n // TODO: jQuery's scrollLeft/Top() wouldn't require a null check\n this.rulers.manageScroll();\n });\n\n $('#url_notice').click(() => {\n seAlert(this.title);\n });\n\n $id('stroke_width').value = this.configObj.curConfig.initStroke.width;\n $id('opacity').value = this.configObj.curConfig.initOpacity * 100;\n\n $('.push_button').mousedown(() => {\n if (!$(this).hasClass('disabled')) {\n $(this).addClass('push_button_pressed').removeClass('push_button');\n }\n }).mouseout(() => {\n $(this).removeClass('push_button_pressed').addClass('push_button');\n }).mouseup(() => {\n $(this).removeClass('push_button_pressed').addClass('push_button');\n });\n\n this.layersPanel.populateLayers();\n\n const centerCanvas = () => {\n // this centers the canvas vertically in the this.workarea (horizontal handled in CSS)\n this.workarea.css('line-height', this.workarea.height() + 'px');\n };\n\n $(window).bind('load resize', centerCanvas);\n\n // Prevent browser from erroneously repopulating fields\n $('input,select').attr('autocomplete', 'off');\n\n /**\n * Associate all button actions as well as non-button keyboard shortcuts.\n */\n this.leftPanelHandlers.init();\n this.bottomPanelHandlers.init();\n this.topPanelHandlers.init();\n this.layersPanel.init();\n\n $id('tool_clear').addEventListener('click', this.clickClear.bind(this));\n $id('tool_open').addEventListener('click', (e) => {\n e.preventDefault();\n this.clickOpen();\n window.dispatchEvent(new CustomEvent('openImage'));\n });\n $id('tool_import').addEventListener('click', (e) => {\n this.clickImport();\n window.dispatchEvent(new CustomEvent('importImages'));\n });\n $id('tool_save').addEventListener('click', function (e) {\n const $editorDialog = document.getElementById('se-svg-editor-dialog');\n const editingsource = $editorDialog.getAttribute('dialog') === 'open';\n if (editingsource) {\n this.saveSourceEditor();\n } else {\n this.clickSave();\n }\n }.bind(this));\n // this.clickExport.bind(this)\n $id('tool_export').addEventListener('click', function (e) {\n document.getElementById('se-export-dialog').setAttribute('dialog', 'open');\n });\n $id('se-export-dialog').addEventListener('change', this.clickExport.bind(this));\n $id('tool_docprops').addEventListener('click', this.showDocProperties.bind(this));\n $id('tool_editor_prefs').addEventListener('click', this.showPreferences.bind(this));\n $id('tool_editor_homepage').addEventListener('click', this.openHomePage.bind(this));\n $id('se-img-prop').addEventListener('change', function (e) {\n if (e.detail.dialog === 'closed') {\n this.hideDocProperties();\n } else {\n this.saveDocProperties(e);\n }\n }.bind(this));\n $id('se-edit-prefs').addEventListener('change', function (e) {\n if (e.detail.dialog === 'closed') {\n this.hidePreferences();\n } else {\n this.savePreferences(e);\n }\n }.bind(this));\n $id('se-svg-editor-dialog').addEventListener('change', function (e) {\n if (e?.detail?.copy === 'click') {\n this.cancelOverlays(e);\n } else if (e?.detail?.dialog === 'closed') {\n this.hideSourceEditor();\n } else {\n this.saveSourceEditor(e);\n }\n }.bind(this));\n $id('se-cmenu_canvas').addEventListener('change', function (e) {\n const action = e?.detail?.trigger;\n switch (action) {\n case 'delete':\n this.svgCanvas.deleteSelectedElements();\n break;\n case 'cut':\n this.cutSelected();\n break;\n case 'copy':\n this.copySelected();\n break;\n case 'paste':\n this.svgCanvas.pasteElements();\n break;\n case 'paste_in_place':\n this.svgCanvas.pasteElements('in_place');\n break;\n case 'group':\n case 'group_elements':\n this.svgCanvas.groupSelectedElements();\n break;\n case 'ungroup':\n this.svgCanvas.ungroupSelectedElement();\n break;\n case 'move_front':\n this.svgCanvas.moveToTopSelectedElement();\n break;\n case 'move_up':\n this.moveUpDownSelected('Up');\n break;\n case 'move_down':\n this.moveUpDownSelected('Down');\n break;\n case 'move_back':\n this.svgCanvas.moveToBottomSelected();\n break;\n default:\n if (hasCustomHandler(action)) {\n getCustomHandler(action).call();\n }\n break;\n }\n }.bind(this));\n\n // Select given tool\n this.ready(function () {\n const preTool = $id(`tool_${this.configObj.curConfig.initTool}`);\n const regTool = $id(this.configObj.curConfig.initTool);\n const selectTool = $id('tool_select');\n const $editDialog = $id('se-edit-prefs');\n\n if (preTool) {\n preTool.click();\n } else if (regTool) {\n regTool.click();\n } else {\n selectTool.click();\n }\n\n if (this.configObj.curConfig.wireframe) {\n $id('tool_wireframe').click();\n }\n\n $('#rulers').toggle(Boolean(this.configObj.curConfig.showRulers));\n\n if (this.configObj.curConfig.showRulers) {\n $editDialog.setAttribute('showrulers', true);\n }\n\n if (this.configObj.curConfig.baseUnit) {\n $editDialog.setAttribute('baseunit', this.configObj.curConfig.baseUnit);\n }\n\n if (this.configObj.curConfig.gridSnapping) {\n $editDialog.setAttribute('gridsnappingon', true);\n }\n\n if (this.configObj.curConfig.snappingStep) {\n $editDialog.setAttribute('gridsnappingstep', this.configObj.curConfig.snappingStep);\n }\n\n if (this.configObj.curConfig.gridColor) {\n $editDialog.setAttribute('gridcolor', this.configObj.curConfig.gridColor);\n }\n }.bind(this));\n\n // zoom\n $id('zoom').value = (this.svgCanvas.getZoom() * 100).toFixed(1);\n this.canvMenu.setAttribute('disableallmenu', true);\n this.canvMenu.setAttribute('enablemenuitems', '#delete,#cut,#copy');\n\n this.enableOrDisableClipboard();\n\n window.addEventListener('storage', function (e) {\n if (e.key !== 'svgedit_clipboard') { return; }\n\n this.enableOrDisableClipboard();\n }.bind(this));\n\n window.addEventListener('beforeunload', function (e) {\n // Suppress warning if page is empty\n if (undoMgr.getUndoStackSize() === 0) {\n this.showSaveWarning = false;\n }\n\n // showSaveWarning is set to 'false' when the page is saved.\n if (!this.configObj.curConfig.no_save_warning && this.showSaveWarning) {\n // Browser already asks question about closing the page\n e.returnValue = this.uiStrings.notification.unsavedChanges; // Firefox needs this when beforeunload set by addEventListener (even though message is not used)\n return this.uiStrings.notification.unsavedChanges;\n }\n return true;\n }.bind(this));\n\n // Use HTML5 File API: http://www.w3.org/TR/FileAPI/\n // if browser has HTML5 File API support, then we will show the open menu item\n // and provide a file input to click. When that change event fires, it will\n // get the text contents of the file and send it to the canvas\n if (window.FileReader) {\n /**\n * @param {Event} e\n * @returns {void}\n */\n const editorObj = this;\n const importImage = function (e) {\n document.getElementById('se-prompt-dialog').title = editorObj.uiStrings.notification.loadingImage;\n e.stopPropagation();\n e.preventDefault();\n $('#main_menu').hide();\n const file = (e.type === 'drop') ? e.dataTransfer.files[0] : this.files[0];\n if (!file) {\n document.getElementById('se-prompt-dialog').setAttribute('close', true);\n return;\n }\n\n if (!file.type.includes('image')) {\n return;\n }\n // Detected an image\n // svg handling\n let reader;\n if (file.type.includes('svg')) {\n reader = new FileReader();\n reader.onloadend = function (ev) {\n const newElement = editorObj.svgCanvas.importSvgString(ev.target.result, true);\n editorObj.svgCanvas.ungroupSelectedElement();\n editorObj.svgCanvas.ungroupSelectedElement();\n editorObj.svgCanvas.groupSelectedElements();\n editorObj.svgCanvas.alignSelectedElements('m', 'page');\n editorObj.svgCanvas.alignSelectedElements('c', 'page');\n // highlight imported element, otherwise we get strange empty selectbox\n editorObj.svgCanvas.selectOnly([newElement]);\n document.getElementById('se-prompt-dialog').setAttribute('close', true);\n };\n reader.readAsText(file);\n } else {\n // bitmap handling\n reader = new FileReader();\n reader.onloadend = function ({target: {result}}) {\n /**\n * Insert the new image until we know its dimensions.\n * @param {Float} imageWidth\n * @param {Float} imageHeight\n * @returns {void}\n */\n const insertNewImage = function (imageWidth, imageHeight) {\n const newImage = editorObj.svgCanvas.addSVGElementFromJson({\n element: 'image',\n attr: {\n x: 0,\n y: 0,\n width: imageWidth,\n height: imageHeight,\n id: editorObj.svgCanvas.getNextId(),\n style: 'pointer-events:inherit'\n }\n });\n editorObj.svgCanvas.setHref(newImage, result);\n editorObj.svgCanvas.selectOnly([newImage]);\n editorObj.svgCanvas.alignSelectedElements('m', 'page');\n editorObj.svgCanvas.alignSelectedElements('c', 'page');\n editorObj.topPanelHandlers.updateContextPanel();\n document.getElementById('se-prompt-dialog').setAttribute('close', true);\n };\n // create dummy img so we know the default dimensions\n let imgWidth = 100;\n let imgHeight = 100;\n const img = new Image();\n img.style.opacity = 0;\n img.addEventListener('load', () => {\n imgWidth = img.offsetWidth || img.naturalWidth || img.width;\n imgHeight = img.offsetHeight || img.naturalHeight || img.height;\n insertNewImage(imgWidth, imgHeight);\n });\n img.src = result;\n };\n reader.readAsDataURL(file);\n }\n };\n\n this.workarea[0].addEventListener('dragenter', this.onDragEnter);\n this.workarea[0].addEventListener('dragover', this.onDragOver);\n this.workarea[0].addEventListener('dragleave', this.onDragLeave);\n this.workarea[0].addEventListener('drop', importImage);\n const imgImport = $('<input type=\"file\">').change(importImage);\n $(window).on('importImages', () => imgImport.click());\n }\n\n this.updateCanvas(true);\n // Load extensions\n this.extAndLocaleFunc();\n // Defer injection to wait out initial menu processing. This probably goes\n // away once all context menu behavior is brought to context menu.\n this.ready(() => {\n injectExtendedContextMenuItemsIntoDom();\n });\n // run callbacks stored by this.ready\n await this.runCallbacks();\n window.addEventListener('message', this.messageListener.bind(this));\n }\n /**\n * @fires module:svgcanvas.SvgCanvas#event:ext_addLangData\n * @fires module:svgcanvas.SvgCanvas#event:ext_langReady\n * @fires module:svgcanvas.SvgCanvas#event:ext_langChanged\n * @fires module:svgcanvas.SvgCanvas#event:extensions_added\n * @returns {Promise<module:locale.LangAndData>} Resolves to result of {@link module:locale.readLang}\n */\n async extAndLocaleFunc () {\n const {langParam, langData} = await this.putLocale(this.configObj.pref('lang'), this.goodLangs);\n await this.setLang(langParam, langData);\n\n $id('svg_editor').style.visibility = 'visible';\n\n try {\n // load standard extensions\n await Promise.all(\n this.configObj.curConfig.extensions.map(async (extname) => {\n /**\n * @tutorial ExtensionDocs\n * @typedef {PlainObject} module:SVGthis.ExtensionObject\n * @property {string} [name] Name of the extension. Used internally; no need for i18n. Defaults to extension name without beginning \"ext-\" or ending \".js\".\n * @property {module:svgcanvas.ExtensionInitCallback} [init]\n */\n try {\n /**\n * @type {module:SVGthis.ExtensionObject}\n */\n const imported = await import(`./extensions/${encodeURIComponent(extname)}/${encodeURIComponent(extname)}.js`);\n const {name = extname, init: initfn} = imported.default;\n return this.addExtension(name, (initfn && initfn.bind(this)), {$, langParam});\n } catch (err) {\n // Todo: Add config to alert any errors\n console.error('Extension failed to load: ' + extname + '; ', err);\n return undefined;\n }\n })\n );\n // load user extensions (given as pathNames)\n await Promise.all(\n this.configObj.curConfig.userExtensions.map(async (extPathName) => {\n /**\n * @tutorial ExtensionDocs\n * @typedef {PlainObject} module:SVGthis.ExtensionObject\n * @property {string} [name] Name of the extension. Used internally; no need for i18n. Defaults to extension name without beginning \"ext-\" or ending \".js\".\n * @property {module:svgcanvas.ExtensionInitCallback} [init]\n */\n try {\n /**\n * @type {module:SVGthis.ExtensionObject}\n */\n const imported = await import(encodeURI(extPathName));\n const {name, init: initfn} = imported.default;\n return this.addExtension(name, (initfn && initfn.bind(this)), {$, langParam});\n } catch (err) {\n // Todo: Add config to alert any errors\n console.error('Extension failed to load: ' + extPathName + '; ', err);\n return undefined;\n }\n })\n );\n this.svgCanvas.bind(\n 'extensions_added',\n /**\n * @param {external:Window} win\n * @param {module:svgcanvas.SvgCanvas#event:extensions_added} data\n * @listens module:SvgCanvas#event:extensions_added\n * @returns {void}\n */\n (win, data) => {\n this.extensionsAdded = true;\n this.setAll();\n\n if (this.storagePromptState === 'ignore') {\n this.updateCanvas(true);\n }\n\n this.messageQueue.forEach(\n /**\n * @param {module:svgcanvas.SvgCanvas#event:message} messageObj\n * @fires module:svgcanvas.SvgCanvas#event:message\n * @returns {void}\n */\n (messageObj) => {\n this.svgCanvas.call('message', messageObj);\n }\n );\n }\n );\n this.svgCanvas.call('extensions_added');\n } catch (err) {\n // Todo: Report errors through the UI\n console.log(err);\n }\n }\n\n /**\n * @param {PlainObject} info\n * @param {any} info.data\n * @param {string} info.origin\n * @fires module:svgcanvas.SvgCanvas#event:message\n * @returns {void}\n */\n messageListener ({data, origin}) {\n // console.log('data, origin, extensionsAdded', data, origin, extensionsAdded);\n const messageObj = {data, origin};\n if (!this.extensionsAdded) {\n this.messageQueue.push(messageObj);\n } else {\n // Extensions can handle messages at this stage with their own\n // canvas `message` listeners\n this.svgCanvas.call('message', messageObj);\n }\n }\n}\n\nexport default EditorStartup;\n","/* globals jQuery seConfirm seAlert */\n/**\n* The main module for the visual SVG this.\n*\n* @license MIT\n*\n* @copyright 2010 Alexis Deveria\n* 2010 Pavol Rusnak\n* 2010 Jeff Schiller\n* 2010 Narendra Sisodiya\n* 2014 Brett Zamir\n* 2020 OptimistikSAS\n* @module SVGEditor\n* @borrows module:locale.putLocale as putLocale\n* @borrows module:locale.readLang as readLang\n* @borrows module:locale.setStrings as setStrings\n*/\n\nimport './touch.js';\nimport {isChrome, isMac, isTouch} from '../common/browser.js';\nimport {convertUnit, isValidUnit} from '../common/units.js';\n\nimport SvgCanvas from '../svgcanvas/svgcanvas.js';\nimport ConfigObj from './ConfigObj.js';\n\nimport {\n readLang, putLocale,\n setStrings\n} from './locale.js';\n\nimport EditorStartup from './EditorStartup.js';\n\nconst {$id, $qa, isNullish, encode64, decode64, blankPageObjectURL} = SvgCanvas;\n\n// JFH hotkey is used for text input.\nconst homePage = 'https://github.com/SVG-Edit/svgedit';\n/**\n *\n */\nclass Editor extends EditorStartup {\n /**\n *\n */\n constructor () {\n super();\n /**\n * @type {Float}\n */\n this.tool_scale = 1;\n /**\n * @type {Integer}\n */\n this.exportWindowCt = 0;\n /**\n * @type {boolean}\n */\n this.langChanged = false;\n /**\n * @type {boolean}\n */\n this.showSaveWarning = false;\n /**\n * Will be set to a boolean by `ext-storage.js`\n * @type {\"ignore\"|\"waiting\"|\"closed\"}\n */\n this.storagePromptState = 'ignore';\n /*\n * EDITOR PUBLIC METHODS\n */\n this.putLocale = putLocale;\n this.readLang = readLang;\n this.setStrings = setStrings;\n /**\n * LOCALE.\n * @name module:SVGthis.uiStrings\n * @type {PlainObject}\n */\n this.flyoutFuncs = {};\n this.uiStrings = {};\n this.svgCanvas = null;\n this.isReady = false;\n this.customExportImage = false;\n this.customExportPDF = false;\n this.configObj = new ConfigObj(this);\n this.configObj.pref = this.configObj.pref.bind(this.configObj);\n this.setConfig = this.configObj.setConfig.bind(this.configObj);\n this.callbacks = [];\n this.curContext = null;\n this.exportWindowName = null;\n this.docprops = false;\n this.configObj.preferences = false;\n this.canvMenu = null;\n // eslint-disable-next-line max-len\n this.goodLangs = ['ar', 'cs', 'de', 'en', 'es', 'fa', 'fr', 'fy', 'hi', 'it', 'ja', 'nl', 'pl', 'pt-BR', 'ro', 'ru', 'sk', 'sl', 'zh-CN', 'zh-TW'];\n const modKey = (isMac() ? 'meta+' : 'ctrl+');\n const curObj = this;\n this.toolButtons = [\n // Shortcuts not associated with buttons\n {key: 'ctrl+arrowleft', fn () { curObj.rotateSelected(0, 1);}},\n {key: 'ctrl+arrowright', fn () { curObj.rotateSelected(1, 1); }},\n {key: 'ctrl+shift+arrowleft', fn () { curObj.rotateSelected(0, 5); }},\n {key: 'ctrl+shift+arrowright', fn () { curObj.rotateSelected(1, 5); }},\n {key: 'shift+o', fn () { curObj.svgCanvas.cycleElement(0); }},\n {key: 'shift+p', fn () { curObj.svgCanvas.cycleElement(1); }},\n {key: 'tab', fn () { curObj.svgCanvas.cycleElement(0); }},\n {key: 'shift+tab', fn () { curObj.svgCanvas.cycleElement(1); }},\n {key: [modKey + 'arrowup', true], fn () { curObj.zoomImage(2); }},\n {key: [modKey + 'arrowdown', true], fn () { curObj.zoomImage(0.5); }},\n {key: [modKey + ']', true], fn () { curObj.moveUpDownSelected('Up'); }},\n {key: [modKey + '[', true], fn () { curObj.moveUpDownSelected('Down'); }},\n {key: ['arrowup', true], fn () { curObj.moveSelected(0, -1); }},\n {key: ['arrowdown', true], fn () { curObj.moveSelected(0, 1); }},\n {key: ['arrowleft', true], fn () { curObj.moveSelected(-1, 0); }},\n {key: ['arrowright', true], fn () { curObj.moveSelected(1, 0); }},\n {key: 'shift+arrowup', fn () { curObj.moveSelected(0, -10); }},\n {key: 'shift+arrowdown', fn () { curObj.moveSelected(0, 10); }},\n {key: 'shift+arrowleft', fn () { curObj.moveSelected(-10, 0); }},\n {key: 'shift+arrowright', fn () { curObj.moveSelected(10, 0); }},\n {key: ['alt+arrowup', true], fn () { curObj.svgCanvas.cloneSelectedElements(0, -1); }},\n {key: ['alt+arrowdown', true], fn () { curObj.svgCanvas.cloneSelectedElements(0, 1); }},\n {key: ['alt+arrowleft', true], fn () { curObj.svgCanvas.cloneSelectedElements(-1, 0); }},\n {key: ['alt+arrowright', true], fn () { curObj.svgCanvas.cloneSelectedElements(1, 0); }},\n {key: ['alt+shift+arrowup', true], fn () { curObj.svgCanvas.cloneSelectedElements(0, -10); }},\n {key: ['alt+shift+arrowdown', true], fn () { curObj.svgCanvas.cloneSelectedElements(0, 10); }},\n {key: ['alt+shift+arrowleft', true], fn () { curObj.svgCanvas.cloneSelectedElements(-10, 0); }},\n {key: ['alt+shift+arrowright', true], fn () { curObj.svgCanvas.cloneSelectedElements(10, 0); }},\n {key: 'a', fn () { curObj.svgCanvas.selectAllInCurrentLayer(); }},\n {key: modKey + 'a', fn () { curObj.svgCanvas.selectAllInCurrentLayer(); }},\n {key: modKey + 'x', fn () { curObj.cutSelected(); }},\n {key: modKey + 'c', fn () { curObj.copySelected(); }},\n {key: modKey + 'v', fn () { curObj.pasteInCenter(); }}\n ];\n }\n /**\n *\n * @param {string} str SVG string\n * @param {PlainObject} [opts={}]\n * @param {boolean} [opts.noAlert]\n * @throws {Error} Upon failure to load SVG\n * @returns {void}\n */\n loadSvgString (str, {noAlert} = {}) {\n const success = this.svgCanvas.setSvgString(str) !== false;\n if (success) return;\n if (!noAlert) seAlert(this.uiStrings.notification.errorLoadingSVG);\n throw new Error('Error loading SVG');\n }\n\n /**\n * All methods are optional.\n * @interface module:SVGthis.CustomHandler\n * @type {PlainObject}\n */\n /**\n * Its responsibilities are:\n * - invoke a file chooser dialog in 'open' mode\n * - let user pick a SVG file\n * - calls [svgCanvas.setSvgString()]{@link module:svgcanvas.SvgCanvas#setSvgString} with the string contents of that file.\n * Not passed any parameters.\n * @function module:SVGthis.CustomHandler#open\n * @returns {void}\n */\n /**\n * Its responsibilities are:\n * - accept the string contents of the current document\n * - invoke a file chooser dialog in 'save' mode\n * - save the file to location chosen by the user.\n * @function module:SVGthis.CustomHandler#save\n * @param {external:Window} win\n * @param {module:svgcanvas.SvgCanvas#event:saved} svgStr A string of the SVG\n * @listens module:svgcanvas.SvgCanvas#event:saved\n * @returns {void}\n */\n /**\n * Its responsibilities (with regard to the object it is supplied in its 2nd argument) are:\n * - inform user of any issues supplied via the \"issues\" property\n * - convert the \"svg\" property SVG string into an image for export;\n * utilize the properties \"type\" (currently 'PNG', 'JPEG', 'BMP',\n * 'WEBP', 'PDF'), \"mimeType\", and \"quality\" (for 'JPEG' and 'WEBP'\n * types) to determine the proper output.\n * @function module:SVGthis.CustomHandler#exportImage\n * @param {external:Window} win\n * @param {module:svgcanvas.SvgCanvas#event:exported} data\n * @listens module:svgcanvas.SvgCanvas#event:exported\n * @returns {void}\n */\n /**\n * @function module:SVGthis.CustomHandler#exportPDF\n * @param {external:Window} win\n * @param {module:svgcanvas.SvgCanvas#event:exportedPDF} data\n * @listens module:svgcanvas.SvgCanvas#event:exportedPDF\n * @returns {void}\n */\n\n /**\n * Allows one to override default SVGEdit `open`, `save`, and\n * `export` editor behaviors.\n * @function module:SVGthis.setCustomHandlers\n * @param {module:SVGthis.CustomHandler} opts Extension mechanisms may call `setCustomHandlers` with three functions: `opts.open`, `opts.save`, and `opts.exportImage`\n * @returns {Promise<void>}\n */\n\n /**\n * @param {PlainObject} opts\n * @returns {Promise<PlainObject>}\n */\n setCustomHandlers (opts) {\n return this.ready(() => {\n if (opts.open) {\n this.svgCanvas.open = opts.open.bind(this);\n }\n if (opts.save) {\n this.showSaveWarning = false;\n this.svgCanvas.bind('saved', opts.save.bind(this));\n }\n if (opts.exportImage) {\n this.customExportImage = opts.exportImage.bind(this);\n this.svgCanvas.bind('exported', this.customExportImage); // canvg and our RGBColor will be available to the method\n }\n if (opts.exportPDF) {\n this.customExportPDF = opts.exportPDF.bind(this);\n this.svgCanvas.bind('exportedPDF', this.customExportPDF); // jsPDF and our RGBColor will be available to the method\n }\n });\n }\n\n /**\n * @function module:SVGthis.randomizeIds\n * @param {boolean} arg\n * @returns {void}\n */\n randomizeIds (arg) {\n this.svgCanvas.randomizeIds(arg);\n }\n /** @lends module:SVGEditor~Actions */\n /**\n * @returns {void}\n */\n setAll () {\n const keyHandler = {}; // will contain the action for each pressed key\n\n this.toolButtons.forEach((opts) => {\n // Bind function to shortcut key\n if (opts.key) {\n // Set shortcut based on options\n let keyval = opts.key;\n let pd = false;\n if (Array.isArray(opts.key)) {\n keyval = opts.key[0];\n if (opts.key.length > 1) { pd = opts.key[1]; }\n }\n keyval = String(keyval);\n const {fn} = opts;\n keyval.split('/').forEach((key) => { keyHandler[key] = {fn, pd}; });\n }\n return true;\n });\n // register the keydown event\n document.addEventListener('keydown', (e) => {\n // only track keyboard shortcuts for the body containing the SVG-Editor\n if (e.target.nodeName !== 'BODY') return;\n // normalize key\n const key = `${(e.altKey) ? 'alt+' : ''}${(e.shiftKey) ? 'shift+' : ''}${(e.metaKey) ? 'meta+' : ''}${(e.ctrlKey) ? 'ctrl+' : ''}${e.key.toLowerCase()}`;\n // return if no shortcut defined for this key\n if (!keyHandler[key]) return;\n // launch associated handler and preventDefault if necessary\n keyHandler[key].fn();\n if (keyHandler[key].pd) {\n e.preventDefault();\n }\n });\n\n // Misc additional actions\n\n // Make 'return' keypress trigger the change event\n $('.attr_changer, #image_url').bind(\n 'keydown',\n 'return',\n function (evt) {\n $(this).change();\n evt.preventDefault();\n }\n );\n }\n /**\n * @returns {void}\n */\n setTitles () {\n // Tooltips not directly associated with a single function\n const keyAssocs = {\n '4/Shift+4': '#tools_rect',\n '5/Shift+5': '#tools_ellipse'\n };\n Object.entries(keyAssocs).forEach(([keyval, sel]) => {\n const menu = ($(sel).parents('#main_menu').length);\n\n $qa(sel).forEach((element) => {\n const t = (menu) ? $(element).text().split(' [')[0] : element.title.split(' [')[0];\n let keyStr = '';\n // Shift+Up\n keyval.split('/').forEach((key, i) => {\n const modBits = key.split('+');\n let mod = '';\n if (modBits.length > 1) {\n mod = modBits[0] + '+';\n key = modBits[1];\n }\n keyStr += (i ? '/' : '') + mod + (this.uiStrings['key_' + key] || key);\n });\n if (menu) {\n this.lastChild.textContent = t + ' [' + keyStr + ']';\n } else {\n this.title = t + ' [' + keyStr + ']';\n }\n });\n });\n }\n /**\n * @param {string} sel Selector to match\n * @returns {module:SVGthis.ToolButton}\n */\n getButtonData (sel) {\n return Object.values(this.toolButtons).find((btn) => {\n return btn.sel === sel;\n });\n }\n\n /**\n * Expose the `uiStrings`.\n * @function module:SVGthis.canvas.getUIStrings\n * @returns {module:SVGthis.uiStrings}\n */\n getUIStrings () {\n return this.uiStrings;\n }\n\n /**\n * @param {boolean} editmode\n * @param {module:svgcanvas.SvgCanvas#event:selected} elems\n * @returns {void}\n */\n togglePathEditMode (editmode, elems) {\n $('#path_node_panel').toggle(editmode);\n if (editmode) {\n // Change select icon\n $('.tool_button_current').removeClass('tool_button_current').addClass('tool_button');\n $('#tool_select').addClass('tool_button_current').removeClass('tool_button');\n this.multiselected = false;\n if (elems.length) {\n this.selectedElement = this.elems[0];\n }\n } else {\n setTimeout(() => {\n // setIcon('#tool_select', 'select');\n }, 1000);\n }\n }\n\n /**\n * @param {external:Window} win\n * @param {module:svgcanvas.SvgCanvas#event:exported} data\n * @listens module:svgcanvas.SvgCanvas#event:exported\n * @returns {void}\n */\n exportHandler (win, data) {\n const {issues, exportWindowName} = data;\n\n this.exportWindow = window.open(blankPageObjectURL || '', exportWindowName); // A hack to get the window via JSON-able name without opening a new one\n\n if (!this.exportWindow || this.exportWindow.closed) {\n seAlert(this.uiStrings.notification.popupWindowBlocked);\n return;\n }\n\n this.exportWindow.location.href = data.bloburl || data.datauri;\n const done = this.configObj.pref('export_notice_done');\n if (done !== 'all') {\n let note = this.uiStrings.notification.saveFromBrowser.replace('%s', data.type);\n\n // Check if there are issues\n if (issues.length) {\n const pre = '\\n \\u2022 ';\n note += ('\\n\\n' + this.uiStrings.notification.noteTheseIssues + pre + issues.join(pre));\n }\n\n // Note that this will also prevent the notice even though new issues may appear later.\n // May want to find a way to deal with that without annoying the user\n this.configObj.pref('export_notice_done', 'all');\n seAlert(note);\n }\n }\n\n /**\n *\n * @param {Element} opt\n * @param {boolean} changeElem\n * @returns {void}\n */\n setStrokeOpt (opt, changeElem) {\n const {id} = opt;\n const bits = id.split('_');\n const [pre, val] = bits;\n\n if (changeElem) {\n this.svgCanvas.setStrokeAttr('stroke-' + pre, val);\n }\n $(opt).addClass('current').siblings().removeClass('current');\n }\n\n /**\n * Set a selected image's URL.\n * @function module:SVGthis.setImageURL\n * @param {string} url\n * @returns {void}\n */\n setImageURL (url) {\n if (!url) {\n url = this.defaultImageURL;\n }\n this.svgCanvas.setImageURL(url);\n $('#image_url').val(url);\n\n if (url.startsWith('data:')) {\n // data URI found\n $('#image_url').hide();\n $('#change_image_url').show();\n } else {\n // regular URL\n this.svgCanvas.embedImage(url, function (dataURI) {\n // Couldn't embed, so show warning\n $('#url_notice').toggle(!dataURI);\n this.defaultImageURL = url;\n });\n $('#image_url').show();\n $('#change_image_url').hide();\n }\n }\n\n /**\n *\n * @param {string} color\n * @param {string} url\n * @returns {void}\n */\n setBackground (color, url) {\n // if (color == this.configObj.pref('bkgd_color') && url == this.configObj.pref('bkgd_url')) { return; }\n this.configObj.pref('bkgd_color', color);\n this.configObj.pref('bkgd_url', url, true);\n\n // This should be done in this.svgCanvas.js for the borderRect fill\n this.svgCanvas.setBackground(color, url);\n }\n\n /**\n * @function module:SVGthis.updateCanvas\n * @param {boolean} center\n * @param {module:math.XYObject} newCtr\n * @returns {void}\n */\n updateCanvas (center, newCtr) {\n const zoom = this.svgCanvas.getZoom();\n const wArea = this.workarea;\n const cnvs = $('#svgcanvas');\n\n let w = this.workarea.width(), h = this.workarea.height();\n const wOrig = w, hOrig = h;\n const oldCtr = {\n x: wArea[0].scrollLeft + wOrig / 2,\n y: wArea[0].scrollTop + hOrig / 2\n };\n const multi = this.configObj.curConfig.canvas_expansion;\n w = Math.max(wOrig, this.svgCanvas.contentW * zoom * multi);\n h = Math.max(hOrig, this.svgCanvas.contentH * zoom * multi);\n\n if (w === wOrig && h === hOrig) {\n this.workarea.css('overflow', 'hidden');\n } else {\n this.workarea.css('overflow', 'scroll');\n }\n\n const oldCanY = cnvs.height() / 2;\n const oldCanX = cnvs.width() / 2;\n cnvs.width(w).height(h);\n const newCanY = h / 2;\n const newCanX = w / 2;\n const offset = this.svgCanvas.updateCanvas(w, h);\n\n const ratio = newCanX / oldCanX;\n\n const scrollX = w / 2 - wOrig / 2;\n const scrollY = h / 2 - hOrig / 2;\n\n if (!newCtr) {\n const oldDistX = oldCtr.x - oldCanX;\n const newX = newCanX + oldDistX * ratio;\n\n const oldDistY = oldCtr.y - oldCanY;\n const newY = newCanY + oldDistY * ratio;\n\n newCtr = {\n x: newX,\n y: newY\n };\n } else {\n newCtr.x += offset.x;\n newCtr.y += offset.y;\n }\n\n if (center) {\n // Go to top-left for larger documents\n if (this.svgCanvas.contentW > wArea.width()) {\n // Top-left\n this.workarea[0].scrollLeft = offset.x - 10;\n this.workarea[0].scrollTop = offset.y - 10;\n } else {\n // Center\n wArea[0].scrollLeft = scrollX;\n wArea[0].scrollTop = scrollY;\n }\n } else {\n wArea[0].scrollLeft = newCtr.x - wOrig / 2;\n wArea[0].scrollTop = newCtr.y - hOrig / 2;\n }\n if (this.configObj.curConfig.showRulers) {\n this.rulers.updateRulers(cnvs, zoom);\n this.workarea.scroll();\n }\n\n if (this.configObj.urldata.storagePrompt !== true && this.storagePromptState === 'ignore') {\n $('#dialog_box').hide();\n }\n }\n\n /**\n * Updates the toolbar (colors, opacity, etc) based on the selected element.\n * This function also updates the opacity and id elements that are in the\n * context panel.\n * @returns {void}\n */\n updateToolbar () {\n let i, len;\n if (!isNullish(this.selectedElement)) {\n switch (this.selectedElement.tagName) {\n case 'use':\n case 'image':\n case 'foreignObject':\n break;\n case 'g':\n case 'a': {\n // Look for common styles\n const childs = this.selectedElement.getElementsByTagName('*');\n let gWidth = null;\n for (i = 0, len = childs.length; i < len; i++) {\n const swidth = childs[i].getAttribute('stroke-width');\n\n if (i === 0) {\n gWidth = swidth;\n } else if (gWidth !== swidth) {\n gWidth = null;\n }\n }\n\n $('#stroke_width').val(gWidth === null ? '' : gWidth);\n this.bottomPanelHandlers.updateColorpickers(true);\n break;\n } default: {\n this.bottomPanelHandlers.updateColorpickers(true);\n\n $('#stroke_width').val(this.selectedElement.getAttribute('stroke-width') || 1);\n $('#stroke_style').val(this.selectedElement.getAttribute('stroke-dasharray') || 'none');\n\n let attr = this.selectedElement.getAttribute('stroke-linejoin') || 'miter';\n\n if ($('#linejoin_' + attr).length) {\n this.setStrokeOpt($('#linejoin_' + attr)[0]);\n }\n\n attr = this.selectedElement.getAttribute('stroke-linecap') || 'butt';\n\n if ($('#linecap_' + attr).length) {\n this.setStrokeOpt($('#linecap_' + attr)[0]);\n }\n }\n }\n }\n\n // All elements including image and group have opacity\n if (!isNullish(this.selectedElement)) {\n const opacPerc = (this.selectedElement.getAttribute('opacity') || 1.0) * 100;\n $id('opacity').value = opacPerc;\n $id('elem_id').value = this.selectedElement.id;\n $id('elem_class').value =\n (this.selectedElement.getAttribute('class') !== null) ? this.selectedElement.getAttribute('class') : '';\n }\n\n this.bottomPanelHandlers.updateToolButtonState();\n }\n\n /**\n *\n * @returns {void}\n */\n updateWireFrame () {\n const rule = `\n #workarea.wireframe #svgcontent * {\n stroke-width: ${1 / this.svgCanvas.getZoom()}px;\n }\n `;\n $('#wireframe_rules').text(this.workarea.hasClass('wireframe') ? rule : '');\n }\n\n /**\n * @param {string} [title=svgCanvas.getDocumentTitle()]\n * @returns {void}\n */\n updateTitle (title) {\n title = title || this.svgCanvas.getDocumentTitle();\n const newTitle = document.querySelector('title').text + (title ? ': ' + title : '');\n\n // Remove title update with current context info, isn't really necessary\n // if (this.curContext) {\n // new_title = new_title + this.curContext;\n // }\n $('title:first').text(newTitle);\n }\n\n // called when we've selected a different element\n /**\n *\n * @param {external:Window} win\n * @param {module:svgcanvas.SvgCanvas#event:selected} elems Array of elements that were selected\n * @listens module:svgcanvas.SvgCanvas#event:selected\n * @fires module:svgcanvas.SvgCanvas#event:ext_selectedChanged\n * @returns {void}\n */\n selectedChanged (win, elems) {\n const mode = this.svgCanvas.getMode();\n if (mode === 'select') {\n this.leftPanelHandlers.clickSelect();\n }\n const isNode = mode === 'pathedit';\n // if this.elems[1] is present, then we have more than one element\n this.selectedElement = (elems.length === 1 || isNullish(elems[1]) ? elems[0] : null);\n this.multiselected = (elems.length >= 2 && !isNullish(elems[1]));\n if (!isNullish(this.selectedElement) && !isNode) {\n this.updateToolbar();\n } // if (!isNullish(elem))\n\n // Deal with pathedit mode\n this.togglePathEditMode(isNode, elems);\n this.topPanelHandlers.updateContextPanel();\n this.svgCanvas.runExtensions('selectedChanged', /** @type {module:svgcanvas.SvgCanvas#event:ext_selectedChanged} */ {\n elems,\n selectedElement: this.selectedElement,\n multiselected: this.multiselected\n });\n }\n\n // Call when part of element is in process of changing, generally\n // on mousemove actions like rotate, move, etc.\n /**\n * @param {external:Window} win\n * @param {module:svgcanvas.SvgCanvas#event:transition} elems\n * @listens module:svgcanvas.SvgCanvas#event:transition\n * @fires module:svgcanvas.SvgCanvas#event:ext_elementTransition\n * @returns {void}\n */\n elementTransition (win, elems) {\n const mode = this.svgCanvas.getMode();\n const elem = elems[0];\n\n if (!elem) {\n return;\n }\n\n this.multiselected = (elems.length >= 2 && !isNullish(elems[1]));\n // Only updating fields for single elements for now\n if (!this.multiselected) {\n switch (mode) {\n case 'rotate': {\n const ang = this.svgCanvas.getRotationAngle(elem);\n $('#angle').val(ang);\n $('#tool_reorient').toggleClass('disabled', ang === 0);\n break;\n }\n }\n }\n this.svgCanvas.runExtensions('elementTransition', /** @type {module:svgcanvas.SvgCanvas#event:ext_elementTransition} */ {\n elems\n });\n }\n\n // called when any element has changed\n /**\n * @param {external:Window} win\n * @param {Array<PlainObject>} elems\n * @listens module:svgcanvas.SvgCanvas#event:changed\n * @fires module:svgcanvas.SvgCanvas#event:ext_elementChanged\n * @returns {void}\n */\n elementChanged (win, elems) {\n const mode = this.svgCanvas.getMode();\n if (mode === 'select') {\n this.leftPanelHandlers.clickSelect();\n }\n\n elems.forEach((elem) => {\n const isSvgElem = (elem && elem.tagName === 'svg');\n if (isSvgElem || this.svgCanvas.isLayer(elem)) {\n this.layersPanel.populateLayers();\n // if the element changed was the svg, then it could be a resolution change\n if (isSvgElem) {\n this.updateCanvas();\n }\n // Update selectedElement if element is no longer part of the image.\n // This occurs for the text elements in Firefox\n } else if (elem && this.selectedElement && isNullish(this.selectedElement.parentNode)) {\n // || elem && elem.tagName == \"path\" && !multiselected) { // This was added in r1430, but not sure why\n this.selectedElement = elem;\n }\n });\n\n this.showSaveWarning = true;\n\n // we update the contextual panel with potentially new\n // positional/sizing information (we DON'T want to update the\n // toolbar here as that creates an infinite loop)\n // also this updates the history buttons\n\n // we tell it to skip focusing the text control if the\n // text element was previously in focus\n this.topPanelHandlers.updateContextPanel();\n\n // In the event a gradient was flipped:\n if (this.selectedElement && mode === 'select') {\n this.bottomPanelHandlers.updateColorpickers();\n }\n\n this.svgCanvas.runExtensions('elementChanged', /** @type {module:svgcanvas.SvgCanvas#event:ext_elementChanged} */ {\n elems\n });\n }\n\n /**\n * @returns {void}\n */\n zoomDone () {\n this.updateWireFrame();\n }\n\n /**\n * @typedef {PlainObject} module:SVGthis.BBoxObjectWithFactor (like `DOMRect`)\n * @property {Float} x\n * @property {Float} y\n * @property {Float} width\n * @property {Float} height\n * @property {Float} [factor] Needed if width or height are 0\n * @property {Float} [zoom]\n * @see module:svgcanvas.SvgCanvas#event:zoomed\n */\n\n /**\n * @function module:svgcanvas.SvgCanvas#zoomChanged\n * @param {external:Window} win\n * @param {module:svgcanvas.SvgCanvas#event:zoomed} bbox\n * @param {boolean} autoCenter\n * @listens module:svgcanvas.SvgCanvas#event:zoomed\n * @returns {void}\n */\n zoomChanged (win, bbox, autoCenter) {\n const scrbar = 15,\n // res = this.svgCanvas.getResolution(), // Currently unused\n wArea = this.workarea;\n // const canvasPos = $('#svgcanvas').position(); // Currently unused\n const zInfo = this.svgCanvas.setBBoxZoom(bbox, wArea.width() - scrbar, wArea.height() - scrbar);\n if (!zInfo) { return; }\n const zoomlevel = zInfo.zoom,\n bb = zInfo.bbox;\n\n if (zoomlevel < 0.001) {\n this.changeZoom(0.1);\n return;\n }\n\n $id('zoom').value = (this.svgCanvas.getZoom() * 100).toFixed(1);\n\n if (autoCenter) {\n this.updateCanvas();\n } else {\n this.updateCanvas(\n false,\n {x: bb.x * zoomlevel + (bb.width * zoomlevel) / 2, y: bb.y * zoomlevel + (bb.height * zoomlevel) / 2}\n );\n }\n\n if (this.svgCanvas.getMode() === 'zoom' && bb.width) {\n // Go to select if a zoom box was drawn\n this.leftPanelHandlers.clickSelect();\n }\n\n this.zoomDone();\n }\n\n /**\n * @param {external:Window} win\n * @param {module:svgcanvas.SvgCanvas#event:contextset} context\n * @listens module:svgcanvas.SvgCanvas#event:contextset\n * @returns {void}\n */\n contextChanged (win, context) {\n let linkStr = '';\n if (context) {\n let str = '';\n linkStr = '<a href=\"#\" data-root=\"y\">' + this.svgCanvas.getCurrentDrawing().getCurrentLayerName() + '</a>';\n\n $(context).parentsUntil('#svgcontent > g').andSelf().each(() => {\n if (this.id) {\n str += ' > ' + this.id;\n linkStr += (this !== context) ? ` > <a href=\"#\">${this.id}</a>` : ` > ${this.id}`;\n }\n });\n\n this.curContext = str;\n } else {\n this.curContext = null;\n }\n $('#cur_context_panel').toggle(Boolean(context)).html(linkStr);\n\n this.updateTitle();\n }\n\n /**\n * Makes sure the current selected paint is available to work with.\n * @returns {void}\n */\n /* prepPaints () {\n paintBox.fill.prep();\n paintBox.stroke.prep();\n } */\n\n /**\n *\n * @returns {void}\n */\n // eslint-disable-next-line class-methods-use-this\n setFlyoutPositions () {\n $('.tools_flyout').each(function () {\n const shower = $('#' + this.id + '_show');\n const {left, top} = shower.offset();\n const w = shower.outerWidth();\n this.css({left: (left + w) * editor.tool_scale, top});\n });\n }\n\n /**\n *\n * @returns {void}\n */\n // eslint-disable-next-line class-methods-use-this\n setFlyoutTitles () {\n $('.tools_flyout').each(function () {\n const shower = $('#' + this.id + '_show');\n if (shower.data('isLibrary')) {\n return;\n }\n const tooltips = this.children().map(function () {\n return this.title;\n }).get();\n shower[0].title = tooltips.join(' / ');\n });\n }\n\n /**\n * @param {PlainObject<string, module:SVGEditor.ToolButton>} holders Key is a selector\n * @returns {void}\n */\n setupFlyouts (holders) {\n const allHolders = {};\n const currentObj = this;\n $.each(holders, function (holdSel, btnOpts) {\n if (!allHolders[holdSel]) {\n allHolders[holdSel] = [];\n }\n allHolders[holdSel].push(...btnOpts);\n\n const buttons = $(holdSel).children().not('.tool_button_evt_handled');\n const showSel = holdSel + '_show';\n const shower = $(showSel);\n let def = false;\n buttons.addClass('tool_button tool_button_evt_handled')\n .unbind('click mousedown mouseup') // may not be necessary\n .each(function () {\n // Get this button's options\n const idSel = '#' + this.getAttribute('id');\n const [i, opts] = Object.entries(btnOpts).find(([_, {sel}]) => {\n return sel === idSel;\n });\n\n // Remember the function that goes with this ID\n currentObj.flyoutFuncs[opts.sel] = opts.fn;\n\n if (opts.isDefault) { def = i; }\n\n const flyoutAction = function (ev) {\n let options = opts;\n // Find the currently selected tool if comes from keystroke\n if (ev.type === 'keydown') {\n const flyoutIsSelected = $(options.parent + '_show').hasClass('tool_button_current');\n const currentOperation = $(options.parent + '_show').attr('data-curopt');\n Object.entries(holders[opts.parent]).some(([j, tool]) => {\n if (tool.sel !== currentOperation) {\n return false;\n }\n if (!ev.shiftKey || !flyoutIsSelected) {\n options = tool;\n } else {\n // If flyout is selected, allow shift key to iterate through subitems\n j = Number.parseInt(j);\n // Use `allHolders` to include both extension `includeWith` and toolbarButtons\n options = allHolders[opts.parent][j + 1] ||\n holders[opts.parent][0];\n }\n return true;\n });\n }\n if ($(this).hasClass('disabled')) { return false; }\n /* if (toolButtonClick(showSel)) {\n options.fn();\n } */\n const icon = (options.icon) ? $.getSvgIcon(options.icon, true) : $(options.sel).children().eq(0).clone();\n icon[0].setAttribute('width', shower.width());\n icon[0].setAttribute('height', shower.height());\n shower.children(':not(.flyout_arrow_horiz)').remove();\n shower.append(icon).attr('data-curopt', options.sel); // This sets the current mode\n return true;\n };\n\n $(this).mouseup(flyoutAction);\n // TODO: currently not trigger here\n /* if (opts.key) {\n $(document).bind('keydown', opts.key[0] + ' shift+' + opts.key[0], flyoutAction);\n } */\n return true;\n });\n\n if (def) {\n shower.attr('data-curopt', btnOpts[def].sel);\n } else if (!shower.attr('data-curopt')) {\n // Set first as default\n shower.attr('data-curopt', btnOpts[0].sel);\n }\n\n let timer;\n\n // Clicking the \"show\" icon should set the current mode\n shower.mousedown(function (evt) {\n if (shower.hasClass('disabled')) {\n return false;\n }\n const holder = $(holdSel);\n const pos = $(showSel).position();\n const l = pos.left + 34;\n const w = holder.width() * -1;\n const time = holder.data('shown_popop') ? 200 : 0;\n timer = setTimeout(function () {\n // Show corresponding menu\n if (!shower.data('isLibrary')) {\n holder.css('left', w).show().animate({\n left: l\n }, 150);\n } else {\n holder.css('left', l).show();\n }\n holder.data('shown_popop', true);\n }, time);\n evt.preventDefault();\n return true;\n }).mouseup(function (evt) {\n clearTimeout(timer);\n /* const opt = $(this).attr('data-curopt');\n // Is library and popped up, so do nothing\n if (shower.data('isLibrary') && $(showSel.replace('_show', '')).is(':visible')) {\n toolButtonClick(showSel, true);\n return;\n }\n if (toolButtonClick(showSel) && this.flyoutFuncs[opt]) {\n this.flyoutFuncs[opt]();\n } */\n });\n // $('#tools_rect').mouseleave(function () { $('#tools_rect').fadeOut(); });\n });\n this.setFlyoutTitles();\n // this.setFlyoutPositions();\n }\n\n /**\n * @param {string} id\n * @param {external:jQuery} child\n * @returns {external:jQuery}\n */\n // eslint-disable-next-line class-methods-use-this\n makeFlyoutHolder (id, child) {\n return $('<div>', {\n class: 'tools_flyout',\n id\n }).appendTo('#svg_editor').append(child);\n }\n\n /**\n * @function module:SVGEditor.setIcon\n * @param {string|Element|external:jQuery} elem\n * @param {string|external:jQuery} iconId\n * @returns {void}\n */\n setIcon (elem, iconId) {\n // eslint-disable-next-line max-len\n const icon = (typeof iconId === 'string') ? $('<img src=\"' + this.configObj.curConfig.imgPath + iconId + '\">') : iconId.clone();\n if (!icon) {\n // Todo: Investigate why this still occurs in some cases\n console.log('NOTE: Icon image missing: ' + iconId); \n return;\n }\n $(elem).empty().append(icon);\n }\n\n /**\n * @param {string} elemSel\n * @param {string} listSel\n * @param {external:jQuery.Function} callback\n * @param {PlainObject} opts\n * @param {boolean} opts.dropUp\n * @param {boolean} opts.seticon\n * @param {boolean} opts.multiclick\n * @todo Combine this with `addDropDown` or find other way to optimize.\n * @returns {void}\n */\n addAltDropDown (elemSel, listSel, callback, opts) {\n const self = this;\n const button = $(elemSel);\n const {dropUp} = opts;\n const list = $(listSel);\n if (dropUp) {\n $(elemSel).addClass('dropup');\n }\n list.find('li').bind('mouseup', function (...args) {\n if (opts.seticon) {\n self.setIcon('#cur_' + button[0].id, $(this).children());\n $(this).addClass('current').siblings().removeClass('current');\n }\n callback.apply(this, ...args);\n });\n\n let onButton = false;\n $(window).mouseup(function (evt) {\n if (!onButton) {\n button.removeClass('down');\n list.hide();\n list.css({top: 0, left: 0});\n }\n onButton = false;\n });\n\n // const height = list.height(); // Currently unused\n button.bind('mousedown', function () {\n const off = button.offset();\n if (dropUp) {\n off.top -= list.height();\n off.left += 8;\n } else {\n off.top += button.height();\n }\n list.offset(off);\n\n if (!button.hasClass('down')) {\n list.show();\n onButton = true;\n } else {\n // CSS position must be reset for Webkit\n list.hide();\n list.css({top: 0, left: 0});\n }\n button.toggleClass('down');\n }).hover(function () {\n onButton = true;\n }).mouseout(function () {\n onButton = false;\n });\n\n if (opts.multiclick) {\n list.mousedown(function () {\n onButton = true;\n });\n }\n }\n\n /**\n * @param {external:Window} win\n * @param {module:svgcanvas.SvgCanvas#event:extension_added} ext\n * @listens module:svgcanvas.SvgCanvas#event:extension_added\n * @returns {Promise<void>|void} Resolves to `undefined`\n */\n async extAdded (win, ext) {\n \n const self = this;\n const btnSelects = [];\n if (!ext) {\n return undefined;\n }\n let cbCalled = false;\n\n if (ext.langReady && this.langChanged) { // We check for this since the \"lang\" pref could have been set by storage\n const lang = this.configObj.pref('lang');\n await ext.langReady({lang});\n }\n\n /**\n *\n * @returns {void}\n */\n const runCallback = () => {\n if (ext.callback && !cbCalled) {\n cbCalled = true;\n ext.callback.call(editor);\n }\n };\n\n /**\n * @typedef {PlainObject} module:SVGthis.ContextTool\n * @property {string} panel The ID of the existing panel to which the tool is being added. Required.\n * @property {string} id The ID of the actual tool element. Required.\n * @property {PlainObject<string, external:jQuery.Function>|PlainObject<\"change\", external:jQuery.Function>} events DOM event names keyed to associated functions. Example: `{change () { seAlert('Option was changed') } }`. \"change\" event is one specifically handled for the \"button-select\" type. Required.\n * @property {string} title The tooltip text that will appear when the user hovers over the tool. Required.\n * @property {\"tool_button\"|\"select\"|\"button-select\"|\"input\"|string} type The type of tool being added. Expected.\n * @property {PlainObject<string, string>} [options] List of options and their labels for select tools. Example: `{1: 'One', 2: 'Two', all: 'All' }`. Required by \"select\" tools.\n * @property {string} [container_id] The ID to be given to the tool's container element.\n * @property {string} [defval] Default value\n * @property {string|Integer} [colnum] Added as part of the option list class.\n * @property {string} [label] Label associated with the tool, visible in the UI\n * @property {Integer} [size] Value of the \"size\" attribute of the tool input\n */\n if (ext.context_tools) {\n $.each(ext.context_tools, function (i, tool) {\n // Add select tool\n const contId = tool.container_id ? (' id=\"' + tool.container_id + '\"') : '';\n\n let panel = $('#' + tool.panel);\n // create the panel if it doesn't exist\n if (!panel.length) {\n panel = $('<div>', {id: tool.panel}).appendTo('#tools_top');\n }\n\n let html;\n // TODO: Allow support for other types, or adding to existing tool\n switch (tool.type) {\n case 'tool_button': {\n html = '<div class=\"tool_button\">' + tool.id + '</div>';\n const div = $(html).appendTo(panel);\n if (tool.events) {\n $.each(tool.events, function (evt, func) {\n $(div).bind(evt, func);\n });\n }\n break;\n } case 'select': {\n html = '<label' + contId + '>' +\n '<select id=\"' + tool.id + '\">';\n $.each(tool.options, function (val, text) {\n const sel = (val === tool.defval) ? ' selected' : '';\n html += '<option value=\"' + val + '\"' + sel + '>' + text + '</option>';\n });\n html += '</select></label>';\n // Creates the tool, hides & adds it, returns the select element\n const sel = $(html).appendTo(panel).find('select');\n\n $.each(tool.events, function (evt, func) {\n $(sel).bind(evt, func);\n });\n break;\n } case 'button-select': {\n html = '<div id=\"' + tool.id + '\" class=\"dropdown toolset\" title=\"' + tool.title + '\">' +\n '<div id=\"cur_' + tool.id + '\" class=\"icon_label\"></div>' +\n '<button><img class=\"svg_icon\" src=\"./images/arrow_down.svg\" alt=\"icon\" width=\"7\" height=\"7\"></button>' +\n '</div>';\n\n const list = $('<ul id=\"' + tool.id + '_opts\"></ul>').appendTo('#option_lists');\n\n if (tool.colnum) {\n list.addClass('optcols' + tool.colnum);\n }\n\n // Creates the tool, hides & adds it, returns the select element\n /* const dropdown = */ $(html).appendTo(panel).children();\n btnSelects.push({\n elem: ('#' + tool.id),\n list: ('#' + tool.id + '_opts'),\n title: tool.title,\n callback: tool.events.change,\n cur: ('#cur_' + tool.id)\n });\n break;\n } case 'input': {\n html = '<label' + contId + '>' +\n '<span id=\"' + tool.id + '_label\">' +\n tool.label + ':</span>' +\n '<input id=\"' + tool.id + '\" title=\"' + tool.title +\n '\" size=\"' + (tool.size || '4') +\n '\" value=\"' + (tool.defval || '') + '\" type=\"text\"/></label>';\n\n // Creates the tool, hides & adds it, returns the select element\n\n // Add to given tool.panel\n const inp = $(html).appendTo(panel).find('input');\n\n if (tool.events) {\n $.each(tool.events, function (evt, func) {\n inp.bind(evt, func);\n });\n }\n break;\n } default:\n break;\n }\n });\n }\n const {svgicons} = ext;\n if (ext.buttons) {\n const fallbackObj = {},\n altsObj = {},\n placementObj = {},\n holders = {};\n\n /**\n * @typedef {GenericArray} module:SVGEditor.KeyArray\n * @property {string} 0 The key to bind (on `keydown`)\n * @property {boolean} 1 Whether to `preventDefault` on the `keydown` event\n * @property {boolean} 2 Not apparently in use (NoDisableInInput)\n */\n /**\n * @typedef {string|module:SVGEditor.KeyArray} module:SVGEditor.Key\n */\n /**\n * @typedef {PlainObject} module:SVGEditor.Button\n * @property {string} id A unique identifier for this button. If SVG icons are used, this must match the ID used in the icon file. Required.\n * @property {\"mode_flyout\"|\"mode\"|\"context\"|\"app_menu\"} type Type of button. Required.\n * @property {string} title The tooltip text that will appear when the user hovers over the icon. Required.\n * @property {PlainObject<string, external:jQuery.Function>|PlainObject<\"click\", external:jQuery.Function>} events DOM event names with associated functions. Example: `{click () { alert('Button was clicked') } }`. Click is used with `includeWith` and `type` of \"mode_flyout\" (and \"mode\"); any events may be added if `list` is not present. Expected.\n * @property {string} panel The ID of the context panel to be included, if type is \"context\". Required only if type is \"context\".\n * @property {string} icon The file path to the raster version of the icon image source. Required only if no `svgicons` is supplied from [ExtensionInitResponse]{@link module:svgcanvas.ExtensionInitResponse}.\n * @property {string} [svgicon] If absent, will utilize the button \"id\"; used to set \"placement\" on the `svgIcons` call\n * @property {string} [list] Points to the \"id\" of a `context_tools` item of type \"button-select\" into which the button will be added as a panel list item\n * @property {Integer} [position] The numeric index for placement; defaults to last position (as of the time of extension addition) if not present. For use with {@link http://api.jquery.com/eq/}.\n * @property {boolean} [isDefault] Whether or not the button is the default. Used with `list`.\n * @property {PlainObject} [includeWith] Object with flyout menu data\n * @property {boolean} [includeWith.isDefault] Indicates whether button is default in flyout list or not.\n * @property {string} includeWith.button jQuery selector of the existing button to be joined. Example: '#tool_line'. Required if `includeWith` is used.\n * @property {\"last\"|Integer} [includeWith.position] Position of icon in flyout list; will be added to end if not indicated. Integer is for use with {@link http://api.jquery.com/eq/}.\n * @property {module:SVGEditor.Key} [key] The key to bind to the button\n */\n // Add buttons given by extension\n $.each(ext.buttons, function (i, /** @type {module:SVGEditor.Button} */ btn) {\n let {id} = btn;\n let num = i;\n // Give button a unique ID\n while ($('#' + id).length) {\n id = btn.id + '_' + (++num);\n }\n\n let icon;\n if (!svgicons) {\n icon = $(\n '<img src=\"' + self.configObj.curConfig.imgPath + btn.icon +\n (btn.title ? '\" alt=\"' + btn.title : '') +\n '\">'\n );\n } else {\n fallbackObj[id] = btn.icon;\n altsObj[id] = btn.title;\n const svgicon = btn.svgicon || btn.id;\n if (btn.type === 'app_menu') {\n placementObj['#' + id + ' > div'] = svgicon;\n } else {\n placementObj['#' + id] = svgicon;\n }\n }\n let cls, parent;\n\n // Set button up according to its type\n switch (btn.type) {\n case 'mode_flyout':\n case 'mode':\n cls = 'tool_button';\n parent = '#tools_left';\n break;\n case 'context':\n cls = 'tool_button';\n parent = '#' + btn.panel;\n // create the panel if it doesn't exist\n if (!$(parent).length) {\n $('<div>', {id: btn.panel}).appendTo('#tools_top');\n }\n break;\n case 'app_menu':\n cls = '';\n parent = '#main_menu ul';\n break;\n }\n // refData\n let flyoutHolder, showBtn, refBtn;\n const button = $((btn.list || btn.type === 'app_menu') ? '<li/>' : '<div/>')\n .attr('id', id)\n .attr('title', btn.title)\n .addClass(cls);\n if (!btn.includeWith && !btn.list) {\n if ('position' in btn) {\n if ($(parent).children().eq(btn.position).length) {\n $(parent).children().eq(btn.position).before(button);\n } else {\n $(parent).children().last().after(button);\n }\n } else {\n button.appendTo(parent);\n }\n\n if (btn.type === 'mode_flyout') {\n // Add to flyout menu / make flyout menu\n // const opts = btn.includeWith;\n // // opts.button, default, position\n refBtn = $(button);\n\n flyoutHolder = refBtn.parent();\n // Create a flyout menu if there isn't one already\n let tlsId;\n if (!refBtn.parent().hasClass('tools_flyout')) {\n // Create flyout placeholder\n tlsId = refBtn[0].id.replace('tool_', 'tools_');\n showBtn = refBtn.clone()\n .attr('id', tlsId + '_show')\n .append($('<div>', {class: 'flyout_arrow_horiz'}));\n\n refBtn.before(showBtn);\n\n // Create a flyout div\n flyoutHolder = self.makeFlyoutHolder(tlsId, refBtn);\n flyoutHolder.data('isLibrary', true);\n showBtn.data('isLibrary', true);\n }\n // refData = Actions.getButtonData(opts.button);\n\n placementObj['#' + tlsId + '_show'] = btn.id;\n // TODO: Find way to set the current icon using the iconloader if this is not default\n\n // Include data for extension button as well as ref button\n /* curH = */ holders['#' + flyoutHolder[0].id] = [{\n sel: '#' + id,\n fn: btn.events.click,\n icon: btn.id,\n // key: btn.key,\n isDefault: true\n }]; // , refData\n //\n // // {sel:'#tool_rect', fn: clickRect, evt: 'mouseup', key: 4, parent: '#tools_rect', icon: 'rect'}\n //\n // const pos = ('position' in opts)?opts.position:'last';\n // const len = flyoutHolder.children().length;\n //\n // // Add at given position or end\n // if (!isNaN(pos) && pos >= 0 && pos < len) {\n // flyoutHolder.children().eq(pos).before(button);\n // } else {\n // flyoutHolder.append(button);\n // curH.reverse();\n // }\n } else if (btn.type === 'app_menu') {\n button.append('<div>').append(btn.title);\n }\n } else if (btn.list) {\n // Add button to list\n button.addClass('push_button');\n $('#' + btn.list + '_opts').append(button);\n if (btn.isDefault) {\n $('#cur_' + btn.list).append(button.children().clone());\n const svgicon = btn.svgicon || btn.id;\n placementObj['#cur_' + btn.list] = svgicon;\n }\n } else if (btn.includeWith) {\n // Add to flyout menu / make flyout menu\n const opts = btn.includeWith;\n // opts.button, default, position\n refBtn = $(opts.button);\n\n flyoutHolder = refBtn.parent();\n // Create a flyout menu if there isn't one already\n let tlsId;\n if (!refBtn.parent().hasClass('tools_flyout')) {\n // Create flyout placeholder\n tlsId = refBtn[0].id.replace('tool_', 'tools_');\n showBtn = refBtn.clone()\n .attr('id', tlsId + '_show')\n .append($('<div>', {class: 'flyout_arrow_horiz'}));\n\n refBtn.before(showBtn);\n // Create a flyout div\n flyoutHolder = self.makeFlyoutHolder(tlsId, refBtn);\n }\n\n // refData = Actions.getButtonData(opts.button);\n\n if (opts.isDefault) {\n placementObj['#' + tlsId + '_show'] = btn.id;\n }\n // TODO: Find way to set the current icon using the iconloader if this is not default\n\n // Include data for extension button as well as ref button\n /* const curH = */ holders['#' + flyoutHolder[0].id] = [{\n sel: '#' + id,\n fn: btn.events.click,\n icon: btn.id,\n key: btn.key,\n isDefault: Boolean(btn.includeWith && btn.includeWith.isDefault)\n }]; // , refData\n // {sel:'#tool_rect', fn: clickRect, evt: 'mouseup', key: 4, parent: '#tools_rect', icon: 'rect'}\n\n const pos = ('position' in opts) ? opts.position : 'last';\n const len = flyoutHolder.children().length;\n\n // Add at given position or end\n if (!isNaN(pos) && pos >= 0 && pos < len) {\n flyoutHolder.children().eq(pos).before(button);\n } else {\n flyoutHolder.append(button);\n // curH.reverse();\n }\n }\n if (!svgicons) {\n button.append(icon);\n }\n if (!btn.list) {\n // Add given events to button\n $.each(btn.events, function (name, func) {\n if (name === 'click' && btn.type === 'mode') {\n // `touch.js` changes `touchstart` to `mousedown`,\n // so we must map extension click events as well\n if (isTouch() && name === 'click') {\n name = 'mousedown';\n }\n if (btn.includeWith) {\n button.bind(name, func);\n } else {\n button.bind(name, function () {\n /* if (toolButtonClick(button)) {\n func();\n } */\n });\n }\n if (btn.key) {\n // TODO: currently not trigger here\n // $(document).bind('keydown', btn.key, func);\n if (btn.title) {\n button.attr('title', btn.title + ' [' + btn.key + ']');\n }\n }\n } else {\n button.bind(name, func);\n }\n });\n }\n self.setupFlyouts(holders);\n });\n $.each(btnSelects, function () {\n self.addAltDropDown(this.elem, this.list, this.callback, {seticon: true});\n });\n /* if (svgicons) {\n return new Promise((resolve, reject) => {\n $.svgIcons(`${this.configObj.curConfig.imgPath}${svgicons}`, {\n w: 24, h: 24,\n id_match: false,\n no_img: (!isWebkit()),\n fallback: fallbackObj,\n placement: placementObj,\n callback (icons) {\n // Non-ideal hack to make the icon match the current size\n // if (curPrefs.iconsize && curPrefs.iconsize !== 'm') {\n if (editor.pref('iconsize') !== 'm') {\n // prepResize();\n }\n runCallback();\n resolve();\n }\n });\n });\n } */\n }\n if (ext.events) {\n this.leftPanelHandlers.add(ext.events.id, ext.events.click);\n }\n return runCallback();\n }\n\n /*\n this.addDropDown('#font_family_dropdown', () => {\n $('#font_family').val($(this).text()).change();\n });\n */\n /**\n * @param {Float} multiplier\n * @returns {void}\n */\n zoomImage (multiplier) {\n const resolution = this.svgCanvas.getResolution();\n multiplier = multiplier ? resolution.zoom * multiplier : 1;\n // setResolution(res.w * multiplier, res.h * multiplier, true);\n $id('zoom').value = (multiplier * 100).toFixed(1);\n this.svgCanvas.setZoom(multiplier);\n this.zoomDone();\n this.updateCanvas(true);\n }\n\n /**\n *\n * @returns {void}\n */\n cutSelected () {\n if (!isNullish(this.selectedElement) || this.multiselected) {\n this.svgCanvas.cutSelectedElements();\n }\n }\n\n /**\n * @function copySelected\n * @returns {void}\n */\n copySelected () {\n if (!isNullish(this.selectedElement) || this.multiselected) {\n this.svgCanvas.copySelectedElements();\n }\n }\n\n /**\n *\n * @returns {void}\n */\n pasteInCenter () {\n const zoom = this.svgCanvas.getZoom();\n const x = (this.workarea[0].scrollLeft + this.workarea.width() / 2) / zoom - this.svgCanvas.contentW;\n const y = (this.workarea[0].scrollTop + this.workarea.height() / 2) / zoom - this.svgCanvas.contentH;\n this.svgCanvas.pasteElements('point', x, y);\n }\n\n /**\n * @param {\"Up\"|\"Down\"} dir\n * @returns {void}\n */\n moveUpDownSelected (dir) {\n if (!isNullish(this.selectedElement)) {\n this.svgCanvas.moveUpDownSelected(dir);\n }\n }\n\n /**\n * @param {Float} dx\n * @param {Float} dy\n * @returns {void}\n */\n moveSelected (dx, dy) {\n if (!isNullish(this.selectedElement) || this.multiselected) {\n if (this.configObj.curConfig.gridSnapping) {\n // Use grid snap value regardless of zoom level\n const multi = this.svgCanvas.getZoom() * this.configObj.curConfig.snappingStep;\n dx *= multi;\n dy *= multi;\n }\n this.svgCanvas.moveSelectedElements(dx, dy);\n }\n }\n\n /**\n *\n * @returns {void}\n */\n selectNext () {\n this.svgCanvas.cycleElement(1);\n }\n\n /**\n *\n * @returns {void}\n */\n selectPrev () {\n this.svgCanvas.cycleElement(0);\n }\n\n /**\n * @param {0|1} cw\n * @param {Integer} step\n * @returns {void}\n */\n rotateSelected (cw, step) {\n if (isNullish(this.selectedElement) || this.multiselected) { return; }\n if (!cw) { step *= -1; }\n const angle = Number.parseFloat($('#angle').val()) + step;\n this.svgCanvas.setRotationAngle(angle);\n this.topPanelHandlers.updateContextPanel();\n }\n\n /**\n * @fires module:svgcanvas.SvgCanvas#event:ext_onNewDocument\n * @returns {void}\n */\n async clickClear () {\n const [x, y] = this.configObj.curConfig.dimensions;\n const ok = await seConfirm(this.uiStrings.notification.QwantToClear);\n if (ok === 'Cancel') {\n return;\n }\n this.leftPanelHandlers.clickSelect();\n this.svgCanvas.clear();\n this.svgCanvas.setResolution(x, y);\n this.updateCanvas(true);\n this.zoomImage();\n this.layersPanel.populateLayers();\n this.topPanelHandlers.updateContextPanel();\n this.svgCanvas.runExtensions('onNewDocument');\n }\n\n /**\n *\n * @returns {void}\n */\n clickSave () {\n // In the future, more options can be provided here\n const saveOpts = {\n images: this.configObj.pref('img_save'),\n round_digits: 6\n };\n this.svgCanvas.save(saveOpts);\n }\n\n /**\n *\n * @param e\n * @returns {Promise<void>} Resolves to `undefined`\n */\n async clickExport (e) {\n if (e?.detail?.trigger !== 'ok' || e?.detail?.imgType === undefined) {\n return;\n }\n const imgType = e?.detail?.imgType;\n const quality = (e?.detail?.quality) ? (e?.detail?.quality / 100) : 1;\n // Open placeholder window (prevents popup)\n let exportWindowName;\n\n /**\n *\n * @returns {void}\n */\n const openExportWindow = () => {\n const {loadingImage} = this.uiStrings.notification;\n if (this.configObj.curConfig.exportWindowType === 'new') {\n this.exportWindowCt++;\n }\n this.exportWindowName = this.configObj.curConfig.canvasName + this.exportWindowCt;\n let popHTML, popURL;\n if (this.loadingURL) {\n popURL = this.loadingURL;\n } else {\n popHTML = `<!DOCTYPE html><html>\n <head>\n <meta charset=\"utf-8\">\n <title>${loadingImage}</title>\n </head>\n <body><h1>${loadingImage}</h1></body>\n <html>`;\n if (typeof URL !== 'undefined' && URL.createObjectURL) {\n const blob = new Blob([popHTML], {type: 'text/html'});\n popURL = URL.createObjectURL(blob);\n } else {\n popURL = 'data:text/html;base64;charset=utf-8,' + encode64(popHTML);\n }\n this.loadingURL = popURL;\n }\n this.exportWindow = window.open(popURL, this.exportWindowName);\n };\n const chrome = isChrome();\n if (imgType === 'PDF') {\n if (!this.customExportPDF && !chrome) {\n openExportWindow();\n }\n this.svgCanvas.exportPDF(exportWindowName);\n } else {\n if (!this.customExportImage) {\n openExportWindow();\n }\n /* const results = */ await this.svgCanvas.rasterExport(imgType, quality, this.exportWindowName);\n }\n }\n\n /**\n * By default, this.svgCanvas.open() is a no-op. It is up to an extension\n * mechanism (opera widget, etc.) to call `setCustomHandlers()` which\n * will make it do something.\n * @returns {void}\n */\n clickOpen () {\n this.svgCanvas.open();\n }\n\n /**\n *\n * @returns {void}\n */\n // eslint-disable-next-line class-methods-use-this\n clickImport () {\n /* empty fn */\n }\n\n /**\n *\n * @returns {void}\n */\n showDocProperties () {\n if (this.docprops) { return; }\n this.docprops = true;\n const $imgDialog = document.getElementById('se-img-prop');\n\n // update resolution option with actual resolution\n const resolution = this.svgCanvas.getResolution();\n if (this.configObj.curConfig.baseUnit !== 'px') {\n resolution.w = convertUnit(resolution.w) + this.configObj.curConfig.baseUnit;\n resolution.h = convertUnit(resolution.h) + this.configObj.curConfig.baseUnit;\n }\n $imgDialog.setAttribute('save', this.configObj.pref('img_save'));\n $imgDialog.setAttribute('width', resolution.w);\n $imgDialog.setAttribute('height', resolution.h);\n $imgDialog.setAttribute('title', this.svgCanvas.getDocumentTitle());\n $imgDialog.setAttribute('dialog', 'open');\n }\n\n /**\n *\n * @returns {void}\n */\n showPreferences () {\n if (this.configObj.preferences) { return; }\n this.configObj.preferences = true;\n const $editDialog = document.getElementById('se-edit-prefs');\n $('#main_menu').hide();\n // Update background color with current one\n const canvasBg = this.configObj.curPrefs.bkgd_color;\n const url = this.configObj.pref('bkgd_url');\n if (url) {\n $editDialog.setAttribute('bgurl', url);\n }\n $editDialog.setAttribute('gridsnappingon', this.configObj.curConfig.gridSnapping);\n $editDialog.setAttribute('gridsnappingstep', this.configObj.curConfig.snappingStep);\n $editDialog.setAttribute('gridcolor', this.configObj.curConfig.gridColor);\n $editDialog.setAttribute('canvasbg', canvasBg);\n $editDialog.setAttribute('dialog', 'open');\n }\n\n /**\n *\n * @returns {void}\n */\n // eslint-disable-next-line class-methods-use-this\n openHomePage () {\n window.open(homePage, '_blank');\n }\n\n /**\n *\n * @returns {void}\n */\n // eslint-disable-next-line class-methods-use-this\n hideSourceEditor () {\n const $editorDialog = document.getElementById('se-svg-editor-dialog');\n $editorDialog.setAttribute('dialog', 'closed');\n }\n\n /**\n * @param {Event} e\n * @returns {void} Resolves to `undefined`\n */\n async saveSourceEditor (e) {\n const $editorDialog = document.getElementById('se-svg-editor-dialog');\n if ($editorDialog.getAttribute('dialog') !== 'open') return;\n const saveChanges = () => {\n this.svgCanvas.clearSelection();\n this.hideSourceEditor();\n this.zoomImage();\n this.layersPanel.populateLayers();\n this.updateTitle();\n };\n\n if (!this.svgCanvas.setSvgString(e.detail.value)) {\n const ok = await seConfirm(this.uiStrings.notification.QerrorsRevertToSource);\n if (ok === false || ok === 'Cancel') {\n return;\n }\n saveChanges();\n return;\n }\n saveChanges();\n this.leftPanelHandlers.clickSelect();\n }\n\n /**\n *\n * @returns {void}\n */\n hideDocProperties () {\n const $imgDialog = document.getElementById('se-img-prop');\n $imgDialog.setAttribute('dialog', 'close');\n $imgDialog.setAttribute('save', this.configObj.pref('img_save'));\n this.docprops = false;\n }\n\n /**\n *\n * @returns {void}\n */\n hidePreferences () {\n const $editDialog = document.getElementById('se-edit-prefs');\n $editDialog.setAttribute('dialog', 'close');\n this.configObj.preferences = false;\n }\n\n /**\n * @param {Event} e\n * @returns {boolean} Whether there were problems saving the document properties\n */\n saveDocProperties (e) {\n // set title\n const {title, w, h, save} = e.detail;\n // set document title\n this.svgCanvas.setDocumentTitle(title);\n\n if (w !== 'fit' && !isValidUnit('width', w)) {\n seAlert(this.uiStrings.notification.invalidAttrValGiven);\n return false;\n }\n if (h !== 'fit' && !isValidUnit('height', h)) {\n seAlert(this.uiStrings.notification.invalidAttrValGiven);\n return false;\n }\n if (!this.svgCanvas.setResolution(w, h)) {\n seAlert(this.uiStrings.notification.noContentToFitTo);\n return false;\n }\n // Set image save option\n this.configObj.pref('img_save', save);\n this.updateCanvas();\n this.hideDocProperties();\n return true;\n }\n\n /**\n * Save user preferences based on current values in the UI.\n * @param {Event} e\n * @function module:SVGthis.savePreferences\n * @returns {Promise<void>}\n */\n async savePreferences (e) {\n const {lang, bgcolor, bgurl, gridsnappingon, gridsnappingstep, gridcolor, showrulers, baseunit} = e.detail;\n // Set background\n this.setBackground(bgcolor, bgurl);\n\n // set language\n if (lang && lang !== this.configObj.pref('lang')) {\n const {langParam, langData} = await this.putLocale(lang, this.goodLangs);\n await this.setLang(langParam, langData);\n }\n\n // set grid setting\n this.configObj.curConfig.gridSnapping = gridsnappingon;\n this.configObj.curConfig.snappingStep = gridsnappingstep;\n this.configObj.curConfig.gridColor = gridcolor;\n this.configObj.curConfig.showRulers = showrulers;\n\n $('#rulers').toggle(this.configObj.curConfig.showRulers);\n if (this.configObj.curConfig.showRulers) { this.rulers.updateRulers(); }\n this.configObj.curConfig.baseUnit = baseunit;\n this.svgCanvas.setConfig(this.configObj.curConfig);\n this.updateCanvas();\n this.hidePreferences();\n }\n\n /**\n * @param {Event} e\n * @returns {void} Resolves to `undefined`\n */\n cancelOverlays (e) {\n $('#dialog_box').hide();\n const $editorDialog = document.getElementById('se-svg-editor-dialog');\n const editingsource = $editorDialog.getAttribute('dialog') === 'open';\n if (!editingsource && !this.docprops && !this.configObj.preferences) {\n if (this.curContext) {\n this.svgCanvas.leaveContext();\n }\n return;\n }\n\n if (editingsource) {\n const origSource = this.svgCanvas.getSvgString();\n if (origSource !== e.detail.value) {\n const ok = seConfirm(this.uiStrings.notification.QignoreSourceChanges);\n if (ok) {\n this.hideSourceEditor();\n }\n } else {\n this.hideSourceEditor();\n }\n }\n }\n\n /**\n * @returns {void}\n */\n enableOrDisableClipboard () {\n let svgeditClipboard;\n try {\n svgeditClipboard = this.localStorage.getItem('svgedit_clipboard');\n } catch (err) {/* empty fn */}\n this.canvMenu.setAttribute((svgeditClipboard ? 'en' : 'dis') + 'ablemenuitems', '#paste,#paste_in_place');\n }\n\n /**\n * @function module:SVGthis.openPrep\n * @returns {boolean|Promise<boolean>} Resolves to boolean indicating `true` if there were no changes\n * and `false` after the user confirms.\n */\n async openPrep () {\n $('#main_menu').hide();\n if (this.svgCanvas.undoMgr.getUndoStackSize() === 0) {\n return true;\n }\n return await seConfirm(this.uiStrings.notification.QwantToOpen);\n }\n\n /**\n *\n * @param {Event} e\n * @returns {void}\n */\n // eslint-disable-next-line class-methods-use-this\n onDragEnter (e) {\n e.stopPropagation();\n e.preventDefault();\n // and indicator should be displayed here, such as \"drop files here\"\n }\n\n /**\n *\n * @param {Event} e\n * @returns {void}\n */\n // eslint-disable-next-line class-methods-use-this\n onDragOver (e) {\n e.stopPropagation();\n e.preventDefault();\n }\n\n /**\n *\n * @param {Event} e\n * @returns {void}\n */\n // eslint-disable-next-line class-methods-use-this\n onDragLeave (e) {\n e.stopPropagation();\n e.preventDefault();\n // hypothetical indicator should be removed here\n }\n\n /**\n * @function module:SVGthis.setLang\n * @param {string} lang The language code\n * @param {module:locale.LocaleStrings} allStrings See {@tutorial LocaleDocs}\n * @fires module:svgcanvas.SvgCanvas#event:ext_langReady\n * @fires module:svgcanvas.SvgCanvas#event:ext_langChanged\n * @returns {void} A Promise which resolves to `undefined`\n */\n setLang (lang, allStrings) {\n this.langChanged = true;\n this.configObj.pref('lang', lang);\n const $editDialog = document.getElementById('se-edit-prefs');\n $editDialog.setAttribute('lang', lang);\n if (!allStrings) {\n return;\n }\n // Todo: Remove `allStrings.lang` property in locale in\n // favor of just `lang`?\n document.documentElement.lang = allStrings.lang; // lang;\n // Todo: Add proper RTL Support!\n // Todo: Use RTL detection instead and take out of locales?\n // document.documentElement.dir = allStrings.dir;\n $.extend(this.uiStrings, allStrings);\n\n // const notif = allStrings.notification; // Currently unused\n // $.extend will only replace the given strings\n const oldLayerName = $('#layerlist tr.layersel td.layername').text();\n const renameLayer = (oldLayerName === this.uiStrings.common.layer + ' 1');\n\n this.svgCanvas.setUiStrings(allStrings);\n this.setTitles();\n\n if (renameLayer) {\n this.svgCanvas.renameCurrentLayer(this.uiStrings.common.layer + ' 1');\n this.layersPanel.populateLayers();\n }\n\n this.svgCanvas.runExtensions('langChanged', /** @type {module:svgcanvas.SvgCanvas#event:ext_langChanged} */ lang);\n\n // Copy title for certain tool elements\n this.elems = {\n '#stroke_color': '#tool_stroke .color_block',\n '#fill_color': '#tool_fill label, #tool_fill .color_block',\n '#linejoin_miter': '#cur_linejoin',\n '#linecap_butt': '#cur_linecap'\n };\n\n $.each(this.elems, function (source, dest) {\n $(dest).attr('title', $(source)[0].title);\n });\n\n // Copy alignment titles\n $('#multiselected_panel div[id^=tool_align]').each(() => {\n $('#tool_pos' + this.id.substr(10))[0].title = this.title;\n });\n }\n\n /**\n* @callback module:SVGthis.ReadyCallback\n* @returns {Promise<void>|void}\n*/\n /**\n* Queues a callback to be invoked when the editor is ready (or\n* to be invoked immediately if it is already ready--i.e.,\n* if `runCallbacks` has been run).\n* @function module:SVGthis.ready\n* @param {module:SVGthis.ReadyCallback} cb Callback to be queued to invoke\n* @returns {Promise<ArbitraryCallbackResult>} Resolves when all callbacks, including the supplied have resolved\n*/\n ready (cb) {\n return new Promise((resolve, reject) => {\n if (this.isReady) {\n resolve(cb());\n return;\n }\n this.callbacks.push([cb, resolve, reject]);\n });\n }\n\n /**\n* Invokes the callbacks previous set by `svgthis.ready`\n* @function module:SVGthis.runCallbacks\n* @returns {Promise<void>} Resolves to `undefined` if all callbacks succeeded and rejects otherwise\n*/\n async runCallbacks () {\n try {\n await Promise.all(this.callbacks.map(([cb]) => {\n return cb();\n }));\n } catch (err) {\n this.callbacks.forEach(([, , reject]) => {\n reject();\n });\n throw err;\n }\n this.callbacks.forEach(([, resolve]) => {\n resolve();\n });\n this.isReady = true;\n }\n\n /**\n * @function module:SVGthis.loadFromString\n * @param {string} str The SVG string to load\n * @param {PlainObject} [opts={}]\n * @param {boolean} [opts.noAlert=false] Option to avoid alert to user and instead get rejected promise\n * @returns {Promise<void>}\n */\n loadFromString (str, {noAlert} = {}) {\n return this.ready(async () => {\n try {\n await this.loadSvgString(str, {noAlert});\n } catch (err) {\n if (noAlert) {\n throw err;\n }\n }\n });\n }\n\n /**\n * @callback module:SVGthis.URLLoadCallback\n * @param {boolean} success\n * @returns {void}\n */\n /**\n * @function module:SVGthis.loadFromURL\n * @param {string} url URL from which to load an SVG string via Ajax\n * @param {PlainObject} [opts={}] May contain properties: `cache`, `callback`\n * @param {boolean} [opts.cache]\n * @param {boolean} [opts.noAlert]\n * @returns {Promise<void>} Resolves to `undefined` or rejects upon bad loading of\n * the SVG (or upon failure to parse the loaded string) when `noAlert` is\n * enabled\n */\n loadFromURL (url, {cache, noAlert} = {}) {\n return this.ready(() => {\n return new Promise((resolve, reject) => {\n $.ajax({\n url,\n dataType: 'text',\n cache: Boolean(cache),\n beforeSend () {\n $.process_cancel(this.uiStrings.notification.loadingImage);\n },\n success (str) {\n this.loadSvgString(str, {noAlert});\n },\n error (xhr, stat, err) {\n if (xhr.status !== 404 && xhr.responseText) {\n this.loadSvgString(xhr.responseText, {noAlert});\n return;\n }\n if (noAlert) {\n reject(new Error('URLLoadFail'));\n return;\n }\n seAlert(this.uiStrings.notification.URLLoadFail + ': \\n' + err);\n resolve();\n },\n complete () {\n $('#dialog_box').hide();\n }\n });\n });\n });\n }\n\n /**\n* @function module:SVGthis.loadFromDataURI\n* @param {string} str The Data URI to base64-decode (if relevant) and load\n* @param {PlainObject} [opts={}]\n* @param {boolean} [opts.noAlert]\n* @returns {Promise<void>} Resolves to `undefined` and rejects if loading SVG string fails and `noAlert` is enabled\n*/\n loadFromDataURI (str, {noAlert} = {}) {\n return this.ready(() => {\n let base64 = false;\n let pre = str.match(/^data:image\\/svg\\+xml;base64,/);\n if (pre) {\n base64 = true;\n } else {\n pre = str.match(/^data:image\\/svg\\+xml(?:;|;utf8)?,/);\n }\n if (pre) {\n pre = pre[0];\n }\n const src = str.slice(pre.length);\n return this.loadSvgString(base64 ? decode64(src) : decodeURIComponent(src), {noAlert});\n });\n }\n\n /**\n * @function module:SVGthis.addExtension\n * @param {string} name Used internally; no need for i18n.\n * @param {module:svgcanvas.ExtensionInitCallback} initfn Config to be invoked on this module\n * @param {module:svgcanvas.ExtensionInitArgs} initArgs\n * @throws {Error} If called too early\n * @returns {Promise<void>} Resolves to `undefined`\n*/\n addExtension (name, initfn, initArgs) {\n // Note that we don't want this on this.ready since some extensions\n // may want to run before then (like server_opensave).\n if (!this.svgCanvas) {\n throw new Error('Extension added too early');\n }\n return this.svgCanvas.addExtension.call(this, name, initfn, initArgs);\n }\n}\n\nconst editor = new Editor();\neditor.init();\n\nexport default editor;\n","// CONFIG AND EXTENSION SETTING\n/*\nFor default config and extensions (and available options) available to\n`setConfig()`, see the file `docs/tutorials/ConfigOptions.md`\n*/\n\nimport './jquery.min.js';\nimport './components/index.js';\nimport './dialogs/index.js';\nimport svgEditor from './svgedit.js';\n\n// URL OVERRIDE CONFIG\nsvgEditor.setConfig({\n /* To override the ability for URLs to set URL-based SVG content,\n uncomment the following: */\n // preventURLContentLoading: true,\n /* To override the ability for URLs to set other configuration (including\n extension config), uncomment the following: */\n // preventAllURLConfig: true,\n /* To override the ability for URLs to set their own extensions, uncomment the\n following (note that if `setConfig()` is used in extension code, it will still\n be additive to extensions, however): */\n // lockExtensions: true,\n});\n\nsvgEditor.setConfig(\n {\n // Indicate pref settings here if you wish to allow user storage or URL\n // settings to be able to override your default preferences (unless\n // other config options have already explicitly prevented one or the\n // other)\n },\n {allowInitialUserOverride: true}\n);\n\n// EXTENSION CONFIG\nsvgEditor.setConfig({\n extensions: [],\n noDefaultExtensions: false,\n // in addition to standard extensions, it is possible to add user extensions.\n // they behave exactly like all extensions but they can be anywhere\n // so the full relative path needs to specified for each user extensions.\n userExtensions: [/* '../ext-helloworld/ext-helloworld.js' */]\n});\n\n// OTHER CONFIG\nsvgEditor.setConfig({\n // canvasName: 'default',\n // canvas_expansion: 3,\n // initFill: {\n // color: 'FF0000', // solid red\n // opacity: 1\n // },\n // initStroke: {\n // width: 5,\n // color: '000000', // solid black\n // opacity: 1\n // },\n // initOpacity: 1,\n // initTool: 'select',\n // exportWindowType: 'new', // 'same'\n // wireframe: false,\n // showlayers: false,\n // no_save_warning: false,\n // PATH CONFIGURATION\n // imgPath: 'images/',\n /*\n Uncomment the following to allow at least same domain (embedded) access,\n including `file:///` access.\n Setting as `['*']` would allow any domain to access but would be unsafe to\n data privacy and integrity.\n */\n // May be 'null' (as a string) when used as a `file:///` URL\n // allowedOrigins: [location.origin || 'null'],\n // DOCUMENT PROPERTIES\n // dimensions: [640, 480],\n // EDITOR OPTIONS\n // gridSnapping: false,\n // gridColor: '#000',\n // baseUnit: 'px',\n // snappingStep: 10,\n // showRulers: true,\n // EXTENSION-RELATED (GRID)\n // showGrid: false, // Set by ext-grid.js\n // EXTENSION-RELATED (STORAGE)\n // Some interaction with `ext-storage.js`; prevent even the loading of\n // previously saved local storage\n // noStorageOnLoad: false,\n // Some interaction with `ext-storage.js`; strongly discouraged from\n // modification as it bypasses user privacy by preventing them from\n // choosing whether to keep local storage or not\n // forceStorage: false,\n // Used by `ext-storage.js`; empty any prior storage if the user\n // declines to store\n // emptyStorageOnDecline: true,\n});\n\n// PREF CHANGES\n/*\nsetConfig() can also be used to set preferences in addition to\n configuration (see defaultPrefs in svg-editor.js for a list of\n possible settings), but at least if you are using ext-storage.js\n to store preferences, it will probably be better to let your\n users control these.\nAs with configuration, one may use allowInitialUserOverride, but\n in the case of preferences, any previously stored preferences\n will also thereby be enabled to override this setting (and at a\n higher priority than any URL preference setting overrides).\n Failing to use allowInitialUserOverride will ensure preferences\n are hard-coded here regardless of URL or prior user storage setting.\n*/\nsvgEditor.setConfig({\n // Set dynamically within locale.js if not previously set\n // lang: '',\n // Will default to 's' if the window height is smaller than the minimum\n // height and 'm' otherwise\n // iconsize: '',\n /**\n * When showing the preferences dialog, svg-editor.js currently relies\n * on `curPrefs` instead of `svgEditor.pref`, so allowing an override for\n * `bkgd_color` means that this value won't have priority over block\n * auto-detection as far as determining which color shows initially\n * in the preferences dialog (though it can be changed and saved).\n */\n // bkgd_color: '#FFF',\n // bkgd_url: '',\n // img_save: 'embed',\n // Only shows in UI as far as alert notices\n // save_notice_done: false,\n // export_notice_done: false\n});\n\n// Variable XDOMAIN below is created by Rollup for the Xdomain build (see rollup.config.js)\n/* globals XDOMAIN */\ntry { // try clause to avoid js to complain if XDOMAIN undefined\n if (XDOMAIN) {\n svgEditor.setConfig({\n canvasName: 'xdomain', // Namespace this\n allowedOrigins: ['*']\n });\n console.info('xdomain config activated');\n }\n} catch (error) {/* empty fn */}\n","var $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\nvar fromCharCode = String.fromCharCode;\nvar nativeFromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\nvar INCORRECT_LENGTH = !!nativeFromCodePoint && nativeFromCodePoint.length != 1;\n\n// `String.fromCodePoint` method\n// https://tc39.es/ecma262/#sec-string.fromcodepoint\n$({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n fromCodePoint: function fromCodePoint(x) {\n var elements = [];\n var length = arguments.length;\n var i = 0;\n var code;\n while (length > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point');\n elements.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00)\n );\n } return elements.join('');\n }\n});\n","/*!\n * html2canvas 1.0.0-rc.7 <https://html2canvas.hertzen.com>\n * Copyright (c) 2020 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.html2canvas = factory());\n}(this, function () { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation. All rights reserved.\r\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n this file except in compliance with the License. You may obtain a copy of the\r\n License at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n MERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\n See the Apache Version 2.0 License for specific language governing permissions\r\n and limitations under the License.\r\n ***************************************************************************** */\r\n /* global Reflect, Promise */\r\n\r\n var extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n\r\n function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n }\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\r\n\r\n function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n }\r\n\r\n function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n }\n\n var Bounds = /** @class */ (function () {\r\n function Bounds(x, y, w, h) {\r\n this.left = x;\r\n this.top = y;\r\n this.width = w;\r\n this.height = h;\r\n }\r\n Bounds.prototype.add = function (x, y, w, h) {\r\n return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h);\r\n };\r\n Bounds.fromClientRect = function (clientRect) {\r\n return new Bounds(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\r\n };\r\n return Bounds;\r\n }());\r\n var parseBounds = function (node) {\r\n return Bounds.fromClientRect(node.getBoundingClientRect());\r\n };\r\n var parseDocumentSize = function (document) {\r\n var body = document.body;\r\n var documentElement = document.documentElement;\r\n if (!body || !documentElement) {\r\n throw new Error(\"Unable to get document size\");\r\n }\r\n var width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth));\r\n var height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight));\r\n return new Bounds(0, 0, width, height);\r\n };\n\n /*\n * css-line-break 1.1.1 <https://github.com/niklasvh/css-line-break#readme>\n * Copyright (c) 2019 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n var toCodePoints = function (str) {\r\n var codePoints = [];\r\n var i = 0;\r\n var length = str.length;\r\n while (i < length) {\r\n var value = str.charCodeAt(i++);\r\n if (value >= 0xd800 && value <= 0xdbff && i < length) {\r\n var extra = str.charCodeAt(i++);\r\n if ((extra & 0xfc00) === 0xdc00) {\r\n codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\r\n }\r\n else {\r\n codePoints.push(value);\r\n i--;\r\n }\r\n }\r\n else {\r\n codePoints.push(value);\r\n }\r\n }\r\n return codePoints;\r\n };\r\n var fromCodePoint = function () {\r\n var codePoints = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n codePoints[_i] = arguments[_i];\r\n }\r\n if (String.fromCodePoint) {\r\n return String.fromCodePoint.apply(String, codePoints);\r\n }\r\n var length = codePoints.length;\r\n if (!length) {\r\n return '';\r\n }\r\n var codeUnits = [];\r\n var index = -1;\r\n var result = '';\r\n while (++index < length) {\r\n var codePoint = codePoints[index];\r\n if (codePoint <= 0xffff) {\r\n codeUnits.push(codePoint);\r\n }\r\n else {\r\n codePoint -= 0x10000;\r\n codeUnits.push((codePoint >> 10) + 0xd800, codePoint % 0x400 + 0xdc00);\r\n }\r\n if (index + 1 === length || codeUnits.length > 0x4000) {\r\n result += String.fromCharCode.apply(String, codeUnits);\r\n codeUnits.length = 0;\r\n }\r\n }\r\n return result;\r\n };\r\n var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r\n // Use a lookup table to find the index.\r\n var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\r\n for (var i = 0; i < chars.length; i++) {\r\n lookup[chars.charCodeAt(i)] = i;\r\n }\r\n var decode = function (base64) {\r\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\r\n if (base64[base64.length - 1] === '=') {\r\n bufferLength--;\r\n if (base64[base64.length - 2] === '=') {\r\n bufferLength--;\r\n }\r\n }\r\n var buffer = typeof ArrayBuffer !== 'undefined' &&\r\n typeof Uint8Array !== 'undefined' &&\r\n typeof Uint8Array.prototype.slice !== 'undefined'\r\n ? new ArrayBuffer(bufferLength)\r\n : new Array(bufferLength);\r\n var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\r\n for (i = 0; i < len; i += 4) {\r\n encoded1 = lookup[base64.charCodeAt(i)];\r\n encoded2 = lookup[base64.charCodeAt(i + 1)];\r\n encoded3 = lookup[base64.charCodeAt(i + 2)];\r\n encoded4 = lookup[base64.charCodeAt(i + 3)];\r\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\r\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\r\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\r\n }\r\n return buffer;\r\n };\r\n var polyUint16Array = function (buffer) {\r\n var length = buffer.length;\r\n var bytes = [];\r\n for (var i = 0; i < length; i += 2) {\r\n bytes.push((buffer[i + 1] << 8) | buffer[i]);\r\n }\r\n return bytes;\r\n };\r\n var polyUint32Array = function (buffer) {\r\n var length = buffer.length;\r\n var bytes = [];\r\n for (var i = 0; i < length; i += 4) {\r\n bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\r\n }\r\n return bytes;\r\n };\n\n /** Shift size for getting the index-2 table offset. */\r\n var UTRIE2_SHIFT_2 = 5;\r\n /** Shift size for getting the index-1 table offset. */\r\n var UTRIE2_SHIFT_1 = 6 + 5;\r\n /**\r\n * Shift size for shifting left the index array values.\r\n * Increases possible data size with 16-bit index values at the cost\r\n * of compactability.\r\n * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\r\n */\r\n var UTRIE2_INDEX_SHIFT = 2;\r\n /**\r\n * Difference between the two shift sizes,\r\n * for getting an index-1 offset from an index-2 offset. 6=11-5\r\n */\r\n var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;\r\n /**\r\n * The part of the index-2 table for U+D800..U+DBFF stores values for\r\n * lead surrogate code _units_ not code _points_.\r\n * Values for lead surrogate code _points_ are indexed with this portion of the table.\r\n * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\r\n */\r\n var UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;\r\n /** Number of entries in a data block. 32=0x20 */\r\n var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;\r\n /** Mask for getting the lower bits for the in-data-block offset. */\r\n var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;\r\n var UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;\r\n /** Count the lengths of both BMP pieces. 2080=0x820 */\r\n var UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH;\r\n /**\r\n * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\r\n * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\r\n */\r\n var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;\r\n var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\r\n /**\r\n * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\r\n * Variable length, for code points up to highStart, where the last single-value range starts.\r\n * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\r\n * (For 0x100000 supplementary code points U+10000..U+10ffff.)\r\n *\r\n * The part of the index-2 table for supplementary code points starts\r\n * after this index-1 table.\r\n *\r\n * Both the index-1 table and the following part of the index-2 table\r\n * are omitted completely if there is only BMP data.\r\n */\r\n var UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;\r\n /**\r\n * Number of index-1 entries for the BMP. 32=0x20\r\n * This part of the index-1 table is omitted from the serialized form.\r\n */\r\n var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;\r\n /** Number of entries in an index-2 block. 64=0x40 */\r\n var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;\r\n /** Mask for getting the lower bits for the in-index-2-block offset. */\r\n var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;\r\n var slice16 = function (view, start, end) {\r\n if (view.slice) {\r\n return view.slice(start, end);\r\n }\r\n return new Uint16Array(Array.prototype.slice.call(view, start, end));\r\n };\r\n var slice32 = function (view, start, end) {\r\n if (view.slice) {\r\n return view.slice(start, end);\r\n }\r\n return new Uint32Array(Array.prototype.slice.call(view, start, end));\r\n };\r\n var createTrieFromBase64 = function (base64) {\r\n var buffer = decode(base64);\r\n var view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer);\r\n var view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer);\r\n var headerLength = 24;\r\n var index = slice16(view16, headerLength / 2, view32[4] / 2);\r\n var data = view32[5] === 2\r\n ? slice16(view16, (headerLength + view32[4]) / 2)\r\n : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));\r\n return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);\r\n };\r\n var Trie = /** @class */ (function () {\r\n function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {\r\n this.initialValue = initialValue;\r\n this.errorValue = errorValue;\r\n this.highStart = highStart;\r\n this.highValueIndex = highValueIndex;\r\n this.index = index;\r\n this.data = data;\r\n }\r\n /**\r\n * Get the value for a code point as stored in the Trie.\r\n *\r\n * @param codePoint the code point\r\n * @return the value\r\n */\r\n Trie.prototype.get = function (codePoint) {\r\n var ix;\r\n if (codePoint >= 0) {\r\n if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\r\n // Ordinary BMP code point, excluding leading surrogates.\r\n // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.\r\n // 16 bit data is stored in the index array itself.\r\n ix = this.index[codePoint >> UTRIE2_SHIFT_2];\r\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\r\n return this.data[ix];\r\n }\r\n if (codePoint <= 0xffff) {\r\n // Lead Surrogate Code Point. A Separate index section is stored for\r\n // lead surrogate code units and code points.\r\n // The main index has the code unit data.\r\n // For this function, we need the code point data.\r\n // Note: this expression could be refactored for slightly improved efficiency, but\r\n // surrogate code points will be so rare in practice that it's not worth it.\r\n ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)];\r\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\r\n return this.data[ix];\r\n }\r\n if (codePoint < this.highStart) {\r\n // Supplemental code point, use two-level lookup.\r\n ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1);\r\n ix = this.index[ix];\r\n ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK;\r\n ix = this.index[ix];\r\n ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\r\n return this.data[ix];\r\n }\r\n if (codePoint <= 0x10ffff) {\r\n return this.data[this.highValueIndex];\r\n }\r\n }\r\n // Fall through. The code point is outside of the legal range of 0..0x10ffff.\r\n return this.errorValue;\r\n };\r\n return Trie;\r\n }());\n\n var base64 = 'KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA/QD/AOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC/B8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg/CCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAAXgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C/4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw/3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK/gHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN/g3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwAKAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD//wQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AHQAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATwBPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA';\n\n /* @flow */\r\n var LETTER_NUMBER_MODIFIER = 50;\r\n // Non-tailorable Line Breaking Classes\r\n var BK = 1; // Cause a line break (after)\r\n var CR = 2; // Cause a line break (after), except between CR and LF\r\n var LF = 3; // Cause a line break (after)\r\n var CM = 4; // Prohibit a line break between the character and the preceding character\r\n var NL = 5; // Cause a line break (after)\r\n var WJ = 7; // Prohibit line breaks before and after\r\n var ZW = 8; // Provide a break opportunity\r\n var GL = 9; // Prohibit line breaks before and after\r\n var SP = 10; // Enable indirect line breaks\r\n var ZWJ = 11; // Prohibit line breaks within joiner sequences\r\n // Break Opportunities\r\n var B2 = 12; // Provide a line break opportunity before and after the character\r\n var BA = 13; // Generally provide a line break opportunity after the character\r\n var BB = 14; // Generally provide a line break opportunity before the character\r\n var HY = 15; // Provide a line break opportunity after the character, except in numeric context\r\n var CB = 16; // Provide a line break opportunity contingent on additional information\r\n // Characters Prohibiting Certain Breaks\r\n var CL = 17; // Prohibit line breaks before\r\n var CP = 18; // Prohibit line breaks before\r\n var EX = 19; // Prohibit line breaks before\r\n var IN = 20; // Allow only indirect line breaks between pairs\r\n var NS = 21; // Allow only indirect line breaks before\r\n var OP = 22; // Prohibit line breaks after\r\n var QU = 23; // Act like they are both opening and closing\r\n // Numeric Context\r\n var IS = 24; // Prevent breaks after any and before numeric\r\n var NU = 25; // Form numeric expressions for line breaking purposes\r\n var PO = 26; // Do not break following a numeric expression\r\n var PR = 27; // Do not break in front of a numeric expression\r\n var SY = 28; // Prevent a break before; and allow a break after\r\n // Other Characters\r\n var AI = 29; // Act like AL when the resolvedEAW is N; otherwise; act as ID\r\n var AL = 30; // Are alphabetic characters or symbols that are used with alphabetic characters\r\n var CJ = 31; // Treat as NS or ID for strict or normal breaking.\r\n var EB = 32; // Do not break from following Emoji Modifier\r\n var EM = 33; // Do not break from preceding Emoji Base\r\n var H2 = 34; // Form Korean syllable blocks\r\n var H3 = 35; // Form Korean syllable blocks\r\n var HL = 36; // Do not break around a following hyphen; otherwise act as Alphabetic\r\n var ID = 37; // Break before or after; except in some numeric context\r\n var JL = 38; // Form Korean syllable blocks\r\n var JV = 39; // Form Korean syllable blocks\r\n var JT = 40; // Form Korean syllable blocks\r\n var RI = 41; // Keep pairs together. For pairs; break before and after other classes\r\n var SA = 42; // Provide a line break opportunity contingent on additional, language-specific context analysis\r\n var XX = 43; // Have as yet unknown line breaking behavior or unassigned code positions\r\n var BREAK_MANDATORY = '!';\r\n var BREAK_NOT_ALLOWED = '×';\r\n var BREAK_ALLOWED = '÷';\r\n var UnicodeTrie = createTrieFromBase64(base64);\r\n var ALPHABETICS = [AL, HL];\r\n var HARD_LINE_BREAKS = [BK, CR, LF, NL];\r\n var SPACE = [SP, ZW];\r\n var PREFIX_POSTFIX = [PR, PO];\r\n var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE);\r\n var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3];\r\n var HYPHEN = [HY, BA];\r\n var codePointsToCharacterClasses = function (codePoints, lineBreak) {\r\n if (lineBreak === void 0) { lineBreak = 'strict'; }\r\n var types = [];\r\n var indicies = [];\r\n var categories = [];\r\n codePoints.forEach(function (codePoint, index) {\r\n var classType = UnicodeTrie.get(codePoint);\r\n if (classType > LETTER_NUMBER_MODIFIER) {\r\n categories.push(true);\r\n classType -= LETTER_NUMBER_MODIFIER;\r\n }\r\n else {\r\n categories.push(false);\r\n }\r\n if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) {\r\n // U+2010, U+2013, 〜 U+301C, U+30A0\r\n if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) {\r\n indicies.push(index);\r\n return types.push(CB);\r\n }\r\n }\r\n if (classType === CM || classType === ZWJ) {\r\n // LB10 Treat any remaining combining mark or ZWJ as AL.\r\n if (index === 0) {\r\n indicies.push(index);\r\n return types.push(AL);\r\n }\r\n // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of\r\n // the base character in all of the following rules. Treat ZWJ as if it were CM.\r\n var prev = types[index - 1];\r\n if (LINE_BREAKS.indexOf(prev) === -1) {\r\n indicies.push(indicies[index - 1]);\r\n return types.push(prev);\r\n }\r\n indicies.push(index);\r\n return types.push(AL);\r\n }\r\n indicies.push(index);\r\n if (classType === CJ) {\r\n return types.push(lineBreak === 'strict' ? NS : ID);\r\n }\r\n if (classType === SA) {\r\n return types.push(AL);\r\n }\r\n if (classType === AI) {\r\n return types.push(AL);\r\n }\r\n // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL\r\n // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised\r\n // to take into account the actual line breaking properties for these characters.\r\n if (classType === XX) {\r\n if ((codePoint >= 0x20000 && codePoint <= 0x2fffd) || (codePoint >= 0x30000 && codePoint <= 0x3fffd)) {\r\n return types.push(ID);\r\n }\r\n else {\r\n return types.push(AL);\r\n }\r\n }\r\n types.push(classType);\r\n });\r\n return [indicies, types, categories];\r\n };\r\n var isAdjacentWithSpaceIgnored = function (a, b, currentIndex, classTypes) {\r\n var current = classTypes[currentIndex];\r\n if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {\r\n var i = currentIndex;\r\n while (i <= classTypes.length) {\r\n i++;\r\n var next = classTypes[i];\r\n if (next === b) {\r\n return true;\r\n }\r\n if (next !== SP) {\r\n break;\r\n }\r\n }\r\n }\r\n if (current === SP) {\r\n var i = currentIndex;\r\n while (i > 0) {\r\n i--;\r\n var prev = classTypes[i];\r\n if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {\r\n var n = currentIndex;\r\n while (n <= classTypes.length) {\r\n n++;\r\n var next = classTypes[n];\r\n if (next === b) {\r\n return true;\r\n }\r\n if (next !== SP) {\r\n break;\r\n }\r\n }\r\n }\r\n if (prev !== SP) {\r\n break;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n var previousNonSpaceClassType = function (currentIndex, classTypes) {\r\n var i = currentIndex;\r\n while (i >= 0) {\r\n var type = classTypes[i];\r\n if (type === SP) {\r\n i--;\r\n }\r\n else {\r\n return type;\r\n }\r\n }\r\n return 0;\r\n };\r\n var _lineBreakAtIndex = function (codePoints, classTypes, indicies, index, forbiddenBreaks) {\r\n if (indicies[index] === 0) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n var currentIndex = index - 1;\r\n if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n var beforeIndex = currentIndex - 1;\r\n var afterIndex = currentIndex + 1;\r\n var current = classTypes[currentIndex];\r\n // LB4 Always break after hard line breaks.\r\n // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks.\r\n var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0;\r\n var next = classTypes[afterIndex];\r\n if (current === CR && next === LF) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n if (HARD_LINE_BREAKS.indexOf(current) !== -1) {\r\n return BREAK_MANDATORY;\r\n }\r\n // LB6 Do not break before hard line breaks.\r\n if (HARD_LINE_BREAKS.indexOf(next) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB7 Do not break before spaces or zero width space.\r\n if (SPACE.indexOf(next) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB8 Break before any character following a zero-width space, even if one or more spaces intervene.\r\n if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {\r\n return BREAK_ALLOWED;\r\n }\r\n // LB8a Do not break between a zero width joiner and an ideograph, emoji base or emoji modifier.\r\n if (UnicodeTrie.get(codePoints[currentIndex]) === ZWJ && (next === ID || next === EB || next === EM)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB11 Do not break before or after Word joiner and related characters.\r\n if (current === WJ || next === WJ) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB12 Do not break after NBSP and related characters.\r\n if (current === GL) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB12a Do not break before NBSP and related characters, except after spaces and hyphens.\r\n if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB13 Do not break before ] or ! or ; or /, even after spaces.\r\n if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB14 Do not break after [, even after spaces.\r\n if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB15 Do not break within ‘”[, even with intervening spaces.\r\n if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces.\r\n if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB17 Do not break within ‘——’, even with intervening spaces.\r\n if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB18 Break after spaces.\r\n if (current === SP) {\r\n return BREAK_ALLOWED;\r\n }\r\n // LB19 Do not break before or after quotation marks, such as .\r\n if (current === QU || next === QU) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB20 Break before and after unresolved CB.\r\n if (next === CB || current === CB) {\r\n return BREAK_ALLOWED;\r\n }\r\n // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents.\r\n if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB21a Don't break after Hebrew + Hyphen.\r\n if (before === HL && HYPHEN.indexOf(current) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB21b Dont break between Solidus and Hebrew letters.\r\n if (current === SY && next === HL) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB22 Do not break between two ellipses, or between letters, numbers or exclamations and ellipsis.\r\n if (next === IN && ALPHABETICS.concat(IN, EX, NU, ID, EB, EM).indexOf(current) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB23 Do not break between digits and letters.\r\n if ((ALPHABETICS.indexOf(next) !== -1 && current === NU) || (ALPHABETICS.indexOf(current) !== -1 && next === NU)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.\r\n if ((current === PR && [ID, EB, EM].indexOf(next) !== -1) ||\r\n ([ID, EB, EM].indexOf(current) !== -1 && next === PO)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.\r\n if ((ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1) ||\r\n (PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB25 Do not break between the following pairs of classes relevant to numbers:\r\n if (\r\n // (PR | PO) × ( OP | HY )? NU\r\n ([PR, PO].indexOf(current) !== -1 &&\r\n (next === NU || ([OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU))) ||\r\n // ( OP | HY ) × NU\r\n ([OP, HY].indexOf(current) !== -1 && next === NU) ||\r\n // NU ×\t(NU | SY | IS)\r\n (current === NU && [NU, SY, IS].indexOf(next) !== -1)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)\r\n if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {\r\n var prevIndex = currentIndex;\r\n while (prevIndex >= 0) {\r\n var type = classTypes[prevIndex];\r\n if (type === NU) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n else if ([SY, IS].indexOf(type) !== -1) {\r\n prevIndex--;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n // NU (NU | SY | IS)* (CL | CP)? × (PO | PR))\r\n if ([PR, PO].indexOf(next) !== -1) {\r\n var prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex;\r\n while (prevIndex >= 0) {\r\n var type = classTypes[prevIndex];\r\n if (type === NU) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n else if ([SY, IS].indexOf(type) !== -1) {\r\n prevIndex--;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n // LB26 Do not break a Korean syllable.\r\n if ((JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) ||\r\n ([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) ||\r\n ([JT, H3].indexOf(current) !== -1 && next === JT)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB27 Treat a Korean Syllable Block the same as ID.\r\n if ((KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1) ||\r\n (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB28 Do not break between alphabetics (“at”).\r\n if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”).\r\n if (current === IS && ALPHABETICS.indexOf(next) !== -1) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.\r\n if ((ALPHABETICS.concat(NU).indexOf(current) !== -1 && next === OP) ||\r\n (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n // LB30a Break between two regional indicator symbols if and only if there are an even number of regional\r\n // indicators preceding the position of the break.\r\n if (current === RI && next === RI) {\r\n var i = indicies[currentIndex];\r\n var count = 1;\r\n while (i > 0) {\r\n i--;\r\n if (classTypes[i] === RI) {\r\n count++;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n if (count % 2 !== 0) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n }\r\n // LB30b Do not break between an emoji base and an emoji modifier.\r\n if (current === EB && next === EM) {\r\n return BREAK_NOT_ALLOWED;\r\n }\r\n return BREAK_ALLOWED;\r\n };\r\n var cssFormattedClasses = function (codePoints, options) {\r\n if (!options) {\r\n options = { lineBreak: 'normal', wordBreak: 'normal' };\r\n }\r\n var _a = codePointsToCharacterClasses(codePoints, options.lineBreak), indicies = _a[0], classTypes = _a[1], isLetterNumber = _a[2];\r\n if (options.wordBreak === 'break-all' || options.wordBreak === 'break-word') {\r\n classTypes = classTypes.map(function (type) { return ([NU, AL, SA].indexOf(type) !== -1 ? ID : type); });\r\n }\r\n var forbiddenBreakpoints = options.wordBreak === 'keep-all'\r\n ? isLetterNumber.map(function (letterNumber, i) {\r\n return letterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff;\r\n })\r\n : undefined;\r\n return [indicies, classTypes, forbiddenBreakpoints];\r\n };\r\n var Break = /** @class */ (function () {\r\n function Break(codePoints, lineBreak, start, end) {\r\n this.codePoints = codePoints;\r\n this.required = lineBreak === BREAK_MANDATORY;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n Break.prototype.slice = function () {\r\n return fromCodePoint.apply(void 0, this.codePoints.slice(this.start, this.end));\r\n };\r\n return Break;\r\n }());\r\n var LineBreaker = function (str, options) {\r\n var codePoints = toCodePoints(str);\r\n var _a = cssFormattedClasses(codePoints, options), indicies = _a[0], classTypes = _a[1], forbiddenBreakpoints = _a[2];\r\n var length = codePoints.length;\r\n var lastEnd = 0;\r\n var nextIndex = 0;\r\n return {\r\n next: function () {\r\n if (nextIndex >= length) {\r\n return { done: true, value: null };\r\n }\r\n var lineBreak = BREAK_NOT_ALLOWED;\r\n while (nextIndex < length &&\r\n (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) ===\r\n BREAK_NOT_ALLOWED) { }\r\n if (lineBreak !== BREAK_NOT_ALLOWED || nextIndex === length) {\r\n var value = new Break(codePoints, lineBreak, lastEnd, nextIndex);\r\n lastEnd = nextIndex;\r\n return { value: value, done: false };\r\n }\r\n return { done: true, value: null };\r\n },\r\n };\r\n };\n\n // https://www.w3.org/TR/css-syntax-3\r\n var TokenType;\r\n (function (TokenType) {\r\n TokenType[TokenType[\"STRING_TOKEN\"] = 0] = \"STRING_TOKEN\";\r\n TokenType[TokenType[\"BAD_STRING_TOKEN\"] = 1] = \"BAD_STRING_TOKEN\";\r\n TokenType[TokenType[\"LEFT_PARENTHESIS_TOKEN\"] = 2] = \"LEFT_PARENTHESIS_TOKEN\";\r\n TokenType[TokenType[\"RIGHT_PARENTHESIS_TOKEN\"] = 3] = \"RIGHT_PARENTHESIS_TOKEN\";\r\n TokenType[TokenType[\"COMMA_TOKEN\"] = 4] = \"COMMA_TOKEN\";\r\n TokenType[TokenType[\"HASH_TOKEN\"] = 5] = \"HASH_TOKEN\";\r\n TokenType[TokenType[\"DELIM_TOKEN\"] = 6] = \"DELIM_TOKEN\";\r\n TokenType[TokenType[\"AT_KEYWORD_TOKEN\"] = 7] = \"AT_KEYWORD_TOKEN\";\r\n TokenType[TokenType[\"PREFIX_MATCH_TOKEN\"] = 8] = \"PREFIX_MATCH_TOKEN\";\r\n TokenType[TokenType[\"DASH_MATCH_TOKEN\"] = 9] = \"DASH_MATCH_TOKEN\";\r\n TokenType[TokenType[\"INCLUDE_MATCH_TOKEN\"] = 10] = \"INCLUDE_MATCH_TOKEN\";\r\n TokenType[TokenType[\"LEFT_CURLY_BRACKET_TOKEN\"] = 11] = \"LEFT_CURLY_BRACKET_TOKEN\";\r\n TokenType[TokenType[\"RIGHT_CURLY_BRACKET_TOKEN\"] = 12] = \"RIGHT_CURLY_BRACKET_TOKEN\";\r\n TokenType[TokenType[\"SUFFIX_MATCH_TOKEN\"] = 13] = \"SUFFIX_MATCH_TOKEN\";\r\n TokenType[TokenType[\"SUBSTRING_MATCH_TOKEN\"] = 14] = \"SUBSTRING_MATCH_TOKEN\";\r\n TokenType[TokenType[\"DIMENSION_TOKEN\"] = 15] = \"DIMENSION_TOKEN\";\r\n TokenType[TokenType[\"PERCENTAGE_TOKEN\"] = 16] = \"PERCENTAGE_TOKEN\";\r\n TokenType[TokenType[\"NUMBER_TOKEN\"] = 17] = \"NUMBER_TOKEN\";\r\n TokenType[TokenType[\"FUNCTION\"] = 18] = \"FUNCTION\";\r\n TokenType[TokenType[\"FUNCTION_TOKEN\"] = 19] = \"FUNCTION_TOKEN\";\r\n TokenType[TokenType[\"IDENT_TOKEN\"] = 20] = \"IDENT_TOKEN\";\r\n TokenType[TokenType[\"COLUMN_TOKEN\"] = 21] = \"COLUMN_TOKEN\";\r\n TokenType[TokenType[\"URL_TOKEN\"] = 22] = \"URL_TOKEN\";\r\n TokenType[TokenType[\"BAD_URL_TOKEN\"] = 23] = \"BAD_URL_TOKEN\";\r\n TokenType[TokenType[\"CDC_TOKEN\"] = 24] = \"CDC_TOKEN\";\r\n TokenType[TokenType[\"CDO_TOKEN\"] = 25] = \"CDO_TOKEN\";\r\n TokenType[TokenType[\"COLON_TOKEN\"] = 26] = \"COLON_TOKEN\";\r\n TokenType[TokenType[\"SEMICOLON_TOKEN\"] = 27] = \"SEMICOLON_TOKEN\";\r\n TokenType[TokenType[\"LEFT_SQUARE_BRACKET_TOKEN\"] = 28] = \"LEFT_SQUARE_BRACKET_TOKEN\";\r\n TokenType[TokenType[\"RIGHT_SQUARE_BRACKET_TOKEN\"] = 29] = \"RIGHT_SQUARE_BRACKET_TOKEN\";\r\n TokenType[TokenType[\"UNICODE_RANGE_TOKEN\"] = 30] = \"UNICODE_RANGE_TOKEN\";\r\n TokenType[TokenType[\"WHITESPACE_TOKEN\"] = 31] = \"WHITESPACE_TOKEN\";\r\n TokenType[TokenType[\"EOF_TOKEN\"] = 32] = \"EOF_TOKEN\";\r\n })(TokenType || (TokenType = {}));\r\n var FLAG_UNRESTRICTED = 1 << 0;\r\n var FLAG_ID = 1 << 1;\r\n var FLAG_INTEGER = 1 << 2;\r\n var FLAG_NUMBER = 1 << 3;\r\n var LINE_FEED = 0x000a;\r\n var SOLIDUS = 0x002f;\r\n var REVERSE_SOLIDUS = 0x005c;\r\n var CHARACTER_TABULATION = 0x0009;\r\n var SPACE$1 = 0x0020;\r\n var QUOTATION_MARK = 0x0022;\r\n var EQUALS_SIGN = 0x003d;\r\n var NUMBER_SIGN = 0x0023;\r\n var DOLLAR_SIGN = 0x0024;\r\n var PERCENTAGE_SIGN = 0x0025;\r\n var APOSTROPHE = 0x0027;\r\n var LEFT_PARENTHESIS = 0x0028;\r\n var RIGHT_PARENTHESIS = 0x0029;\r\n var LOW_LINE = 0x005f;\r\n var HYPHEN_MINUS = 0x002d;\r\n var EXCLAMATION_MARK = 0x0021;\r\n var LESS_THAN_SIGN = 0x003c;\r\n var GREATER_THAN_SIGN = 0x003e;\r\n var COMMERCIAL_AT = 0x0040;\r\n var LEFT_SQUARE_BRACKET = 0x005b;\r\n var RIGHT_SQUARE_BRACKET = 0x005d;\r\n var CIRCUMFLEX_ACCENT = 0x003d;\r\n var LEFT_CURLY_BRACKET = 0x007b;\r\n var QUESTION_MARK = 0x003f;\r\n var RIGHT_CURLY_BRACKET = 0x007d;\r\n var VERTICAL_LINE = 0x007c;\r\n var TILDE = 0x007e;\r\n var CONTROL = 0x0080;\r\n var REPLACEMENT_CHARACTER = 0xfffd;\r\n var ASTERISK = 0x002a;\r\n var PLUS_SIGN = 0x002b;\r\n var COMMA = 0x002c;\r\n var COLON = 0x003a;\r\n var SEMICOLON = 0x003b;\r\n var FULL_STOP = 0x002e;\r\n var NULL = 0x0000;\r\n var BACKSPACE = 0x0008;\r\n var LINE_TABULATION = 0x000b;\r\n var SHIFT_OUT = 0x000e;\r\n var INFORMATION_SEPARATOR_ONE = 0x001f;\r\n var DELETE = 0x007f;\r\n var EOF = -1;\r\n var ZERO = 0x0030;\r\n var a = 0x0061;\r\n var e = 0x0065;\r\n var f = 0x0066;\r\n var u = 0x0075;\r\n var z = 0x007a;\r\n var A = 0x0041;\r\n var E = 0x0045;\r\n var F = 0x0046;\r\n var U = 0x0055;\r\n var Z = 0x005a;\r\n var isDigit = function (codePoint) { return codePoint >= ZERO && codePoint <= 0x0039; };\r\n var isSurrogateCodePoint = function (codePoint) { return codePoint >= 0xd800 && codePoint <= 0xdfff; };\r\n var isHex = function (codePoint) {\r\n return isDigit(codePoint) || (codePoint >= A && codePoint <= F) || (codePoint >= a && codePoint <= f);\r\n };\r\n var isLowerCaseLetter = function (codePoint) { return codePoint >= a && codePoint <= z; };\r\n var isUpperCaseLetter = function (codePoint) { return codePoint >= A && codePoint <= Z; };\r\n var isLetter = function (codePoint) { return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint); };\r\n var isNonASCIICodePoint = function (codePoint) { return codePoint >= CONTROL; };\r\n var isWhiteSpace = function (codePoint) {\r\n return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE$1;\r\n };\r\n var isNameStartCodePoint = function (codePoint) {\r\n return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE;\r\n };\r\n var isNameCodePoint = function (codePoint) {\r\n return isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS;\r\n };\r\n var isNonPrintableCodePoint = function (codePoint) {\r\n return ((codePoint >= NULL && codePoint <= BACKSPACE) ||\r\n codePoint === LINE_TABULATION ||\r\n (codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) ||\r\n codePoint === DELETE);\r\n };\r\n var isValidEscape = function (c1, c2) {\r\n if (c1 !== REVERSE_SOLIDUS) {\r\n return false;\r\n }\r\n return c2 !== LINE_FEED;\r\n };\r\n var isIdentifierStart = function (c1, c2, c3) {\r\n if (c1 === HYPHEN_MINUS) {\r\n return isNameStartCodePoint(c2) || isValidEscape(c2, c3);\r\n }\r\n else if (isNameStartCodePoint(c1)) {\r\n return true;\r\n }\r\n else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n var isNumberStart = function (c1, c2, c3) {\r\n if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\r\n if (isDigit(c2)) {\r\n return true;\r\n }\r\n return c2 === FULL_STOP && isDigit(c3);\r\n }\r\n if (c1 === FULL_STOP) {\r\n return isDigit(c2);\r\n }\r\n return isDigit(c1);\r\n };\r\n var stringToNumber = function (codePoints) {\r\n var c = 0;\r\n var sign = 1;\r\n if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\r\n if (codePoints[c] === HYPHEN_MINUS) {\r\n sign = -1;\r\n }\r\n c++;\r\n }\r\n var integers = [];\r\n while (isDigit(codePoints[c])) {\r\n integers.push(codePoints[c++]);\r\n }\r\n var int = integers.length ? parseInt(fromCodePoint.apply(void 0, integers), 10) : 0;\r\n if (codePoints[c] === FULL_STOP) {\r\n c++;\r\n }\r\n var fraction = [];\r\n while (isDigit(codePoints[c])) {\r\n fraction.push(codePoints[c++]);\r\n }\r\n var fracd = fraction.length;\r\n var frac = fracd ? parseInt(fromCodePoint.apply(void 0, fraction), 10) : 0;\r\n if (codePoints[c] === E || codePoints[c] === e) {\r\n c++;\r\n }\r\n var expsign = 1;\r\n if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\r\n if (codePoints[c] === HYPHEN_MINUS) {\r\n expsign = -1;\r\n }\r\n c++;\r\n }\r\n var exponent = [];\r\n while (isDigit(codePoints[c])) {\r\n exponent.push(codePoints[c++]);\r\n }\r\n var exp = exponent.length ? parseInt(fromCodePoint.apply(void 0, exponent), 10) : 0;\r\n return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp);\r\n };\r\n var LEFT_PARENTHESIS_TOKEN = {\r\n type: TokenType.LEFT_PARENTHESIS_TOKEN\r\n };\r\n var RIGHT_PARENTHESIS_TOKEN = {\r\n type: TokenType.RIGHT_PARENTHESIS_TOKEN\r\n };\r\n var COMMA_TOKEN = { type: TokenType.COMMA_TOKEN };\r\n var SUFFIX_MATCH_TOKEN = { type: TokenType.SUFFIX_MATCH_TOKEN };\r\n var PREFIX_MATCH_TOKEN = { type: TokenType.PREFIX_MATCH_TOKEN };\r\n var COLUMN_TOKEN = { type: TokenType.COLUMN_TOKEN };\r\n var DASH_MATCH_TOKEN = { type: TokenType.DASH_MATCH_TOKEN };\r\n var INCLUDE_MATCH_TOKEN = { type: TokenType.INCLUDE_MATCH_TOKEN };\r\n var LEFT_CURLY_BRACKET_TOKEN = {\r\n type: TokenType.LEFT_CURLY_BRACKET_TOKEN\r\n };\r\n var RIGHT_CURLY_BRACKET_TOKEN = {\r\n type: TokenType.RIGHT_CURLY_BRACKET_TOKEN\r\n };\r\n var SUBSTRING_MATCH_TOKEN = { type: TokenType.SUBSTRING_MATCH_TOKEN };\r\n var BAD_URL_TOKEN = { type: TokenType.BAD_URL_TOKEN };\r\n var BAD_STRING_TOKEN = { type: TokenType.BAD_STRING_TOKEN };\r\n var CDO_TOKEN = { type: TokenType.CDO_TOKEN };\r\n var CDC_TOKEN = { type: TokenType.CDC_TOKEN };\r\n var COLON_TOKEN = { type: TokenType.COLON_TOKEN };\r\n var SEMICOLON_TOKEN = { type: TokenType.SEMICOLON_TOKEN };\r\n var LEFT_SQUARE_BRACKET_TOKEN = {\r\n type: TokenType.LEFT_SQUARE_BRACKET_TOKEN\r\n };\r\n var RIGHT_SQUARE_BRACKET_TOKEN = {\r\n type: TokenType.RIGHT_SQUARE_BRACKET_TOKEN\r\n };\r\n var WHITESPACE_TOKEN = { type: TokenType.WHITESPACE_TOKEN };\r\n var EOF_TOKEN = { type: TokenType.EOF_TOKEN };\r\n var Tokenizer = /** @class */ (function () {\r\n function Tokenizer() {\r\n this._value = [];\r\n }\r\n Tokenizer.prototype.write = function (chunk) {\r\n this._value = this._value.concat(toCodePoints(chunk));\r\n };\r\n Tokenizer.prototype.read = function () {\r\n var tokens = [];\r\n var token = this.consumeToken();\r\n while (token !== EOF_TOKEN) {\r\n tokens.push(token);\r\n token = this.consumeToken();\r\n }\r\n return tokens;\r\n };\r\n Tokenizer.prototype.consumeToken = function () {\r\n var codePoint = this.consumeCodePoint();\r\n switch (codePoint) {\r\n case QUOTATION_MARK:\r\n return this.consumeStringToken(QUOTATION_MARK);\r\n case NUMBER_SIGN:\r\n var c1 = this.peekCodePoint(0);\r\n var c2 = this.peekCodePoint(1);\r\n var c3 = this.peekCodePoint(2);\r\n if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {\r\n var flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED;\r\n var value = this.consumeName();\r\n return { type: TokenType.HASH_TOKEN, value: value, flags: flags };\r\n }\r\n break;\r\n case DOLLAR_SIGN:\r\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n this.consumeCodePoint();\r\n return SUFFIX_MATCH_TOKEN;\r\n }\r\n break;\r\n case APOSTROPHE:\r\n return this.consumeStringToken(APOSTROPHE);\r\n case LEFT_PARENTHESIS:\r\n return LEFT_PARENTHESIS_TOKEN;\r\n case RIGHT_PARENTHESIS:\r\n return RIGHT_PARENTHESIS_TOKEN;\r\n case ASTERISK:\r\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n this.consumeCodePoint();\r\n return SUBSTRING_MATCH_TOKEN;\r\n }\r\n break;\r\n case PLUS_SIGN:\r\n if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeNumericToken();\r\n }\r\n break;\r\n case COMMA:\r\n return COMMA_TOKEN;\r\n case HYPHEN_MINUS:\r\n var e1 = codePoint;\r\n var e2 = this.peekCodePoint(0);\r\n var e3 = this.peekCodePoint(1);\r\n if (isNumberStart(e1, e2, e3)) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeNumericToken();\r\n }\r\n if (isIdentifierStart(e1, e2, e3)) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeIdentLikeToken();\r\n }\r\n if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {\r\n this.consumeCodePoint();\r\n this.consumeCodePoint();\r\n return CDC_TOKEN;\r\n }\r\n break;\r\n case FULL_STOP:\r\n if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeNumericToken();\r\n }\r\n break;\r\n case SOLIDUS:\r\n if (this.peekCodePoint(0) === ASTERISK) {\r\n this.consumeCodePoint();\r\n while (true) {\r\n var c = this.consumeCodePoint();\r\n if (c === ASTERISK) {\r\n c = this.consumeCodePoint();\r\n if (c === SOLIDUS) {\r\n return this.consumeToken();\r\n }\r\n }\r\n if (c === EOF) {\r\n return this.consumeToken();\r\n }\r\n }\r\n }\r\n break;\r\n case COLON:\r\n return COLON_TOKEN;\r\n case SEMICOLON:\r\n return SEMICOLON_TOKEN;\r\n case LESS_THAN_SIGN:\r\n if (this.peekCodePoint(0) === EXCLAMATION_MARK &&\r\n this.peekCodePoint(1) === HYPHEN_MINUS &&\r\n this.peekCodePoint(2) === HYPHEN_MINUS) {\r\n this.consumeCodePoint();\r\n this.consumeCodePoint();\r\n return CDO_TOKEN;\r\n }\r\n break;\r\n case COMMERCIAL_AT:\r\n var a1 = this.peekCodePoint(0);\r\n var a2 = this.peekCodePoint(1);\r\n var a3 = this.peekCodePoint(2);\r\n if (isIdentifierStart(a1, a2, a3)) {\r\n var value = this.consumeName();\r\n return { type: TokenType.AT_KEYWORD_TOKEN, value: value };\r\n }\r\n break;\r\n case LEFT_SQUARE_BRACKET:\r\n return LEFT_SQUARE_BRACKET_TOKEN;\r\n case REVERSE_SOLIDUS:\r\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeIdentLikeToken();\r\n }\r\n break;\r\n case RIGHT_SQUARE_BRACKET:\r\n return RIGHT_SQUARE_BRACKET_TOKEN;\r\n case CIRCUMFLEX_ACCENT:\r\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n this.consumeCodePoint();\r\n return PREFIX_MATCH_TOKEN;\r\n }\r\n break;\r\n case LEFT_CURLY_BRACKET:\r\n return LEFT_CURLY_BRACKET_TOKEN;\r\n case RIGHT_CURLY_BRACKET:\r\n return RIGHT_CURLY_BRACKET_TOKEN;\r\n case u:\r\n case U:\r\n var u1 = this.peekCodePoint(0);\r\n var u2 = this.peekCodePoint(1);\r\n if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {\r\n this.consumeCodePoint();\r\n this.consumeUnicodeRangeToken();\r\n }\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeIdentLikeToken();\r\n case VERTICAL_LINE:\r\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n this.consumeCodePoint();\r\n return DASH_MATCH_TOKEN;\r\n }\r\n if (this.peekCodePoint(0) === VERTICAL_LINE) {\r\n this.consumeCodePoint();\r\n return COLUMN_TOKEN;\r\n }\r\n break;\r\n case TILDE:\r\n if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n this.consumeCodePoint();\r\n return INCLUDE_MATCH_TOKEN;\r\n }\r\n break;\r\n case EOF:\r\n return EOF_TOKEN;\r\n }\r\n if (isWhiteSpace(codePoint)) {\r\n this.consumeWhiteSpace();\r\n return WHITESPACE_TOKEN;\r\n }\r\n if (isDigit(codePoint)) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeNumericToken();\r\n }\r\n if (isNameStartCodePoint(codePoint)) {\r\n this.reconsumeCodePoint(codePoint);\r\n return this.consumeIdentLikeToken();\r\n }\r\n return { type: TokenType.DELIM_TOKEN, value: fromCodePoint(codePoint) };\r\n };\r\n Tokenizer.prototype.consumeCodePoint = function () {\r\n var value = this._value.shift();\r\n return typeof value === 'undefined' ? -1 : value;\r\n };\r\n Tokenizer.prototype.reconsumeCodePoint = function (codePoint) {\r\n this._value.unshift(codePoint);\r\n };\r\n Tokenizer.prototype.peekCodePoint = function (delta) {\r\n if (delta >= this._value.length) {\r\n return -1;\r\n }\r\n return this._value[delta];\r\n };\r\n Tokenizer.prototype.consumeUnicodeRangeToken = function () {\r\n var digits = [];\r\n var codePoint = this.consumeCodePoint();\r\n while (isHex(codePoint) && digits.length < 6) {\r\n digits.push(codePoint);\r\n codePoint = this.consumeCodePoint();\r\n }\r\n var questionMarks = false;\r\n while (codePoint === QUESTION_MARK && digits.length < 6) {\r\n digits.push(codePoint);\r\n codePoint = this.consumeCodePoint();\r\n questionMarks = true;\r\n }\r\n if (questionMarks) {\r\n var start_1 = parseInt(fromCodePoint.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? ZERO : digit); })), 16);\r\n var end = parseInt(fromCodePoint.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? F : digit); })), 16);\r\n return { type: TokenType.UNICODE_RANGE_TOKEN, start: start_1, end: end };\r\n }\r\n var start = parseInt(fromCodePoint.apply(void 0, digits), 16);\r\n if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) {\r\n this.consumeCodePoint();\r\n codePoint = this.consumeCodePoint();\r\n var endDigits = [];\r\n while (isHex(codePoint) && endDigits.length < 6) {\r\n endDigits.push(codePoint);\r\n codePoint = this.consumeCodePoint();\r\n }\r\n var end = parseInt(fromCodePoint.apply(void 0, endDigits), 16);\r\n return { type: TokenType.UNICODE_RANGE_TOKEN, start: start, end: end };\r\n }\r\n else {\r\n return { type: TokenType.UNICODE_RANGE_TOKEN, start: start, end: start };\r\n }\r\n };\r\n Tokenizer.prototype.consumeIdentLikeToken = function () {\r\n var value = this.consumeName();\r\n if (value.toLowerCase() === 'url' && this.peekCodePoint(0) === LEFT_PARENTHESIS) {\r\n this.consumeCodePoint();\r\n return this.consumeUrlToken();\r\n }\r\n else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {\r\n this.consumeCodePoint();\r\n return { type: TokenType.FUNCTION_TOKEN, value: value };\r\n }\r\n return { type: TokenType.IDENT_TOKEN, value: value };\r\n };\r\n Tokenizer.prototype.consumeUrlToken = function () {\r\n var value = [];\r\n this.consumeWhiteSpace();\r\n if (this.peekCodePoint(0) === EOF) {\r\n return { type: TokenType.URL_TOKEN, value: '' };\r\n }\r\n var next = this.peekCodePoint(0);\r\n if (next === APOSTROPHE || next === QUOTATION_MARK) {\r\n var stringToken = this.consumeStringToken(this.consumeCodePoint());\r\n if (stringToken.type === TokenType.STRING_TOKEN) {\r\n this.consumeWhiteSpace();\r\n if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\r\n this.consumeCodePoint();\r\n return { type: TokenType.URL_TOKEN, value: stringToken.value };\r\n }\r\n }\r\n this.consumeBadUrlRemnants();\r\n return BAD_URL_TOKEN;\r\n }\r\n while (true) {\r\n var codePoint = this.consumeCodePoint();\r\n if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {\r\n return { type: TokenType.URL_TOKEN, value: fromCodePoint.apply(void 0, value) };\r\n }\r\n else if (isWhiteSpace(codePoint)) {\r\n this.consumeWhiteSpace();\r\n if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\r\n this.consumeCodePoint();\r\n return { type: TokenType.URL_TOKEN, value: fromCodePoint.apply(void 0, value) };\r\n }\r\n this.consumeBadUrlRemnants();\r\n return BAD_URL_TOKEN;\r\n }\r\n else if (codePoint === QUOTATION_MARK ||\r\n codePoint === APOSTROPHE ||\r\n codePoint === LEFT_PARENTHESIS ||\r\n isNonPrintableCodePoint(codePoint)) {\r\n this.consumeBadUrlRemnants();\r\n return BAD_URL_TOKEN;\r\n }\r\n else if (codePoint === REVERSE_SOLIDUS) {\r\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\r\n value.push(this.consumeEscapedCodePoint());\r\n }\r\n else {\r\n this.consumeBadUrlRemnants();\r\n return BAD_URL_TOKEN;\r\n }\r\n }\r\n else {\r\n value.push(codePoint);\r\n }\r\n }\r\n };\r\n Tokenizer.prototype.consumeWhiteSpace = function () {\r\n while (isWhiteSpace(this.peekCodePoint(0))) {\r\n this.consumeCodePoint();\r\n }\r\n };\r\n Tokenizer.prototype.consumeBadUrlRemnants = function () {\r\n while (true) {\r\n var codePoint = this.consumeCodePoint();\r\n if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {\r\n return;\r\n }\r\n if (isValidEscape(codePoint, this.peekCodePoint(0))) {\r\n this.consumeEscapedCodePoint();\r\n }\r\n }\r\n };\r\n Tokenizer.prototype.consumeStringSlice = function (count) {\r\n var SLICE_STACK_SIZE = 60000;\r\n var value = '';\r\n while (count > 0) {\r\n var amount = Math.min(SLICE_STACK_SIZE, count);\r\n value += fromCodePoint.apply(void 0, this._value.splice(0, amount));\r\n count -= amount;\r\n }\r\n this._value.shift();\r\n return value;\r\n };\r\n Tokenizer.prototype.consumeStringToken = function (endingCodePoint) {\r\n var value = '';\r\n var i = 0;\r\n do {\r\n var codePoint = this._value[i];\r\n if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) {\r\n value += this.consumeStringSlice(i);\r\n return { type: TokenType.STRING_TOKEN, value: value };\r\n }\r\n if (codePoint === LINE_FEED) {\r\n this._value.splice(0, i);\r\n return BAD_STRING_TOKEN;\r\n }\r\n if (codePoint === REVERSE_SOLIDUS) {\r\n var next = this._value[i + 1];\r\n if (next !== EOF && next !== undefined) {\r\n if (next === LINE_FEED) {\r\n value += this.consumeStringSlice(i);\r\n i = -1;\r\n this._value.shift();\r\n }\r\n else if (isValidEscape(codePoint, next)) {\r\n value += this.consumeStringSlice(i);\r\n value += fromCodePoint(this.consumeEscapedCodePoint());\r\n i = -1;\r\n }\r\n }\r\n }\r\n i++;\r\n } while (true);\r\n };\r\n Tokenizer.prototype.consumeNumber = function () {\r\n var repr = [];\r\n var type = FLAG_INTEGER;\r\n var c1 = this.peekCodePoint(0);\r\n if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\r\n repr.push(this.consumeCodePoint());\r\n }\r\n while (isDigit(this.peekCodePoint(0))) {\r\n repr.push(this.consumeCodePoint());\r\n }\r\n c1 = this.peekCodePoint(0);\r\n var c2 = this.peekCodePoint(1);\r\n if (c1 === FULL_STOP && isDigit(c2)) {\r\n repr.push(this.consumeCodePoint(), this.consumeCodePoint());\r\n type = FLAG_NUMBER;\r\n while (isDigit(this.peekCodePoint(0))) {\r\n repr.push(this.consumeCodePoint());\r\n }\r\n }\r\n c1 = this.peekCodePoint(0);\r\n c2 = this.peekCodePoint(1);\r\n var c3 = this.peekCodePoint(2);\r\n if ((c1 === E || c1 === e) && (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) || isDigit(c2))) {\r\n repr.push(this.consumeCodePoint(), this.consumeCodePoint());\r\n type = FLAG_NUMBER;\r\n while (isDigit(this.peekCodePoint(0))) {\r\n repr.push(this.consumeCodePoint());\r\n }\r\n }\r\n return [stringToNumber(repr), type];\r\n };\r\n Tokenizer.prototype.consumeNumericToken = function () {\r\n var _a = this.consumeNumber(), number = _a[0], flags = _a[1];\r\n var c1 = this.peekCodePoint(0);\r\n var c2 = this.peekCodePoint(1);\r\n var c3 = this.peekCodePoint(2);\r\n if (isIdentifierStart(c1, c2, c3)) {\r\n var unit = this.consumeName();\r\n return { type: TokenType.DIMENSION_TOKEN, number: number, flags: flags, unit: unit };\r\n }\r\n if (c1 === PERCENTAGE_SIGN) {\r\n this.consumeCodePoint();\r\n return { type: TokenType.PERCENTAGE_TOKEN, number: number, flags: flags };\r\n }\r\n return { type: TokenType.NUMBER_TOKEN, number: number, flags: flags };\r\n };\r\n Tokenizer.prototype.consumeEscapedCodePoint = function () {\r\n var codePoint = this.consumeCodePoint();\r\n if (isHex(codePoint)) {\r\n var hex = fromCodePoint(codePoint);\r\n while (isHex(this.peekCodePoint(0)) && hex.length < 6) {\r\n hex += fromCodePoint(this.consumeCodePoint());\r\n }\r\n if (isWhiteSpace(this.peekCodePoint(0))) {\r\n this.consumeCodePoint();\r\n }\r\n var hexCodePoint = parseInt(hex, 16);\r\n if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 0x10ffff) {\r\n return REPLACEMENT_CHARACTER;\r\n }\r\n return hexCodePoint;\r\n }\r\n if (codePoint === EOF) {\r\n return REPLACEMENT_CHARACTER;\r\n }\r\n return codePoint;\r\n };\r\n Tokenizer.prototype.consumeName = function () {\r\n var result = '';\r\n while (true) {\r\n var codePoint = this.consumeCodePoint();\r\n if (isNameCodePoint(codePoint)) {\r\n result += fromCodePoint(codePoint);\r\n }\r\n else if (isValidEscape(codePoint, this.peekCodePoint(0))) {\r\n result += fromCodePoint(this.consumeEscapedCodePoint());\r\n }\r\n else {\r\n this.reconsumeCodePoint(codePoint);\r\n return result;\r\n }\r\n }\r\n };\r\n return Tokenizer;\r\n }());\n\n var Parser = /** @class */ (function () {\r\n function Parser(tokens) {\r\n this._tokens = tokens;\r\n }\r\n Parser.create = function (value) {\r\n var tokenizer = new Tokenizer();\r\n tokenizer.write(value);\r\n return new Parser(tokenizer.read());\r\n };\r\n Parser.parseValue = function (value) {\r\n return Parser.create(value).parseComponentValue();\r\n };\r\n Parser.parseValues = function (value) {\r\n return Parser.create(value).parseComponentValues();\r\n };\r\n Parser.prototype.parseComponentValue = function () {\r\n var token = this.consumeToken();\r\n while (token.type === TokenType.WHITESPACE_TOKEN) {\r\n token = this.consumeToken();\r\n }\r\n if (token.type === TokenType.EOF_TOKEN) {\r\n throw new SyntaxError(\"Error parsing CSS component value, unexpected EOF\");\r\n }\r\n this.reconsumeToken(token);\r\n var value = this.consumeComponentValue();\r\n do {\r\n token = this.consumeToken();\r\n } while (token.type === TokenType.WHITESPACE_TOKEN);\r\n if (token.type === TokenType.EOF_TOKEN) {\r\n return value;\r\n }\r\n throw new SyntaxError(\"Error parsing CSS component value, multiple values found when expecting only one\");\r\n };\r\n Parser.prototype.parseComponentValues = function () {\r\n var values = [];\r\n while (true) {\r\n var value = this.consumeComponentValue();\r\n if (value.type === TokenType.EOF_TOKEN) {\r\n return values;\r\n }\r\n values.push(value);\r\n values.push();\r\n }\r\n };\r\n Parser.prototype.consumeComponentValue = function () {\r\n var token = this.consumeToken();\r\n switch (token.type) {\r\n case TokenType.LEFT_CURLY_BRACKET_TOKEN:\r\n case TokenType.LEFT_SQUARE_BRACKET_TOKEN:\r\n case TokenType.LEFT_PARENTHESIS_TOKEN:\r\n return this.consumeSimpleBlock(token.type);\r\n case TokenType.FUNCTION_TOKEN:\r\n return this.consumeFunction(token);\r\n }\r\n return token;\r\n };\r\n Parser.prototype.consumeSimpleBlock = function (type) {\r\n var block = { type: type, values: [] };\r\n var token = this.consumeToken();\r\n while (true) {\r\n if (token.type === TokenType.EOF_TOKEN || isEndingTokenFor(token, type)) {\r\n return block;\r\n }\r\n this.reconsumeToken(token);\r\n block.values.push(this.consumeComponentValue());\r\n token = this.consumeToken();\r\n }\r\n };\r\n Parser.prototype.consumeFunction = function (functionToken) {\r\n var cssFunction = {\r\n name: functionToken.value,\r\n values: [],\r\n type: TokenType.FUNCTION\r\n };\r\n while (true) {\r\n var token = this.consumeToken();\r\n if (token.type === TokenType.EOF_TOKEN || token.type === TokenType.RIGHT_PARENTHESIS_TOKEN) {\r\n return cssFunction;\r\n }\r\n this.reconsumeToken(token);\r\n cssFunction.values.push(this.consumeComponentValue());\r\n }\r\n };\r\n Parser.prototype.consumeToken = function () {\r\n var token = this._tokens.shift();\r\n return typeof token === 'undefined' ? EOF_TOKEN : token;\r\n };\r\n Parser.prototype.reconsumeToken = function (token) {\r\n this._tokens.unshift(token);\r\n };\r\n return Parser;\r\n }());\r\n var isDimensionToken = function (token) { return token.type === TokenType.DIMENSION_TOKEN; };\r\n var isNumberToken = function (token) { return token.type === TokenType.NUMBER_TOKEN; };\r\n var isIdentToken = function (token) { return token.type === TokenType.IDENT_TOKEN; };\r\n var isStringToken = function (token) { return token.type === TokenType.STRING_TOKEN; };\r\n var isIdentWithValue = function (token, value) {\r\n return isIdentToken(token) && token.value === value;\r\n };\r\n var nonWhiteSpace = function (token) { return token.type !== TokenType.WHITESPACE_TOKEN; };\r\n var nonFunctionArgSeparator = function (token) {\r\n return token.type !== TokenType.WHITESPACE_TOKEN && token.type !== TokenType.COMMA_TOKEN;\r\n };\r\n var parseFunctionArgs = function (tokens) {\r\n var args = [];\r\n var arg = [];\r\n tokens.forEach(function (token) {\r\n if (token.type === TokenType.COMMA_TOKEN) {\r\n if (arg.length === 0) {\r\n throw new Error(\"Error parsing function args, zero tokens for arg\");\r\n }\r\n args.push(arg);\r\n arg = [];\r\n return;\r\n }\r\n if (token.type !== TokenType.WHITESPACE_TOKEN) {\r\n arg.push(token);\r\n }\r\n });\r\n if (arg.length) {\r\n args.push(arg);\r\n }\r\n return args;\r\n };\r\n var isEndingTokenFor = function (token, type) {\r\n if (type === TokenType.LEFT_CURLY_BRACKET_TOKEN && token.type === TokenType.RIGHT_CURLY_BRACKET_TOKEN) {\r\n return true;\r\n }\r\n if (type === TokenType.LEFT_SQUARE_BRACKET_TOKEN && token.type === TokenType.RIGHT_SQUARE_BRACKET_TOKEN) {\r\n return true;\r\n }\r\n return type === TokenType.LEFT_PARENTHESIS_TOKEN && token.type === TokenType.RIGHT_PARENTHESIS_TOKEN;\r\n };\n\n var isLength = function (token) {\r\n return token.type === TokenType.NUMBER_TOKEN || token.type === TokenType.DIMENSION_TOKEN;\r\n };\n\n var isLengthPercentage = function (token) {\r\n return token.type === TokenType.PERCENTAGE_TOKEN || isLength(token);\r\n };\r\n var parseLengthPercentageTuple = function (tokens) {\r\n return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]];\r\n };\r\n var ZERO_LENGTH = {\r\n type: TokenType.NUMBER_TOKEN,\r\n number: 0,\r\n flags: FLAG_INTEGER\r\n };\r\n var FIFTY_PERCENT = {\r\n type: TokenType.PERCENTAGE_TOKEN,\r\n number: 50,\r\n flags: FLAG_INTEGER\r\n };\r\n var HUNDRED_PERCENT = {\r\n type: TokenType.PERCENTAGE_TOKEN,\r\n number: 100,\r\n flags: FLAG_INTEGER\r\n };\r\n var getAbsoluteValueForTuple = function (tuple, width, height) {\r\n var x = tuple[0], y = tuple[1];\r\n return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)];\r\n };\r\n var getAbsoluteValue = function (token, parent) {\r\n if (token.type === TokenType.PERCENTAGE_TOKEN) {\r\n return (token.number / 100) * parent;\r\n }\r\n if (isDimensionToken(token)) {\r\n switch (token.unit) {\r\n case 'rem':\r\n case 'em':\r\n return 16 * token.number; // TODO use correct font-size\r\n case 'px':\r\n default:\r\n return token.number;\r\n }\r\n }\r\n return token.number;\r\n };\n\n var DEG = 'deg';\r\n var GRAD = 'grad';\r\n var RAD = 'rad';\r\n var TURN = 'turn';\r\n var angle = {\r\n name: 'angle',\r\n parse: function (value) {\r\n if (value.type === TokenType.DIMENSION_TOKEN) {\r\n switch (value.unit) {\r\n case DEG:\r\n return (Math.PI * value.number) / 180;\r\n case GRAD:\r\n return (Math.PI / 200) * value.number;\r\n case RAD:\r\n return value.number;\r\n case TURN:\r\n return Math.PI * 2 * value.number;\r\n }\r\n }\r\n throw new Error(\"Unsupported angle type\");\r\n }\r\n };\r\n var isAngle = function (value) {\r\n if (value.type === TokenType.DIMENSION_TOKEN) {\r\n if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n var parseNamedSide = function (tokens) {\r\n var sideOrCorner = tokens\r\n .filter(isIdentToken)\r\n .map(function (ident) { return ident.value; })\r\n .join(' ');\r\n switch (sideOrCorner) {\r\n case 'to bottom right':\r\n case 'to right bottom':\r\n case 'left top':\r\n case 'top left':\r\n return [ZERO_LENGTH, ZERO_LENGTH];\r\n case 'to top':\r\n case 'bottom':\r\n return deg(0);\r\n case 'to bottom left':\r\n case 'to left bottom':\r\n case 'right top':\r\n case 'top right':\r\n return [ZERO_LENGTH, HUNDRED_PERCENT];\r\n case 'to right':\r\n case 'left':\r\n return deg(90);\r\n case 'to top left':\r\n case 'to left top':\r\n case 'right bottom':\r\n case 'bottom right':\r\n return [HUNDRED_PERCENT, HUNDRED_PERCENT];\r\n case 'to bottom':\r\n case 'top':\r\n return deg(180);\r\n case 'to top right':\r\n case 'to right top':\r\n case 'left bottom':\r\n case 'bottom left':\r\n return [HUNDRED_PERCENT, ZERO_LENGTH];\r\n case 'to left':\r\n case 'right':\r\n return deg(270);\r\n }\r\n return 0;\r\n };\r\n var deg = function (deg) { return (Math.PI * deg) / 180; };\n\n var color = {\r\n name: 'color',\r\n parse: function (value) {\r\n if (value.type === TokenType.FUNCTION) {\r\n var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name];\r\n if (typeof colorFunction === 'undefined') {\r\n throw new Error(\"Attempting to parse an unsupported color function \\\"\" + value.name + \"\\\"\");\r\n }\r\n return colorFunction(value.values);\r\n }\r\n if (value.type === TokenType.HASH_TOKEN) {\r\n if (value.value.length === 3) {\r\n var r = value.value.substring(0, 1);\r\n var g = value.value.substring(1, 2);\r\n var b = value.value.substring(2, 3);\r\n return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1);\r\n }\r\n if (value.value.length === 4) {\r\n var r = value.value.substring(0, 1);\r\n var g = value.value.substring(1, 2);\r\n var b = value.value.substring(2, 3);\r\n var a = value.value.substring(3, 4);\r\n return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), parseInt(a + a, 16) / 255);\r\n }\r\n if (value.value.length === 6) {\r\n var r = value.value.substring(0, 2);\r\n var g = value.value.substring(2, 4);\r\n var b = value.value.substring(4, 6);\r\n return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1);\r\n }\r\n if (value.value.length === 8) {\r\n var r = value.value.substring(0, 2);\r\n var g = value.value.substring(2, 4);\r\n var b = value.value.substring(4, 6);\r\n var a = value.value.substring(6, 8);\r\n return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a, 16) / 255);\r\n }\r\n }\r\n if (value.type === TokenType.IDENT_TOKEN) {\r\n var namedColor = COLORS[value.value.toUpperCase()];\r\n if (typeof namedColor !== 'undefined') {\r\n return namedColor;\r\n }\r\n }\r\n return COLORS.TRANSPARENT;\r\n }\r\n };\r\n var isTransparent = function (color) { return (0xff & color) === 0; };\r\n var asString = function (color) {\r\n var alpha = 0xff & color;\r\n var blue = 0xff & (color >> 8);\r\n var green = 0xff & (color >> 16);\r\n var red = 0xff & (color >> 24);\r\n return alpha < 255 ? \"rgba(\" + red + \",\" + green + \",\" + blue + \",\" + alpha / 255 + \")\" : \"rgb(\" + red + \",\" + green + \",\" + blue + \")\";\r\n };\r\n var pack = function (r, g, b, a) {\r\n return ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0;\r\n };\r\n var getTokenColorValue = function (token, i) {\r\n if (token.type === TokenType.NUMBER_TOKEN) {\r\n return token.number;\r\n }\r\n if (token.type === TokenType.PERCENTAGE_TOKEN) {\r\n var max = i === 3 ? 1 : 255;\r\n return i === 3 ? (token.number / 100) * max : Math.round((token.number / 100) * max);\r\n }\r\n return 0;\r\n };\r\n var rgb = function (args) {\r\n var tokens = args.filter(nonFunctionArgSeparator);\r\n if (tokens.length === 3) {\r\n var _a = tokens.map(getTokenColorValue), r = _a[0], g = _a[1], b = _a[2];\r\n return pack(r, g, b, 1);\r\n }\r\n if (tokens.length === 4) {\r\n var _b = tokens.map(getTokenColorValue), r = _b[0], g = _b[1], b = _b[2], a = _b[3];\r\n return pack(r, g, b, a);\r\n }\r\n return 0;\r\n };\r\n function hue2rgb(t1, t2, hue) {\r\n if (hue < 0) {\r\n hue += 1;\r\n }\r\n if (hue >= 1) {\r\n hue -= 1;\r\n }\r\n if (hue < 1 / 6) {\r\n return (t2 - t1) * hue * 6 + t1;\r\n }\r\n else if (hue < 1 / 2) {\r\n return t2;\r\n }\r\n else if (hue < 2 / 3) {\r\n return (t2 - t1) * 6 * (2 / 3 - hue) + t1;\r\n }\r\n else {\r\n return t1;\r\n }\r\n }\r\n var hsl = function (args) {\r\n var tokens = args.filter(nonFunctionArgSeparator);\r\n var hue = tokens[0], saturation = tokens[1], lightness = tokens[2], alpha = tokens[3];\r\n var h = (hue.type === TokenType.NUMBER_TOKEN ? deg(hue.number) : angle.parse(hue)) / (Math.PI * 2);\r\n var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0;\r\n var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0;\r\n var a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1;\r\n if (s === 0) {\r\n return pack(l * 255, l * 255, l * 255, 1);\r\n }\r\n var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\r\n var t1 = l * 2 - t2;\r\n var r = hue2rgb(t1, t2, h + 1 / 3);\r\n var g = hue2rgb(t1, t2, h);\r\n var b = hue2rgb(t1, t2, h - 1 / 3);\r\n return pack(r * 255, g * 255, b * 255, a);\r\n };\r\n var SUPPORTED_COLOR_FUNCTIONS = {\r\n hsl: hsl,\r\n hsla: hsl,\r\n rgb: rgb,\r\n rgba: rgb\r\n };\r\n var COLORS = {\r\n ALICEBLUE: 0xf0f8ffff,\r\n ANTIQUEWHITE: 0xfaebd7ff,\r\n AQUA: 0x00ffffff,\r\n AQUAMARINE: 0x7fffd4ff,\r\n AZURE: 0xf0ffffff,\r\n BEIGE: 0xf5f5dcff,\r\n BISQUE: 0xffe4c4ff,\r\n BLACK: 0x000000ff,\r\n BLANCHEDALMOND: 0xffebcdff,\r\n BLUE: 0x0000ffff,\r\n BLUEVIOLET: 0x8a2be2ff,\r\n BROWN: 0xa52a2aff,\r\n BURLYWOOD: 0xdeb887ff,\r\n CADETBLUE: 0x5f9ea0ff,\r\n CHARTREUSE: 0x7fff00ff,\r\n CHOCOLATE: 0xd2691eff,\r\n CORAL: 0xff7f50ff,\r\n CORNFLOWERBLUE: 0x6495edff,\r\n CORNSILK: 0xfff8dcff,\r\n CRIMSON: 0xdc143cff,\r\n CYAN: 0x00ffffff,\r\n DARKBLUE: 0x00008bff,\r\n DARKCYAN: 0x008b8bff,\r\n DARKGOLDENROD: 0xb886bbff,\r\n DARKGRAY: 0xa9a9a9ff,\r\n DARKGREEN: 0x006400ff,\r\n DARKGREY: 0xa9a9a9ff,\r\n DARKKHAKI: 0xbdb76bff,\r\n DARKMAGENTA: 0x8b008bff,\r\n DARKOLIVEGREEN: 0x556b2fff,\r\n DARKORANGE: 0xff8c00ff,\r\n DARKORCHID: 0x9932ccff,\r\n DARKRED: 0x8b0000ff,\r\n DARKSALMON: 0xe9967aff,\r\n DARKSEAGREEN: 0x8fbc8fff,\r\n DARKSLATEBLUE: 0x483d8bff,\r\n DARKSLATEGRAY: 0x2f4f4fff,\r\n DARKSLATEGREY: 0x2f4f4fff,\r\n DARKTURQUOISE: 0x00ced1ff,\r\n DARKVIOLET: 0x9400d3ff,\r\n DEEPPINK: 0xff1493ff,\r\n DEEPSKYBLUE: 0x00bfffff,\r\n DIMGRAY: 0x696969ff,\r\n DIMGREY: 0x696969ff,\r\n DODGERBLUE: 0x1e90ffff,\r\n FIREBRICK: 0xb22222ff,\r\n FLORALWHITE: 0xfffaf0ff,\r\n FORESTGREEN: 0x228b22ff,\r\n FUCHSIA: 0xff00ffff,\r\n GAINSBORO: 0xdcdcdcff,\r\n GHOSTWHITE: 0xf8f8ffff,\r\n GOLD: 0xffd700ff,\r\n GOLDENROD: 0xdaa520ff,\r\n GRAY: 0x808080ff,\r\n GREEN: 0x008000ff,\r\n GREENYELLOW: 0xadff2fff,\r\n GREY: 0x808080ff,\r\n HONEYDEW: 0xf0fff0ff,\r\n HOTPINK: 0xff69b4ff,\r\n INDIANRED: 0xcd5c5cff,\r\n INDIGO: 0x4b0082ff,\r\n IVORY: 0xfffff0ff,\r\n KHAKI: 0xf0e68cff,\r\n LAVENDER: 0xe6e6faff,\r\n LAVENDERBLUSH: 0xfff0f5ff,\r\n LAWNGREEN: 0x7cfc00ff,\r\n LEMONCHIFFON: 0xfffacdff,\r\n LIGHTBLUE: 0xadd8e6ff,\r\n LIGHTCORAL: 0xf08080ff,\r\n LIGHTCYAN: 0xe0ffffff,\r\n LIGHTGOLDENRODYELLOW: 0xfafad2ff,\r\n LIGHTGRAY: 0xd3d3d3ff,\r\n LIGHTGREEN: 0x90ee90ff,\r\n LIGHTGREY: 0xd3d3d3ff,\r\n LIGHTPINK: 0xffb6c1ff,\r\n LIGHTSALMON: 0xffa07aff,\r\n LIGHTSEAGREEN: 0x20b2aaff,\r\n LIGHTSKYBLUE: 0x87cefaff,\r\n LIGHTSLATEGRAY: 0x778899ff,\r\n LIGHTSLATEGREY: 0x778899ff,\r\n LIGHTSTEELBLUE: 0xb0c4deff,\r\n LIGHTYELLOW: 0xffffe0ff,\r\n LIME: 0x00ff00ff,\r\n LIMEGREEN: 0x32cd32ff,\r\n LINEN: 0xfaf0e6ff,\r\n MAGENTA: 0xff00ffff,\r\n MAROON: 0x800000ff,\r\n MEDIUMAQUAMARINE: 0x66cdaaff,\r\n MEDIUMBLUE: 0x0000cdff,\r\n MEDIUMORCHID: 0xba55d3ff,\r\n MEDIUMPURPLE: 0x9370dbff,\r\n MEDIUMSEAGREEN: 0x3cb371ff,\r\n MEDIUMSLATEBLUE: 0x7b68eeff,\r\n MEDIUMSPRINGGREEN: 0x00fa9aff,\r\n MEDIUMTURQUOISE: 0x48d1ccff,\r\n MEDIUMVIOLETRED: 0xc71585ff,\r\n MIDNIGHTBLUE: 0x191970ff,\r\n MINTCREAM: 0xf5fffaff,\r\n MISTYROSE: 0xffe4e1ff,\r\n MOCCASIN: 0xffe4b5ff,\r\n NAVAJOWHITE: 0xffdeadff,\r\n NAVY: 0x000080ff,\r\n OLDLACE: 0xfdf5e6ff,\r\n OLIVE: 0x808000ff,\r\n OLIVEDRAB: 0x6b8e23ff,\r\n ORANGE: 0xffa500ff,\r\n ORANGERED: 0xff4500ff,\r\n ORCHID: 0xda70d6ff,\r\n PALEGOLDENROD: 0xeee8aaff,\r\n PALEGREEN: 0x98fb98ff,\r\n PALETURQUOISE: 0xafeeeeff,\r\n PALEVIOLETRED: 0xdb7093ff,\r\n PAPAYAWHIP: 0xffefd5ff,\r\n PEACHPUFF: 0xffdab9ff,\r\n PERU: 0xcd853fff,\r\n PINK: 0xffc0cbff,\r\n PLUM: 0xdda0ddff,\r\n POWDERBLUE: 0xb0e0e6ff,\r\n PURPLE: 0x800080ff,\r\n REBECCAPURPLE: 0x663399ff,\r\n RED: 0xff0000ff,\r\n ROSYBROWN: 0xbc8f8fff,\r\n ROYALBLUE: 0x4169e1ff,\r\n SADDLEBROWN: 0x8b4513ff,\r\n SALMON: 0xfa8072ff,\r\n SANDYBROWN: 0xf4a460ff,\r\n SEAGREEN: 0x2e8b57ff,\r\n SEASHELL: 0xfff5eeff,\r\n SIENNA: 0xa0522dff,\r\n SILVER: 0xc0c0c0ff,\r\n SKYBLUE: 0x87ceebff,\r\n SLATEBLUE: 0x6a5acdff,\r\n SLATEGRAY: 0x708090ff,\r\n SLATEGREY: 0x708090ff,\r\n SNOW: 0xfffafaff,\r\n SPRINGGREEN: 0x00ff7fff,\r\n STEELBLUE: 0x4682b4ff,\r\n TAN: 0xd2b48cff,\r\n TEAL: 0x008080ff,\r\n THISTLE: 0xd8bfd8ff,\r\n TOMATO: 0xff6347ff,\r\n TRANSPARENT: 0x00000000,\r\n TURQUOISE: 0x40e0d0ff,\r\n VIOLET: 0xee82eeff,\r\n WHEAT: 0xf5deb3ff,\r\n WHITE: 0xffffffff,\r\n WHITESMOKE: 0xf5f5f5ff,\r\n YELLOW: 0xffff00ff,\r\n YELLOWGREEN: 0x9acd32ff\r\n };\n\n var PropertyDescriptorParsingType;\r\n (function (PropertyDescriptorParsingType) {\r\n PropertyDescriptorParsingType[PropertyDescriptorParsingType[\"VALUE\"] = 0] = \"VALUE\";\r\n PropertyDescriptorParsingType[PropertyDescriptorParsingType[\"LIST\"] = 1] = \"LIST\";\r\n PropertyDescriptorParsingType[PropertyDescriptorParsingType[\"IDENT_VALUE\"] = 2] = \"IDENT_VALUE\";\r\n PropertyDescriptorParsingType[PropertyDescriptorParsingType[\"TYPE_VALUE\"] = 3] = \"TYPE_VALUE\";\r\n PropertyDescriptorParsingType[PropertyDescriptorParsingType[\"TOKEN_VALUE\"] = 4] = \"TOKEN_VALUE\";\r\n })(PropertyDescriptorParsingType || (PropertyDescriptorParsingType = {}));\n\n var BACKGROUND_CLIP;\r\n (function (BACKGROUND_CLIP) {\r\n BACKGROUND_CLIP[BACKGROUND_CLIP[\"BORDER_BOX\"] = 0] = \"BORDER_BOX\";\r\n BACKGROUND_CLIP[BACKGROUND_CLIP[\"PADDING_BOX\"] = 1] = \"PADDING_BOX\";\r\n BACKGROUND_CLIP[BACKGROUND_CLIP[\"CONTENT_BOX\"] = 2] = \"CONTENT_BOX\";\r\n })(BACKGROUND_CLIP || (BACKGROUND_CLIP = {}));\r\n var backgroundClip = {\r\n name: 'background-clip',\r\n initialValue: 'border-box',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return tokens.map(function (token) {\r\n if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case 'padding-box':\r\n return BACKGROUND_CLIP.PADDING_BOX;\r\n case 'content-box':\r\n return BACKGROUND_CLIP.CONTENT_BOX;\r\n }\r\n }\r\n return BACKGROUND_CLIP.BORDER_BOX;\r\n });\r\n }\r\n };\n\n var backgroundColor = {\r\n name: \"background-color\",\r\n initialValue: 'transparent',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TYPE_VALUE,\r\n format: 'color'\r\n };\n\n var parseColorStop = function (args) {\r\n var color$1 = color.parse(args[0]);\r\n var stop = args[1];\r\n return stop && isLengthPercentage(stop) ? { color: color$1, stop: stop } : { color: color$1, stop: null };\r\n };\r\n var processColorStops = function (stops, lineLength) {\r\n var first = stops[0];\r\n var last = stops[stops.length - 1];\r\n if (first.stop === null) {\r\n first.stop = ZERO_LENGTH;\r\n }\r\n if (last.stop === null) {\r\n last.stop = HUNDRED_PERCENT;\r\n }\r\n var processStops = [];\r\n var previous = 0;\r\n for (var i = 0; i < stops.length; i++) {\r\n var stop_1 = stops[i].stop;\r\n if (stop_1 !== null) {\r\n var absoluteValue = getAbsoluteValue(stop_1, lineLength);\r\n if (absoluteValue > previous) {\r\n processStops.push(absoluteValue);\r\n }\r\n else {\r\n processStops.push(previous);\r\n }\r\n previous = absoluteValue;\r\n }\r\n else {\r\n processStops.push(null);\r\n }\r\n }\r\n var gapBegin = null;\r\n for (var i = 0; i < processStops.length; i++) {\r\n var stop_2 = processStops[i];\r\n if (stop_2 === null) {\r\n if (gapBegin === null) {\r\n gapBegin = i;\r\n }\r\n }\r\n else if (gapBegin !== null) {\r\n var gapLength = i - gapBegin;\r\n var beforeGap = processStops[gapBegin - 1];\r\n var gapValue = (stop_2 - beforeGap) / (gapLength + 1);\r\n for (var g = 1; g <= gapLength; g++) {\r\n processStops[gapBegin + g - 1] = gapValue * g;\r\n }\r\n gapBegin = null;\r\n }\r\n }\r\n return stops.map(function (_a, i) {\r\n var color = _a.color;\r\n return { color: color, stop: Math.max(Math.min(1, processStops[i] / lineLength), 0) };\r\n });\r\n };\r\n var getAngleFromCorner = function (corner, width, height) {\r\n var centerX = width / 2;\r\n var centerY = height / 2;\r\n var x = getAbsoluteValue(corner[0], width) - centerX;\r\n var y = centerY - getAbsoluteValue(corner[1], height);\r\n return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2);\r\n };\r\n var calculateGradientDirection = function (angle, width, height) {\r\n var radian = typeof angle === 'number' ? angle : getAngleFromCorner(angle, width, height);\r\n var lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian));\r\n var halfWidth = width / 2;\r\n var halfHeight = height / 2;\r\n var halfLineLength = lineLength / 2;\r\n var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength;\r\n var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength;\r\n return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff];\r\n };\r\n var distance = function (a, b) { return Math.sqrt(a * a + b * b); };\r\n var findCorner = function (width, height, x, y, closest) {\r\n var corners = [[0, 0], [0, height], [width, 0], [width, height]];\r\n return corners.reduce(function (stat, corner) {\r\n var cx = corner[0], cy = corner[1];\r\n var d = distance(x - cx, y - cy);\r\n if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) {\r\n return {\r\n optimumCorner: corner,\r\n optimumDistance: d\r\n };\r\n }\r\n return stat;\r\n }, {\r\n optimumDistance: closest ? Infinity : -Infinity,\r\n optimumCorner: null\r\n }).optimumCorner;\r\n };\r\n var calculateRadius = function (gradient, x, y, width, height) {\r\n var rx = 0;\r\n var ry = 0;\r\n switch (gradient.size) {\r\n case CSSRadialExtent.CLOSEST_SIDE:\r\n // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradients center.\r\n // If the shape is an ellipse, it exactly meets the closest side in each dimension.\r\n if (gradient.shape === CSSRadialShape.CIRCLE) {\r\n rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\r\n }\r\n else if (gradient.shape === CSSRadialShape.ELLIPSE) {\r\n rx = Math.min(Math.abs(x), Math.abs(x - width));\r\n ry = Math.min(Math.abs(y), Math.abs(y - height));\r\n }\r\n break;\r\n case CSSRadialExtent.CLOSEST_CORNER:\r\n // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradients center.\r\n // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified.\r\n if (gradient.shape === CSSRadialShape.CIRCLE) {\r\n rx = ry = Math.min(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\r\n }\r\n else if (gradient.shape === CSSRadialShape.ELLIPSE) {\r\n // Compute the ratio ry/rx (which is to be the same as for \"closest-side\")\r\n var c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width));\r\n var _a = findCorner(width, height, x, y, true), cx = _a[0], cy = _a[1];\r\n rx = distance(cx - x, (cy - y) / c);\r\n ry = c * rx;\r\n }\r\n break;\r\n case CSSRadialExtent.FARTHEST_SIDE:\r\n // Same as closest-side, except the ending shape is sized based on the farthest side(s)\r\n if (gradient.shape === CSSRadialShape.CIRCLE) {\r\n rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\r\n }\r\n else if (gradient.shape === CSSRadialShape.ELLIPSE) {\r\n rx = Math.max(Math.abs(x), Math.abs(x - width));\r\n ry = Math.max(Math.abs(y), Math.abs(y - height));\r\n }\r\n break;\r\n case CSSRadialExtent.FARTHEST_CORNER:\r\n // Same as closest-corner, except the ending shape is sized based on the farthest corner.\r\n // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified.\r\n if (gradient.shape === CSSRadialShape.CIRCLE) {\r\n rx = ry = Math.max(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\r\n }\r\n else if (gradient.shape === CSSRadialShape.ELLIPSE) {\r\n // Compute the ratio ry/rx (which is to be the same as for \"farthest-side\")\r\n var c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width));\r\n var _b = findCorner(width, height, x, y, false), cx = _b[0], cy = _b[1];\r\n rx = distance(cx - x, (cy - y) / c);\r\n ry = c * rx;\r\n }\r\n break;\r\n }\r\n if (Array.isArray(gradient.size)) {\r\n rx = getAbsoluteValue(gradient.size[0], width);\r\n ry = gradient.size.length === 2 ? getAbsoluteValue(gradient.size[1], height) : rx;\r\n }\r\n return [rx, ry];\r\n };\n\n var linearGradient = function (tokens) {\r\n var angle$1 = deg(180);\r\n var stops = [];\r\n parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n if (i === 0) {\r\n var firstToken = arg[0];\r\n if (firstToken.type === TokenType.IDENT_TOKEN && firstToken.value === 'to') {\r\n angle$1 = parseNamedSide(arg);\r\n return;\r\n }\r\n else if (isAngle(firstToken)) {\r\n angle$1 = angle.parse(firstToken);\r\n return;\r\n }\r\n }\r\n var colorStop = parseColorStop(arg);\r\n stops.push(colorStop);\r\n });\r\n return { angle: angle$1, stops: stops, type: CSSImageType.LINEAR_GRADIENT };\r\n };\n\n var prefixLinearGradient = function (tokens) {\r\n var angle$1 = deg(180);\r\n var stops = [];\r\n parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n if (i === 0) {\r\n var firstToken = arg[0];\r\n if (firstToken.type === TokenType.IDENT_TOKEN &&\r\n ['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !== -1) {\r\n angle$1 = parseNamedSide(arg);\r\n return;\r\n }\r\n else if (isAngle(firstToken)) {\r\n angle$1 = (angle.parse(firstToken) + deg(270)) % deg(360);\r\n return;\r\n }\r\n }\r\n var colorStop = parseColorStop(arg);\r\n stops.push(colorStop);\r\n });\r\n return {\r\n angle: angle$1,\r\n stops: stops,\r\n type: CSSImageType.LINEAR_GRADIENT\r\n };\r\n };\n\n var testRangeBounds = function (document) {\r\n var TEST_HEIGHT = 123;\r\n if (document.createRange) {\r\n var range = document.createRange();\r\n if (range.getBoundingClientRect) {\r\n var testElement = document.createElement('boundtest');\r\n testElement.style.height = TEST_HEIGHT + \"px\";\r\n testElement.style.display = 'block';\r\n document.body.appendChild(testElement);\r\n range.selectNode(testElement);\r\n var rangeBounds = range.getBoundingClientRect();\r\n var rangeHeight = Math.round(rangeBounds.height);\r\n document.body.removeChild(testElement);\r\n if (rangeHeight === TEST_HEIGHT) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n var testCORS = function () { return typeof new Image().crossOrigin !== 'undefined'; };\r\n var testResponseType = function () { return typeof new XMLHttpRequest().responseType === 'string'; };\r\n var testSVG = function (document) {\r\n var img = new Image();\r\n var canvas = document.createElement('canvas');\r\n var ctx = canvas.getContext('2d');\r\n if (!ctx) {\r\n return false;\r\n }\r\n img.src = \"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>\";\r\n try {\r\n ctx.drawImage(img, 0, 0);\r\n canvas.toDataURL();\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n var isGreenPixel = function (data) {\r\n return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255;\r\n };\r\n var testForeignObject = function (document) {\r\n var canvas = document.createElement('canvas');\r\n var size = 100;\r\n canvas.width = size;\r\n canvas.height = size;\r\n var ctx = canvas.getContext('2d');\r\n if (!ctx) {\r\n return Promise.reject(false);\r\n }\r\n ctx.fillStyle = 'rgb(0, 255, 0)';\r\n ctx.fillRect(0, 0, size, size);\r\n var img = new Image();\r\n var greenImageSrc = canvas.toDataURL();\r\n img.src = greenImageSrc;\r\n var svg = createForeignObjectSVG(size, size, 0, 0, img);\r\n ctx.fillStyle = 'red';\r\n ctx.fillRect(0, 0, size, size);\r\n return loadSerializedSVG(svg)\r\n .then(function (img) {\r\n ctx.drawImage(img, 0, 0);\r\n var data = ctx.getImageData(0, 0, size, size).data;\r\n ctx.fillStyle = 'red';\r\n ctx.fillRect(0, 0, size, size);\r\n var node = document.createElement('div');\r\n node.style.backgroundImage = \"url(\" + greenImageSrc + \")\";\r\n node.style.height = size + \"px\";\r\n // Firefox 55 does not render inline <img /> tags\r\n return isGreenPixel(data)\r\n ? loadSerializedSVG(createForeignObjectSVG(size, size, 0, 0, node))\r\n : Promise.reject(false);\r\n })\r\n .then(function (img) {\r\n ctx.drawImage(img, 0, 0);\r\n // Edge does not render background-images\r\n return isGreenPixel(ctx.getImageData(0, 0, size, size).data);\r\n })\r\n .catch(function () { return false; });\r\n };\r\n var createForeignObjectSVG = function (width, height, x, y, node) {\r\n var xmlns = 'http://www.w3.org/2000/svg';\r\n var svg = document.createElementNS(xmlns, 'svg');\r\n var foreignObject = document.createElementNS(xmlns, 'foreignObject');\r\n svg.setAttributeNS(null, 'width', width.toString());\r\n svg.setAttributeNS(null, 'height', height.toString());\r\n foreignObject.setAttributeNS(null, 'width', '100%');\r\n foreignObject.setAttributeNS(null, 'height', '100%');\r\n foreignObject.setAttributeNS(null, 'x', x.toString());\r\n foreignObject.setAttributeNS(null, 'y', y.toString());\r\n foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true');\r\n svg.appendChild(foreignObject);\r\n foreignObject.appendChild(node);\r\n return svg;\r\n };\r\n var loadSerializedSVG = function (svg) {\r\n return new Promise(function (resolve, reject) {\r\n var img = new Image();\r\n img.onload = function () { return resolve(img); };\r\n img.onerror = reject;\r\n img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\r\n });\r\n };\r\n var FEATURES = {\r\n get SUPPORT_RANGE_BOUNDS() {\r\n var value = testRangeBounds(document);\r\n Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', { value: value });\r\n return value;\r\n },\r\n get SUPPORT_SVG_DRAWING() {\r\n var value = testSVG(document);\r\n Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value });\r\n return value;\r\n },\r\n get SUPPORT_FOREIGNOBJECT_DRAWING() {\r\n var value = typeof Array.from === 'function' && typeof window.fetch === 'function'\r\n ? testForeignObject(document)\r\n : Promise.resolve(false);\r\n Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', { value: value });\r\n return value;\r\n },\r\n get SUPPORT_CORS_IMAGES() {\r\n var value = testCORS();\r\n Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value });\r\n return value;\r\n },\r\n get SUPPORT_RESPONSE_TYPE() {\r\n var value = testResponseType();\r\n Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', { value: value });\r\n return value;\r\n },\r\n get SUPPORT_CORS_XHR() {\r\n var value = 'withCredentials' in new XMLHttpRequest();\r\n Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value });\r\n return value;\r\n }\r\n };\n\n var Logger = /** @class */ (function () {\r\n function Logger(_a) {\r\n var id = _a.id, enabled = _a.enabled;\r\n this.id = id;\r\n this.enabled = enabled;\r\n this.start = Date.now();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Logger.prototype.debug = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (this.enabled) {\r\n // eslint-disable-next-line no-console\r\n if (typeof window !== 'undefined' && window.console && typeof console.debug === 'function') {\r\n // eslint-disable-next-line no-console\r\n console.debug.apply(console, [this.id, this.getTime() + \"ms\"].concat(args));\r\n }\r\n else {\r\n this.info.apply(this, args);\r\n }\r\n }\r\n };\r\n Logger.prototype.getTime = function () {\r\n return Date.now() - this.start;\r\n };\r\n Logger.create = function (options) {\r\n Logger.instances[options.id] = new Logger(options);\r\n };\r\n Logger.destroy = function (id) {\r\n delete Logger.instances[id];\r\n };\r\n Logger.getInstance = function (id) {\r\n var instance = Logger.instances[id];\r\n if (typeof instance === 'undefined') {\r\n throw new Error(\"No logger instance found with id \" + id);\r\n }\r\n return instance;\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Logger.prototype.info = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (this.enabled) {\r\n // eslint-disable-next-line no-console\r\n if (typeof window !== 'undefined' && window.console && typeof console.info === 'function') {\r\n // eslint-disable-next-line no-console\r\n console.info.apply(console, [this.id, this.getTime() + \"ms\"].concat(args));\r\n }\r\n }\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Logger.prototype.error = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (this.enabled) {\r\n // eslint-disable-next-line no-console\r\n if (typeof window !== 'undefined' && window.console && typeof console.error === 'function') {\r\n // eslint-disable-next-line no-console\r\n console.error.apply(console, [this.id, this.getTime() + \"ms\"].concat(args));\r\n }\r\n else {\r\n this.info.apply(this, args);\r\n }\r\n }\r\n };\r\n Logger.instances = {};\r\n return Logger;\r\n }());\n\n var CacheStorage = /** @class */ (function () {\r\n function CacheStorage() {\r\n }\r\n CacheStorage.create = function (name, options) {\r\n return (CacheStorage._caches[name] = new Cache(name, options));\r\n };\r\n CacheStorage.destroy = function (name) {\r\n delete CacheStorage._caches[name];\r\n };\r\n CacheStorage.open = function (name) {\r\n var cache = CacheStorage._caches[name];\r\n if (typeof cache !== 'undefined') {\r\n return cache;\r\n }\r\n throw new Error(\"Cache with key \\\"\" + name + \"\\\" not found\");\r\n };\r\n CacheStorage.getOrigin = function (url) {\r\n var link = CacheStorage._link;\r\n if (!link) {\r\n return 'about:blank';\r\n }\r\n link.href = url;\r\n link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/\r\n return link.protocol + link.hostname + link.port;\r\n };\r\n CacheStorage.isSameOrigin = function (src) {\r\n return CacheStorage.getOrigin(src) === CacheStorage._origin;\r\n };\r\n CacheStorage.setContext = function (window) {\r\n CacheStorage._link = window.document.createElement('a');\r\n CacheStorage._origin = CacheStorage.getOrigin(window.location.href);\r\n };\r\n CacheStorage.getInstance = function () {\r\n var current = CacheStorage._current;\r\n if (current === null) {\r\n throw new Error(\"No cache instance attached\");\r\n }\r\n return current;\r\n };\r\n CacheStorage.attachInstance = function (cache) {\r\n CacheStorage._current = cache;\r\n };\r\n CacheStorage.detachInstance = function () {\r\n CacheStorage._current = null;\r\n };\r\n CacheStorage._caches = {};\r\n CacheStorage._origin = 'about:blank';\r\n CacheStorage._current = null;\r\n return CacheStorage;\r\n }());\r\n var Cache = /** @class */ (function () {\r\n function Cache(id, options) {\r\n this.id = id;\r\n this._options = options;\r\n this._cache = {};\r\n }\r\n Cache.prototype.addImage = function (src) {\r\n var result = Promise.resolve();\r\n if (this.has(src)) {\r\n return result;\r\n }\r\n if (isBlobImage(src) || isRenderable(src)) {\r\n this._cache[src] = this.loadImage(src);\r\n return result;\r\n }\r\n return result;\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n Cache.prototype.match = function (src) {\r\n return this._cache[src];\r\n };\r\n Cache.prototype.loadImage = function (key) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var isSameOrigin, useCORS, useProxy, src;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n isSameOrigin = CacheStorage.isSameOrigin(key);\r\n useCORS = !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin;\r\n useProxy = !isInlineImage(key) &&\r\n !isSameOrigin &&\r\n typeof this._options.proxy === 'string' &&\r\n FEATURES.SUPPORT_CORS_XHR &&\r\n !useCORS;\r\n if (!isSameOrigin && this._options.allowTaint === false && !isInlineImage(key) && !useProxy && !useCORS) {\r\n return [2 /*return*/];\r\n }\r\n src = key;\r\n if (!useProxy) return [3 /*break*/, 2];\r\n return [4 /*yield*/, this.proxy(src)];\r\n case 1:\r\n src = _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n Logger.getInstance(this.id).debug(\"Added image \" + key.substring(0, 256));\r\n return [4 /*yield*/, new Promise(function (resolve, reject) {\r\n var img = new Image();\r\n img.onload = function () { return resolve(img); };\r\n img.onerror = reject;\r\n //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous\r\n if (isInlineBase64Image(src) || useCORS) {\r\n img.crossOrigin = 'anonymous';\r\n }\r\n img.src = src;\r\n if (img.complete === true) {\r\n // Inline XML images may fail to parse, throwing an Error later on\r\n setTimeout(function () { return resolve(img); }, 500);\r\n }\r\n if (_this._options.imageTimeout > 0) {\r\n setTimeout(function () { return reject(\"Timed out (\" + _this._options.imageTimeout + \"ms) loading image\"); }, _this._options.imageTimeout);\r\n }\r\n })];\r\n case 3: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n });\r\n };\r\n Cache.prototype.has = function (key) {\r\n return typeof this._cache[key] !== 'undefined';\r\n };\r\n Cache.prototype.keys = function () {\r\n return Promise.resolve(Object.keys(this._cache));\r\n };\r\n Cache.prototype.proxy = function (src) {\r\n var _this = this;\r\n var proxy = this._options.proxy;\r\n if (!proxy) {\r\n throw new Error('No proxy defined');\r\n }\r\n var key = src.substring(0, 256);\r\n return new Promise(function (resolve, reject) {\r\n var responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text';\r\n var xhr = new XMLHttpRequest();\r\n xhr.onload = function () {\r\n if (xhr.status === 200) {\r\n if (responseType === 'text') {\r\n resolve(xhr.response);\r\n }\r\n else {\r\n var reader_1 = new FileReader();\r\n reader_1.addEventListener('load', function () { return resolve(reader_1.result); }, false);\r\n reader_1.addEventListener('error', function (e) { return reject(e); }, false);\r\n reader_1.readAsDataURL(xhr.response);\r\n }\r\n }\r\n else {\r\n reject(\"Failed to proxy resource \" + key + \" with status code \" + xhr.status);\r\n }\r\n };\r\n xhr.onerror = reject;\r\n xhr.open('GET', proxy + \"?url=\" + encodeURIComponent(src) + \"&responseType=\" + responseType);\r\n if (responseType !== 'text' && xhr instanceof XMLHttpRequest) {\r\n xhr.responseType = responseType;\r\n }\r\n if (_this._options.imageTimeout) {\r\n var timeout_1 = _this._options.imageTimeout;\r\n xhr.timeout = timeout_1;\r\n xhr.ontimeout = function () { return reject(\"Timed out (\" + timeout_1 + \"ms) proxying \" + key); };\r\n }\r\n xhr.send();\r\n });\r\n };\r\n return Cache;\r\n }());\r\n var INLINE_SVG = /^data:image\\/svg\\+xml/i;\r\n var INLINE_BASE64 = /^data:image\\/.*;base64,/i;\r\n var INLINE_IMG = /^data:image\\/.*/i;\r\n var isRenderable = function (src) { return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src); };\r\n var isInlineImage = function (src) { return INLINE_IMG.test(src); };\r\n var isInlineBase64Image = function (src) { return INLINE_BASE64.test(src); };\r\n var isBlobImage = function (src) { return src.substr(0, 4) === 'blob'; };\r\n var isSVG = function (src) { return src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src); };\n\n var webkitGradient = function (tokens) {\r\n var angle = deg(180);\r\n var stops = [];\r\n var type = CSSImageType.LINEAR_GRADIENT;\r\n var shape = CSSRadialShape.CIRCLE;\r\n var size = CSSRadialExtent.FARTHEST_CORNER;\r\n var position = [];\r\n parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n var firstToken = arg[0];\r\n if (i === 0) {\r\n if (isIdentToken(firstToken) && firstToken.value === 'linear') {\r\n type = CSSImageType.LINEAR_GRADIENT;\r\n return;\r\n }\r\n else if (isIdentToken(firstToken) && firstToken.value === 'radial') {\r\n type = CSSImageType.RADIAL_GRADIENT;\r\n return;\r\n }\r\n }\r\n if (firstToken.type === TokenType.FUNCTION) {\r\n if (firstToken.name === 'from') {\r\n var color$1 = color.parse(firstToken.values[0]);\r\n stops.push({ stop: ZERO_LENGTH, color: color$1 });\r\n }\r\n else if (firstToken.name === 'to') {\r\n var color$1 = color.parse(firstToken.values[0]);\r\n stops.push({ stop: HUNDRED_PERCENT, color: color$1 });\r\n }\r\n else if (firstToken.name === 'color-stop') {\r\n var values = firstToken.values.filter(nonFunctionArgSeparator);\r\n if (values.length === 2) {\r\n var color$1 = color.parse(values[1]);\r\n var stop_1 = values[0];\r\n if (isNumberToken(stop_1)) {\r\n stops.push({\r\n stop: { type: TokenType.PERCENTAGE_TOKEN, number: stop_1.number * 100, flags: stop_1.flags },\r\n color: color$1\r\n });\r\n }\r\n }\r\n }\r\n }\r\n });\r\n return type === CSSImageType.LINEAR_GRADIENT\r\n ? {\r\n angle: (angle + deg(180)) % deg(360),\r\n stops: stops,\r\n type: type\r\n }\r\n : { size: size, shape: shape, stops: stops, position: position, type: type };\r\n };\n\n var CLOSEST_SIDE = 'closest-side';\r\n var FARTHEST_SIDE = 'farthest-side';\r\n var CLOSEST_CORNER = 'closest-corner';\r\n var FARTHEST_CORNER = 'farthest-corner';\r\n var CIRCLE = 'circle';\r\n var ELLIPSE = 'ellipse';\r\n var COVER = 'cover';\r\n var CONTAIN = 'contain';\r\n var radialGradient = function (tokens) {\r\n var shape = CSSRadialShape.CIRCLE;\r\n var size = CSSRadialExtent.FARTHEST_CORNER;\r\n var stops = [];\r\n var position = [];\r\n parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n var isColorStop = true;\r\n if (i === 0) {\r\n var isAtPosition_1 = false;\r\n isColorStop = arg.reduce(function (acc, token) {\r\n if (isAtPosition_1) {\r\n if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case 'center':\r\n position.push(FIFTY_PERCENT);\r\n return acc;\r\n case 'top':\r\n case 'left':\r\n position.push(ZERO_LENGTH);\r\n return acc;\r\n case 'right':\r\n case 'bottom':\r\n position.push(HUNDRED_PERCENT);\r\n return acc;\r\n }\r\n }\r\n else if (isLengthPercentage(token) || isLength(token)) {\r\n position.push(token);\r\n }\r\n }\r\n else if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case CIRCLE:\r\n shape = CSSRadialShape.CIRCLE;\r\n return false;\r\n case ELLIPSE:\r\n shape = CSSRadialShape.ELLIPSE;\r\n return false;\r\n case 'at':\r\n isAtPosition_1 = true;\r\n return false;\r\n case CLOSEST_SIDE:\r\n size = CSSRadialExtent.CLOSEST_SIDE;\r\n return false;\r\n case COVER:\r\n case FARTHEST_SIDE:\r\n size = CSSRadialExtent.FARTHEST_SIDE;\r\n return false;\r\n case CONTAIN:\r\n case CLOSEST_CORNER:\r\n size = CSSRadialExtent.CLOSEST_CORNER;\r\n return false;\r\n case FARTHEST_CORNER:\r\n size = CSSRadialExtent.FARTHEST_CORNER;\r\n return false;\r\n }\r\n }\r\n else if (isLength(token) || isLengthPercentage(token)) {\r\n if (!Array.isArray(size)) {\r\n size = [];\r\n }\r\n size.push(token);\r\n return false;\r\n }\r\n return acc;\r\n }, isColorStop);\r\n }\r\n if (isColorStop) {\r\n var colorStop = parseColorStop(arg);\r\n stops.push(colorStop);\r\n }\r\n });\r\n return { size: size, shape: shape, stops: stops, position: position, type: CSSImageType.RADIAL_GRADIENT };\r\n };\n\n var prefixRadialGradient = function (tokens) {\r\n var shape = CSSRadialShape.CIRCLE;\r\n var size = CSSRadialExtent.FARTHEST_CORNER;\r\n var stops = [];\r\n var position = [];\r\n parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n var isColorStop = true;\r\n if (i === 0) {\r\n isColorStop = arg.reduce(function (acc, token) {\r\n if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case 'center':\r\n position.push(FIFTY_PERCENT);\r\n return false;\r\n case 'top':\r\n case 'left':\r\n position.push(ZERO_LENGTH);\r\n return false;\r\n case 'right':\r\n case 'bottom':\r\n position.push(HUNDRED_PERCENT);\r\n return false;\r\n }\r\n }\r\n else if (isLengthPercentage(token) || isLength(token)) {\r\n position.push(token);\r\n return false;\r\n }\r\n return acc;\r\n }, isColorStop);\r\n }\r\n else if (i === 1) {\r\n isColorStop = arg.reduce(function (acc, token) {\r\n if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case CIRCLE:\r\n shape = CSSRadialShape.CIRCLE;\r\n return false;\r\n case ELLIPSE:\r\n shape = CSSRadialShape.ELLIPSE;\r\n return false;\r\n case CONTAIN:\r\n case CLOSEST_SIDE:\r\n size = CSSRadialExtent.CLOSEST_SIDE;\r\n return false;\r\n case FARTHEST_SIDE:\r\n size = CSSRadialExtent.FARTHEST_SIDE;\r\n return false;\r\n case CLOSEST_CORNER:\r\n size = CSSRadialExtent.CLOSEST_CORNER;\r\n return false;\r\n case COVER:\r\n case FARTHEST_CORNER:\r\n size = CSSRadialExtent.FARTHEST_CORNER;\r\n return false;\r\n }\r\n }\r\n else if (isLength(token) || isLengthPercentage(token)) {\r\n if (!Array.isArray(size)) {\r\n size = [];\r\n }\r\n size.push(token);\r\n return false;\r\n }\r\n return acc;\r\n }, isColorStop);\r\n }\r\n if (isColorStop) {\r\n var colorStop = parseColorStop(arg);\r\n stops.push(colorStop);\r\n }\r\n });\r\n return { size: size, shape: shape, stops: stops, position: position, type: CSSImageType.RADIAL_GRADIENT };\r\n };\n\n var CSSImageType;\r\n (function (CSSImageType) {\r\n CSSImageType[CSSImageType[\"URL\"] = 0] = \"URL\";\r\n CSSImageType[CSSImageType[\"LINEAR_GRADIENT\"] = 1] = \"LINEAR_GRADIENT\";\r\n CSSImageType[CSSImageType[\"RADIAL_GRADIENT\"] = 2] = \"RADIAL_GRADIENT\";\r\n })(CSSImageType || (CSSImageType = {}));\r\n var isLinearGradient = function (background) {\r\n return background.type === CSSImageType.LINEAR_GRADIENT;\r\n };\r\n var isRadialGradient = function (background) {\r\n return background.type === CSSImageType.RADIAL_GRADIENT;\r\n };\r\n var CSSRadialShape;\r\n (function (CSSRadialShape) {\r\n CSSRadialShape[CSSRadialShape[\"CIRCLE\"] = 0] = \"CIRCLE\";\r\n CSSRadialShape[CSSRadialShape[\"ELLIPSE\"] = 1] = \"ELLIPSE\";\r\n })(CSSRadialShape || (CSSRadialShape = {}));\r\n var CSSRadialExtent;\r\n (function (CSSRadialExtent) {\r\n CSSRadialExtent[CSSRadialExtent[\"CLOSEST_SIDE\"] = 0] = \"CLOSEST_SIDE\";\r\n CSSRadialExtent[CSSRadialExtent[\"FARTHEST_SIDE\"] = 1] = \"FARTHEST_SIDE\";\r\n CSSRadialExtent[CSSRadialExtent[\"CLOSEST_CORNER\"] = 2] = \"CLOSEST_CORNER\";\r\n CSSRadialExtent[CSSRadialExtent[\"FARTHEST_CORNER\"] = 3] = \"FARTHEST_CORNER\";\r\n })(CSSRadialExtent || (CSSRadialExtent = {}));\r\n var image = {\r\n name: 'image',\r\n parse: function (value) {\r\n if (value.type === TokenType.URL_TOKEN) {\r\n var image_1 = { url: value.value, type: CSSImageType.URL };\r\n CacheStorage.getInstance().addImage(value.value);\r\n return image_1;\r\n }\r\n if (value.type === TokenType.FUNCTION) {\r\n var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name];\r\n if (typeof imageFunction === 'undefined') {\r\n throw new Error(\"Attempting to parse an unsupported image function \\\"\" + value.name + \"\\\"\");\r\n }\r\n return imageFunction(value.values);\r\n }\r\n throw new Error(\"Unsupported image type\");\r\n }\r\n };\r\n function isSupportedImage(value) {\r\n return value.type !== TokenType.FUNCTION || SUPPORTED_IMAGE_FUNCTIONS[value.name];\r\n }\r\n var SUPPORTED_IMAGE_FUNCTIONS = {\r\n 'linear-gradient': linearGradient,\r\n '-moz-linear-gradient': prefixLinearGradient,\r\n '-ms-linear-gradient': prefixLinearGradient,\r\n '-o-linear-gradient': prefixLinearGradient,\r\n '-webkit-linear-gradient': prefixLinearGradient,\r\n 'radial-gradient': radialGradient,\r\n '-moz-radial-gradient': prefixRadialGradient,\r\n '-ms-radial-gradient': prefixRadialGradient,\r\n '-o-radial-gradient': prefixRadialGradient,\r\n '-webkit-radial-gradient': prefixRadialGradient,\r\n '-webkit-gradient': webkitGradient\r\n };\n\n var backgroundImage = {\r\n name: 'background-image',\r\n initialValue: 'none',\r\n type: PropertyDescriptorParsingType.LIST,\r\n prefix: false,\r\n parse: function (tokens) {\r\n if (tokens.length === 0) {\r\n return [];\r\n }\r\n var first = tokens[0];\r\n if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\r\n return [];\r\n }\r\n return tokens.filter(function (value) { return nonFunctionArgSeparator(value) && isSupportedImage(value); }).map(image.parse);\r\n }\r\n };\n\n var backgroundOrigin = {\r\n name: 'background-origin',\r\n initialValue: 'border-box',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return tokens.map(function (token) {\r\n if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case 'padding-box':\r\n return 1 /* PADDING_BOX */;\r\n case 'content-box':\r\n return 2 /* CONTENT_BOX */;\r\n }\r\n }\r\n return 0 /* BORDER_BOX */;\r\n });\r\n }\r\n };\n\n var backgroundPosition = {\r\n name: 'background-position',\r\n initialValue: '0% 0%',\r\n type: PropertyDescriptorParsingType.LIST,\r\n prefix: false,\r\n parse: function (tokens) {\r\n return parseFunctionArgs(tokens)\r\n .map(function (values) { return values.filter(isLengthPercentage); })\r\n .map(parseLengthPercentageTuple);\r\n }\r\n };\n\n var BACKGROUND_REPEAT;\r\n (function (BACKGROUND_REPEAT) {\r\n BACKGROUND_REPEAT[BACKGROUND_REPEAT[\"REPEAT\"] = 0] = \"REPEAT\";\r\n BACKGROUND_REPEAT[BACKGROUND_REPEAT[\"NO_REPEAT\"] = 1] = \"NO_REPEAT\";\r\n BACKGROUND_REPEAT[BACKGROUND_REPEAT[\"REPEAT_X\"] = 2] = \"REPEAT_X\";\r\n BACKGROUND_REPEAT[BACKGROUND_REPEAT[\"REPEAT_Y\"] = 3] = \"REPEAT_Y\";\r\n })(BACKGROUND_REPEAT || (BACKGROUND_REPEAT = {}));\r\n var backgroundRepeat = {\r\n name: 'background-repeat',\r\n initialValue: 'repeat',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return parseFunctionArgs(tokens)\r\n .map(function (values) {\r\n return values\r\n .filter(isIdentToken)\r\n .map(function (token) { return token.value; })\r\n .join(' ');\r\n })\r\n .map(parseBackgroundRepeat);\r\n }\r\n };\r\n var parseBackgroundRepeat = function (value) {\r\n switch (value) {\r\n case 'no-repeat':\r\n return BACKGROUND_REPEAT.NO_REPEAT;\r\n case 'repeat-x':\r\n case 'repeat no-repeat':\r\n return BACKGROUND_REPEAT.REPEAT_X;\r\n case 'repeat-y':\r\n case 'no-repeat repeat':\r\n return BACKGROUND_REPEAT.REPEAT_Y;\r\n case 'repeat':\r\n default:\r\n return BACKGROUND_REPEAT.REPEAT;\r\n }\r\n };\n\n var BACKGROUND_SIZE;\r\n (function (BACKGROUND_SIZE) {\r\n BACKGROUND_SIZE[\"AUTO\"] = \"auto\";\r\n BACKGROUND_SIZE[\"CONTAIN\"] = \"contain\";\r\n BACKGROUND_SIZE[\"COVER\"] = \"cover\";\r\n })(BACKGROUND_SIZE || (BACKGROUND_SIZE = {}));\r\n var backgroundSize = {\r\n name: 'background-size',\r\n initialValue: '0',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return parseFunctionArgs(tokens).map(function (values) { return values.filter(isBackgroundSizeInfoToken); });\r\n }\r\n };\r\n var isBackgroundSizeInfoToken = function (value) {\r\n return isIdentToken(value) || isLengthPercentage(value);\r\n };\n\n var borderColorForSide = function (side) { return ({\r\n name: \"border-\" + side + \"-color\",\r\n initialValue: 'transparent',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TYPE_VALUE,\r\n format: 'color'\r\n }); };\r\n var borderTopColor = borderColorForSide('top');\r\n var borderRightColor = borderColorForSide('right');\r\n var borderBottomColor = borderColorForSide('bottom');\r\n var borderLeftColor = borderColorForSide('left');\n\n var borderRadiusForSide = function (side) { return ({\r\n name: \"border-radius-\" + side,\r\n initialValue: '0 0',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) { return parseLengthPercentageTuple(tokens.filter(isLengthPercentage)); }\r\n }); };\r\n var borderTopLeftRadius = borderRadiusForSide('top-left');\r\n var borderTopRightRadius = borderRadiusForSide('top-right');\r\n var borderBottomRightRadius = borderRadiusForSide('bottom-right');\r\n var borderBottomLeftRadius = borderRadiusForSide('bottom-left');\n\n var BORDER_STYLE;\r\n (function (BORDER_STYLE) {\r\n BORDER_STYLE[BORDER_STYLE[\"NONE\"] = 0] = \"NONE\";\r\n BORDER_STYLE[BORDER_STYLE[\"SOLID\"] = 1] = \"SOLID\";\r\n })(BORDER_STYLE || (BORDER_STYLE = {}));\r\n var borderStyleForSide = function (side) { return ({\r\n name: \"border-\" + side + \"-style\",\r\n initialValue: 'solid',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (style) {\r\n switch (style) {\r\n case 'none':\r\n return BORDER_STYLE.NONE;\r\n }\r\n return BORDER_STYLE.SOLID;\r\n }\r\n }); };\r\n var borderTopStyle = borderStyleForSide('top');\r\n var borderRightStyle = borderStyleForSide('right');\r\n var borderBottomStyle = borderStyleForSide('bottom');\r\n var borderLeftStyle = borderStyleForSide('left');\n\n var borderWidthForSide = function (side) { return ({\r\n name: \"border-\" + side + \"-width\",\r\n initialValue: '0',\r\n type: PropertyDescriptorParsingType.VALUE,\r\n prefix: false,\r\n parse: function (token) {\r\n if (isDimensionToken(token)) {\r\n return token.number;\r\n }\r\n return 0;\r\n }\r\n }); };\r\n var borderTopWidth = borderWidthForSide('top');\r\n var borderRightWidth = borderWidthForSide('right');\r\n var borderBottomWidth = borderWidthForSide('bottom');\r\n var borderLeftWidth = borderWidthForSide('left');\n\n var color$1 = {\r\n name: \"color\",\r\n initialValue: 'transparent',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TYPE_VALUE,\r\n format: 'color'\r\n };\n\n var display = {\r\n name: 'display',\r\n initialValue: 'inline-block',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return tokens.filter(isIdentToken).reduce(function (bit, token) {\r\n return bit | parseDisplayValue(token.value);\r\n }, 0 /* NONE */);\r\n }\r\n };\r\n var parseDisplayValue = function (display) {\r\n switch (display) {\r\n case 'block':\r\n return 2 /* BLOCK */;\r\n case 'inline':\r\n return 4 /* INLINE */;\r\n case 'run-in':\r\n return 8 /* RUN_IN */;\r\n case 'flow':\r\n return 16 /* FLOW */;\r\n case 'flow-root':\r\n return 32 /* FLOW_ROOT */;\r\n case 'table':\r\n return 64 /* TABLE */;\r\n case 'flex':\r\n case '-webkit-flex':\r\n return 128 /* FLEX */;\r\n case 'grid':\r\n case '-ms-grid':\r\n return 256 /* GRID */;\r\n case 'ruby':\r\n return 512 /* RUBY */;\r\n case 'subgrid':\r\n return 1024 /* SUBGRID */;\r\n case 'list-item':\r\n return 2048 /* LIST_ITEM */;\r\n case 'table-row-group':\r\n return 4096 /* TABLE_ROW_GROUP */;\r\n case 'table-header-group':\r\n return 8192 /* TABLE_HEADER_GROUP */;\r\n case 'table-footer-group':\r\n return 16384 /* TABLE_FOOTER_GROUP */;\r\n case 'table-row':\r\n return 32768 /* TABLE_ROW */;\r\n case 'table-cell':\r\n return 65536 /* TABLE_CELL */;\r\n case 'table-column-group':\r\n return 131072 /* TABLE_COLUMN_GROUP */;\r\n case 'table-column':\r\n return 262144 /* TABLE_COLUMN */;\r\n case 'table-caption':\r\n return 524288 /* TABLE_CAPTION */;\r\n case 'ruby-base':\r\n return 1048576 /* RUBY_BASE */;\r\n case 'ruby-text':\r\n return 2097152 /* RUBY_TEXT */;\r\n case 'ruby-base-container':\r\n return 4194304 /* RUBY_BASE_CONTAINER */;\r\n case 'ruby-text-container':\r\n return 8388608 /* RUBY_TEXT_CONTAINER */;\r\n case 'contents':\r\n return 16777216 /* CONTENTS */;\r\n case 'inline-block':\r\n return 33554432 /* INLINE_BLOCK */;\r\n case 'inline-list-item':\r\n return 67108864 /* INLINE_LIST_ITEM */;\r\n case 'inline-table':\r\n return 134217728 /* INLINE_TABLE */;\r\n case 'inline-flex':\r\n return 268435456 /* INLINE_FLEX */;\r\n case 'inline-grid':\r\n return 536870912 /* INLINE_GRID */;\r\n }\r\n return 0 /* NONE */;\r\n };\n\n var FLOAT;\r\n (function (FLOAT) {\r\n FLOAT[FLOAT[\"NONE\"] = 0] = \"NONE\";\r\n FLOAT[FLOAT[\"LEFT\"] = 1] = \"LEFT\";\r\n FLOAT[FLOAT[\"RIGHT\"] = 2] = \"RIGHT\";\r\n FLOAT[FLOAT[\"INLINE_START\"] = 3] = \"INLINE_START\";\r\n FLOAT[FLOAT[\"INLINE_END\"] = 4] = \"INLINE_END\";\r\n })(FLOAT || (FLOAT = {}));\r\n var float = {\r\n name: 'float',\r\n initialValue: 'none',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (float) {\r\n switch (float) {\r\n case 'left':\r\n return FLOAT.LEFT;\r\n case 'right':\r\n return FLOAT.RIGHT;\r\n case 'inline-start':\r\n return FLOAT.INLINE_START;\r\n case 'inline-end':\r\n return FLOAT.INLINE_END;\r\n }\r\n return FLOAT.NONE;\r\n }\r\n };\n\n var letterSpacing = {\r\n name: 'letter-spacing',\r\n initialValue: '0',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.VALUE,\r\n parse: function (token) {\r\n if (token.type === TokenType.IDENT_TOKEN && token.value === 'normal') {\r\n return 0;\r\n }\r\n if (token.type === TokenType.NUMBER_TOKEN) {\r\n return token.number;\r\n }\r\n if (token.type === TokenType.DIMENSION_TOKEN) {\r\n return token.number;\r\n }\r\n return 0;\r\n }\r\n };\n\n var LINE_BREAK;\r\n (function (LINE_BREAK) {\r\n LINE_BREAK[\"NORMAL\"] = \"normal\";\r\n LINE_BREAK[\"STRICT\"] = \"strict\";\r\n })(LINE_BREAK || (LINE_BREAK = {}));\r\n var lineBreak = {\r\n name: 'line-break',\r\n initialValue: 'normal',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (lineBreak) {\r\n switch (lineBreak) {\r\n case 'strict':\r\n return LINE_BREAK.STRICT;\r\n case 'normal':\r\n default:\r\n return LINE_BREAK.NORMAL;\r\n }\r\n }\r\n };\n\n var lineHeight = {\r\n name: 'line-height',\r\n initialValue: 'normal',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TOKEN_VALUE\r\n };\r\n var computeLineHeight = function (token, fontSize) {\r\n if (isIdentToken(token) && token.value === 'normal') {\r\n return 1.2 * fontSize;\r\n }\r\n else if (token.type === TokenType.NUMBER_TOKEN) {\r\n return fontSize * token.number;\r\n }\r\n else if (isLengthPercentage(token)) {\r\n return getAbsoluteValue(token, fontSize);\r\n }\r\n return fontSize;\r\n };\n\n var listStyleImage = {\r\n name: 'list-style-image',\r\n initialValue: 'none',\r\n type: PropertyDescriptorParsingType.VALUE,\r\n prefix: false,\r\n parse: function (token) {\r\n if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') {\r\n return null;\r\n }\r\n return image.parse(token);\r\n }\r\n };\n\n var LIST_STYLE_POSITION;\r\n (function (LIST_STYLE_POSITION) {\r\n LIST_STYLE_POSITION[LIST_STYLE_POSITION[\"INSIDE\"] = 0] = \"INSIDE\";\r\n LIST_STYLE_POSITION[LIST_STYLE_POSITION[\"OUTSIDE\"] = 1] = \"OUTSIDE\";\r\n })(LIST_STYLE_POSITION || (LIST_STYLE_POSITION = {}));\r\n var listStylePosition = {\r\n name: 'list-style-position',\r\n initialValue: 'outside',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (position) {\r\n switch (position) {\r\n case 'inside':\r\n return LIST_STYLE_POSITION.INSIDE;\r\n case 'outside':\r\n default:\r\n return LIST_STYLE_POSITION.OUTSIDE;\r\n }\r\n }\r\n };\n\n var LIST_STYLE_TYPE;\r\n (function (LIST_STYLE_TYPE) {\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"NONE\"] = -1] = \"NONE\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DISC\"] = 0] = \"DISC\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CIRCLE\"] = 1] = \"CIRCLE\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"SQUARE\"] = 2] = \"SQUARE\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DECIMAL\"] = 3] = \"DECIMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CJK_DECIMAL\"] = 4] = \"CJK_DECIMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DECIMAL_LEADING_ZERO\"] = 5] = \"DECIMAL_LEADING_ZERO\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LOWER_ROMAN\"] = 6] = \"LOWER_ROMAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"UPPER_ROMAN\"] = 7] = \"UPPER_ROMAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LOWER_GREEK\"] = 8] = \"LOWER_GREEK\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LOWER_ALPHA\"] = 9] = \"LOWER_ALPHA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"UPPER_ALPHA\"] = 10] = \"UPPER_ALPHA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"ARABIC_INDIC\"] = 11] = \"ARABIC_INDIC\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"ARMENIAN\"] = 12] = \"ARMENIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"BENGALI\"] = 13] = \"BENGALI\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CAMBODIAN\"] = 14] = \"CAMBODIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CJK_EARTHLY_BRANCH\"] = 15] = \"CJK_EARTHLY_BRANCH\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CJK_HEAVENLY_STEM\"] = 16] = \"CJK_HEAVENLY_STEM\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"CJK_IDEOGRAPHIC\"] = 17] = \"CJK_IDEOGRAPHIC\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DEVANAGARI\"] = 18] = \"DEVANAGARI\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"ETHIOPIC_NUMERIC\"] = 19] = \"ETHIOPIC_NUMERIC\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"GEORGIAN\"] = 20] = \"GEORGIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"GUJARATI\"] = 21] = \"GUJARATI\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"GURMUKHI\"] = 22] = \"GURMUKHI\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"HEBREW\"] = 22] = \"HEBREW\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"HIRAGANA\"] = 23] = \"HIRAGANA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"HIRAGANA_IROHA\"] = 24] = \"HIRAGANA_IROHA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"JAPANESE_FORMAL\"] = 25] = \"JAPANESE_FORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"JAPANESE_INFORMAL\"] = 26] = \"JAPANESE_INFORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KANNADA\"] = 27] = \"KANNADA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KATAKANA\"] = 28] = \"KATAKANA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KATAKANA_IROHA\"] = 29] = \"KATAKANA_IROHA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KHMER\"] = 30] = \"KHMER\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KOREAN_HANGUL_FORMAL\"] = 31] = \"KOREAN_HANGUL_FORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KOREAN_HANJA_FORMAL\"] = 32] = \"KOREAN_HANJA_FORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"KOREAN_HANJA_INFORMAL\"] = 33] = \"KOREAN_HANJA_INFORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LAO\"] = 34] = \"LAO\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"LOWER_ARMENIAN\"] = 35] = \"LOWER_ARMENIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"MALAYALAM\"] = 36] = \"MALAYALAM\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"MONGOLIAN\"] = 37] = \"MONGOLIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"MYANMAR\"] = 38] = \"MYANMAR\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"ORIYA\"] = 39] = \"ORIYA\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"PERSIAN\"] = 40] = \"PERSIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"SIMP_CHINESE_FORMAL\"] = 41] = \"SIMP_CHINESE_FORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"SIMP_CHINESE_INFORMAL\"] = 42] = \"SIMP_CHINESE_INFORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TAMIL\"] = 43] = \"TAMIL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TELUGU\"] = 44] = \"TELUGU\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"THAI\"] = 45] = \"THAI\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TIBETAN\"] = 46] = \"TIBETAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TRAD_CHINESE_FORMAL\"] = 47] = \"TRAD_CHINESE_FORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"TRAD_CHINESE_INFORMAL\"] = 48] = \"TRAD_CHINESE_INFORMAL\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"UPPER_ARMENIAN\"] = 49] = \"UPPER_ARMENIAN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DISCLOSURE_OPEN\"] = 50] = \"DISCLOSURE_OPEN\";\r\n LIST_STYLE_TYPE[LIST_STYLE_TYPE[\"DISCLOSURE_CLOSED\"] = 51] = \"DISCLOSURE_CLOSED\";\r\n })(LIST_STYLE_TYPE || (LIST_STYLE_TYPE = {}));\r\n var listStyleType = {\r\n name: 'list-style-type',\r\n initialValue: 'none',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (type) {\r\n switch (type) {\r\n case 'disc':\r\n return LIST_STYLE_TYPE.DISC;\r\n case 'circle':\r\n return LIST_STYLE_TYPE.CIRCLE;\r\n case 'square':\r\n return LIST_STYLE_TYPE.SQUARE;\r\n case 'decimal':\r\n return LIST_STYLE_TYPE.DECIMAL;\r\n case 'cjk-decimal':\r\n return LIST_STYLE_TYPE.CJK_DECIMAL;\r\n case 'decimal-leading-zero':\r\n return LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO;\r\n case 'lower-roman':\r\n return LIST_STYLE_TYPE.LOWER_ROMAN;\r\n case 'upper-roman':\r\n return LIST_STYLE_TYPE.UPPER_ROMAN;\r\n case 'lower-greek':\r\n return LIST_STYLE_TYPE.LOWER_GREEK;\r\n case 'lower-alpha':\r\n return LIST_STYLE_TYPE.LOWER_ALPHA;\r\n case 'upper-alpha':\r\n return LIST_STYLE_TYPE.UPPER_ALPHA;\r\n case 'arabic-indic':\r\n return LIST_STYLE_TYPE.ARABIC_INDIC;\r\n case 'armenian':\r\n return LIST_STYLE_TYPE.ARMENIAN;\r\n case 'bengali':\r\n return LIST_STYLE_TYPE.BENGALI;\r\n case 'cambodian':\r\n return LIST_STYLE_TYPE.CAMBODIAN;\r\n case 'cjk-earthly-branch':\r\n return LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH;\r\n case 'cjk-heavenly-stem':\r\n return LIST_STYLE_TYPE.CJK_HEAVENLY_STEM;\r\n case 'cjk-ideographic':\r\n return LIST_STYLE_TYPE.CJK_IDEOGRAPHIC;\r\n case 'devanagari':\r\n return LIST_STYLE_TYPE.DEVANAGARI;\r\n case 'ethiopic-numeric':\r\n return LIST_STYLE_TYPE.ETHIOPIC_NUMERIC;\r\n case 'georgian':\r\n return LIST_STYLE_TYPE.GEORGIAN;\r\n case 'gujarati':\r\n return LIST_STYLE_TYPE.GUJARATI;\r\n case 'gurmukhi':\r\n return LIST_STYLE_TYPE.GURMUKHI;\r\n case 'hebrew':\r\n return LIST_STYLE_TYPE.HEBREW;\r\n case 'hiragana':\r\n return LIST_STYLE_TYPE.HIRAGANA;\r\n case 'hiragana-iroha':\r\n return LIST_STYLE_TYPE.HIRAGANA_IROHA;\r\n case 'japanese-formal':\r\n return LIST_STYLE_TYPE.JAPANESE_FORMAL;\r\n case 'japanese-informal':\r\n return LIST_STYLE_TYPE.JAPANESE_INFORMAL;\r\n case 'kannada':\r\n return LIST_STYLE_TYPE.KANNADA;\r\n case 'katakana':\r\n return LIST_STYLE_TYPE.KATAKANA;\r\n case 'katakana-iroha':\r\n return LIST_STYLE_TYPE.KATAKANA_IROHA;\r\n case 'khmer':\r\n return LIST_STYLE_TYPE.KHMER;\r\n case 'korean-hangul-formal':\r\n return LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL;\r\n case 'korean-hanja-formal':\r\n return LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL;\r\n case 'korean-hanja-informal':\r\n return LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL;\r\n case 'lao':\r\n return LIST_STYLE_TYPE.LAO;\r\n case 'lower-armenian':\r\n return LIST_STYLE_TYPE.LOWER_ARMENIAN;\r\n case 'malayalam':\r\n return LIST_STYLE_TYPE.MALAYALAM;\r\n case 'mongolian':\r\n return LIST_STYLE_TYPE.MONGOLIAN;\r\n case 'myanmar':\r\n return LIST_STYLE_TYPE.MYANMAR;\r\n case 'oriya':\r\n return LIST_STYLE_TYPE.ORIYA;\r\n case 'persian':\r\n return LIST_STYLE_TYPE.PERSIAN;\r\n case 'simp-chinese-formal':\r\n return LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL;\r\n case 'simp-chinese-informal':\r\n return LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL;\r\n case 'tamil':\r\n return LIST_STYLE_TYPE.TAMIL;\r\n case 'telugu':\r\n return LIST_STYLE_TYPE.TELUGU;\r\n case 'thai':\r\n return LIST_STYLE_TYPE.THAI;\r\n case 'tibetan':\r\n return LIST_STYLE_TYPE.TIBETAN;\r\n case 'trad-chinese-formal':\r\n return LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL;\r\n case 'trad-chinese-informal':\r\n return LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL;\r\n case 'upper-armenian':\r\n return LIST_STYLE_TYPE.UPPER_ARMENIAN;\r\n case 'disclosure-open':\r\n return LIST_STYLE_TYPE.DISCLOSURE_OPEN;\r\n case 'disclosure-closed':\r\n return LIST_STYLE_TYPE.DISCLOSURE_CLOSED;\r\n case 'none':\r\n default:\r\n return LIST_STYLE_TYPE.NONE;\r\n }\r\n }\r\n };\n\n var marginForSide = function (side) { return ({\r\n name: \"margin-\" + side,\r\n initialValue: '0',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TOKEN_VALUE\r\n }); };\r\n var marginTop = marginForSide('top');\r\n var marginRight = marginForSide('right');\r\n var marginBottom = marginForSide('bottom');\r\n var marginLeft = marginForSide('left');\n\n var OVERFLOW;\r\n (function (OVERFLOW) {\r\n OVERFLOW[OVERFLOW[\"VISIBLE\"] = 0] = \"VISIBLE\";\r\n OVERFLOW[OVERFLOW[\"HIDDEN\"] = 1] = \"HIDDEN\";\r\n OVERFLOW[OVERFLOW[\"SCROLL\"] = 2] = \"SCROLL\";\r\n OVERFLOW[OVERFLOW[\"AUTO\"] = 3] = \"AUTO\";\r\n })(OVERFLOW || (OVERFLOW = {}));\r\n var overflow = {\r\n name: 'overflow',\r\n initialValue: 'visible',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return tokens.filter(isIdentToken).map(function (overflow) {\r\n switch (overflow.value) {\r\n case 'hidden':\r\n return OVERFLOW.HIDDEN;\r\n case 'scroll':\r\n return OVERFLOW.SCROLL;\r\n case 'auto':\r\n return OVERFLOW.AUTO;\r\n case 'visible':\r\n default:\r\n return OVERFLOW.VISIBLE;\r\n }\r\n });\r\n }\r\n };\n\n var OVERFLOW_WRAP;\r\n (function (OVERFLOW_WRAP) {\r\n OVERFLOW_WRAP[\"NORMAL\"] = \"normal\";\r\n OVERFLOW_WRAP[\"BREAK_WORD\"] = \"break-word\";\r\n })(OVERFLOW_WRAP || (OVERFLOW_WRAP = {}));\r\n var overflowWrap = {\r\n name: 'overflow-wrap',\r\n initialValue: 'normal',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (overflow) {\r\n switch (overflow) {\r\n case 'break-word':\r\n return OVERFLOW_WRAP.BREAK_WORD;\r\n case 'normal':\r\n default:\r\n return OVERFLOW_WRAP.NORMAL;\r\n }\r\n }\r\n };\n\n var paddingForSide = function (side) { return ({\r\n name: \"padding-\" + side,\r\n initialValue: '0',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TYPE_VALUE,\r\n format: 'length-percentage'\r\n }); };\r\n var paddingTop = paddingForSide('top');\r\n var paddingRight = paddingForSide('right');\r\n var paddingBottom = paddingForSide('bottom');\r\n var paddingLeft = paddingForSide('left');\n\n var TEXT_ALIGN;\r\n (function (TEXT_ALIGN) {\r\n TEXT_ALIGN[TEXT_ALIGN[\"LEFT\"] = 0] = \"LEFT\";\r\n TEXT_ALIGN[TEXT_ALIGN[\"CENTER\"] = 1] = \"CENTER\";\r\n TEXT_ALIGN[TEXT_ALIGN[\"RIGHT\"] = 2] = \"RIGHT\";\r\n })(TEXT_ALIGN || (TEXT_ALIGN = {}));\r\n var textAlign = {\r\n name: 'text-align',\r\n initialValue: 'left',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (textAlign) {\r\n switch (textAlign) {\r\n case 'right':\r\n return TEXT_ALIGN.RIGHT;\r\n case 'center':\r\n case 'justify':\r\n return TEXT_ALIGN.CENTER;\r\n case 'left':\r\n default:\r\n return TEXT_ALIGN.LEFT;\r\n }\r\n }\r\n };\n\n var POSITION;\r\n (function (POSITION) {\r\n POSITION[POSITION[\"STATIC\"] = 0] = \"STATIC\";\r\n POSITION[POSITION[\"RELATIVE\"] = 1] = \"RELATIVE\";\r\n POSITION[POSITION[\"ABSOLUTE\"] = 2] = \"ABSOLUTE\";\r\n POSITION[POSITION[\"FIXED\"] = 3] = \"FIXED\";\r\n POSITION[POSITION[\"STICKY\"] = 4] = \"STICKY\";\r\n })(POSITION || (POSITION = {}));\r\n var position = {\r\n name: 'position',\r\n initialValue: 'static',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (position) {\r\n switch (position) {\r\n case 'relative':\r\n return POSITION.RELATIVE;\r\n case 'absolute':\r\n return POSITION.ABSOLUTE;\r\n case 'fixed':\r\n return POSITION.FIXED;\r\n case 'sticky':\r\n return POSITION.STICKY;\r\n }\r\n return POSITION.STATIC;\r\n }\r\n };\n\n var textShadow = {\r\n name: 'text-shadow',\r\n initialValue: 'none',\r\n type: PropertyDescriptorParsingType.LIST,\r\n prefix: false,\r\n parse: function (tokens) {\r\n if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\r\n return [];\r\n }\r\n return parseFunctionArgs(tokens).map(function (values) {\r\n var shadow = {\r\n color: COLORS.TRANSPARENT,\r\n offsetX: ZERO_LENGTH,\r\n offsetY: ZERO_LENGTH,\r\n blur: ZERO_LENGTH\r\n };\r\n var c = 0;\r\n for (var i = 0; i < values.length; i++) {\r\n var token = values[i];\r\n if (isLength(token)) {\r\n if (c === 0) {\r\n shadow.offsetX = token;\r\n }\r\n else if (c === 1) {\r\n shadow.offsetY = token;\r\n }\r\n else {\r\n shadow.blur = token;\r\n }\r\n c++;\r\n }\r\n else {\r\n shadow.color = color.parse(token);\r\n }\r\n }\r\n return shadow;\r\n });\r\n }\r\n };\n\n var TEXT_TRANSFORM;\r\n (function (TEXT_TRANSFORM) {\r\n TEXT_TRANSFORM[TEXT_TRANSFORM[\"NONE\"] = 0] = \"NONE\";\r\n TEXT_TRANSFORM[TEXT_TRANSFORM[\"LOWERCASE\"] = 1] = \"LOWERCASE\";\r\n TEXT_TRANSFORM[TEXT_TRANSFORM[\"UPPERCASE\"] = 2] = \"UPPERCASE\";\r\n TEXT_TRANSFORM[TEXT_TRANSFORM[\"CAPITALIZE\"] = 3] = \"CAPITALIZE\";\r\n })(TEXT_TRANSFORM || (TEXT_TRANSFORM = {}));\r\n var textTransform = {\r\n name: 'text-transform',\r\n initialValue: 'none',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (textTransform) {\r\n switch (textTransform) {\r\n case 'uppercase':\r\n return TEXT_TRANSFORM.UPPERCASE;\r\n case 'lowercase':\r\n return TEXT_TRANSFORM.LOWERCASE;\r\n case 'capitalize':\r\n return TEXT_TRANSFORM.CAPITALIZE;\r\n }\r\n return TEXT_TRANSFORM.NONE;\r\n }\r\n };\n\n var transform = {\r\n name: 'transform',\r\n initialValue: 'none',\r\n prefix: true,\r\n type: PropertyDescriptorParsingType.VALUE,\r\n parse: function (token) {\r\n if (token.type === TokenType.IDENT_TOKEN && token.value === 'none') {\r\n return null;\r\n }\r\n if (token.type === TokenType.FUNCTION) {\r\n var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name];\r\n if (typeof transformFunction === 'undefined') {\r\n throw new Error(\"Attempting to parse an unsupported transform function \\\"\" + token.name + \"\\\"\");\r\n }\r\n return transformFunction(token.values);\r\n }\r\n return null;\r\n }\r\n };\r\n var matrix = function (args) {\r\n var values = args.filter(function (arg) { return arg.type === TokenType.NUMBER_TOKEN; }).map(function (arg) { return arg.number; });\r\n return values.length === 6 ? values : null;\r\n };\r\n // doesn't support 3D transforms at the moment\r\n var matrix3d = function (args) {\r\n var values = args.filter(function (arg) { return arg.type === TokenType.NUMBER_TOKEN; }).map(function (arg) { return arg.number; });\r\n var a1 = values[0], b1 = values[1], _a = values[2], _b = values[3], a2 = values[4], b2 = values[5], _c = values[6], _d = values[7], _e = values[8], _f = values[9], _g = values[10], _h = values[11], a4 = values[12], b4 = values[13], _j = values[14], _k = values[15];\r\n return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null;\r\n };\r\n var SUPPORTED_TRANSFORM_FUNCTIONS = {\r\n matrix: matrix,\r\n matrix3d: matrix3d\r\n };\n\n var DEFAULT_VALUE = {\r\n type: TokenType.PERCENTAGE_TOKEN,\r\n number: 50,\r\n flags: FLAG_INTEGER\r\n };\r\n var DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE];\r\n var transformOrigin = {\r\n name: 'transform-origin',\r\n initialValue: '50% 50%',\r\n prefix: true,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n var origins = tokens.filter(isLengthPercentage);\r\n if (origins.length !== 2) {\r\n return DEFAULT;\r\n }\r\n return [origins[0], origins[1]];\r\n }\r\n };\n\n var VISIBILITY;\r\n (function (VISIBILITY) {\r\n VISIBILITY[VISIBILITY[\"VISIBLE\"] = 0] = \"VISIBLE\";\r\n VISIBILITY[VISIBILITY[\"HIDDEN\"] = 1] = \"HIDDEN\";\r\n VISIBILITY[VISIBILITY[\"COLLAPSE\"] = 2] = \"COLLAPSE\";\r\n })(VISIBILITY || (VISIBILITY = {}));\r\n var visibility = {\r\n name: 'visible',\r\n initialValue: 'none',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (visibility) {\r\n switch (visibility) {\r\n case 'hidden':\r\n return VISIBILITY.HIDDEN;\r\n case 'collapse':\r\n return VISIBILITY.COLLAPSE;\r\n case 'visible':\r\n default:\r\n return VISIBILITY.VISIBLE;\r\n }\r\n }\r\n };\n\n var WORD_BREAK;\r\n (function (WORD_BREAK) {\r\n WORD_BREAK[\"NORMAL\"] = \"normal\";\r\n WORD_BREAK[\"BREAK_ALL\"] = \"break-all\";\r\n WORD_BREAK[\"KEEP_ALL\"] = \"keep-all\";\r\n })(WORD_BREAK || (WORD_BREAK = {}));\r\n var wordBreak = {\r\n name: 'word-break',\r\n initialValue: 'normal',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (wordBreak) {\r\n switch (wordBreak) {\r\n case 'break-all':\r\n return WORD_BREAK.BREAK_ALL;\r\n case 'keep-all':\r\n return WORD_BREAK.KEEP_ALL;\r\n case 'normal':\r\n default:\r\n return WORD_BREAK.NORMAL;\r\n }\r\n }\r\n };\n\n var zIndex = {\r\n name: 'z-index',\r\n initialValue: 'auto',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.VALUE,\r\n parse: function (token) {\r\n if (token.type === TokenType.IDENT_TOKEN) {\r\n return { auto: true, order: 0 };\r\n }\r\n if (isNumberToken(token)) {\r\n return { auto: false, order: token.number };\r\n }\r\n throw new Error(\"Invalid z-index number parsed\");\r\n }\r\n };\n\n var opacity = {\r\n name: 'opacity',\r\n initialValue: '1',\r\n type: PropertyDescriptorParsingType.VALUE,\r\n prefix: false,\r\n parse: function (token) {\r\n if (isNumberToken(token)) {\r\n return token.number;\r\n }\r\n return 1;\r\n }\r\n };\n\n var textDecorationColor = {\r\n name: \"text-decoration-color\",\r\n initialValue: 'transparent',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TYPE_VALUE,\r\n format: 'color'\r\n };\n\n var textDecorationLine = {\r\n name: 'text-decoration-line',\r\n initialValue: 'none',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n return tokens\r\n .filter(isIdentToken)\r\n .map(function (token) {\r\n switch (token.value) {\r\n case 'underline':\r\n return 1 /* UNDERLINE */;\r\n case 'overline':\r\n return 2 /* OVERLINE */;\r\n case 'line-through':\r\n return 3 /* LINE_THROUGH */;\r\n case 'none':\r\n return 4 /* BLINK */;\r\n }\r\n return 0 /* NONE */;\r\n })\r\n .filter(function (line) { return line !== 0 /* NONE */; });\r\n }\r\n };\n\n var fontFamily = {\r\n name: \"font-family\",\r\n initialValue: '',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n var accumulator = [];\r\n var results = [];\r\n tokens.forEach(function (token) {\r\n switch (token.type) {\r\n case TokenType.IDENT_TOKEN:\r\n case TokenType.STRING_TOKEN:\r\n accumulator.push(token.value);\r\n break;\r\n case TokenType.NUMBER_TOKEN:\r\n accumulator.push(token.number.toString());\r\n break;\r\n case TokenType.COMMA_TOKEN:\r\n results.push(accumulator.join(' '));\r\n accumulator.length = 0;\r\n break;\r\n }\r\n });\r\n if (accumulator.length) {\r\n results.push(accumulator.join(' '));\r\n }\r\n return results.map(function (result) { return (result.indexOf(' ') === -1 ? result : \"'\" + result + \"'\"); });\r\n }\r\n };\n\n var fontSize = {\r\n name: \"font-size\",\r\n initialValue: '0',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.TYPE_VALUE,\r\n format: 'length'\r\n };\n\n var fontWeight = {\r\n name: 'font-weight',\r\n initialValue: 'normal',\r\n type: PropertyDescriptorParsingType.VALUE,\r\n prefix: false,\r\n parse: function (token) {\r\n if (isNumberToken(token)) {\r\n return token.number;\r\n }\r\n if (isIdentToken(token)) {\r\n switch (token.value) {\r\n case 'bold':\r\n return 700;\r\n case 'normal':\r\n default:\r\n return 400;\r\n }\r\n }\r\n return 400;\r\n }\r\n };\n\n var fontVariant = {\r\n name: 'font-variant',\r\n initialValue: 'none',\r\n type: PropertyDescriptorParsingType.LIST,\r\n prefix: false,\r\n parse: function (tokens) {\r\n return tokens.filter(isIdentToken).map(function (token) { return token.value; });\r\n }\r\n };\n\n var FONT_STYLE;\r\n (function (FONT_STYLE) {\r\n FONT_STYLE[\"NORMAL\"] = \"normal\";\r\n FONT_STYLE[\"ITALIC\"] = \"italic\";\r\n FONT_STYLE[\"OBLIQUE\"] = \"oblique\";\r\n })(FONT_STYLE || (FONT_STYLE = {}));\r\n var fontStyle = {\r\n name: 'font-style',\r\n initialValue: 'normal',\r\n prefix: false,\r\n type: PropertyDescriptorParsingType.IDENT_VALUE,\r\n parse: function (overflow) {\r\n switch (overflow) {\r\n case 'oblique':\r\n return FONT_STYLE.OBLIQUE;\r\n case 'italic':\r\n return FONT_STYLE.ITALIC;\r\n case 'normal':\r\n default:\r\n return FONT_STYLE.NORMAL;\r\n }\r\n }\r\n };\n\n var contains = function (bit, value) { return (bit & value) !== 0; };\n\n var content = {\r\n name: 'content',\r\n initialValue: 'none',\r\n type: PropertyDescriptorParsingType.LIST,\r\n prefix: false,\r\n parse: function (tokens) {\r\n if (tokens.length === 0) {\r\n return [];\r\n }\r\n var first = tokens[0];\r\n if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\r\n return [];\r\n }\r\n return tokens;\r\n }\r\n };\n\n var counterIncrement = {\r\n name: 'counter-increment',\r\n initialValue: 'none',\r\n prefix: true,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n if (tokens.length === 0) {\r\n return null;\r\n }\r\n var first = tokens[0];\r\n if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\r\n return null;\r\n }\r\n var increments = [];\r\n var filtered = tokens.filter(nonWhiteSpace);\r\n for (var i = 0; i < filtered.length; i++) {\r\n var counter = filtered[i];\r\n var next = filtered[i + 1];\r\n if (counter.type === TokenType.IDENT_TOKEN) {\r\n var increment = next && isNumberToken(next) ? next.number : 1;\r\n increments.push({ counter: counter.value, increment: increment });\r\n }\r\n }\r\n return increments;\r\n }\r\n };\n\n var counterReset = {\r\n name: 'counter-reset',\r\n initialValue: 'none',\r\n prefix: true,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n if (tokens.length === 0) {\r\n return [];\r\n }\r\n var resets = [];\r\n var filtered = tokens.filter(nonWhiteSpace);\r\n for (var i = 0; i < filtered.length; i++) {\r\n var counter = filtered[i];\r\n var next = filtered[i + 1];\r\n if (isIdentToken(counter) && counter.value !== 'none') {\r\n var reset = next && isNumberToken(next) ? next.number : 0;\r\n resets.push({ counter: counter.value, reset: reset });\r\n }\r\n }\r\n return resets;\r\n }\r\n };\n\n var quotes = {\r\n name: 'quotes',\r\n initialValue: 'none',\r\n prefix: true,\r\n type: PropertyDescriptorParsingType.LIST,\r\n parse: function (tokens) {\r\n if (tokens.length === 0) {\r\n return null;\r\n }\r\n var first = tokens[0];\r\n if (first.type === TokenType.IDENT_TOKEN && first.value === 'none') {\r\n return null;\r\n }\r\n var quotes = [];\r\n var filtered = tokens.filter(isStringToken);\r\n if (filtered.length % 2 !== 0) {\r\n return null;\r\n }\r\n for (var i = 0; i < filtered.length; i += 2) {\r\n var open_1 = filtered[i].value;\r\n var close_1 = filtered[i + 1].value;\r\n quotes.push({ open: open_1, close: close_1 });\r\n }\r\n return quotes;\r\n }\r\n };\r\n var getQuote = function (quotes, depth, open) {\r\n if (!quotes) {\r\n return '';\r\n }\r\n var quote = quotes[Math.min(depth, quotes.length - 1)];\r\n if (!quote) {\r\n return '';\r\n }\r\n return open ? quote.open : quote.close;\r\n };\n\n var boxShadow = {\r\n name: 'box-shadow',\r\n initialValue: 'none',\r\n type: PropertyDescriptorParsingType.LIST,\r\n prefix: false,\r\n parse: function (tokens) {\r\n if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\r\n return [];\r\n }\r\n return parseFunctionArgs(tokens).map(function (values) {\r\n var shadow = {\r\n color: 0x000000ff,\r\n offsetX: ZERO_LENGTH,\r\n offsetY: ZERO_LENGTH,\r\n blur: ZERO_LENGTH,\r\n spread: ZERO_LENGTH,\r\n inset: false\r\n };\r\n var c = 0;\r\n for (var i = 0; i < values.length; i++) {\r\n var token = values[i];\r\n if (isIdentWithValue(token, 'inset')) {\r\n shadow.inset = true;\r\n }\r\n else if (isLength(token)) {\r\n if (c === 0) {\r\n shadow.offsetX = token;\r\n }\r\n else if (c === 1) {\r\n shadow.offsetY = token;\r\n }\r\n else if (c === 2) {\r\n shadow.blur = token;\r\n }\r\n else {\r\n shadow.spread = token;\r\n }\r\n c++;\r\n }\r\n else {\r\n shadow.color = color.parse(token);\r\n }\r\n }\r\n return shadow;\r\n });\r\n }\r\n };\n\n var CSSParsedDeclaration = /** @class */ (function () {\r\n function CSSParsedDeclaration(declaration) {\r\n this.backgroundClip = parse(backgroundClip, declaration.backgroundClip);\r\n this.backgroundColor = parse(backgroundColor, declaration.backgroundColor);\r\n this.backgroundImage = parse(backgroundImage, declaration.backgroundImage);\r\n this.backgroundOrigin = parse(backgroundOrigin, declaration.backgroundOrigin);\r\n this.backgroundPosition = parse(backgroundPosition, declaration.backgroundPosition);\r\n this.backgroundRepeat = parse(backgroundRepeat, declaration.backgroundRepeat);\r\n this.backgroundSize = parse(backgroundSize, declaration.backgroundSize);\r\n this.borderTopColor = parse(borderTopColor, declaration.borderTopColor);\r\n this.borderRightColor = parse(borderRightColor, declaration.borderRightColor);\r\n this.borderBottomColor = parse(borderBottomColor, declaration.borderBottomColor);\r\n this.borderLeftColor = parse(borderLeftColor, declaration.borderLeftColor);\r\n this.borderTopLeftRadius = parse(borderTopLeftRadius, declaration.borderTopLeftRadius);\r\n this.borderTopRightRadius = parse(borderTopRightRadius, declaration.borderTopRightRadius);\r\n this.borderBottomRightRadius = parse(borderBottomRightRadius, declaration.borderBottomRightRadius);\r\n this.borderBottomLeftRadius = parse(borderBottomLeftRadius, declaration.borderBottomLeftRadius);\r\n this.borderTopStyle = parse(borderTopStyle, declaration.borderTopStyle);\r\n this.borderRightStyle = parse(borderRightStyle, declaration.borderRightStyle);\r\n this.borderBottomStyle = parse(borderBottomStyle, declaration.borderBottomStyle);\r\n this.borderLeftStyle = parse(borderLeftStyle, declaration.borderLeftStyle);\r\n this.borderTopWidth = parse(borderTopWidth, declaration.borderTopWidth);\r\n this.borderRightWidth = parse(borderRightWidth, declaration.borderRightWidth);\r\n this.borderBottomWidth = parse(borderBottomWidth, declaration.borderBottomWidth);\r\n this.borderLeftWidth = parse(borderLeftWidth, declaration.borderLeftWidth);\r\n this.boxShadow = parse(boxShadow, declaration.boxShadow);\r\n this.color = parse(color$1, declaration.color);\r\n this.display = parse(display, declaration.display);\r\n this.float = parse(float, declaration.cssFloat);\r\n this.fontFamily = parse(fontFamily, declaration.fontFamily);\r\n this.fontSize = parse(fontSize, declaration.fontSize);\r\n this.fontStyle = parse(fontStyle, declaration.fontStyle);\r\n this.fontVariant = parse(fontVariant, declaration.fontVariant);\r\n this.fontWeight = parse(fontWeight, declaration.fontWeight);\r\n this.letterSpacing = parse(letterSpacing, declaration.letterSpacing);\r\n this.lineBreak = parse(lineBreak, declaration.lineBreak);\r\n this.lineHeight = parse(lineHeight, declaration.lineHeight);\r\n this.listStyleImage = parse(listStyleImage, declaration.listStyleImage);\r\n this.listStylePosition = parse(listStylePosition, declaration.listStylePosition);\r\n this.listStyleType = parse(listStyleType, declaration.listStyleType);\r\n this.marginTop = parse(marginTop, declaration.marginTop);\r\n this.marginRight = parse(marginRight, declaration.marginRight);\r\n this.marginBottom = parse(marginBottom, declaration.marginBottom);\r\n this.marginLeft = parse(marginLeft, declaration.marginLeft);\r\n this.opacity = parse(opacity, declaration.opacity);\r\n var overflowTuple = parse(overflow, declaration.overflow);\r\n this.overflowX = overflowTuple[0];\r\n this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0];\r\n this.overflowWrap = parse(overflowWrap, declaration.overflowWrap);\r\n this.paddingTop = parse(paddingTop, declaration.paddingTop);\r\n this.paddingRight = parse(paddingRight, declaration.paddingRight);\r\n this.paddingBottom = parse(paddingBottom, declaration.paddingBottom);\r\n this.paddingLeft = parse(paddingLeft, declaration.paddingLeft);\r\n this.position = parse(position, declaration.position);\r\n this.textAlign = parse(textAlign, declaration.textAlign);\r\n this.textDecorationColor = parse(textDecorationColor, declaration.textDecorationColor || declaration.color);\r\n this.textDecorationLine = parse(textDecorationLine, declaration.textDecorationLine);\r\n this.textShadow = parse(textShadow, declaration.textShadow);\r\n this.textTransform = parse(textTransform, declaration.textTransform);\r\n this.transform = parse(transform, declaration.transform);\r\n this.transformOrigin = parse(transformOrigin, declaration.transformOrigin);\r\n this.visibility = parse(visibility, declaration.visibility);\r\n this.wordBreak = parse(wordBreak, declaration.wordBreak);\r\n this.zIndex = parse(zIndex, declaration.zIndex);\r\n }\r\n CSSParsedDeclaration.prototype.isVisible = function () {\r\n return this.display > 0 && this.opacity > 0 && this.visibility === VISIBILITY.VISIBLE;\r\n };\r\n CSSParsedDeclaration.prototype.isTransparent = function () {\r\n return isTransparent(this.backgroundColor);\r\n };\r\n CSSParsedDeclaration.prototype.isTransformed = function () {\r\n return this.transform !== null;\r\n };\r\n CSSParsedDeclaration.prototype.isPositioned = function () {\r\n return this.position !== POSITION.STATIC;\r\n };\r\n CSSParsedDeclaration.prototype.isPositionedWithZIndex = function () {\r\n return this.isPositioned() && !this.zIndex.auto;\r\n };\r\n CSSParsedDeclaration.prototype.isFloating = function () {\r\n return this.float !== FLOAT.NONE;\r\n };\r\n CSSParsedDeclaration.prototype.isInlineLevel = function () {\r\n return (contains(this.display, 4 /* INLINE */) ||\r\n contains(this.display, 33554432 /* INLINE_BLOCK */) ||\r\n contains(this.display, 268435456 /* INLINE_FLEX */) ||\r\n contains(this.display, 536870912 /* INLINE_GRID */) ||\r\n contains(this.display, 67108864 /* INLINE_LIST_ITEM */) ||\r\n contains(this.display, 134217728 /* INLINE_TABLE */));\r\n };\r\n return CSSParsedDeclaration;\r\n }());\r\n var CSSParsedPseudoDeclaration = /** @class */ (function () {\r\n function CSSParsedPseudoDeclaration(declaration) {\r\n this.content = parse(content, declaration.content);\r\n this.quotes = parse(quotes, declaration.quotes);\r\n }\r\n return CSSParsedPseudoDeclaration;\r\n }());\r\n var CSSParsedCounterDeclaration = /** @class */ (function () {\r\n function CSSParsedCounterDeclaration(declaration) {\r\n this.counterIncrement = parse(counterIncrement, declaration.counterIncrement);\r\n this.counterReset = parse(counterReset, declaration.counterReset);\r\n }\r\n return CSSParsedCounterDeclaration;\r\n }());\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n var parse = function (descriptor, style) {\r\n var tokenizer = new Tokenizer();\r\n var value = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue;\r\n tokenizer.write(value);\r\n var parser = new Parser(tokenizer.read());\r\n switch (descriptor.type) {\r\n case PropertyDescriptorParsingType.IDENT_VALUE:\r\n var token = parser.parseComponentValue();\r\n return descriptor.parse(isIdentToken(token) ? token.value : descriptor.initialValue);\r\n case PropertyDescriptorParsingType.VALUE:\r\n return descriptor.parse(parser.parseComponentValue());\r\n case PropertyDescriptorParsingType.LIST:\r\n return descriptor.parse(parser.parseComponentValues());\r\n case PropertyDescriptorParsingType.TOKEN_VALUE:\r\n return parser.parseComponentValue();\r\n case PropertyDescriptorParsingType.TYPE_VALUE:\r\n switch (descriptor.format) {\r\n case 'angle':\r\n return angle.parse(parser.parseComponentValue());\r\n case 'color':\r\n return color.parse(parser.parseComponentValue());\r\n case 'image':\r\n return image.parse(parser.parseComponentValue());\r\n case 'length':\r\n var length_1 = parser.parseComponentValue();\r\n return isLength(length_1) ? length_1 : ZERO_LENGTH;\r\n case 'length-percentage':\r\n var value_1 = parser.parseComponentValue();\r\n return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH;\r\n }\r\n }\r\n throw new Error(\"Attempting to parse unsupported css format type \" + descriptor.format);\r\n };\n\n var ElementContainer = /** @class */ (function () {\r\n function ElementContainer(element) {\r\n this.styles = new CSSParsedDeclaration(window.getComputedStyle(element, null));\r\n this.textNodes = [];\r\n this.elements = [];\r\n if (this.styles.transform !== null && isHTMLElementNode(element)) {\r\n // getBoundingClientRect takes transforms into account\r\n element.style.transform = 'none';\r\n }\r\n this.bounds = parseBounds(element);\r\n this.flags = 0;\r\n }\r\n return ElementContainer;\r\n }());\n\n var TextBounds = /** @class */ (function () {\r\n function TextBounds(text, bounds) {\r\n this.text = text;\r\n this.bounds = bounds;\r\n }\r\n return TextBounds;\r\n }());\r\n var parseTextBounds = function (value, styles, node) {\r\n var textList = breakText(value, styles);\r\n var textBounds = [];\r\n var offset = 0;\r\n textList.forEach(function (text) {\r\n if (styles.textDecorationLine.length || text.trim().length > 0) {\r\n if (FEATURES.SUPPORT_RANGE_BOUNDS) {\r\n textBounds.push(new TextBounds(text, getRangeBounds(node, offset, text.length)));\r\n }\r\n else {\r\n var replacementNode = node.splitText(text.length);\r\n textBounds.push(new TextBounds(text, getWrapperBounds(node)));\r\n node = replacementNode;\r\n }\r\n }\r\n else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {\r\n node = node.splitText(text.length);\r\n }\r\n offset += text.length;\r\n });\r\n return textBounds;\r\n };\r\n var getWrapperBounds = function (node) {\r\n var ownerDocument = node.ownerDocument;\r\n if (ownerDocument) {\r\n var wrapper = ownerDocument.createElement('html2canvaswrapper');\r\n wrapper.appendChild(node.cloneNode(true));\r\n var parentNode = node.parentNode;\r\n if (parentNode) {\r\n parentNode.replaceChild(wrapper, node);\r\n var bounds = parseBounds(wrapper);\r\n if (wrapper.firstChild) {\r\n parentNode.replaceChild(wrapper.firstChild, wrapper);\r\n }\r\n return bounds;\r\n }\r\n }\r\n return new Bounds(0, 0, 0, 0);\r\n };\r\n var getRangeBounds = function (node, offset, length) {\r\n var ownerDocument = node.ownerDocument;\r\n if (!ownerDocument) {\r\n throw new Error('Node has no owner document');\r\n }\r\n var range = ownerDocument.createRange();\r\n range.setStart(node, offset);\r\n range.setEnd(node, offset + length);\r\n return Bounds.fromClientRect(range.getBoundingClientRect());\r\n };\r\n var breakText = function (value, styles) {\r\n return styles.letterSpacing !== 0 ? toCodePoints(value).map(function (i) { return fromCodePoint(i); }) : breakWords(value, styles);\r\n };\r\n var breakWords = function (str, styles) {\r\n var breaker = LineBreaker(str, {\r\n lineBreak: styles.lineBreak,\r\n wordBreak: styles.overflowWrap === OVERFLOW_WRAP.BREAK_WORD ? 'break-word' : styles.wordBreak\r\n });\r\n var words = [];\r\n var bk;\r\n while (!(bk = breaker.next()).done) {\r\n if (bk.value) {\r\n words.push(bk.value.slice());\r\n }\r\n }\r\n return words;\r\n };\n\n var TextContainer = /** @class */ (function () {\r\n function TextContainer(node, styles) {\r\n this.text = transform$1(node.data, styles.textTransform);\r\n this.textBounds = parseTextBounds(this.text, styles, node);\r\n }\r\n return TextContainer;\r\n }());\r\n var transform$1 = function (text, transform) {\r\n switch (transform) {\r\n case TEXT_TRANSFORM.LOWERCASE:\r\n return text.toLowerCase();\r\n case TEXT_TRANSFORM.CAPITALIZE:\r\n return text.replace(CAPITALIZE, capitalize);\r\n case TEXT_TRANSFORM.UPPERCASE:\r\n return text.toUpperCase();\r\n default:\r\n return text;\r\n }\r\n };\r\n var CAPITALIZE = /(^|\\s|:|-|\\(|\\))([a-z])/g;\r\n var capitalize = function (m, p1, p2) {\r\n if (m.length > 0) {\r\n return p1 + p2.toUpperCase();\r\n }\r\n return m;\r\n };\n\n var ImageElementContainer = /** @class */ (function (_super) {\r\n __extends(ImageElementContainer, _super);\r\n function ImageElementContainer(img) {\r\n var _this = _super.call(this, img) || this;\r\n _this.src = img.currentSrc || img.src;\r\n _this.intrinsicWidth = img.naturalWidth;\r\n _this.intrinsicHeight = img.naturalHeight;\r\n CacheStorage.getInstance().addImage(_this.src);\r\n return _this;\r\n }\r\n return ImageElementContainer;\r\n }(ElementContainer));\n\n var CanvasElementContainer = /** @class */ (function (_super) {\r\n __extends(CanvasElementContainer, _super);\r\n function CanvasElementContainer(canvas) {\r\n var _this = _super.call(this, canvas) || this;\r\n _this.canvas = canvas;\r\n _this.intrinsicWidth = canvas.width;\r\n _this.intrinsicHeight = canvas.height;\r\n return _this;\r\n }\r\n return CanvasElementContainer;\r\n }(ElementContainer));\n\n var SVGElementContainer = /** @class */ (function (_super) {\r\n __extends(SVGElementContainer, _super);\r\n function SVGElementContainer(img) {\r\n var _this = _super.call(this, img) || this;\r\n var s = new XMLSerializer();\r\n _this.svg = \"data:image/svg+xml,\" + encodeURIComponent(s.serializeToString(img));\r\n _this.intrinsicWidth = img.width.baseVal.value;\r\n _this.intrinsicHeight = img.height.baseVal.value;\r\n CacheStorage.getInstance().addImage(_this.svg);\r\n return _this;\r\n }\r\n return SVGElementContainer;\r\n }(ElementContainer));\n\n var LIElementContainer = /** @class */ (function (_super) {\r\n __extends(LIElementContainer, _super);\r\n function LIElementContainer(element) {\r\n var _this = _super.call(this, element) || this;\r\n _this.value = element.value;\r\n return _this;\r\n }\r\n return LIElementContainer;\r\n }(ElementContainer));\n\n var OLElementContainer = /** @class */ (function (_super) {\r\n __extends(OLElementContainer, _super);\r\n function OLElementContainer(element) {\r\n var _this = _super.call(this, element) || this;\r\n _this.start = element.start;\r\n _this.reversed = typeof element.reversed === 'boolean' && element.reversed === true;\r\n return _this;\r\n }\r\n return OLElementContainer;\r\n }(ElementContainer));\n\n var CHECKBOX_BORDER_RADIUS = [\r\n {\r\n type: TokenType.DIMENSION_TOKEN,\r\n flags: 0,\r\n unit: 'px',\r\n number: 3\r\n }\r\n ];\r\n var RADIO_BORDER_RADIUS = [\r\n {\r\n type: TokenType.PERCENTAGE_TOKEN,\r\n flags: 0,\r\n number: 50\r\n }\r\n ];\r\n var reformatInputBounds = function (bounds) {\r\n if (bounds.width > bounds.height) {\r\n return new Bounds(bounds.left + (bounds.width - bounds.height) / 2, bounds.top, bounds.height, bounds.height);\r\n }\r\n else if (bounds.width < bounds.height) {\r\n return new Bounds(bounds.left, bounds.top + (bounds.height - bounds.width) / 2, bounds.width, bounds.width);\r\n }\r\n return bounds;\r\n };\r\n var getInputValue = function (node) {\r\n var value = node.type === PASSWORD ? new Array(node.value.length + 1).join('\\u2022') : node.value;\r\n return value.length === 0 ? node.placeholder || '' : value;\r\n };\r\n var CHECKBOX = 'checkbox';\r\n var RADIO = 'radio';\r\n var PASSWORD = 'password';\r\n var INPUT_COLOR = 0x2a2a2aff;\r\n var InputElementContainer = /** @class */ (function (_super) {\r\n __extends(InputElementContainer, _super);\r\n function InputElementContainer(input) {\r\n var _this = _super.call(this, input) || this;\r\n _this.type = input.type.toLowerCase();\r\n _this.checked = input.checked;\r\n _this.value = getInputValue(input);\r\n if (_this.type === CHECKBOX || _this.type === RADIO) {\r\n _this.styles.backgroundColor = 0xdededeff;\r\n _this.styles.borderTopColor = _this.styles.borderRightColor = _this.styles.borderBottomColor = _this.styles.borderLeftColor = 0xa5a5a5ff;\r\n _this.styles.borderTopWidth = _this.styles.borderRightWidth = _this.styles.borderBottomWidth = _this.styles.borderLeftWidth = 1;\r\n _this.styles.borderTopStyle = _this.styles.borderRightStyle = _this.styles.borderBottomStyle = _this.styles.borderLeftStyle =\r\n BORDER_STYLE.SOLID;\r\n _this.styles.backgroundClip = [BACKGROUND_CLIP.BORDER_BOX];\r\n _this.styles.backgroundOrigin = [0 /* BORDER_BOX */];\r\n _this.bounds = reformatInputBounds(_this.bounds);\r\n }\r\n switch (_this.type) {\r\n case CHECKBOX:\r\n _this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = CHECKBOX_BORDER_RADIUS;\r\n break;\r\n case RADIO:\r\n _this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = RADIO_BORDER_RADIUS;\r\n break;\r\n }\r\n return _this;\r\n }\r\n return InputElementContainer;\r\n }(ElementContainer));\n\n var SelectElementContainer = /** @class */ (function (_super) {\r\n __extends(SelectElementContainer, _super);\r\n function SelectElementContainer(element) {\r\n var _this = _super.call(this, element) || this;\r\n var option = element.options[element.selectedIndex || 0];\r\n _this.value = option ? option.text || '' : '';\r\n return _this;\r\n }\r\n return SelectElementContainer;\r\n }(ElementContainer));\n\n var TextareaElementContainer = /** @class */ (function (_super) {\r\n __extends(TextareaElementContainer, _super);\r\n function TextareaElementContainer(element) {\r\n var _this = _super.call(this, element) || this;\r\n _this.value = element.value;\r\n return _this;\r\n }\r\n return TextareaElementContainer;\r\n }(ElementContainer));\n\n var parseColor = function (value) { return color.parse(Parser.create(value).parseComponentValue()); };\r\n var IFrameElementContainer = /** @class */ (function (_super) {\r\n __extends(IFrameElementContainer, _super);\r\n function IFrameElementContainer(iframe) {\r\n var _this = _super.call(this, iframe) || this;\r\n _this.src = iframe.src;\r\n _this.width = parseInt(iframe.width, 10) || 0;\r\n _this.height = parseInt(iframe.height, 10) || 0;\r\n _this.backgroundColor = _this.styles.backgroundColor;\r\n try {\r\n if (iframe.contentWindow &&\r\n iframe.contentWindow.document &&\r\n iframe.contentWindow.document.documentElement) {\r\n _this.tree = parseTree(iframe.contentWindow.document.documentElement);\r\n // http://www.w3.org/TR/css3-background/#special-backgrounds\r\n var documentBackgroundColor = iframe.contentWindow.document.documentElement\r\n ? parseColor(getComputedStyle(iframe.contentWindow.document.documentElement)\r\n .backgroundColor)\r\n : COLORS.TRANSPARENT;\r\n var bodyBackgroundColor = iframe.contentWindow.document.body\r\n ? parseColor(getComputedStyle(iframe.contentWindow.document.body).backgroundColor)\r\n : COLORS.TRANSPARENT;\r\n _this.backgroundColor = isTransparent(documentBackgroundColor)\r\n ? isTransparent(bodyBackgroundColor)\r\n ? _this.styles.backgroundColor\r\n : bodyBackgroundColor\r\n : documentBackgroundColor;\r\n }\r\n }\r\n catch (e) { }\r\n return _this;\r\n }\r\n return IFrameElementContainer;\r\n }(ElementContainer));\n\n var LIST_OWNERS = ['OL', 'UL', 'MENU'];\r\n var parseNodeTree = function (node, parent, root) {\r\n for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) {\r\n nextNode = childNode.nextSibling;\r\n if (isTextNode(childNode) && childNode.data.trim().length > 0) {\r\n parent.textNodes.push(new TextContainer(childNode, parent.styles));\r\n }\r\n else if (isElementNode(childNode)) {\r\n var container = createContainer(childNode);\r\n if (container.styles.isVisible()) {\r\n if (createsRealStackingContext(childNode, container, root)) {\r\n container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\r\n }\r\n else if (createsStackingContext(container.styles)) {\r\n container.flags |= 2 /* CREATES_STACKING_CONTEXT */;\r\n }\r\n if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {\r\n container.flags |= 8 /* IS_LIST_OWNER */;\r\n }\r\n parent.elements.push(container);\r\n if (!isTextareaElement(childNode) && !isSVGElement(childNode) && !isSelectElement(childNode)) {\r\n parseNodeTree(childNode, container, root);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n var createContainer = function (element) {\r\n if (isImageElement(element)) {\r\n return new ImageElementContainer(element);\r\n }\r\n if (isCanvasElement(element)) {\r\n return new CanvasElementContainer(element);\r\n }\r\n if (isSVGElement(element)) {\r\n return new SVGElementContainer(element);\r\n }\r\n if (isLIElement(element)) {\r\n return new LIElementContainer(element);\r\n }\r\n if (isOLElement(element)) {\r\n return new OLElementContainer(element);\r\n }\r\n if (isInputElement(element)) {\r\n return new InputElementContainer(element);\r\n }\r\n if (isSelectElement(element)) {\r\n return new SelectElementContainer(element);\r\n }\r\n if (isTextareaElement(element)) {\r\n return new TextareaElementContainer(element);\r\n }\r\n if (isIFrameElement(element)) {\r\n return new IFrameElementContainer(element);\r\n }\r\n return new ElementContainer(element);\r\n };\r\n var parseTree = function (element) {\r\n var container = createContainer(element);\r\n container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\r\n parseNodeTree(element, container, container);\r\n return container;\r\n };\r\n var createsRealStackingContext = function (node, container, root) {\r\n return (container.styles.isPositionedWithZIndex() ||\r\n container.styles.opacity < 1 ||\r\n container.styles.isTransformed() ||\r\n (isBodyElement(node) && root.styles.isTransparent()));\r\n };\r\n var createsStackingContext = function (styles) { return styles.isPositioned() || styles.isFloating(); };\r\n var isTextNode = function (node) { return node.nodeType === Node.TEXT_NODE; };\r\n var isElementNode = function (node) { return node.nodeType === Node.ELEMENT_NODE; };\r\n var isHTMLElementNode = function (node) {\r\n return isElementNode(node) && typeof node.style !== 'undefined' && !isSVGElementNode(node);\r\n };\r\n var isSVGElementNode = function (element) {\r\n return typeof element.className === 'object';\r\n };\r\n var isLIElement = function (node) { return node.tagName === 'LI'; };\r\n var isOLElement = function (node) { return node.tagName === 'OL'; };\r\n var isInputElement = function (node) { return node.tagName === 'INPUT'; };\r\n var isHTMLElement = function (node) { return node.tagName === 'HTML'; };\r\n var isSVGElement = function (node) { return node.tagName === 'svg'; };\r\n var isBodyElement = function (node) { return node.tagName === 'BODY'; };\r\n var isCanvasElement = function (node) { return node.tagName === 'CANVAS'; };\r\n var isImageElement = function (node) { return node.tagName === 'IMG'; };\r\n var isIFrameElement = function (node) { return node.tagName === 'IFRAME'; };\r\n var isStyleElement = function (node) { return node.tagName === 'STYLE'; };\r\n var isScriptElement = function (node) { return node.tagName === 'SCRIPT'; };\r\n var isTextareaElement = function (node) { return node.tagName === 'TEXTAREA'; };\r\n var isSelectElement = function (node) { return node.tagName === 'SELECT'; };\n\n var CounterState = /** @class */ (function () {\r\n function CounterState() {\r\n this.counters = {};\r\n }\r\n CounterState.prototype.getCounterValue = function (name) {\r\n var counter = this.counters[name];\r\n if (counter && counter.length) {\r\n return counter[counter.length - 1];\r\n }\r\n return 1;\r\n };\r\n CounterState.prototype.getCounterValues = function (name) {\r\n var counter = this.counters[name];\r\n return counter ? counter : [];\r\n };\r\n CounterState.prototype.pop = function (counters) {\r\n var _this = this;\r\n counters.forEach(function (counter) { return _this.counters[counter].pop(); });\r\n };\r\n CounterState.prototype.parse = function (style) {\r\n var _this = this;\r\n var counterIncrement = style.counterIncrement;\r\n var counterReset = style.counterReset;\r\n var canReset = true;\r\n if (counterIncrement !== null) {\r\n counterIncrement.forEach(function (entry) {\r\n var counter = _this.counters[entry.counter];\r\n if (counter && entry.increment !== 0) {\r\n canReset = false;\r\n counter[Math.max(0, counter.length - 1)] += entry.increment;\r\n }\r\n });\r\n }\r\n var counterNames = [];\r\n if (canReset) {\r\n counterReset.forEach(function (entry) {\r\n var counter = _this.counters[entry.counter];\r\n counterNames.push(entry.counter);\r\n if (!counter) {\r\n counter = _this.counters[entry.counter] = [];\r\n }\r\n counter.push(entry.reset);\r\n });\r\n }\r\n return counterNames;\r\n };\r\n return CounterState;\r\n }());\r\n var ROMAN_UPPER = {\r\n integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],\r\n values: ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']\r\n };\r\n var ARMENIAN = {\r\n integers: [\r\n 9000,\r\n 8000,\r\n 7000,\r\n 6000,\r\n 5000,\r\n 4000,\r\n 3000,\r\n 2000,\r\n 1000,\r\n 900,\r\n 800,\r\n 700,\r\n 600,\r\n 500,\r\n 400,\r\n 300,\r\n 200,\r\n 100,\r\n 90,\r\n 80,\r\n 70,\r\n 60,\r\n 50,\r\n 40,\r\n 30,\r\n 20,\r\n 10,\r\n 9,\r\n 8,\r\n 7,\r\n 6,\r\n 5,\r\n 4,\r\n 3,\r\n 2,\r\n 1\r\n ],\r\n values: [\r\n 'Ք',\r\n 'Փ',\r\n 'Ւ',\r\n 'Ց',\r\n 'Ր',\r\n 'Տ',\r\n 'Վ',\r\n 'Ս',\r\n 'Ռ',\r\n 'Ջ',\r\n 'Պ',\r\n 'Չ',\r\n 'Ո',\r\n 'Շ',\r\n 'Ն',\r\n 'Յ',\r\n 'Մ',\r\n 'Ճ',\r\n 'Ղ',\r\n 'Ձ',\r\n 'Հ',\r\n 'Կ',\r\n 'Ծ',\r\n 'Խ',\r\n 'Լ',\r\n 'Ի',\r\n 'Ժ',\r\n 'Թ',\r\n 'Ը',\r\n 'Է',\r\n 'Զ',\r\n 'Ե',\r\n 'Դ',\r\n 'Գ',\r\n 'Բ',\r\n 'Ա'\r\n ]\r\n };\r\n var HEBREW = {\r\n integers: [\r\n 10000,\r\n 9000,\r\n 8000,\r\n 7000,\r\n 6000,\r\n 5000,\r\n 4000,\r\n 3000,\r\n 2000,\r\n 1000,\r\n 400,\r\n 300,\r\n 200,\r\n 100,\r\n 90,\r\n 80,\r\n 70,\r\n 60,\r\n 50,\r\n 40,\r\n 30,\r\n 20,\r\n 19,\r\n 18,\r\n 17,\r\n 16,\r\n 15,\r\n 10,\r\n 9,\r\n 8,\r\n 7,\r\n 6,\r\n 5,\r\n 4,\r\n 3,\r\n 2,\r\n 1\r\n ],\r\n values: [\r\n 'י׳',\r\n 'ט׳',\r\n 'ח׳',\r\n 'ז׳',\r\n 'ו׳',\r\n 'ה׳',\r\n 'ד׳',\r\n 'ג׳',\r\n 'ב׳',\r\n 'א׳',\r\n 'ת',\r\n 'ש',\r\n 'ר',\r\n 'ק',\r\n 'צ',\r\n 'פ',\r\n 'ע',\r\n 'ס',\r\n 'נ',\r\n 'מ',\r\n 'ל',\r\n 'כ',\r\n 'יט',\r\n 'יח',\r\n 'יז',\r\n 'טז',\r\n 'טו',\r\n 'י',\r\n 'ט',\r\n 'ח',\r\n 'ז',\r\n 'ו',\r\n 'ה',\r\n 'ד',\r\n 'ג',\r\n 'ב',\r\n 'א'\r\n ]\r\n };\r\n var GEORGIAN = {\r\n integers: [\r\n 10000,\r\n 9000,\r\n 8000,\r\n 7000,\r\n 6000,\r\n 5000,\r\n 4000,\r\n 3000,\r\n 2000,\r\n 1000,\r\n 900,\r\n 800,\r\n 700,\r\n 600,\r\n 500,\r\n 400,\r\n 300,\r\n 200,\r\n 100,\r\n 90,\r\n 80,\r\n 70,\r\n 60,\r\n 50,\r\n 40,\r\n 30,\r\n 20,\r\n 10,\r\n 9,\r\n 8,\r\n 7,\r\n 6,\r\n 5,\r\n 4,\r\n 3,\r\n 2,\r\n 1\r\n ],\r\n values: [\r\n 'ჵ',\r\n 'ჰ',\r\n 'ჯ',\r\n 'ჴ',\r\n 'ხ',\r\n 'ჭ',\r\n 'წ',\r\n 'ძ',\r\n 'ც',\r\n 'ჩ',\r\n 'შ',\r\n '',\r\n 'ღ',\r\n 'ქ',\r\n 'ფ',\r\n 'ჳ',\r\n 'ტ',\r\n 'ს',\r\n 'რ',\r\n 'ჟ',\r\n 'პ',\r\n 'ო',\r\n 'ჲ',\r\n 'ნ',\r\n 'მ',\r\n 'ლ',\r\n 'კ',\r\n 'ი',\r\n 'თ',\r\n 'ჱ',\r\n 'ზ',\r\n 'ვ',\r\n 'ე',\r\n 'დ',\r\n 'გ',\r\n 'ბ',\r\n 'ა'\r\n ]\r\n };\r\n var createAdditiveCounter = function (value, min, max, symbols, fallback, suffix) {\r\n if (value < min || value > max) {\r\n return createCounterText(value, fallback, suffix.length > 0);\r\n }\r\n return (symbols.integers.reduce(function (string, integer, index) {\r\n while (value >= integer) {\r\n value -= integer;\r\n string += symbols.values[index];\r\n }\r\n return string;\r\n }, '') + suffix);\r\n };\r\n var createCounterStyleWithSymbolResolver = function (value, codePointRangeLength, isNumeric, resolver) {\r\n var string = '';\r\n do {\r\n if (!isNumeric) {\r\n value--;\r\n }\r\n string = resolver(value) + string;\r\n value /= codePointRangeLength;\r\n } while (value * codePointRangeLength >= codePointRangeLength);\r\n return string;\r\n };\r\n var createCounterStyleFromRange = function (value, codePointRangeStart, codePointRangeEnd, isNumeric, suffix) {\r\n var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;\r\n return ((value < 0 ? '-' : '') +\r\n (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function (codePoint) {\r\n return fromCodePoint(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart);\r\n }) +\r\n suffix));\r\n };\r\n var createCounterStyleFromSymbols = function (value, symbols, suffix) {\r\n if (suffix === void 0) { suffix = '. '; }\r\n var codePointRangeLength = symbols.length;\r\n return (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, false, function (codePoint) { return symbols[Math.floor(codePoint % codePointRangeLength)]; }) + suffix);\r\n };\r\n var CJK_ZEROS = 1 << 0;\r\n var CJK_TEN_COEFFICIENTS = 1 << 1;\r\n var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;\r\n var CJK_HUNDRED_COEFFICIENTS = 1 << 3;\r\n var createCJKCounter = function (value, numbers, multipliers, negativeSign, suffix, flags) {\r\n if (value < -9999 || value > 9999) {\r\n return createCounterText(value, LIST_STYLE_TYPE.CJK_DECIMAL, suffix.length > 0);\r\n }\r\n var tmp = Math.abs(value);\r\n var string = suffix;\r\n if (tmp === 0) {\r\n return numbers[0] + string;\r\n }\r\n for (var digit = 0; tmp > 0 && digit <= 4; digit++) {\r\n var coefficient = tmp % 10;\r\n if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') {\r\n string = numbers[coefficient] + string;\r\n }\r\n else if (coefficient > 1 ||\r\n (coefficient === 1 && digit === 0) ||\r\n (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS)) ||\r\n (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100) ||\r\n (coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS))) {\r\n string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string;\r\n }\r\n else if (coefficient === 1 && digit > 0) {\r\n string = multipliers[digit - 1] + string;\r\n }\r\n tmp = Math.floor(tmp / 10);\r\n }\r\n return (value < 0 ? negativeSign : '') + string;\r\n };\r\n var CHINESE_INFORMAL_MULTIPLIERS = '十百千萬';\r\n var CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬';\r\n var JAPANESE_NEGATIVE = 'マイナス';\r\n var KOREAN_NEGATIVE = '마이너스';\r\n var createCounterText = function (value, type, appendSuffix) {\r\n var defaultSuffix = appendSuffix ? '. ' : '';\r\n var cjkSuffix = appendSuffix ? '、' : '';\r\n var koreanSuffix = appendSuffix ? ', ' : '';\r\n var spaceSuffix = appendSuffix ? ' ' : '';\r\n switch (type) {\r\n case LIST_STYLE_TYPE.DISC:\r\n return '•' + spaceSuffix;\r\n case LIST_STYLE_TYPE.CIRCLE:\r\n return '◦' + spaceSuffix;\r\n case LIST_STYLE_TYPE.SQUARE:\r\n return '◾' + spaceSuffix;\r\n case LIST_STYLE_TYPE.DECIMAL_LEADING_ZERO:\r\n var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\r\n return string.length < 4 ? \"0\" + string : string;\r\n case LIST_STYLE_TYPE.CJK_DECIMAL:\r\n return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix);\r\n case LIST_STYLE_TYPE.LOWER_ROMAN:\r\n return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase();\r\n case LIST_STYLE_TYPE.UPPER_ROMAN:\r\n return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\r\n case LIST_STYLE_TYPE.LOWER_GREEK:\r\n return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix);\r\n case LIST_STYLE_TYPE.LOWER_ALPHA:\r\n return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix);\r\n case LIST_STYLE_TYPE.UPPER_ALPHA:\r\n return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);\r\n case LIST_STYLE_TYPE.ARABIC_INDIC:\r\n return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.ARMENIAN:\r\n case LIST_STYLE_TYPE.UPPER_ARMENIAN:\r\n return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\r\n case LIST_STYLE_TYPE.LOWER_ARMENIAN:\r\n return createAdditiveCounter(value, 1, 9999, ARMENIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix).toLowerCase();\r\n case LIST_STYLE_TYPE.BENGALI:\r\n return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.CAMBODIAN:\r\n case LIST_STYLE_TYPE.KHMER:\r\n return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.CJK_EARTHLY_BRANCH:\r\n return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix);\r\n case LIST_STYLE_TYPE.CJK_HEAVENLY_STEM:\r\n return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix);\r\n case LIST_STYLE_TYPE.CJK_IDEOGRAPHIC:\r\n case LIST_STYLE_TYPE.TRAD_CHINESE_INFORMAL:\r\n return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.TRAD_CHINESE_FORMAL:\r\n return createCJKCounter(value, '零壹貳參肆伍陸柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.SIMP_CHINESE_INFORMAL:\r\n return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.SIMP_CHINESE_FORMAL:\r\n return createCJKCounter(value, '零壹贰叁肆伍陆柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.JAPANESE_INFORMAL:\r\n return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0);\r\n case LIST_STYLE_TYPE.JAPANESE_FORMAL:\r\n return createCJKCounter(value, '零壱弐参四伍六七八九', '拾百千万', JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.KOREAN_HANGUL_FORMAL:\r\n return createCJKCounter(value, '영일이삼사오육칠팔구', '십백천만', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.KOREAN_HANJA_INFORMAL:\r\n return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0);\r\n case LIST_STYLE_TYPE.KOREAN_HANJA_FORMAL:\r\n return createCJKCounter(value, '零壹貳參四五六七八九', '拾百千', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\r\n case LIST_STYLE_TYPE.DEVANAGARI:\r\n return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.GEORGIAN:\r\n return createAdditiveCounter(value, 1, 19999, GEORGIAN, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\r\n case LIST_STYLE_TYPE.GUJARATI:\r\n return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.GURMUKHI:\r\n return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.HEBREW:\r\n return createAdditiveCounter(value, 1, 10999, HEBREW, LIST_STYLE_TYPE.DECIMAL, defaultSuffix);\r\n case LIST_STYLE_TYPE.HIRAGANA:\r\n return createCounterStyleFromSymbols(value, 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん');\r\n case LIST_STYLE_TYPE.HIRAGANA_IROHA:\r\n return createCounterStyleFromSymbols(value, 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす');\r\n case LIST_STYLE_TYPE.KANNADA:\r\n return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.KATAKANA:\r\n return createCounterStyleFromSymbols(value, 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン', cjkSuffix);\r\n case LIST_STYLE_TYPE.KATAKANA_IROHA:\r\n return createCounterStyleFromSymbols(value, 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス', cjkSuffix);\r\n case LIST_STYLE_TYPE.LAO:\r\n return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.MONGOLIAN:\r\n return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.MYANMAR:\r\n return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.ORIYA:\r\n return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.PERSIAN:\r\n return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.TAMIL:\r\n return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.TELUGU:\r\n return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.THAI:\r\n return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.TIBETAN:\r\n return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix);\r\n case LIST_STYLE_TYPE.DECIMAL:\r\n default:\r\n return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\r\n }\r\n };\n\n var IGNORE_ATTRIBUTE = 'data-html2canvas-ignore';\r\n var DocumentCloner = /** @class */ (function () {\r\n function DocumentCloner(element, options) {\r\n this.options = options;\r\n this.scrolledElements = [];\r\n this.referenceElement = element;\r\n this.counters = new CounterState();\r\n this.quoteDepth = 0;\r\n if (!element.ownerDocument) {\r\n throw new Error('Cloned element does not have an owner document');\r\n }\r\n this.documentElement = this.cloneNode(element.ownerDocument.documentElement);\r\n }\r\n DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) {\r\n var _this = this;\r\n var iframe = createIFrameContainer(ownerDocument, windowSize);\r\n if (!iframe.contentWindow) {\r\n return Promise.reject(\"Unable to find iframe window\");\r\n }\r\n var scrollX = ownerDocument.defaultView.pageXOffset;\r\n var scrollY = ownerDocument.defaultView.pageYOffset;\r\n var cloneWindow = iframe.contentWindow;\r\n var documentClone = cloneWindow.document;\r\n /* Chrome doesn't detect relative background-images assigned in inline <style> sheets when fetched through getComputedStyle\r\n if window url is about:blank, we can assign the url to current by writing onto the document\r\n */\r\n var iframeLoad = iframeLoader(iframe).then(function () { return __awaiter(_this, void 0, void 0, function () {\r\n var onclone;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n this.scrolledElements.forEach(restoreNodeScroll);\r\n if (cloneWindow) {\r\n cloneWindow.scrollTo(windowSize.left, windowSize.top);\r\n if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent) &&\r\n (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)) {\r\n documentClone.documentElement.style.top = -windowSize.top + 'px';\r\n documentClone.documentElement.style.left = -windowSize.left + 'px';\r\n documentClone.documentElement.style.position = 'absolute';\r\n }\r\n }\r\n onclone = this.options.onclone;\r\n if (typeof this.clonedReferenceElement === 'undefined') {\r\n return [2 /*return*/, Promise.reject(\"Error finding the \" + this.referenceElement.nodeName + \" in the cloned document\")];\r\n }\r\n if (!(documentClone.fonts && documentClone.fonts.ready)) return [3 /*break*/, 2];\r\n return [4 /*yield*/, documentClone.fonts.ready];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n if (typeof onclone === 'function') {\r\n return [2 /*return*/, Promise.resolve()\r\n .then(function () { return onclone(documentClone); })\r\n .then(function () { return iframe; })];\r\n }\r\n return [2 /*return*/, iframe];\r\n }\r\n });\r\n }); });\r\n documentClone.open();\r\n documentClone.write(serializeDoctype(document.doctype) + \"<html></html>\");\r\n // Chrome scrolls the parent document for some reason after the write to the cloned window???\r\n restoreOwnerScroll(this.referenceElement.ownerDocument, scrollX, scrollY);\r\n documentClone.replaceChild(documentClone.adoptNode(this.documentElement), documentClone.documentElement);\r\n documentClone.close();\r\n return iframeLoad;\r\n };\r\n DocumentCloner.prototype.createElementClone = function (node) {\r\n if (isCanvasElement(node)) {\r\n return this.createCanvasClone(node);\r\n }\r\n /*\r\n if (isIFrameElement(node)) {\r\n return this.createIFrameClone(node);\r\n }\r\n */\r\n if (isStyleElement(node)) {\r\n return this.createStyleClone(node);\r\n }\r\n var clone = node.cloneNode(false);\r\n // @ts-ignore\r\n if (isImageElement(clone) && clone.loading === 'lazy') {\r\n // @ts-ignore\r\n clone.loading = 'eager';\r\n }\r\n return clone;\r\n };\r\n DocumentCloner.prototype.createStyleClone = function (node) {\r\n try {\r\n var sheet = node.sheet;\r\n if (sheet && sheet.cssRules) {\r\n var css = [].slice.call(sheet.cssRules, 0).reduce(function (css, rule) {\r\n if (rule && typeof rule.cssText === 'string') {\r\n return css + rule.cssText;\r\n }\r\n return css;\r\n }, '');\r\n var style = node.cloneNode(false);\r\n style.textContent = css;\r\n return style;\r\n }\r\n }\r\n catch (e) {\r\n // accessing node.sheet.cssRules throws a DOMException\r\n Logger.getInstance(this.options.id).error('Unable to access cssRules property', e);\r\n if (e.name !== 'SecurityError') {\r\n throw e;\r\n }\r\n }\r\n return node.cloneNode(false);\r\n };\r\n DocumentCloner.prototype.createCanvasClone = function (canvas) {\r\n if (this.options.inlineImages && canvas.ownerDocument) {\r\n var img = canvas.ownerDocument.createElement('img');\r\n try {\r\n img.src = canvas.toDataURL();\r\n return img;\r\n }\r\n catch (e) {\r\n Logger.getInstance(this.options.id).info(\"Unable to clone canvas contents, canvas is tainted\");\r\n }\r\n }\r\n var clonedCanvas = canvas.cloneNode(false);\r\n try {\r\n clonedCanvas.width = canvas.width;\r\n clonedCanvas.height = canvas.height;\r\n var ctx = canvas.getContext('2d');\r\n var clonedCtx = clonedCanvas.getContext('2d');\r\n if (clonedCtx) {\r\n if (ctx) {\r\n clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0);\r\n }\r\n else {\r\n clonedCtx.drawImage(canvas, 0, 0);\r\n }\r\n }\r\n return clonedCanvas;\r\n }\r\n catch (e) { }\r\n return clonedCanvas;\r\n };\r\n /*\r\n createIFrameClone(iframe: HTMLIFrameElement) {\r\n const tempIframe = <HTMLIFrameElement>iframe.cloneNode(false);\r\n const iframeKey = generateIframeKey();\r\n tempIframe.setAttribute('data-html2canvas-internal-iframe-key', iframeKey);\r\n\n const {width, height} = parseBounds(iframe);\r\n\n this.resourceLoader.cache[iframeKey] = getIframeDocumentElement(iframe, this.options)\r\n .then(documentElement => {\r\n return this.renderer(\r\n documentElement,\r\n {\r\n allowTaint: this.options.allowTaint,\r\n backgroundColor: '#ffffff',\r\n canvas: null,\r\n imageTimeout: this.options.imageTimeout,\r\n logging: this.options.logging,\r\n proxy: this.options.proxy,\r\n removeContainer: this.options.removeContainer,\r\n scale: this.options.scale,\r\n foreignObjectRendering: this.options.foreignObjectRendering,\r\n useCORS: this.options.useCORS,\r\n target: new CanvasRenderer(),\r\n width,\r\n height,\r\n x: 0,\r\n y: 0,\r\n windowWidth: documentElement.ownerDocument.defaultView.innerWidth,\r\n windowHeight: documentElement.ownerDocument.defaultView.innerHeight,\r\n scrollX: documentElement.ownerDocument.defaultView.pageXOffset,\r\n scrollY: documentElement.ownerDocument.defaultView.pageYOffset\r\n },\r\n );\r\n })\r\n .then(\r\n (canvas: HTMLCanvasElement) =>\r\n new Promise((resolve, reject) => {\r\n const iframeCanvas = document.createElement('img');\r\n iframeCanvas.onload = () => resolve(canvas);\r\n iframeCanvas.onerror = (event) => {\r\n // Empty iframes may result in empty \"data:,\" URLs, which are invalid from the <img>'s point of view\r\n // and instead of `onload` cause `onerror` and unhandled rejection warnings\r\n // https://github.com/niklasvh/html2canvas/issues/1502\r\n iframeCanvas.src == 'data:,' ? resolve(canvas) : reject(event);\r\n };\r\n iframeCanvas.src = canvas.toDataURL();\r\n if (tempIframe.parentNode && iframe.ownerDocument && iframe.ownerDocument.defaultView) {\r\n tempIframe.parentNode.replaceChild(\r\n copyCSSStyles(\r\n iframe.ownerDocument.defaultView.getComputedStyle(iframe),\r\n iframeCanvas\r\n ),\r\n tempIframe\r\n );\r\n }\r\n })\r\n );\r\n return tempIframe;\r\n }\r\n */\r\n DocumentCloner.prototype.cloneNode = function (node) {\r\n if (isTextNode(node)) {\r\n return document.createTextNode(node.data);\r\n }\r\n if (!node.ownerDocument) {\r\n return node.cloneNode(false);\r\n }\r\n var window = node.ownerDocument.defaultView;\r\n if (window && isElementNode(node) && (isHTMLElementNode(node) || isSVGElementNode(node))) {\r\n var clone = this.createElementClone(node);\r\n var style = window.getComputedStyle(node);\r\n var styleBefore = window.getComputedStyle(node, ':before');\r\n var styleAfter = window.getComputedStyle(node, ':after');\r\n if (this.referenceElement === node && isHTMLElementNode(clone)) {\r\n this.clonedReferenceElement = clone;\r\n }\r\n if (isBodyElement(clone)) {\r\n createPseudoHideStyles(clone);\r\n }\r\n var counters = this.counters.parse(new CSSParsedCounterDeclaration(style));\r\n var before = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE);\r\n for (var child = node.firstChild; child; child = child.nextSibling) {\r\n if (!isElementNode(child) ||\r\n (!isScriptElement(child) &&\r\n !child.hasAttribute(IGNORE_ATTRIBUTE) &&\r\n (typeof this.options.ignoreElements !== 'function' || !this.options.ignoreElements(child)))) {\r\n if (!this.options.copyStyles || !isElementNode(child) || !isStyleElement(child)) {\r\n clone.appendChild(this.cloneNode(child));\r\n }\r\n }\r\n }\r\n if (before) {\r\n clone.insertBefore(before, clone.firstChild);\r\n }\r\n var after = this.resolvePseudoContent(node, clone, styleAfter, PseudoElementType.AFTER);\r\n if (after) {\r\n clone.appendChild(after);\r\n }\r\n this.counters.pop(counters);\r\n if (style && (this.options.copyStyles || isSVGElementNode(node)) && !isIFrameElement(node)) {\r\n copyCSSStyles(style, clone);\r\n }\r\n //this.inlineAllImages(clone);\r\n if (node.scrollTop !== 0 || node.scrollLeft !== 0) {\r\n this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]);\r\n }\r\n if ((isTextareaElement(node) || isSelectElement(node)) &&\r\n (isTextareaElement(clone) || isSelectElement(clone))) {\r\n clone.value = node.value;\r\n }\r\n return clone;\r\n }\r\n return node.cloneNode(false);\r\n };\r\n DocumentCloner.prototype.resolvePseudoContent = function (node, clone, style, pseudoElt) {\r\n var _this = this;\r\n if (!style) {\r\n return;\r\n }\r\n var value = style.content;\r\n var document = clone.ownerDocument;\r\n if (!document || !value || value === 'none' || value === '-moz-alt-content' || style.display === 'none') {\r\n return;\r\n }\r\n this.counters.parse(new CSSParsedCounterDeclaration(style));\r\n var declaration = new CSSParsedPseudoDeclaration(style);\r\n var anonymousReplacedElement = document.createElement('html2canvaspseudoelement');\r\n copyCSSStyles(style, anonymousReplacedElement);\r\n declaration.content.forEach(function (token) {\r\n if (token.type === TokenType.STRING_TOKEN) {\r\n anonymousReplacedElement.appendChild(document.createTextNode(token.value));\r\n }\r\n else if (token.type === TokenType.URL_TOKEN) {\r\n var img = document.createElement('img');\r\n img.src = token.value;\r\n img.style.opacity = '1';\r\n anonymousReplacedElement.appendChild(img);\r\n }\r\n else if (token.type === TokenType.FUNCTION) {\r\n if (token.name === 'attr') {\r\n var attr = token.values.filter(isIdentToken);\r\n if (attr.length) {\r\n anonymousReplacedElement.appendChild(document.createTextNode(node.getAttribute(attr[0].value) || ''));\r\n }\r\n }\r\n else if (token.name === 'counter') {\r\n var _a = token.values.filter(nonFunctionArgSeparator), counter = _a[0], counterStyle = _a[1];\r\n if (counter && isIdentToken(counter)) {\r\n var counterState = _this.counters.getCounterValue(counter.value);\r\n var counterType = counterStyle && isIdentToken(counterStyle)\r\n ? listStyleType.parse(counterStyle.value)\r\n : LIST_STYLE_TYPE.DECIMAL;\r\n anonymousReplacedElement.appendChild(document.createTextNode(createCounterText(counterState, counterType, false)));\r\n }\r\n }\r\n else if (token.name === 'counters') {\r\n var _b = token.values.filter(nonFunctionArgSeparator), counter = _b[0], delim = _b[1], counterStyle = _b[2];\r\n if (counter && isIdentToken(counter)) {\r\n var counterStates = _this.counters.getCounterValues(counter.value);\r\n var counterType_1 = counterStyle && isIdentToken(counterStyle)\r\n ? listStyleType.parse(counterStyle.value)\r\n : LIST_STYLE_TYPE.DECIMAL;\r\n var separator = delim && delim.type === TokenType.STRING_TOKEN ? delim.value : '';\r\n var text = counterStates\r\n .map(function (value) { return createCounterText(value, counterType_1, false); })\r\n .join(separator);\r\n anonymousReplacedElement.appendChild(document.createTextNode(text));\r\n }\r\n }\r\n }\r\n else if (token.type === TokenType.IDENT_TOKEN) {\r\n switch (token.value) {\r\n case 'open-quote':\r\n anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, _this.quoteDepth++, true)));\r\n break;\r\n case 'close-quote':\r\n anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, --_this.quoteDepth, false)));\r\n break;\r\n default:\r\n // safari doesn't parse string tokens correctly because of lack of quotes\r\n anonymousReplacedElement.appendChild(document.createTextNode(token.value));\r\n }\r\n }\r\n });\r\n anonymousReplacedElement.className = PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + \" \" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;\r\n var newClassName = pseudoElt === PseudoElementType.BEFORE\r\n ? \" \" + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE\r\n : \" \" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;\r\n if (isSVGElementNode(clone)) {\r\n clone.className.baseValue += newClassName;\r\n }\r\n else {\r\n clone.className += newClassName;\r\n }\r\n return anonymousReplacedElement;\r\n };\r\n DocumentCloner.destroy = function (container) {\r\n if (container.parentNode) {\r\n container.parentNode.removeChild(container);\r\n return true;\r\n }\r\n return false;\r\n };\r\n return DocumentCloner;\r\n }());\r\n var PseudoElementType;\r\n (function (PseudoElementType) {\r\n PseudoElementType[PseudoElementType[\"BEFORE\"] = 0] = \"BEFORE\";\r\n PseudoElementType[PseudoElementType[\"AFTER\"] = 1] = \"AFTER\";\r\n })(PseudoElementType || (PseudoElementType = {}));\r\n var createIFrameContainer = function (ownerDocument, bounds) {\r\n var cloneIframeContainer = ownerDocument.createElement('iframe');\r\n cloneIframeContainer.className = 'html2canvas-container';\r\n cloneIframeContainer.style.visibility = 'hidden';\r\n cloneIframeContainer.style.position = 'fixed';\r\n cloneIframeContainer.style.left = '-10000px';\r\n cloneIframeContainer.style.top = '0px';\r\n cloneIframeContainer.style.border = '0';\r\n cloneIframeContainer.width = bounds.width.toString();\r\n cloneIframeContainer.height = bounds.height.toString();\r\n cloneIframeContainer.scrolling = 'no'; // ios won't scroll without it\r\n cloneIframeContainer.setAttribute(IGNORE_ATTRIBUTE, 'true');\r\n ownerDocument.body.appendChild(cloneIframeContainer);\r\n return cloneIframeContainer;\r\n };\r\n var iframeLoader = function (iframe) {\r\n return new Promise(function (resolve, reject) {\r\n var cloneWindow = iframe.contentWindow;\r\n if (!cloneWindow) {\r\n return reject(\"No window assigned for iframe\");\r\n }\r\n var documentClone = cloneWindow.document;\r\n cloneWindow.onload = iframe.onload = documentClone.onreadystatechange = function () {\r\n cloneWindow.onload = iframe.onload = documentClone.onreadystatechange = null;\r\n var interval = setInterval(function () {\r\n if (documentClone.body.childNodes.length > 0 && documentClone.readyState === 'complete') {\r\n clearInterval(interval);\r\n resolve(iframe);\r\n }\r\n }, 50);\r\n };\r\n });\r\n };\r\n var copyCSSStyles = function (style, target) {\r\n // Edge does not provide value for cssText\r\n for (var i = style.length - 1; i >= 0; i--) {\r\n var property = style.item(i);\r\n // Safari shows pseudoelements if content is set\r\n if (property !== 'content') {\r\n target.style.setProperty(property, style.getPropertyValue(property));\r\n }\r\n }\r\n return target;\r\n };\r\n var serializeDoctype = function (doctype) {\r\n var str = '';\r\n if (doctype) {\r\n str += '<!DOCTYPE ';\r\n if (doctype.name) {\r\n str += doctype.name;\r\n }\r\n if (doctype.internalSubset) {\r\n str += doctype.internalSubset;\r\n }\r\n if (doctype.publicId) {\r\n str += \"\\\"\" + doctype.publicId + \"\\\"\";\r\n }\r\n if (doctype.systemId) {\r\n str += \"\\\"\" + doctype.systemId + \"\\\"\";\r\n }\r\n str += '>';\r\n }\r\n return str;\r\n };\r\n var restoreOwnerScroll = function (ownerDocument, x, y) {\r\n if (ownerDocument &&\r\n ownerDocument.defaultView &&\r\n (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)) {\r\n ownerDocument.defaultView.scrollTo(x, y);\r\n }\r\n };\r\n var restoreNodeScroll = function (_a) {\r\n var element = _a[0], x = _a[1], y = _a[2];\r\n element.scrollLeft = x;\r\n element.scrollTop = y;\r\n };\r\n var PSEUDO_BEFORE = ':before';\r\n var PSEUDO_AFTER = ':after';\r\n var PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = '___html2canvas___pseudoelement_before';\r\n var PSEUDO_HIDE_ELEMENT_CLASS_AFTER = '___html2canvas___pseudoelement_after';\r\n var PSEUDO_HIDE_ELEMENT_STYLE = \"{\\n content: \\\"\\\" !important;\\n display: none !important;\\n}\";\r\n var createPseudoHideStyles = function (body) {\r\n createStyles(body, \".\" + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + PSEUDO_BEFORE + PSEUDO_HIDE_ELEMENT_STYLE + \"\\n .\" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER + PSEUDO_AFTER + PSEUDO_HIDE_ELEMENT_STYLE);\r\n };\r\n var createStyles = function (body, styles) {\r\n var document = body.ownerDocument;\r\n if (document) {\r\n var style = document.createElement('style');\r\n style.textContent = styles;\r\n body.appendChild(style);\r\n }\r\n };\n\n var PathType;\r\n (function (PathType) {\r\n PathType[PathType[\"VECTOR\"] = 0] = \"VECTOR\";\r\n PathType[PathType[\"BEZIER_CURVE\"] = 1] = \"BEZIER_CURVE\";\r\n })(PathType || (PathType = {}));\r\n var equalPath = function (a, b) {\r\n if (a.length === b.length) {\r\n return a.some(function (v, i) { return v === b[i]; });\r\n }\r\n return false;\r\n };\r\n var transformPath = function (path, deltaX, deltaY, deltaW, deltaH) {\r\n return path.map(function (point, index) {\r\n switch (index) {\r\n case 0:\r\n return point.add(deltaX, deltaY);\r\n case 1:\r\n return point.add(deltaX + deltaW, deltaY);\r\n case 2:\r\n return point.add(deltaX + deltaW, deltaY + deltaH);\r\n case 3:\r\n return point.add(deltaX, deltaY + deltaH);\r\n }\r\n return point;\r\n });\r\n };\n\n var Vector = /** @class */ (function () {\r\n function Vector(x, y) {\r\n this.type = PathType.VECTOR;\r\n this.x = x;\r\n this.y = y;\r\n }\r\n Vector.prototype.add = function (deltaX, deltaY) {\r\n return new Vector(this.x + deltaX, this.y + deltaY);\r\n };\r\n return Vector;\r\n }());\n\n var lerp = function (a, b, t) {\r\n return new Vector(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);\r\n };\r\n var BezierCurve = /** @class */ (function () {\r\n function BezierCurve(start, startControl, endControl, end) {\r\n this.type = PathType.BEZIER_CURVE;\r\n this.start = start;\r\n this.startControl = startControl;\r\n this.endControl = endControl;\r\n this.end = end;\r\n }\r\n BezierCurve.prototype.subdivide = function (t, firstHalf) {\r\n var ab = lerp(this.start, this.startControl, t);\r\n var bc = lerp(this.startControl, this.endControl, t);\r\n var cd = lerp(this.endControl, this.end, t);\r\n var abbc = lerp(ab, bc, t);\r\n var bccd = lerp(bc, cd, t);\r\n var dest = lerp(abbc, bccd, t);\r\n return firstHalf ? new BezierCurve(this.start, ab, abbc, dest) : new BezierCurve(dest, bccd, cd, this.end);\r\n };\r\n BezierCurve.prototype.add = function (deltaX, deltaY) {\r\n return new BezierCurve(this.start.add(deltaX, deltaY), this.startControl.add(deltaX, deltaY), this.endControl.add(deltaX, deltaY), this.end.add(deltaX, deltaY));\r\n };\r\n BezierCurve.prototype.reverse = function () {\r\n return new BezierCurve(this.end, this.endControl, this.startControl, this.start);\r\n };\r\n return BezierCurve;\r\n }());\r\n var isBezierCurve = function (path) { return path.type === PathType.BEZIER_CURVE; };\n\n var BoundCurves = /** @class */ (function () {\r\n function BoundCurves(element) {\r\n var styles = element.styles;\r\n var bounds = element.bounds;\r\n var _a = getAbsoluteValueForTuple(styles.borderTopLeftRadius, bounds.width, bounds.height), tlh = _a[0], tlv = _a[1];\r\n var _b = getAbsoluteValueForTuple(styles.borderTopRightRadius, bounds.width, bounds.height), trh = _b[0], trv = _b[1];\r\n var _c = getAbsoluteValueForTuple(styles.borderBottomRightRadius, bounds.width, bounds.height), brh = _c[0], brv = _c[1];\r\n var _d = getAbsoluteValueForTuple(styles.borderBottomLeftRadius, bounds.width, bounds.height), blh = _d[0], blv = _d[1];\r\n var factors = [];\r\n factors.push((tlh + trh) / bounds.width);\r\n factors.push((blh + brh) / bounds.width);\r\n factors.push((tlv + blv) / bounds.height);\r\n factors.push((trv + brv) / bounds.height);\r\n var maxFactor = Math.max.apply(Math, factors);\r\n if (maxFactor > 1) {\r\n tlh /= maxFactor;\r\n tlv /= maxFactor;\r\n trh /= maxFactor;\r\n trv /= maxFactor;\r\n brh /= maxFactor;\r\n brv /= maxFactor;\r\n blh /= maxFactor;\r\n blv /= maxFactor;\r\n }\r\n var topWidth = bounds.width - trh;\r\n var rightHeight = bounds.height - brv;\r\n var bottomWidth = bounds.width - brh;\r\n var leftHeight = bounds.height - blv;\r\n var borderTopWidth = styles.borderTopWidth;\r\n var borderRightWidth = styles.borderRightWidth;\r\n var borderBottomWidth = styles.borderBottomWidth;\r\n var borderLeftWidth = styles.borderLeftWidth;\r\n var paddingTop = getAbsoluteValue(styles.paddingTop, element.bounds.width);\r\n var paddingRight = getAbsoluteValue(styles.paddingRight, element.bounds.width);\r\n var paddingBottom = getAbsoluteValue(styles.paddingBottom, element.bounds.width);\r\n var paddingLeft = getAbsoluteValue(styles.paddingLeft, element.bounds.width);\r\n this.topLeftBorderBox =\r\n tlh > 0 || tlv > 0\r\n ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT)\r\n : new Vector(bounds.left, bounds.top);\r\n this.topRightBorderBox =\r\n trh > 0 || trv > 0\r\n ? getCurvePoints(bounds.left + topWidth, bounds.top, trh, trv, CORNER.TOP_RIGHT)\r\n : new Vector(bounds.left + bounds.width, bounds.top);\r\n this.bottomRightBorderBox =\r\n brh > 0 || brv > 0\r\n ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh, brv, CORNER.BOTTOM_RIGHT)\r\n : new Vector(bounds.left + bounds.width, bounds.top + bounds.height);\r\n this.bottomLeftBorderBox =\r\n blh > 0 || blv > 0\r\n ? getCurvePoints(bounds.left, bounds.top + leftHeight, blh, blv, CORNER.BOTTOM_LEFT)\r\n : new Vector(bounds.left, bounds.top + bounds.height);\r\n this.topLeftPaddingBox =\r\n tlh > 0 || tlv > 0\r\n ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + borderTopWidth, Math.max(0, tlh - borderLeftWidth), Math.max(0, tlv - borderTopWidth), CORNER.TOP_LEFT)\r\n : new Vector(bounds.left + borderLeftWidth, bounds.top + borderTopWidth);\r\n this.topRightPaddingBox =\r\n trh > 0 || trv > 0\r\n ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth), bounds.top + borderTopWidth, topWidth > bounds.width + borderLeftWidth ? 0 : trh - borderLeftWidth, trv - borderTopWidth, CORNER.TOP_RIGHT)\r\n : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + borderTopWidth);\r\n this.bottomRightPaddingBox =\r\n brh > 0 || brv > 0\r\n ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - borderLeftWidth), bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth), Math.max(0, brh - borderRightWidth), brv - borderBottomWidth, CORNER.BOTTOM_RIGHT)\r\n : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + bounds.height - borderBottomWidth);\r\n this.bottomLeftPaddingBox =\r\n blh > 0 || blv > 0\r\n ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + leftHeight, Math.max(0, blh - borderLeftWidth), blv - borderBottomWidth, CORNER.BOTTOM_LEFT)\r\n : new Vector(bounds.left + borderLeftWidth, bounds.top + bounds.height - borderBottomWidth);\r\n this.topLeftContentBox =\r\n tlh > 0 || tlv > 0\r\n ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop, Math.max(0, tlh - (borderLeftWidth + paddingLeft)), Math.max(0, tlv - (borderTopWidth + paddingTop)), CORNER.TOP_LEFT)\r\n : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop);\r\n this.topRightContentBox =\r\n trh > 0 || trv > 0\r\n ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth + paddingLeft), bounds.top + borderTopWidth + paddingTop, topWidth > bounds.width + borderLeftWidth + paddingLeft ? 0 : trh - borderLeftWidth + paddingLeft, trv - (borderTopWidth + paddingTop), CORNER.TOP_RIGHT)\r\n : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + borderTopWidth + paddingTop);\r\n this.bottomRightContentBox =\r\n brh > 0 || brv > 0\r\n ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - (borderLeftWidth + paddingLeft)), bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth + paddingTop), Math.max(0, brh - (borderRightWidth + paddingRight)), brv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_RIGHT)\r\n : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + bounds.height - (borderBottomWidth + paddingBottom));\r\n this.bottomLeftContentBox =\r\n blh > 0 || blv > 0\r\n ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + leftHeight, Math.max(0, blh - (borderLeftWidth + paddingLeft)), blv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_LEFT)\r\n : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + bounds.height - (borderBottomWidth + paddingBottom));\r\n }\r\n return BoundCurves;\r\n }());\r\n var CORNER;\r\n (function (CORNER) {\r\n CORNER[CORNER[\"TOP_LEFT\"] = 0] = \"TOP_LEFT\";\r\n CORNER[CORNER[\"TOP_RIGHT\"] = 1] = \"TOP_RIGHT\";\r\n CORNER[CORNER[\"BOTTOM_RIGHT\"] = 2] = \"BOTTOM_RIGHT\";\r\n CORNER[CORNER[\"BOTTOM_LEFT\"] = 3] = \"BOTTOM_LEFT\";\r\n })(CORNER || (CORNER = {}));\r\n var getCurvePoints = function (x, y, r1, r2, position) {\r\n var kappa = 4 * ((Math.sqrt(2) - 1) / 3);\r\n var ox = r1 * kappa; // control point offset horizontal\r\n var oy = r2 * kappa; // control point offset vertical\r\n var xm = x + r1; // x-middle\r\n var ym = y + r2; // y-middle\r\n switch (position) {\r\n case CORNER.TOP_LEFT:\r\n return new BezierCurve(new Vector(x, ym), new Vector(x, ym - oy), new Vector(xm - ox, y), new Vector(xm, y));\r\n case CORNER.TOP_RIGHT:\r\n return new BezierCurve(new Vector(x, y), new Vector(x + ox, y), new Vector(xm, ym - oy), new Vector(xm, ym));\r\n case CORNER.BOTTOM_RIGHT:\r\n return new BezierCurve(new Vector(xm, y), new Vector(xm, y + oy), new Vector(x + ox, ym), new Vector(x, ym));\r\n case CORNER.BOTTOM_LEFT:\r\n default:\r\n return new BezierCurve(new Vector(xm, ym), new Vector(xm - ox, ym), new Vector(x, y + oy), new Vector(x, y));\r\n }\r\n };\r\n var calculateBorderBoxPath = function (curves) {\r\n return [curves.topLeftBorderBox, curves.topRightBorderBox, curves.bottomRightBorderBox, curves.bottomLeftBorderBox];\r\n };\r\n var calculateContentBoxPath = function (curves) {\r\n return [\r\n curves.topLeftContentBox,\r\n curves.topRightContentBox,\r\n curves.bottomRightContentBox,\r\n curves.bottomLeftContentBox\r\n ];\r\n };\r\n var calculatePaddingBoxPath = function (curves) {\r\n return [\r\n curves.topLeftPaddingBox,\r\n curves.topRightPaddingBox,\r\n curves.bottomRightPaddingBox,\r\n curves.bottomLeftPaddingBox\r\n ];\r\n };\n\n var TransformEffect = /** @class */ (function () {\r\n function TransformEffect(offsetX, offsetY, matrix) {\r\n this.type = 0 /* TRANSFORM */;\r\n this.offsetX = offsetX;\r\n this.offsetY = offsetY;\r\n this.matrix = matrix;\r\n this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */;\r\n }\r\n return TransformEffect;\r\n }());\r\n var ClipEffect = /** @class */ (function () {\r\n function ClipEffect(path, target) {\r\n this.type = 1 /* CLIP */;\r\n this.target = target;\r\n this.path = path;\r\n }\r\n return ClipEffect;\r\n }());\r\n var isTransformEffect = function (effect) {\r\n return effect.type === 0 /* TRANSFORM */;\r\n };\r\n var isClipEffect = function (effect) { return effect.type === 1 /* CLIP */; };\n\n var StackingContext = /** @class */ (function () {\r\n function StackingContext(container) {\r\n this.element = container;\r\n this.inlineLevel = [];\r\n this.nonInlineLevel = [];\r\n this.negativeZIndex = [];\r\n this.zeroOrAutoZIndexOrTransformedOrOpacity = [];\r\n this.positiveZIndex = [];\r\n this.nonPositionedFloats = [];\r\n this.nonPositionedInlineLevel = [];\r\n }\r\n return StackingContext;\r\n }());\r\n var ElementPaint = /** @class */ (function () {\r\n function ElementPaint(element, parentStack) {\r\n this.container = element;\r\n this.effects = parentStack.slice(0);\r\n this.curves = new BoundCurves(element);\r\n if (element.styles.transform !== null) {\r\n var offsetX = element.bounds.left + element.styles.transformOrigin[0].number;\r\n var offsetY = element.bounds.top + element.styles.transformOrigin[1].number;\r\n var matrix = element.styles.transform;\r\n this.effects.push(new TransformEffect(offsetX, offsetY, matrix));\r\n }\r\n if (element.styles.overflowX !== OVERFLOW.VISIBLE) {\r\n var borderBox = calculateBorderBoxPath(this.curves);\r\n var paddingBox = calculatePaddingBoxPath(this.curves);\r\n if (equalPath(borderBox, paddingBox)) {\r\n this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */));\r\n }\r\n else {\r\n this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */));\r\n this.effects.push(new ClipEffect(paddingBox, 4 /* CONTENT */));\r\n }\r\n }\r\n }\r\n ElementPaint.prototype.getParentEffects = function () {\r\n var effects = this.effects.slice(0);\r\n if (this.container.styles.overflowX !== OVERFLOW.VISIBLE) {\r\n var borderBox = calculateBorderBoxPath(this.curves);\r\n var paddingBox = calculatePaddingBoxPath(this.curves);\r\n if (!equalPath(borderBox, paddingBox)) {\r\n effects.push(new ClipEffect(paddingBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */));\r\n }\r\n }\r\n return effects;\r\n };\r\n return ElementPaint;\r\n }());\r\n var parseStackTree = function (parent, stackingContext, realStackingContext, listItems) {\r\n parent.container.elements.forEach(function (child) {\r\n var treatAsRealStackingContext = contains(child.flags, 4 /* CREATES_REAL_STACKING_CONTEXT */);\r\n var createsStackingContext = contains(child.flags, 2 /* CREATES_STACKING_CONTEXT */);\r\n var paintContainer = new ElementPaint(child, parent.getParentEffects());\r\n if (contains(child.styles.display, 2048 /* LIST_ITEM */)) {\r\n listItems.push(paintContainer);\r\n }\r\n var listOwnerItems = contains(child.flags, 8 /* IS_LIST_OWNER */) ? [] : listItems;\r\n if (treatAsRealStackingContext || createsStackingContext) {\r\n var parentStack = treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext;\r\n var stack = new StackingContext(paintContainer);\r\n if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) {\r\n var order_1 = child.styles.zIndex.order;\r\n if (order_1 < 0) {\r\n var index_1 = 0;\r\n parentStack.negativeZIndex.some(function (current, i) {\r\n if (order_1 > current.element.container.styles.zIndex.order) {\r\n index_1 = i;\r\n return false;\r\n }\r\n else if (index_1 > 0) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n parentStack.negativeZIndex.splice(index_1, 0, stack);\r\n }\r\n else if (order_1 > 0) {\r\n var index_2 = 0;\r\n parentStack.positiveZIndex.some(function (current, i) {\r\n if (order_1 >= current.element.container.styles.zIndex.order) {\r\n index_2 = i + 1;\r\n return false;\r\n }\r\n else if (index_2 > 0) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n parentStack.positiveZIndex.splice(index_2, 0, stack);\r\n }\r\n else {\r\n parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack);\r\n }\r\n }\r\n else {\r\n if (child.styles.isFloating()) {\r\n parentStack.nonPositionedFloats.push(stack);\r\n }\r\n else {\r\n parentStack.nonPositionedInlineLevel.push(stack);\r\n }\r\n }\r\n parseStackTree(paintContainer, stack, treatAsRealStackingContext ? stack : realStackingContext, listOwnerItems);\r\n }\r\n else {\r\n if (child.styles.isInlineLevel()) {\r\n stackingContext.inlineLevel.push(paintContainer);\r\n }\r\n else {\r\n stackingContext.nonInlineLevel.push(paintContainer);\r\n }\r\n parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems);\r\n }\r\n if (contains(child.flags, 8 /* IS_LIST_OWNER */)) {\r\n processListItems(child, listOwnerItems);\r\n }\r\n });\r\n };\r\n var processListItems = function (owner, elements) {\r\n var numbering = owner instanceof OLElementContainer ? owner.start : 1;\r\n var reversed = owner instanceof OLElementContainer ? owner.reversed : false;\r\n for (var i = 0; i < elements.length; i++) {\r\n var item = elements[i];\r\n if (item.container instanceof LIElementContainer &&\r\n typeof item.container.value === 'number' &&\r\n item.container.value !== 0) {\r\n numbering = item.container.value;\r\n }\r\n item.listValue = createCounterText(numbering, item.container.styles.listStyleType, true);\r\n numbering += reversed ? -1 : 1;\r\n }\r\n };\r\n var parseStackingContexts = function (container) {\r\n var paintContainer = new ElementPaint(container, []);\r\n var root = new StackingContext(paintContainer);\r\n var listItems = [];\r\n parseStackTree(paintContainer, root, root, listItems);\r\n processListItems(paintContainer.container, listItems);\r\n return root;\r\n };\n\n var parsePathForBorder = function (curves, borderSide) {\r\n switch (borderSide) {\r\n case 0:\r\n return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftPaddingBox, curves.topRightBorderBox, curves.topRightPaddingBox);\r\n case 1:\r\n return createPathFromCurves(curves.topRightBorderBox, curves.topRightPaddingBox, curves.bottomRightBorderBox, curves.bottomRightPaddingBox);\r\n case 2:\r\n return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox);\r\n case 3:\r\n default:\r\n return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox, curves.topLeftBorderBox, curves.topLeftPaddingBox);\r\n }\r\n };\r\n var createPathFromCurves = function (outer1, inner1, outer2, inner2) {\r\n var path = [];\r\n if (isBezierCurve(outer1)) {\r\n path.push(outer1.subdivide(0.5, false));\r\n }\r\n else {\r\n path.push(outer1);\r\n }\r\n if (isBezierCurve(outer2)) {\r\n path.push(outer2.subdivide(0.5, true));\r\n }\r\n else {\r\n path.push(outer2);\r\n }\r\n if (isBezierCurve(inner2)) {\r\n path.push(inner2.subdivide(0.5, true).reverse());\r\n }\r\n else {\r\n path.push(inner2);\r\n }\r\n if (isBezierCurve(inner1)) {\r\n path.push(inner1.subdivide(0.5, false).reverse());\r\n }\r\n else {\r\n path.push(inner1);\r\n }\r\n return path;\r\n };\n\n var paddingBox = function (element) {\r\n var bounds = element.bounds;\r\n var styles = element.styles;\r\n return bounds.add(styles.borderLeftWidth, styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth), -(styles.borderTopWidth + styles.borderBottomWidth));\r\n };\r\n var contentBox = function (element) {\r\n var styles = element.styles;\r\n var bounds = element.bounds;\r\n var paddingLeft = getAbsoluteValue(styles.paddingLeft, bounds.width);\r\n var paddingRight = getAbsoluteValue(styles.paddingRight, bounds.width);\r\n var paddingTop = getAbsoluteValue(styles.paddingTop, bounds.width);\r\n var paddingBottom = getAbsoluteValue(styles.paddingBottom, bounds.width);\r\n return bounds.add(paddingLeft + styles.borderLeftWidth, paddingTop + styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft + paddingRight), -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop + paddingBottom));\r\n };\n\n var calculateBackgroundPositioningArea = function (backgroundOrigin, element) {\r\n if (backgroundOrigin === 0 /* BORDER_BOX */) {\r\n return element.bounds;\r\n }\r\n if (backgroundOrigin === 2 /* CONTENT_BOX */) {\r\n return contentBox(element);\r\n }\r\n return paddingBox(element);\r\n };\r\n var calculateBackgroundPaintingArea = function (backgroundClip, element) {\r\n if (backgroundClip === BACKGROUND_CLIP.BORDER_BOX) {\r\n return element.bounds;\r\n }\r\n if (backgroundClip === BACKGROUND_CLIP.CONTENT_BOX) {\r\n return contentBox(element);\r\n }\r\n return paddingBox(element);\r\n };\r\n var calculateBackgroundRendering = function (container, index, intrinsicSize) {\r\n var backgroundPositioningArea = calculateBackgroundPositioningArea(getBackgroundValueForIndex(container.styles.backgroundOrigin, index), container);\r\n var backgroundPaintingArea = calculateBackgroundPaintingArea(getBackgroundValueForIndex(container.styles.backgroundClip, index), container);\r\n var backgroundImageSize = calculateBackgroundSize(getBackgroundValueForIndex(container.styles.backgroundSize, index), intrinsicSize, backgroundPositioningArea);\r\n var sizeWidth = backgroundImageSize[0], sizeHeight = backgroundImageSize[1];\r\n var position = getAbsoluteValueForTuple(getBackgroundValueForIndex(container.styles.backgroundPosition, index), backgroundPositioningArea.width - sizeWidth, backgroundPositioningArea.height - sizeHeight);\r\n var path = calculateBackgroundRepeatPath(getBackgroundValueForIndex(container.styles.backgroundRepeat, index), position, backgroundImageSize, backgroundPositioningArea, backgroundPaintingArea);\r\n var offsetX = Math.round(backgroundPositioningArea.left + position[0]);\r\n var offsetY = Math.round(backgroundPositioningArea.top + position[1]);\r\n return [path, offsetX, offsetY, sizeWidth, sizeHeight];\r\n };\r\n var isAuto = function (token) { return isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO; };\r\n var hasIntrinsicValue = function (value) { return typeof value === 'number'; };\r\n var calculateBackgroundSize = function (size, _a, bounds) {\r\n var intrinsicWidth = _a[0], intrinsicHeight = _a[1], intrinsicProportion = _a[2];\r\n var first = size[0], second = size[1];\r\n if (isLengthPercentage(first) && second && isLengthPercentage(second)) {\r\n return [getAbsoluteValue(first, bounds.width), getAbsoluteValue(second, bounds.height)];\r\n }\r\n var hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion);\r\n if (isIdentToken(first) && (first.value === BACKGROUND_SIZE.CONTAIN || first.value === BACKGROUND_SIZE.COVER)) {\r\n if (hasIntrinsicValue(intrinsicProportion)) {\r\n var targetRatio = bounds.width / bounds.height;\r\n return targetRatio < intrinsicProportion !== (first.value === BACKGROUND_SIZE.COVER)\r\n ? [bounds.width, bounds.width / intrinsicProportion]\r\n : [bounds.height * intrinsicProportion, bounds.height];\r\n }\r\n return [bounds.width, bounds.height];\r\n }\r\n var hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth);\r\n var hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight);\r\n var hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight;\r\n // If the background-size is auto or auto auto:\r\n if (isAuto(first) && (!second || isAuto(second))) {\r\n // If the image has both horizontal and vertical intrinsic dimensions, it's rendered at that size.\r\n if (hasIntrinsicWidth && hasIntrinsicHeight) {\r\n return [intrinsicWidth, intrinsicHeight];\r\n }\r\n // If the image has no intrinsic dimensions and has no intrinsic proportions,\r\n // it's rendered at the size of the background positioning area.\r\n if (!hasIntrinsicProportion && !hasIntrinsicDimensions) {\r\n return [bounds.width, bounds.height];\r\n }\r\n // TODO If the image has no intrinsic dimensions but has intrinsic proportions, it's rendered as if contain had been specified instead.\r\n // If the image has only one intrinsic dimension and has intrinsic proportions, it's rendered at the size corresponding to that one dimension.\r\n // The other dimension is computed using the specified dimension and the intrinsic proportions.\r\n if (hasIntrinsicDimensions && hasIntrinsicProportion) {\r\n var width_1 = hasIntrinsicWidth\r\n ? intrinsicWidth\r\n : intrinsicHeight * intrinsicProportion;\r\n var height_1 = hasIntrinsicHeight\r\n ? intrinsicHeight\r\n : intrinsicWidth / intrinsicProportion;\r\n return [width_1, height_1];\r\n }\r\n // If the image has only one intrinsic dimension but has no intrinsic proportions,\r\n // it's rendered using the specified dimension and the other dimension of the background positioning area.\r\n var width_2 = hasIntrinsicWidth ? intrinsicWidth : bounds.width;\r\n var height_2 = hasIntrinsicHeight ? intrinsicHeight : bounds.height;\r\n return [width_2, height_2];\r\n }\r\n // If the image has intrinsic proportions, it's stretched to the specified dimension.\r\n // The unspecified dimension is computed using the specified dimension and the intrinsic proportions.\r\n if (hasIntrinsicProportion) {\r\n var width_3 = 0;\r\n var height_3 = 0;\r\n if (isLengthPercentage(first)) {\r\n width_3 = getAbsoluteValue(first, bounds.width);\r\n }\r\n else if (isLengthPercentage(second)) {\r\n height_3 = getAbsoluteValue(second, bounds.height);\r\n }\r\n if (isAuto(first)) {\r\n width_3 = height_3 * intrinsicProportion;\r\n }\r\n else if (!second || isAuto(second)) {\r\n height_3 = width_3 / intrinsicProportion;\r\n }\r\n return [width_3, height_3];\r\n }\r\n // If the image has no intrinsic proportions, it's stretched to the specified dimension.\r\n // The unspecified dimension is computed using the image's corresponding intrinsic dimension,\r\n // if there is one. If there is no such intrinsic dimension,\r\n // it becomes the corresponding dimension of the background positioning area.\r\n var width = null;\r\n var height = null;\r\n if (isLengthPercentage(first)) {\r\n width = getAbsoluteValue(first, bounds.width);\r\n }\r\n else if (second && isLengthPercentage(second)) {\r\n height = getAbsoluteValue(second, bounds.height);\r\n }\r\n if (width !== null && (!second || isAuto(second))) {\r\n height =\r\n hasIntrinsicWidth && hasIntrinsicHeight\r\n ? (width / intrinsicWidth) * intrinsicHeight\r\n : bounds.height;\r\n }\r\n if (height !== null && isAuto(first)) {\r\n width =\r\n hasIntrinsicWidth && hasIntrinsicHeight\r\n ? (height / intrinsicHeight) * intrinsicWidth\r\n : bounds.width;\r\n }\r\n if (width !== null && height !== null) {\r\n return [width, height];\r\n }\r\n throw new Error(\"Unable to calculate background-size for element\");\r\n };\r\n var getBackgroundValueForIndex = function (values, index) {\r\n var value = values[index];\r\n if (typeof value === 'undefined') {\r\n return values[0];\r\n }\r\n return value;\r\n };\r\n var calculateBackgroundRepeatPath = function (repeat, _a, _b, backgroundPositioningArea, backgroundPaintingArea) {\r\n var x = _a[0], y = _a[1];\r\n var width = _b[0], height = _b[1];\r\n switch (repeat) {\r\n case BACKGROUND_REPEAT.REPEAT_X:\r\n return [\r\n new Vector(Math.round(backgroundPositioningArea.left), Math.round(backgroundPositioningArea.top + y)),\r\n new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(backgroundPositioningArea.top + y)),\r\n new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(height + backgroundPositioningArea.top + y)),\r\n new Vector(Math.round(backgroundPositioningArea.left), Math.round(height + backgroundPositioningArea.top + y))\r\n ];\r\n case BACKGROUND_REPEAT.REPEAT_Y:\r\n return [\r\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top)),\r\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top)),\r\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)),\r\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top))\r\n ];\r\n case BACKGROUND_REPEAT.NO_REPEAT:\r\n return [\r\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y)),\r\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y)),\r\n new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y + height)),\r\n new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y + height))\r\n ];\r\n default:\r\n return [\r\n new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.top)),\r\n new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.top)),\r\n new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)),\r\n new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top))\r\n ];\r\n }\r\n };\n\n var SMALL_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n var SAMPLE_TEXT = 'Hidden Text';\r\n var FontMetrics = /** @class */ (function () {\r\n function FontMetrics(document) {\r\n this._data = {};\r\n this._document = document;\r\n }\r\n FontMetrics.prototype.parseMetrics = function (fontFamily, fontSize) {\r\n var container = this._document.createElement('div');\r\n var img = this._document.createElement('img');\r\n var span = this._document.createElement('span');\r\n var body = this._document.body;\r\n container.style.visibility = 'hidden';\r\n container.style.fontFamily = fontFamily;\r\n container.style.fontSize = fontSize;\r\n container.style.margin = '0';\r\n container.style.padding = '0';\r\n body.appendChild(container);\r\n img.src = SMALL_IMAGE;\r\n img.width = 1;\r\n img.height = 1;\r\n img.style.margin = '0';\r\n img.style.padding = '0';\r\n img.style.verticalAlign = 'baseline';\r\n span.style.fontFamily = fontFamily;\r\n span.style.fontSize = fontSize;\r\n span.style.margin = '0';\r\n span.style.padding = '0';\r\n span.appendChild(this._document.createTextNode(SAMPLE_TEXT));\r\n container.appendChild(span);\r\n container.appendChild(img);\r\n var baseline = img.offsetTop - span.offsetTop + 2;\r\n container.removeChild(span);\r\n container.appendChild(this._document.createTextNode(SAMPLE_TEXT));\r\n container.style.lineHeight = 'normal';\r\n img.style.verticalAlign = 'super';\r\n var middle = img.offsetTop - container.offsetTop + 2;\r\n body.removeChild(container);\r\n return { baseline: baseline, middle: middle };\r\n };\r\n FontMetrics.prototype.getMetrics = function (fontFamily, fontSize) {\r\n var key = fontFamily + \" \" + fontSize;\r\n if (typeof this._data[key] === 'undefined') {\r\n this._data[key] = this.parseMetrics(fontFamily, fontSize);\r\n }\r\n return this._data[key];\r\n };\r\n return FontMetrics;\r\n }());\n\n var MASK_OFFSET = 10000;\r\n var CanvasRenderer = /** @class */ (function () {\r\n function CanvasRenderer(options) {\r\n this._activeEffects = [];\r\n this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\r\n this.ctx = this.canvas.getContext('2d');\r\n this.options = options;\r\n if (!options.canvas) {\r\n this.canvas.width = Math.floor(options.width * options.scale);\r\n this.canvas.height = Math.floor(options.height * options.scale);\r\n this.canvas.style.width = options.width + \"px\";\r\n this.canvas.style.height = options.height + \"px\";\r\n }\r\n this.fontMetrics = new FontMetrics(document);\r\n this.ctx.scale(this.options.scale, this.options.scale);\r\n this.ctx.translate(-options.x + options.scrollX, -options.y + options.scrollY);\r\n this.ctx.textBaseline = 'bottom';\r\n this._activeEffects = [];\r\n Logger.getInstance(options.id).debug(\"Canvas renderer initialized (\" + options.width + \"x\" + options.height + \" at \" + options.x + \",\" + options.y + \") with scale \" + options.scale);\r\n }\r\n CanvasRenderer.prototype.applyEffects = function (effects, target) {\r\n var _this = this;\r\n while (this._activeEffects.length) {\r\n this.popEffect();\r\n }\r\n effects.filter(function (effect) { return contains(effect.target, target); }).forEach(function (effect) { return _this.applyEffect(effect); });\r\n };\r\n CanvasRenderer.prototype.applyEffect = function (effect) {\r\n this.ctx.save();\r\n if (isTransformEffect(effect)) {\r\n this.ctx.translate(effect.offsetX, effect.offsetY);\r\n this.ctx.transform(effect.matrix[0], effect.matrix[1], effect.matrix[2], effect.matrix[3], effect.matrix[4], effect.matrix[5]);\r\n this.ctx.translate(-effect.offsetX, -effect.offsetY);\r\n }\r\n if (isClipEffect(effect)) {\r\n this.path(effect.path);\r\n this.ctx.clip();\r\n }\r\n this._activeEffects.push(effect);\r\n };\r\n CanvasRenderer.prototype.popEffect = function () {\r\n this._activeEffects.pop();\r\n this.ctx.restore();\r\n };\r\n CanvasRenderer.prototype.renderStack = function (stack) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var styles;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n styles = stack.element.container.styles;\r\n if (!styles.isVisible()) return [3 /*break*/, 2];\r\n this.ctx.globalAlpha = styles.opacity;\r\n return [4 /*yield*/, this.renderStackContent(stack)];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.renderNode = function (paint) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!paint.container.styles.isVisible()) return [3 /*break*/, 3];\r\n return [4 /*yield*/, this.renderNodeBackgroundAndBorders(paint)];\r\n case 1:\r\n _a.sent();\r\n return [4 /*yield*/, this.renderNodeContent(paint)];\r\n case 2:\r\n _a.sent();\r\n _a.label = 3;\r\n case 3: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.renderTextWithLetterSpacing = function (text, letterSpacing) {\r\n var _this = this;\r\n if (letterSpacing === 0) {\r\n this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + text.bounds.height);\r\n }\r\n else {\r\n var letters = toCodePoints(text.text).map(function (i) { return fromCodePoint(i); });\r\n letters.reduce(function (left, letter) {\r\n _this.ctx.fillText(letter, left, text.bounds.top + text.bounds.height);\r\n return left + _this.ctx.measureText(letter).width;\r\n }, text.bounds.left);\r\n }\r\n };\r\n CanvasRenderer.prototype.createFontStyle = function (styles) {\r\n var fontVariant = styles.fontVariant\r\n .filter(function (variant) { return variant === 'normal' || variant === 'small-caps'; })\r\n .join('');\r\n var fontFamily = styles.fontFamily.join(', ');\r\n var fontSize = isDimensionToken(styles.fontSize)\r\n ? \"\" + styles.fontSize.number + styles.fontSize.unit\r\n : styles.fontSize.number + \"px\";\r\n return [\r\n [styles.fontStyle, fontVariant, styles.fontWeight, fontSize, fontFamily].join(' '),\r\n fontFamily,\r\n fontSize\r\n ];\r\n };\r\n CanvasRenderer.prototype.renderTextNode = function (text, styles) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, font, fontFamily, fontSize;\r\n var _this = this;\r\n return __generator(this, function (_b) {\r\n _a = this.createFontStyle(styles), font = _a[0], fontFamily = _a[1], fontSize = _a[2];\r\n this.ctx.font = font;\r\n text.textBounds.forEach(function (text) {\r\n _this.ctx.fillStyle = asString(styles.color);\r\n _this.renderTextWithLetterSpacing(text, styles.letterSpacing);\r\n var textShadows = styles.textShadow;\r\n if (textShadows.length && text.text.trim().length) {\r\n textShadows\r\n .slice(0)\r\n .reverse()\r\n .forEach(function (textShadow) {\r\n _this.ctx.shadowColor = asString(textShadow.color);\r\n _this.ctx.shadowOffsetX = textShadow.offsetX.number * _this.options.scale;\r\n _this.ctx.shadowOffsetY = textShadow.offsetY.number * _this.options.scale;\r\n _this.ctx.shadowBlur = textShadow.blur.number;\r\n _this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + text.bounds.height);\r\n });\r\n _this.ctx.shadowColor = '';\r\n _this.ctx.shadowOffsetX = 0;\r\n _this.ctx.shadowOffsetY = 0;\r\n _this.ctx.shadowBlur = 0;\r\n }\r\n if (styles.textDecorationLine.length) {\r\n _this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color);\r\n styles.textDecorationLine.forEach(function (textDecorationLine) {\r\n switch (textDecorationLine) {\r\n case 1 /* UNDERLINE */:\r\n // Draws a line at the baseline of the font\r\n // TODO As some browsers display the line as more than 1px if the font-size is big,\r\n // need to take that into account both in position and size\r\n var baseline = _this.fontMetrics.getMetrics(fontFamily, fontSize).baseline;\r\n _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top + baseline), text.bounds.width, 1);\r\n break;\r\n case 2 /* OVERLINE */:\r\n _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top), text.bounds.width, 1);\r\n break;\r\n case 3 /* LINE_THROUGH */:\r\n // TODO try and find exact position for line-through\r\n var middle = _this.fontMetrics.getMetrics(fontFamily, fontSize).middle;\r\n _this.ctx.fillRect(text.bounds.left, Math.ceil(text.bounds.top + middle), text.bounds.width, 1);\r\n break;\r\n }\r\n });\r\n }\r\n });\r\n return [2 /*return*/];\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.renderReplacedElement = function (container, curves, image) {\r\n if (image && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) {\r\n var box = contentBox(container);\r\n var path = calculatePaddingBoxPath(curves);\r\n this.path(path);\r\n this.ctx.save();\r\n this.ctx.clip();\r\n this.ctx.drawImage(image, 0, 0, container.intrinsicWidth, container.intrinsicHeight, box.left, box.top, box.width, box.height);\r\n this.ctx.restore();\r\n }\r\n };\r\n CanvasRenderer.prototype.renderNodeContent = function (paint) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var container, curves, styles, _i, _a, child, image, e_1, image, e_2, iframeRenderer, canvas, size, bounds, x, textBounds, img, image, url, e_3, bounds;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n this.applyEffects(paint.effects, 4 /* CONTENT */);\r\n container = paint.container;\r\n curves = paint.curves;\r\n styles = container.styles;\r\n _i = 0, _a = container.textNodes;\r\n _b.label = 1;\r\n case 1:\r\n if (!(_i < _a.length)) return [3 /*break*/, 4];\r\n child = _a[_i];\r\n return [4 /*yield*/, this.renderTextNode(child, styles)];\r\n case 2:\r\n _b.sent();\r\n _b.label = 3;\r\n case 3:\r\n _i++;\r\n return [3 /*break*/, 1];\r\n case 4:\r\n if (!(container instanceof ImageElementContainer)) return [3 /*break*/, 8];\r\n _b.label = 5;\r\n case 5:\r\n _b.trys.push([5, 7, , 8]);\r\n return [4 /*yield*/, this.options.cache.match(container.src)];\r\n case 6:\r\n image = _b.sent();\r\n this.renderReplacedElement(container, curves, image);\r\n return [3 /*break*/, 8];\r\n case 7:\r\n e_1 = _b.sent();\r\n Logger.getInstance(this.options.id).error(\"Error loading image \" + container.src);\r\n return [3 /*break*/, 8];\r\n case 8:\r\n if (container instanceof CanvasElementContainer) {\r\n this.renderReplacedElement(container, curves, container.canvas);\r\n }\r\n if (!(container instanceof SVGElementContainer)) return [3 /*break*/, 12];\r\n _b.label = 9;\r\n case 9:\r\n _b.trys.push([9, 11, , 12]);\r\n return [4 /*yield*/, this.options.cache.match(container.svg)];\r\n case 10:\r\n image = _b.sent();\r\n this.renderReplacedElement(container, curves, image);\r\n return [3 /*break*/, 12];\r\n case 11:\r\n e_2 = _b.sent();\r\n Logger.getInstance(this.options.id).error(\"Error loading svg \" + container.svg.substring(0, 255));\r\n return [3 /*break*/, 12];\r\n case 12:\r\n if (!(container instanceof IFrameElementContainer && container.tree)) return [3 /*break*/, 14];\r\n iframeRenderer = new CanvasRenderer({\r\n id: this.options.id,\r\n scale: this.options.scale,\r\n backgroundColor: container.backgroundColor,\r\n x: 0,\r\n y: 0,\r\n scrollX: 0,\r\n scrollY: 0,\r\n width: container.width,\r\n height: container.height,\r\n cache: this.options.cache,\r\n windowWidth: container.width,\r\n windowHeight: container.height\r\n });\r\n return [4 /*yield*/, iframeRenderer.render(container.tree)];\r\n case 13:\r\n canvas = _b.sent();\r\n if (container.width && container.height) {\r\n this.ctx.drawImage(canvas, 0, 0, container.width, container.height, container.bounds.left, container.bounds.top, container.bounds.width, container.bounds.height);\r\n }\r\n _b.label = 14;\r\n case 14:\r\n if (container instanceof InputElementContainer) {\r\n size = Math.min(container.bounds.width, container.bounds.height);\r\n if (container.type === CHECKBOX) {\r\n if (container.checked) {\r\n this.ctx.save();\r\n this.path([\r\n new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79),\r\n new Vector(container.bounds.left + size * 0.16, container.bounds.top + size * 0.5549),\r\n new Vector(container.bounds.left + size * 0.27347, container.bounds.top + size * 0.44071),\r\n new Vector(container.bounds.left + size * 0.39694, container.bounds.top + size * 0.5649),\r\n new Vector(container.bounds.left + size * 0.72983, container.bounds.top + size * 0.23),\r\n new Vector(container.bounds.left + size * 0.84, container.bounds.top + size * 0.34085),\r\n new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79)\r\n ]);\r\n this.ctx.fillStyle = asString(INPUT_COLOR);\r\n this.ctx.fill();\r\n this.ctx.restore();\r\n }\r\n }\r\n else if (container.type === RADIO) {\r\n if (container.checked) {\r\n this.ctx.save();\r\n this.ctx.beginPath();\r\n this.ctx.arc(container.bounds.left + size / 2, container.bounds.top + size / 2, size / 4, 0, Math.PI * 2, true);\r\n this.ctx.fillStyle = asString(INPUT_COLOR);\r\n this.ctx.fill();\r\n this.ctx.restore();\r\n }\r\n }\r\n }\r\n if (isTextInputElement(container) && container.value.length) {\r\n this.ctx.font = this.createFontStyle(styles)[0];\r\n this.ctx.fillStyle = asString(styles.color);\r\n this.ctx.textBaseline = 'middle';\r\n this.ctx.textAlign = canvasTextAlign(container.styles.textAlign);\r\n bounds = contentBox(container);\r\n x = 0;\r\n switch (container.styles.textAlign) {\r\n case TEXT_ALIGN.CENTER:\r\n x += bounds.width / 2;\r\n break;\r\n case TEXT_ALIGN.RIGHT:\r\n x += bounds.width;\r\n break;\r\n }\r\n textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1);\r\n this.ctx.save();\r\n this.path([\r\n new Vector(bounds.left, bounds.top),\r\n new Vector(bounds.left + bounds.width, bounds.top),\r\n new Vector(bounds.left + bounds.width, bounds.top + bounds.height),\r\n new Vector(bounds.left, bounds.top + bounds.height)\r\n ]);\r\n this.ctx.clip();\r\n this.renderTextWithLetterSpacing(new TextBounds(container.value, textBounds), styles.letterSpacing);\r\n this.ctx.restore();\r\n this.ctx.textBaseline = 'bottom';\r\n this.ctx.textAlign = 'left';\r\n }\r\n if (!contains(container.styles.display, 2048 /* LIST_ITEM */)) return [3 /*break*/, 20];\r\n if (!(container.styles.listStyleImage !== null)) return [3 /*break*/, 19];\r\n img = container.styles.listStyleImage;\r\n if (!(img.type === CSSImageType.URL)) return [3 /*break*/, 18];\r\n image = void 0;\r\n url = img.url;\r\n _b.label = 15;\r\n case 15:\r\n _b.trys.push([15, 17, , 18]);\r\n return [4 /*yield*/, this.options.cache.match(url)];\r\n case 16:\r\n image = _b.sent();\r\n this.ctx.drawImage(image, container.bounds.left - (image.width + 10), container.bounds.top);\r\n return [3 /*break*/, 18];\r\n case 17:\r\n e_3 = _b.sent();\r\n Logger.getInstance(this.options.id).error(\"Error loading list-style-image \" + url);\r\n return [3 /*break*/, 18];\r\n case 18: return [3 /*break*/, 20];\r\n case 19:\r\n if (paint.listValue && container.styles.listStyleType !== LIST_STYLE_TYPE.NONE) {\r\n this.ctx.font = this.createFontStyle(styles)[0];\r\n this.ctx.fillStyle = asString(styles.color);\r\n this.ctx.textBaseline = 'middle';\r\n this.ctx.textAlign = 'right';\r\n bounds = new Bounds(container.bounds.left, container.bounds.top + getAbsoluteValue(container.styles.paddingTop, container.bounds.width), container.bounds.width, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 1);\r\n this.renderTextWithLetterSpacing(new TextBounds(paint.listValue, bounds), styles.letterSpacing);\r\n this.ctx.textBaseline = 'bottom';\r\n this.ctx.textAlign = 'left';\r\n }\r\n _b.label = 20;\r\n case 20: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.renderStackContent = function (stack) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _i, _a, child, _b, _c, child, _d, _e, child, _f, _g, child, _h, _j, child, _k, _l, child, _m, _o, child;\r\n return __generator(this, function (_p) {\r\n switch (_p.label) {\r\n case 0: \r\n // https://www.w3.org/TR/css-position-3/#painting-order\r\n // 1. the background and borders of the element forming the stacking context.\r\n return [4 /*yield*/, this.renderNodeBackgroundAndBorders(stack.element)];\r\n case 1:\r\n // https://www.w3.org/TR/css-position-3/#painting-order\r\n // 1. the background and borders of the element forming the stacking context.\r\n _p.sent();\r\n _i = 0, _a = stack.negativeZIndex;\r\n _p.label = 2;\r\n case 2:\r\n if (!(_i < _a.length)) return [3 /*break*/, 5];\r\n child = _a[_i];\r\n return [4 /*yield*/, this.renderStack(child)];\r\n case 3:\r\n _p.sent();\r\n _p.label = 4;\r\n case 4:\r\n _i++;\r\n return [3 /*break*/, 2];\r\n case 5: \r\n // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\r\n return [4 /*yield*/, this.renderNodeContent(stack.element)];\r\n case 6:\r\n // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\r\n _p.sent();\r\n _b = 0, _c = stack.nonInlineLevel;\r\n _p.label = 7;\r\n case 7:\r\n if (!(_b < _c.length)) return [3 /*break*/, 10];\r\n child = _c[_b];\r\n return [4 /*yield*/, this.renderNode(child)];\r\n case 8:\r\n _p.sent();\r\n _p.label = 9;\r\n case 9:\r\n _b++;\r\n return [3 /*break*/, 7];\r\n case 10:\r\n _d = 0, _e = stack.nonPositionedFloats;\r\n _p.label = 11;\r\n case 11:\r\n if (!(_d < _e.length)) return [3 /*break*/, 14];\r\n child = _e[_d];\r\n return [4 /*yield*/, this.renderStack(child)];\r\n case 12:\r\n _p.sent();\r\n _p.label = 13;\r\n case 13:\r\n _d++;\r\n return [3 /*break*/, 11];\r\n case 14:\r\n _f = 0, _g = stack.nonPositionedInlineLevel;\r\n _p.label = 15;\r\n case 15:\r\n if (!(_f < _g.length)) return [3 /*break*/, 18];\r\n child = _g[_f];\r\n return [4 /*yield*/, this.renderStack(child)];\r\n case 16:\r\n _p.sent();\r\n _p.label = 17;\r\n case 17:\r\n _f++;\r\n return [3 /*break*/, 15];\r\n case 18:\r\n _h = 0, _j = stack.inlineLevel;\r\n _p.label = 19;\r\n case 19:\r\n if (!(_h < _j.length)) return [3 /*break*/, 22];\r\n child = _j[_h];\r\n return [4 /*yield*/, this.renderNode(child)];\r\n case 20:\r\n _p.sent();\r\n _p.label = 21;\r\n case 21:\r\n _h++;\r\n return [3 /*break*/, 19];\r\n case 22:\r\n _k = 0, _l = stack.zeroOrAutoZIndexOrTransformedOrOpacity;\r\n _p.label = 23;\r\n case 23:\r\n if (!(_k < _l.length)) return [3 /*break*/, 26];\r\n child = _l[_k];\r\n return [4 /*yield*/, this.renderStack(child)];\r\n case 24:\r\n _p.sent();\r\n _p.label = 25;\r\n case 25:\r\n _k++;\r\n return [3 /*break*/, 23];\r\n case 26:\r\n _m = 0, _o = stack.positiveZIndex;\r\n _p.label = 27;\r\n case 27:\r\n if (!(_m < _o.length)) return [3 /*break*/, 30];\r\n child = _o[_m];\r\n return [4 /*yield*/, this.renderStack(child)];\r\n case 28:\r\n _p.sent();\r\n _p.label = 29;\r\n case 29:\r\n _m++;\r\n return [3 /*break*/, 27];\r\n case 30: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.mask = function (paths) {\r\n this.ctx.beginPath();\r\n this.ctx.moveTo(0, 0);\r\n this.ctx.lineTo(this.canvas.width, 0);\r\n this.ctx.lineTo(this.canvas.width, this.canvas.height);\r\n this.ctx.lineTo(0, this.canvas.height);\r\n this.ctx.lineTo(0, 0);\r\n this.formatPath(paths.slice(0).reverse());\r\n this.ctx.closePath();\r\n };\r\n CanvasRenderer.prototype.path = function (paths) {\r\n this.ctx.beginPath();\r\n this.formatPath(paths);\r\n this.ctx.closePath();\r\n };\r\n CanvasRenderer.prototype.formatPath = function (paths) {\r\n var _this = this;\r\n paths.forEach(function (point, index) {\r\n var start = isBezierCurve(point) ? point.start : point;\r\n if (index === 0) {\r\n _this.ctx.moveTo(start.x, start.y);\r\n }\r\n else {\r\n _this.ctx.lineTo(start.x, start.y);\r\n }\r\n if (isBezierCurve(point)) {\r\n _this.ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y);\r\n }\r\n });\r\n };\r\n CanvasRenderer.prototype.renderRepeat = function (path, pattern, offsetX, offsetY) {\r\n this.path(path);\r\n this.ctx.fillStyle = pattern;\r\n this.ctx.translate(offsetX, offsetY);\r\n this.ctx.fill();\r\n this.ctx.translate(-offsetX, -offsetY);\r\n };\r\n CanvasRenderer.prototype.resizeImage = function (image, width, height) {\r\n if (image.width === width && image.height === height) {\r\n return image;\r\n }\r\n var canvas = this.canvas.ownerDocument.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n var ctx = canvas.getContext('2d');\r\n ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, width, height);\r\n return canvas;\r\n };\r\n CanvasRenderer.prototype.renderBackgroundImage = function (container) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var index, _loop_1, this_1, _i, _a, backgroundImage;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n index = container.styles.backgroundImage.length - 1;\r\n _loop_1 = function (backgroundImage) {\r\n var image, url, e_4, _a, path, x, y, width, height, pattern, _b, path, x, y, width, height, _c, lineLength, x0, x1, y0, y1, canvas, ctx, gradient_1, pattern, _d, path, left, top_1, width, height, position, x, y, _e, rx, ry, radialGradient_1, midX, midY, f, invF;\r\n return __generator(this, function (_f) {\r\n switch (_f.label) {\r\n case 0:\r\n if (!(backgroundImage.type === CSSImageType.URL)) return [3 /*break*/, 5];\r\n image = void 0;\r\n url = backgroundImage.url;\r\n _f.label = 1;\r\n case 1:\r\n _f.trys.push([1, 3, , 4]);\r\n return [4 /*yield*/, this_1.options.cache.match(url)];\r\n case 2:\r\n image = _f.sent();\r\n return [3 /*break*/, 4];\r\n case 3:\r\n e_4 = _f.sent();\r\n Logger.getInstance(this_1.options.id).error(\"Error loading background-image \" + url);\r\n return [3 /*break*/, 4];\r\n case 4:\r\n if (image) {\r\n _a = calculateBackgroundRendering(container, index, [\r\n image.width,\r\n image.height,\r\n image.width / image.height\r\n ]), path = _a[0], x = _a[1], y = _a[2], width = _a[3], height = _a[4];\r\n pattern = this_1.ctx.createPattern(this_1.resizeImage(image, width, height), 'repeat');\r\n this_1.renderRepeat(path, pattern, x, y);\r\n }\r\n return [3 /*break*/, 6];\r\n case 5:\r\n if (isLinearGradient(backgroundImage)) {\r\n _b = calculateBackgroundRendering(container, index, [null, null, null]), path = _b[0], x = _b[1], y = _b[2], width = _b[3], height = _b[4];\r\n _c = calculateGradientDirection(backgroundImage.angle, width, height), lineLength = _c[0], x0 = _c[1], x1 = _c[2], y0 = _c[3], y1 = _c[4];\r\n canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n ctx = canvas.getContext('2d');\r\n gradient_1 = ctx.createLinearGradient(x0, y0, x1, y1);\r\n processColorStops(backgroundImage.stops, lineLength).forEach(function (colorStop) {\r\n return gradient_1.addColorStop(colorStop.stop, asString(colorStop.color));\r\n });\r\n ctx.fillStyle = gradient_1;\r\n ctx.fillRect(0, 0, width, height);\r\n if (width > 0 && height > 0) {\r\n pattern = this_1.ctx.createPattern(canvas, 'repeat');\r\n this_1.renderRepeat(path, pattern, x, y);\r\n }\r\n }\r\n else if (isRadialGradient(backgroundImage)) {\r\n _d = calculateBackgroundRendering(container, index, [\r\n null,\r\n null,\r\n null\r\n ]), path = _d[0], left = _d[1], top_1 = _d[2], width = _d[3], height = _d[4];\r\n position = backgroundImage.position.length === 0 ? [FIFTY_PERCENT] : backgroundImage.position;\r\n x = getAbsoluteValue(position[0], width);\r\n y = getAbsoluteValue(position[position.length - 1], height);\r\n _e = calculateRadius(backgroundImage, x, y, width, height), rx = _e[0], ry = _e[1];\r\n if (rx > 0 && rx > 0) {\r\n radialGradient_1 = this_1.ctx.createRadialGradient(left + x, top_1 + y, 0, left + x, top_1 + y, rx);\r\n processColorStops(backgroundImage.stops, rx * 2).forEach(function (colorStop) {\r\n return radialGradient_1.addColorStop(colorStop.stop, asString(colorStop.color));\r\n });\r\n this_1.path(path);\r\n this_1.ctx.fillStyle = radialGradient_1;\r\n if (rx !== ry) {\r\n midX = container.bounds.left + 0.5 * container.bounds.width;\r\n midY = container.bounds.top + 0.5 * container.bounds.height;\r\n f = ry / rx;\r\n invF = 1 / f;\r\n this_1.ctx.save();\r\n this_1.ctx.translate(midX, midY);\r\n this_1.ctx.transform(1, 0, 0, f, 0, 0);\r\n this_1.ctx.translate(-midX, -midY);\r\n this_1.ctx.fillRect(left, invF * (top_1 - midY) + midY, width, height * invF);\r\n this_1.ctx.restore();\r\n }\r\n else {\r\n this_1.ctx.fill();\r\n }\r\n }\r\n }\r\n _f.label = 6;\r\n case 6:\r\n index--;\r\n return [2 /*return*/];\r\n }\r\n });\r\n };\r\n this_1 = this;\r\n _i = 0, _a = container.styles.backgroundImage.slice(0).reverse();\r\n _b.label = 1;\r\n case 1:\r\n if (!(_i < _a.length)) return [3 /*break*/, 4];\r\n backgroundImage = _a[_i];\r\n return [5 /*yield**/, _loop_1(backgroundImage)];\r\n case 2:\r\n _b.sent();\r\n _b.label = 3;\r\n case 3:\r\n _i++;\r\n return [3 /*break*/, 1];\r\n case 4: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.renderBorder = function (color, side, curvePoints) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n this.path(parsePathForBorder(curvePoints, side));\r\n this.ctx.fillStyle = asString(color);\r\n this.ctx.fill();\r\n return [2 /*return*/];\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.renderNodeBackgroundAndBorders = function (paint) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var styles, hasBackground, borders, backgroundPaintingArea, side, _i, borders_1, border;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n this.applyEffects(paint.effects, 2 /* BACKGROUND_BORDERS */);\r\n styles = paint.container.styles;\r\n hasBackground = !isTransparent(styles.backgroundColor) || styles.backgroundImage.length;\r\n borders = [\r\n { style: styles.borderTopStyle, color: styles.borderTopColor },\r\n { style: styles.borderRightStyle, color: styles.borderRightColor },\r\n { style: styles.borderBottomStyle, color: styles.borderBottomColor },\r\n { style: styles.borderLeftStyle, color: styles.borderLeftColor }\r\n ];\r\n backgroundPaintingArea = calculateBackgroundCurvedPaintingArea(getBackgroundValueForIndex(styles.backgroundClip, 0), paint.curves);\r\n if (!(hasBackground || styles.boxShadow.length)) return [3 /*break*/, 2];\r\n this.ctx.save();\r\n this.path(backgroundPaintingArea);\r\n this.ctx.clip();\r\n if (!isTransparent(styles.backgroundColor)) {\r\n this.ctx.fillStyle = asString(styles.backgroundColor);\r\n this.ctx.fill();\r\n }\r\n return [4 /*yield*/, this.renderBackgroundImage(paint.container)];\r\n case 1:\r\n _a.sent();\r\n this.ctx.restore();\r\n styles.boxShadow\r\n .slice(0)\r\n .reverse()\r\n .forEach(function (shadow) {\r\n _this.ctx.save();\r\n var borderBoxArea = calculateBorderBoxPath(paint.curves);\r\n var maskOffset = shadow.inset ? 0 : MASK_OFFSET;\r\n var shadowPaintingArea = transformPath(borderBoxArea, -maskOffset + (shadow.inset ? 1 : -1) * shadow.spread.number, (shadow.inset ? 1 : -1) * shadow.spread.number, shadow.spread.number * (shadow.inset ? -2 : 2), shadow.spread.number * (shadow.inset ? -2 : 2));\r\n if (shadow.inset) {\r\n _this.path(borderBoxArea);\r\n _this.ctx.clip();\r\n _this.mask(shadowPaintingArea);\r\n }\r\n else {\r\n _this.mask(borderBoxArea);\r\n _this.ctx.clip();\r\n _this.path(shadowPaintingArea);\r\n }\r\n _this.ctx.shadowOffsetX = shadow.offsetX.number + maskOffset;\r\n _this.ctx.shadowOffsetY = shadow.offsetY.number;\r\n _this.ctx.shadowColor = asString(shadow.color);\r\n _this.ctx.shadowBlur = shadow.blur.number;\r\n _this.ctx.fillStyle = shadow.inset ? asString(shadow.color) : 'rgba(0,0,0,1)';\r\n _this.ctx.fill();\r\n _this.ctx.restore();\r\n });\r\n _a.label = 2;\r\n case 2:\r\n side = 0;\r\n _i = 0, borders_1 = borders;\r\n _a.label = 3;\r\n case 3:\r\n if (!(_i < borders_1.length)) return [3 /*break*/, 7];\r\n border = borders_1[_i];\r\n if (!(border.style !== BORDER_STYLE.NONE && !isTransparent(border.color))) return [3 /*break*/, 5];\r\n return [4 /*yield*/, this.renderBorder(border.color, side, paint.curves)];\r\n case 4:\r\n _a.sent();\r\n _a.label = 5;\r\n case 5:\r\n side++;\r\n _a.label = 6;\r\n case 6:\r\n _i++;\r\n return [3 /*break*/, 3];\r\n case 7: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n CanvasRenderer.prototype.render = function (element) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var stack;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (this.options.backgroundColor) {\r\n this.ctx.fillStyle = asString(this.options.backgroundColor);\r\n this.ctx.fillRect(this.options.x - this.options.scrollX, this.options.y - this.options.scrollY, this.options.width, this.options.height);\r\n }\r\n stack = parseStackingContexts(element);\r\n return [4 /*yield*/, this.renderStack(stack)];\r\n case 1:\r\n _a.sent();\r\n this.applyEffects([], 2 /* BACKGROUND_BORDERS */);\r\n return [2 /*return*/, this.canvas];\r\n }\r\n });\r\n });\r\n };\r\n return CanvasRenderer;\r\n }());\r\n var isTextInputElement = function (container) {\r\n if (container instanceof TextareaElementContainer) {\r\n return true;\r\n }\r\n else if (container instanceof SelectElementContainer) {\r\n return true;\r\n }\r\n else if (container instanceof InputElementContainer && container.type !== RADIO && container.type !== CHECKBOX) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n var calculateBackgroundCurvedPaintingArea = function (clip, curves) {\r\n switch (clip) {\r\n case BACKGROUND_CLIP.BORDER_BOX:\r\n return calculateBorderBoxPath(curves);\r\n case BACKGROUND_CLIP.CONTENT_BOX:\r\n return calculateContentBoxPath(curves);\r\n case BACKGROUND_CLIP.PADDING_BOX:\r\n default:\r\n return calculatePaddingBoxPath(curves);\r\n }\r\n };\r\n var canvasTextAlign = function (textAlign) {\r\n switch (textAlign) {\r\n case TEXT_ALIGN.CENTER:\r\n return 'center';\r\n case TEXT_ALIGN.RIGHT:\r\n return 'right';\r\n case TEXT_ALIGN.LEFT:\r\n default:\r\n return 'left';\r\n }\r\n };\n\n var ForeignObjectRenderer = /** @class */ (function () {\r\n function ForeignObjectRenderer(options) {\r\n this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\r\n this.ctx = this.canvas.getContext('2d');\r\n this.options = options;\r\n this.canvas.width = Math.floor(options.width * options.scale);\r\n this.canvas.height = Math.floor(options.height * options.scale);\r\n this.canvas.style.width = options.width + \"px\";\r\n this.canvas.style.height = options.height + \"px\";\r\n this.ctx.scale(this.options.scale, this.options.scale);\r\n this.ctx.translate(-options.x + options.scrollX, -options.y + options.scrollY);\r\n Logger.getInstance(options.id).debug(\"EXPERIMENTAL ForeignObject renderer initialized (\" + options.width + \"x\" + options.height + \" at \" + options.x + \",\" + options.y + \") with scale \" + options.scale);\r\n }\r\n ForeignObjectRenderer.prototype.render = function (element) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var svg, img;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n svg = createForeignObjectSVG(Math.max(this.options.windowWidth, this.options.width) * this.options.scale, Math.max(this.options.windowHeight, this.options.height) * this.options.scale, this.options.scrollX * this.options.scale, this.options.scrollY * this.options.scale, element);\r\n return [4 /*yield*/, loadSerializedSVG$1(svg)];\r\n case 1:\r\n img = _a.sent();\r\n if (this.options.backgroundColor) {\r\n this.ctx.fillStyle = asString(this.options.backgroundColor);\r\n this.ctx.fillRect(0, 0, this.options.width * this.options.scale, this.options.height * this.options.scale);\r\n }\r\n this.ctx.drawImage(img, -this.options.x * this.options.scale, -this.options.y * this.options.scale);\r\n return [2 /*return*/, this.canvas];\r\n }\r\n });\r\n });\r\n };\r\n return ForeignObjectRenderer;\r\n }());\r\n var loadSerializedSVG$1 = function (svg) {\r\n return new Promise(function (resolve, reject) {\r\n var img = new Image();\r\n img.onload = function () {\r\n resolve(img);\r\n };\r\n img.onerror = reject;\r\n img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\r\n });\r\n };\n\n var _this = undefined;\r\n var parseColor$1 = function (value) { return color.parse(Parser.create(value).parseComponentValue()); };\r\n var html2canvas = function (element, options) {\r\n if (options === void 0) { options = {}; }\r\n return renderElement(element, options);\r\n };\r\n if (typeof window !== 'undefined') {\r\n CacheStorage.setContext(window);\r\n }\r\n var renderElement = function (element, opts) { return __awaiter(_this, void 0, void 0, function () {\r\n var ownerDocument, defaultView, instanceName, _a, width, height, left, top, defaultResourceOptions, resourceOptions, defaultOptions, options, windowBounds, documentCloner, clonedElement, container, documentBackgroundColor, bodyBackgroundColor, bgColor, defaultBackgroundColor, backgroundColor, renderOptions, canvas, renderer, root, renderer;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n ownerDocument = element.ownerDocument;\r\n if (!ownerDocument) {\r\n throw new Error(\"Element is not attached to a Document\");\r\n }\r\n defaultView = ownerDocument.defaultView;\r\n if (!defaultView) {\r\n throw new Error(\"Document is not attached to a Window\");\r\n }\r\n instanceName = (Math.round(Math.random() * 1000) + Date.now()).toString(16);\r\n _a = isBodyElement(element) || isHTMLElement(element) ? parseDocumentSize(ownerDocument) : parseBounds(element), width = _a.width, height = _a.height, left = _a.left, top = _a.top;\r\n defaultResourceOptions = {\r\n allowTaint: false,\r\n imageTimeout: 15000,\r\n proxy: undefined,\r\n useCORS: false\r\n };\r\n resourceOptions = __assign({}, defaultResourceOptions, opts);\r\n defaultOptions = {\r\n backgroundColor: '#ffffff',\r\n cache: opts.cache ? opts.cache : CacheStorage.create(instanceName, resourceOptions),\r\n logging: true,\r\n removeContainer: true,\r\n foreignObjectRendering: false,\r\n scale: defaultView.devicePixelRatio || 1,\r\n windowWidth: defaultView.innerWidth,\r\n windowHeight: defaultView.innerHeight,\r\n scrollX: defaultView.pageXOffset,\r\n scrollY: defaultView.pageYOffset,\r\n x: left,\r\n y: top,\r\n width: Math.ceil(width),\r\n height: Math.ceil(height),\r\n id: instanceName\r\n };\r\n options = __assign({}, defaultOptions, resourceOptions, opts);\r\n windowBounds = new Bounds(options.scrollX, options.scrollY, options.windowWidth, options.windowHeight);\r\n Logger.create({ id: instanceName, enabled: options.logging });\r\n Logger.getInstance(instanceName).debug(\"Starting document clone\");\r\n documentCloner = new DocumentCloner(element, {\r\n id: instanceName,\r\n onclone: options.onclone,\r\n ignoreElements: options.ignoreElements,\r\n inlineImages: options.foreignObjectRendering,\r\n copyStyles: options.foreignObjectRendering\r\n });\r\n clonedElement = documentCloner.clonedReferenceElement;\r\n if (!clonedElement) {\r\n return [2 /*return*/, Promise.reject(\"Unable to find element in cloned iframe\")];\r\n }\r\n return [4 /*yield*/, documentCloner.toIFrame(ownerDocument, windowBounds)];\r\n case 1:\r\n container = _b.sent();\r\n documentBackgroundColor = ownerDocument.documentElement\r\n ? parseColor$1(getComputedStyle(ownerDocument.documentElement).backgroundColor)\r\n : COLORS.TRANSPARENT;\r\n bodyBackgroundColor = ownerDocument.body\r\n ? parseColor$1(getComputedStyle(ownerDocument.body).backgroundColor)\r\n : COLORS.TRANSPARENT;\r\n bgColor = opts.backgroundColor;\r\n defaultBackgroundColor = typeof bgColor === 'string' ? parseColor$1(bgColor) : bgColor === null ? COLORS.TRANSPARENT : 0xffffffff;\r\n backgroundColor = element === ownerDocument.documentElement\r\n ? isTransparent(documentBackgroundColor)\r\n ? isTransparent(bodyBackgroundColor)\r\n ? defaultBackgroundColor\r\n : bodyBackgroundColor\r\n : documentBackgroundColor\r\n : defaultBackgroundColor;\r\n renderOptions = {\r\n id: instanceName,\r\n cache: options.cache,\r\n canvas: options.canvas,\r\n backgroundColor: backgroundColor,\r\n scale: options.scale,\r\n x: options.x,\r\n y: options.y,\r\n scrollX: options.scrollX,\r\n scrollY: options.scrollY,\r\n width: options.width,\r\n height: options.height,\r\n windowWidth: options.windowWidth,\r\n windowHeight: options.windowHeight\r\n };\r\n if (!options.foreignObjectRendering) return [3 /*break*/, 3];\r\n Logger.getInstance(instanceName).debug(\"Document cloned, using foreign object rendering\");\r\n renderer = new ForeignObjectRenderer(renderOptions);\r\n return [4 /*yield*/, renderer.render(clonedElement)];\r\n case 2:\r\n canvas = _b.sent();\r\n return [3 /*break*/, 5];\r\n case 3:\r\n Logger.getInstance(instanceName).debug(\"Document cloned, using computed rendering\");\r\n CacheStorage.attachInstance(options.cache);\r\n Logger.getInstance(instanceName).debug(\"Starting DOM parsing\");\r\n root = parseTree(clonedElement);\r\n CacheStorage.detachInstance();\r\n if (backgroundColor === root.styles.backgroundColor) {\r\n root.styles.backgroundColor = COLORS.TRANSPARENT;\r\n }\r\n Logger.getInstance(instanceName).debug(\"Starting renderer\");\r\n renderer = new CanvasRenderer(renderOptions);\r\n return [4 /*yield*/, renderer.render(root)];\r\n case 4:\r\n canvas = _b.sent();\r\n _b.label = 5;\r\n case 5:\r\n if (options.removeContainer === true) {\r\n if (!DocumentCloner.destroy(container)) {\r\n Logger.getInstance(instanceName).error(\"Cannot detach cloned iframe as it is not in the DOM anymore\");\r\n }\r\n }\r\n Logger.getInstance(instanceName).debug(\"Finished rendering\");\r\n Logger.destroy(instanceName);\r\n CacheStorage.destroy(instanceName);\r\n return [2 /*return*/, canvas];\r\n }\r\n });\r\n }); };\n\n return html2canvas;\n\n}));\n//# sourceMappingURL=html2canvas.js.map\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\n\nvar nativeIsFrozen = Object.isFrozen;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeIsFrozen(1); });\n\n// `Object.isFrozen` method\n// https://tc39.es/ecma262/#sec-object.isfrozen\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n isFrozen: function isFrozen(it) {\n return isObject(it) ? nativeIsFrozen ? nativeIsFrozen(it) : false : true;\n }\n});\n","var $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\n\nvar nativeSeal = Object.seal;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeSeal(1); });\n\n// `Object.seal` method\n// https://tc39.es/ecma262/#sec-object.seal\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n seal: function seal(it) {\n return nativeSeal && isObject(it) ? nativeSeal(onFreeze(it)) : it;\n }\n});\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aFunction = require('../internals/a-function');\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\n\nvar nativeApply = getBuiltIn('Reflect', 'apply');\nvar functionApply = Function.apply;\n\n// MS Edge argumentsList argument is optional\nvar OPTIONAL_ARGUMENTS_LIST = !fails(function () {\n nativeApply(function () { /* empty */ });\n});\n\n// `Reflect.apply` method\n// https://tc39.es/ecma262/#sec-reflect.apply\n$({ target: 'Reflect', stat: true, forced: OPTIONAL_ARGUMENTS_LIST }, {\n apply: function apply(target, thisArgument, argumentsList) {\n aFunction(target);\n anObject(argumentsList);\n return nativeApply\n ? nativeApply(target, thisArgument, argumentsList)\n : functionApply.call(target, thisArgument, argumentsList);\n }\n});\n","'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!(argsLength in factories)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func -- we have no proper alternatives, IE8- only\n factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = slice.call(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = partArgs.concat(slice.call(arguments));\n return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n };\n if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n return boundFunction;\n};\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aFunction = require('../internals/a-function');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar bind = require('../internals/function-bind');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","/*! @license DOMPurify | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.2.2/LICENSE */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.DOMPurify = factory());\n}(this, function () { 'use strict';\n\n function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n var hasOwnProperty = Object.hasOwnProperty,\n setPrototypeOf = Object.setPrototypeOf,\n isFrozen = Object.isFrozen,\n getPrototypeOf = Object.getPrototypeOf,\n getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var freeze = Object.freeze,\n seal = Object.seal,\n create = Object.create; // eslint-disable-line import/no-mutable-exports\n\n var _ref = typeof Reflect !== 'undefined' && Reflect,\n apply = _ref.apply,\n construct = _ref.construct;\n\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n\n if (!construct) {\n construct = function construct(Func, args) {\n return new (Function.prototype.bind.apply(Func, [null].concat(_toConsumableArray(args))))();\n };\n }\n\n var arrayForEach = unapply(Array.prototype.forEach);\n var arrayPop = unapply(Array.prototype.pop);\n var arrayPush = unapply(Array.prototype.push);\n\n var stringToLowerCase = unapply(String.prototype.toLowerCase);\n var stringMatch = unapply(String.prototype.match);\n var stringReplace = unapply(String.prototype.replace);\n var stringIndexOf = unapply(String.prototype.indexOf);\n var stringTrim = unapply(String.prototype.trim);\n\n var regExpTest = unapply(RegExp.prototype.test);\n\n var typeErrorCreate = unconstruct(TypeError);\n\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return apply(func, thisArg, args);\n };\n }\n\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return construct(func, args);\n };\n }\n\n /* Add properties to a lookup table */\n function addToSet(set, array) {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n var l = array.length;\n while (l--) {\n var element = array[l];\n if (typeof element === 'string') {\n var lcElement = stringToLowerCase(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n }\n\n /* Shallow clone an object */\n function clone(object) {\n var newObject = create(null);\n\n var property = void 0;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n\n return newObject;\n }\n\n /* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\n function lookupGetter(object, prop) {\n while (object !== null) {\n var desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n return null;\n }\n\n var html = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n // SVG\n var svg = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n\n var svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\n // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n var svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'fedropshadow', 'feimage', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n\n var mathMl = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']);\n\n // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n var mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n\n var text = freeze(['#text']);\n\n var html$1 = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns']);\n\n var svg$1 = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n\n var mathMl$1 = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n\n var xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n // eslint-disable-next-line unicorn/better-regex\n var MUSTACHE_EXPR = seal(/\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n var ERB_EXPR = seal(/<%[\\s\\S]*|[\\s\\S]*%>/gm);\n var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n function _toConsumableArray$1(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n var getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n\n /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\n var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n if ((typeof trustedTypes === 'undefined' ? 'undefined' : _typeof(trustedTypes)) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n var suffix = null;\n var ATTR_NAME = 'data-tt-policy-suffix';\n if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n\n var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML: function createHTML(html$$1) {\n return html$$1;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n\n function createDOMPurify() {\n var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n\n var DOMPurify = function DOMPurify(root) {\n return createDOMPurify(root);\n };\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '2.2.6';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n var originalDocument = window.document;\n\n var document = window.document;\n var DocumentFragment = window.DocumentFragment,\n HTMLTemplateElement = window.HTMLTemplateElement,\n Node = window.Node,\n Element = window.Element,\n NodeFilter = window.NodeFilter,\n _window$NamedNodeMap = window.NamedNodeMap,\n NamedNodeMap = _window$NamedNodeMap === undefined ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,\n Text = window.Text,\n Comment = window.Comment,\n DOMParser = window.DOMParser,\n trustedTypes = window.trustedTypes;\n\n\n var ElementPrototype = Element.prototype;\n\n var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n var getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n var template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n var emptyHTML = trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML('') : '';\n\n var _document = document,\n implementation = _document.implementation,\n createNodeIterator = _document.createNodeIterator,\n getElementsByTagName = _document.getElementsByTagName,\n createDocumentFragment = _document.createDocumentFragment;\n var importNode = originalDocument.importNode;\n\n\n var documentMode = {};\n try {\n documentMode = clone(document).documentMode ? document.documentMode : {};\n } catch (_) {}\n\n var hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9;\n\n var MUSTACHE_EXPR$$1 = MUSTACHE_EXPR,\n ERB_EXPR$$1 = ERB_EXPR,\n DATA_ATTR$$1 = DATA_ATTR,\n ARIA_ATTR$$1 = ARIA_ATTR,\n IS_SCRIPT_OR_DATA$$1 = IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE$$1 = ATTR_WHITESPACE;\n var IS_ALLOWED_URI$$1 = IS_ALLOWED_URI;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n\n var ALLOWED_TAGS = null;\n var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray$1(html), _toConsumableArray$1(svg), _toConsumableArray$1(svgFilters), _toConsumableArray$1(mathMl), _toConsumableArray$1(text)));\n\n /* Allowed attribute names */\n var ALLOWED_ATTR = null;\n var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray$1(html$1), _toConsumableArray$1(svg$1), _toConsumableArray$1(mathMl$1), _toConsumableArray$1(xml)));\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n var FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n var FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n var ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n var ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n var ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n var SAFE_FOR_TEMPLATES = false;\n\n /* Decide if document with <html>... should be returned */\n var WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n var SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n var FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n var RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n var RETURN_DOM_FRAGMENT = false;\n\n /* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM\n * `Node` is imported into the current `Document`. If this flag is not enabled the\n * `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by\n * DOMPurify.\n *\n * This defaults to `true` starting DOMPurify 2.2.0. Note that setting it to `false`\n * might cause XSS from attacks hidden in closed shadowroots in case the browser\n * supports Declarative Shadow: DOM https://web.dev/declarative-shadow-dom/\n */\n var RETURN_DOM_IMPORT = true;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n var RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks? */\n var SANITIZE_DOM = true;\n\n /* Keep element content when removing element? */\n var KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n var IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n var USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n var FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\n /* Tags that are safe for data: URIs */\n var DATA_URI_TAGS = null;\n var DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\n /* Attributes safe for values like \"javascript:\" */\n var URI_SAFE_ATTRIBUTES = null;\n var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'summary', 'title', 'value', 'style', 'xmlns']);\n\n /* Keep a reference to config to pass to hooks */\n var CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n var formElement = document.createElement('form');\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n var _parseConfig = function _parseConfig(cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || (typeof cfg === 'undefined' ? 'undefined' : _typeof(cfg)) !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n /* Set configuration parameters */\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;\n URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS) : DEFAULT_DATA_URI_TAGS;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT !== false; // Default true\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$$1;\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray$1(text)));\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html);\n addToSet(ALLOWED_ATTR, html$1);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg);\n addToSet(ALLOWED_ATTR, svg$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl);\n addToSet(ALLOWED_ATTR, mathMl$1);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n\n var HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n var ALL_SVG_TAGS = addToSet({}, svg);\n addToSet(ALL_SVG_TAGS, svgFilters);\n addToSet(ALL_SVG_TAGS, svgDisallowed);\n\n var ALL_MATHML_TAGS = addToSet({}, mathMl);\n addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n\n var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n var _checkValidNamespace = function _checkValidNamespace(element) {\n var parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: HTML_NAMESPACE,\n tagName: 'template'\n };\n }\n\n var tagName = stringToLowerCase(element.tagName);\n var parentTagName = stringToLowerCase(parent.tagName);\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erronously deleted from\n // HTML namespace.\n var commonSvgAndHTMLElements = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (commonSvgAndHTMLElements[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG or MathML). Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n var _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, { element: node });\n try {\n node.parentNode.removeChild(node);\n } catch (_) {\n try {\n node.outerHTML = emptyHTML;\n } catch (_) {\n node.remove();\n }\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n var _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n\n node.removeAttribute(name);\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n var _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n var doc = void 0;\n var leadingWhitespace = void 0;\n\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n var matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /* Use the DOMParser API by default, fallback later if needs be */\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, 'text/html');\n } catch (_) {}\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createHTMLDocument('');\n var _doc = doc,\n body = _doc.body;\n\n body.parentNode.removeChild(body.parentNode.firstElementChild);\n body.outerHTML = dirtyPayload;\n }\n\n if (dirty && leadingWhitespace) {\n doc.body.insertBefore(document.createTextNode(leadingWhitespace), doc.body.childNodes[0] || null);\n }\n\n /* Work on whole document or just its body */\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n };\n\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n var _createIterator = function _createIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, function () {\n return NodeFilter.FILTER_ACCEPT;\n }, false);\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n var _isClobbered = function _isClobbered(elm) {\n if (elm instanceof Text || elm instanceof Comment) {\n return false;\n }\n\n if (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function') {\n return true;\n }\n\n return false;\n };\n\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n var _isNode = function _isNode(object) {\n return (typeof Node === 'undefined' ? 'undefined' : _typeof(Node)) === 'object' ? object instanceof Node : object && (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n arrayForEach(hooks[entryPoint], function (hook) {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n var _sanitizeElements = function _sanitizeElements(currentNode) {\n var content = void 0;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check if tagname contains Unicode */\n if (stringMatch(currentNode.nodeName, /[\\u0080-\\uFFFF]/)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n var tagName = stringToLowerCase(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName: tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (!_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n var parentNode = getParentNode(currentNode);\n var childNodes = getChildNodes(currentNode);\n var childCount = childNodes.length;\n for (var i = childCount - 1; i >= 0; --i) {\n parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));\n }\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n if ((tagName === 'noscript' || tagName === 'noembed') && regExpTest(/<\\/no(script|embed)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n /* Get the element's text content */\n content = currentNode.textContent;\n content = stringReplace(content, MUSTACHE_EXPR$$1, ' ');\n content = stringReplace(content, ERB_EXPR$$1, ' ');\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && regExpTest(DATA_ATTR$$1, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$$1, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n return false;\n\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$$1, stringReplace(value, ATTR_WHITESPACE$$1, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$$1, stringReplace(value, ATTR_WHITESPACE$$1, ''))) ; else if (!value) ; else {\n return false;\n }\n\n return true;\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n var attr = void 0;\n var value = void 0;\n var lcName = void 0;\n var l = void 0;\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n var attributes = currentNode.attributes;\n\n /* Check if we have attributes; if not we might have a text node */\n\n if (!attributes) {\n return;\n }\n\n var hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n attr = attributes[l];\n var _attr = attr,\n name = _attr.name,\n namespaceURI = _attr.namespaceURI;\n\n value = stringTrim(attr.value);\n lcName = stringToLowerCase(name);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n _removeAttribute(name, currentNode);\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = stringReplace(value, MUSTACHE_EXPR$$1, ' ');\n value = stringReplace(value, ERB_EXPR$$1, ' ');\n }\n\n /* Is `value` valid for this attribute? */\n var lcTag = currentNode.nodeName.toLowerCase();\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n arrayPop(DOMPurify.removed);\n } catch (_) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n var shadowNode = void 0;\n var shadowIterator = _createIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg) {\n var body = void 0;\n var importedNode = void 0;\n var currentNode = void 0;\n var oldNode = void 0;\n var returnNode = void 0;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n if (!dirty) {\n dirty = '<!-->';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n // eslint-disable-next-line no-negated-condition\n if (typeof dirty.toString !== 'function') {\n throw typeErrorCreate('toString is not a function');\n } else {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n }\n }\n\n /* Check we can run. Otherwise fall back or ignore */\n if (!DOMPurify.isSupported) {\n if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {\n if (typeof dirty === 'string') {\n return window.toStaticHTML(dirty);\n }\n\n if (_isNode(dirty)) {\n return window.toStaticHTML(dirty.outerHTML);\n }\n }\n\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n\n if (IN_PLACE) ; else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : emptyHTML;\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Fix IE's strange behavior with manipulated textNodes #89 */\n if (currentNode.nodeType === 3 && currentNode === oldNode) {\n continue;\n }\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n\n oldNode = currentNode;\n }\n\n oldNode = null;\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (RETURN_DOM_IMPORT) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$$1, ' ');\n serializedHTML = stringReplace(serializedHTML, ERB_EXPR$$1, ' ');\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function (cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {string} tag Tag name of containing element.\n * @param {string} attr Attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n var lcTag = stringToLowerCase(tag);\n var lcName = stringToLowerCase(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n *\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n\n return DOMPurify;\n }\n\n var purify = createDOMPurify();\n\n return purify;\n\n}));\n//# sourceMappingURL=purify.js.map\n","export default {\n lang: 'af',\n dir: 'ltr',\n common: {\n ok: 'Spaar',\n cancel: 'Annuleer',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Klik om te verander vul kleur, verskuiwing klik om &#39;n beroerte kleur verander',\n zoom_level: 'Change zoom vlak',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Verandering vul kleur',\n stroke_color: 'Verandering beroerte kleur',\n stroke_style: 'Verandering beroerte dash styl',\n stroke_width: 'Verandering beroerte breedte',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Verandering rotasie-hoek',\n blur: 'Change gaussian blur value',\n opacity: 'Verander geselekteerde item opaciteit',\n circle_cx: 'Verandering sirkel se cx koördineer',\n circle_cy: 'Verandering sirkel se cy koördineer',\n circle_r: 'Verandering sirkel se radius',\n ellipse_cx: 'Verandering ellips se cx koördineer',\n ellipse_cy: 'Verander ellips se cy koördineer',\n ellipse_rx: 'Verandering ellips se x radius',\n ellipse_ry: 'Verander ellips se j radius',\n line_x1: 'Verandering lyn se vertrek x koördinaat',\n line_x2: 'Verandering lyn se eindig x koördinaat',\n line_y1: 'Verandering lyn se vertrek y koördinaat',\n line_y2: 'Verandering lyn se eindig y koördinaat',\n rect_height: 'Verandering reghoek hoogte',\n rect_width: 'Verandering reghoek breedte',\n corner_radius: 'Verandering Rechthoek Corner Radius',\n image_width: 'Verander prent breedte',\n image_height: 'Verandering prent hoogte',\n image_url: 'URL verander',\n node_x: 'Change node\\'s x coordinate',\n node_y: 'Change node\\'s y coordinate',\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Verander teks inhoud',\n font_family: 'Lettertipe verander Familie',\n font_size: 'Verandering Lettertipe Grootte',\n bold: 'Vetgedrukte teks',\n italic: 'Italic Text',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Verander agtergrondkleur / opaciteit',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Pas na inhoud',\n fit_to_all: 'Passing tot al inhoud',\n fit_to_canvas: 'Passing tot doek',\n fit_to_layer_content: 'Passing tot laag inhoud',\n fit_to_sel: 'Passing tot seleksie',\n align_relative_to: 'Align in verhouding tot ...',\n relativeTo: 'relatief tot:',\n page: 'bladsy',\n largest_object: 'grootste voorwerp',\n selected_objects: 'verkose voorwerpe',\n smallest_object: 'kleinste voorwerp',\n new_doc: 'Nuwe Beeld',\n open_doc: 'Open Beeld',\n export_img: 'Export',\n save_doc: 'Slaan Beeld',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Rig Middel',\n align_left: 'Links Regterkant',\n align_middle: 'Align Midde',\n align_right: 'Lijn regs uit',\n align_top: 'Align Top',\n mode_select: 'Select Gereedschap',\n mode_fhpath: 'Potlood tool',\n mode_line: 'Lyn Gereedskap',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-hand Rectangle',\n mode_ellipse: 'Ellips',\n mode_circle: 'Sirkel',\n mode_fhellipse: 'Gratis-Hand Ellips',\n mode_path: 'Poli Gereedskap',\n mode_text: 'Text Gereedskap',\n mode_image: 'Image Gereedskap',\n mode_zoom: 'Klik op die Gereedskap',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Boontoe',\n redo: 'Oordoen',\n tool_source: 'Wysig Bron',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Groep Elemente',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elemente',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Skuif na Bottom',\n move_top: 'Skuif na bo',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Spaar',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Verwyder Laag',\n move_down: 'Beweeg afbreek Down',\n new: 'Nuwe Layer',\n rename: 'Rename Layer',\n move_up: 'Beweeg afbreek Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Doek Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Kies gedefinieerde:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'ar',\n dir: 'rtl',\n common: {\n ok: 'حفظ',\n cancel: 'إلغاء',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'انقر لتغيير لون التعبئة ، تحولا مزدوجا فوق لتغيير لون السكتة الدماغية',\n zoom_level: 'تغيير مستوى التكبير',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'تغير لون التعبئة',\n stroke_color: 'تغير لون السكتة الدماغية',\n stroke_style: 'تغيير نمط السكتة الدماغية اندفاعة',\n stroke_width: 'تغيير عرض السكتة الدماغية',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'تغيير زاوية الدوران',\n blur: 'Change gaussian blur value',\n opacity: 'تغيير مختارة غموض البند',\n circle_cx: 'دائرة التغيير لتنسيق cx',\n circle_cy: \"Change circle's cy coordinate\",\n circle_r: 'التغيير في دائرة نصف قطرها',\n ellipse_cx: 'تغيير شكل البيضاوي cx تنسيق',\n ellipse_cy: 'تغيير شكل البيضاوي قبرصي تنسيق',\n ellipse_rx: 'تغيير شكل البيضاوي خ نصف قطرها',\n ellipse_ry: 'تغيير القطع الناقص في دائرة نصف قطرها ذ',\n line_x1: 'تغيير الخط لبدء تنسيق خ',\n line_x2: 'تغيير الخط لانهاء خ تنسيق',\n line_y1: 'تغيير الخط لبدء تنسيق ذ',\n line_y2: 'تغيير الخط لإنهاء تنسيق ذ',\n rect_height: 'تغيير المستطيل الارتفاع',\n rect_width: 'تغيير عرض المستطيل',\n corner_radius: 'تغيير مستطيل ركن الشعاع',\n image_width: 'تغيير صورة العرض',\n image_height: 'تغيير ارتفاع الصورة',\n image_url: 'تغيير العنوان',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'تغيير محتويات النص',\n font_family: 'تغيير الخط الأسرة',\n font_size: 'تغيير حجم الخط',\n bold: 'نص جريء',\n italic: 'مائل نص',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'تغير لون الخلفية / غموض',\n connector_no_arrow: 'No arrow',\n fitToContent: 'لائقا للمحتوى',\n fit_to_all: 'يصلح لجميع المحتويات',\n fit_to_canvas: 'يصلح لوحة زيتية على قماش',\n fit_to_layer_content: 'يصلح لطبقة المحتوى',\n fit_to_sel: 'يصلح لاختيار',\n align_relative_to: 'محاذاة النسبي ل ...',\n relativeTo: 'بالنسبة إلى:',\n page: 'الصفحة',\n largest_object: 'أكبر كائن',\n selected_objects: 'انتخب الأجسام',\n smallest_object: 'أصغر كائن',\n new_doc: 'صورة جديدة',\n open_doc: 'فتح الصورة',\n export_img: 'Export',\n save_doc: 'حفظ صورة',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'محاذاة القاع',\n align_center: 'مركز محاذاة',\n align_left: 'محاذاة إلى اليسار',\n align_middle: 'محاذاة الأوسط',\n align_right: 'محاذاة إلى اليمين',\n align_top: 'محاذاة الأعلى',\n mode_select: 'اختر أداة',\n mode_fhpath: 'أداة قلم رصاص',\n mode_line: 'خط أداة',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Rectangle',\n mode_ellipse: 'القطع الناقص',\n mode_circle: 'دائرة',\n mode_fhellipse: 'اليد الحرة البيضوي',\n mode_path: 'بولي أداة',\n mode_text: 'النص أداة',\n mode_image: 'الصورة أداة',\n mode_zoom: 'أداة تكبير',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'التراجع',\n redo: 'إعادته',\n tool_source: 'عدل المصدر',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'مجموعة عناصر',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'فك تجميع عناصر',\n docprops: 'خصائص المستند',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'الانتقال إلى أسفل',\n move_top: 'الانتقال إلى أعلى',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'حفظ',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'حذف طبقة',\n move_down: 'تحرك لأسفل طبقة',\n new: 'طبقة جديدة',\n rename: 'تسمية الطبقة',\n move_up: 'تحرك لأعلى طبقة',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'حدد سلفا:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'az',\n dir: 'ltr',\n common: {\n ok: 'OK',\n cancel: 'Cancel',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Click to change fill color, shift-click to change stroke color',\n zoom_level: 'Change zoom level',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Change fill color',\n stroke_color: 'Change stroke color',\n stroke_style: 'Change stroke dash style',\n stroke_width: 'Change stroke width',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Change rotation angle',\n blur: 'Change gaussian blur value',\n opacity: 'Change selected item opacity',\n circle_cx: \"Change circle's cx coordinate\",\n circle_cy: \"Change circle's cy coordinate\",\n circle_r: \"Change circle's radius\",\n ellipse_cx: \"Change ellipse's cx coordinate\",\n ellipse_cy: \"Change ellipse's cy coordinate\",\n ellipse_rx: \"Change ellipse's x radius\",\n ellipse_ry: \"Change ellipse's y radius\",\n line_x1: \"Change line's starting x coordinate\",\n line_x2: \"Change line's ending x coordinate\",\n line_y1: \"Change line's starting y coordinate\",\n line_y2: \"Change line's ending y coordinate\",\n rect_height: 'Change rectangle height',\n rect_width: 'Change rectangle width',\n corner_radius: 'Change Rectangle Corner Radius',\n image_width: 'Change image width',\n image_height: 'Change image height',\n image_url: 'Change URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Change text contents',\n font_family: 'Change Font Family',\n font_size: 'Change Font Size',\n bold: 'Bold Text',\n italic: 'Italic Text',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Change background color/opacity',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Fit to all content',\n fit_to_canvas: 'Fit to canvas',\n fit_to_layer_content: 'Fit to layer content',\n fit_to_sel: 'Fit to selection',\n align_relative_to: 'Align relative to ...',\n relativeTo: 'relative to:',\n page: 'page',\n largest_object: 'largest object',\n selected_objects: 'selected objects',\n smallest_object: 'smallest object',\n new_doc: 'New Image',\n open_doc: 'Open SVG',\n export_img: 'Export',\n save_doc: 'Save Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Align Center',\n align_left: 'Align Left',\n align_middle: 'Align Middle',\n align_right: 'Align Right',\n align_top: 'Align Top',\n mode_select: 'Select Tool',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Rectangle',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Text Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Undo',\n redo: 'Redo',\n tool_source: 'Edit Source',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Group Elements',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elements',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Move to Bottom',\n move_top: 'Move to Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Apply Changes',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Delete Layer',\n move_down: 'Move Layer Down',\n new: 'New Layer',\n rename: 'Rename Layer',\n move_up: 'Move Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Select predefined:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'be',\n dir: 'ltr',\n common: {\n ok: 'Захаваць',\n cancel: 'Адмена',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Націсніце для змены колеру залівання, Shift-Click змяніць обводка',\n zoom_level: 'Змяненне маштабу',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Змяненне колеру залівання',\n stroke_color: 'Змяненне колеру інсульт',\n stroke_style: 'Змяненне стылю інсульт працяжнік',\n stroke_width: 'Змены шырыня штрых',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Змены вугла павароту',\n blur: 'Change gaussian blur value',\n opacity: 'Старонка абранага пункта непразрыстасці',\n circle_cx: 'CX змене круга каардынаты',\n circle_cy: 'Змены гуртка CY каардынаты',\n circle_r: 'Старонка круга&#39;s радыус',\n ellipse_cx: 'Змены эліпса CX каардынаты',\n ellipse_cy: 'Змены эліпса CY каардынаты',\n ellipse_rx: 'Х змяненні эліпса радыюсам',\n ellipse_ry: 'Змены у эліпса радыюсам',\n line_x1: 'Змены лінія пачынае каардынаты х',\n line_x2: 'Змяненне за перыяд, скончыўся лінія каардынаты х',\n line_y1: 'Змены лінія пачынае Y каардынаты',\n line_y2: 'Змяненне за перыяд, скончыўся лінія Y каардынаты',\n rect_height: 'Змены прастакутнік вышынёй',\n rect_width: 'Змяненне шырыні прамавугольніка',\n corner_radius: 'Змены прастакутнік Corner Radius',\n image_width: 'Змены шырыня выявы',\n image_height: 'Змена вышыні выявы',\n image_url: 'Змяніць URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Змяненне зместу тэксту',\n font_family: 'Змены Сямейства шрыфтоў',\n font_size: 'Змяніць памер шрыфта',\n bold: 'Тоўсты тэкст',\n italic: 'Нахілены тэкст',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Змяненне колеру фону / непразрыстасць',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Па памеры ўтрымання',\n fit_to_all: 'Па памеру ўсе змесціва',\n fit_to_canvas: 'Памер палатна',\n fit_to_layer_content: 'По размеру слой ўтрымання',\n fit_to_sel: 'Выбар памеру',\n align_relative_to: 'Выраўнаваць па дачыненні да ...',\n relativeTo: 'па параўнанні з:',\n page: 'старонка',\n largest_object: 'найбуйнейшы аб&#39;ект',\n selected_objects: 'выбранымі аб&#39;ектамі',\n smallest_object: 'маленькі аб&#39;ект',\n new_doc: 'Новае выява',\n open_doc: 'Адкрыць выява',\n export_img: 'Export',\n save_doc: 'Захаваць малюнак',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Лінаваць па ніжнім краю',\n align_center: 'Лінаваць па цэнтру',\n align_left: 'Па левым краю',\n align_middle: 'Выраўнаваць Блізкага',\n align_right: 'Па правым краю',\n align_top: 'Лінаваць па верхнім краю',\n mode_select: 'Выберыце інструмент',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Свабоднай рукі Прастакутнік',\n mode_ellipse: 'Эліпс',\n mode_circle: 'Круг',\n mode_fhellipse: 'Свабоднай рукі Эліпс',\n mode_path: 'Poly Tool',\n mode_text: 'Тэкст Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Адмяніць',\n redo: 'Паўтор',\n tool_source: 'Змяніць зыходны',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Група элементаў',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Элементы Разгруппировать',\n docprops: 'Уласцівасці дакумента',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Перамясціць уніз',\n move_top: 'Перамясціць угару',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Захаваць',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Выдаліць слой',\n move_down: 'Перамясціць слой на',\n new: 'Новы слой',\n rename: 'Перайменаваць Слой',\n move_up: 'Перамяшчэнне слоя да',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Выберыце прадвызначэньні:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'bg',\n dir: 'ltr',\n common: {\n ok: 'Спасявам',\n cancel: 'Отказ',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Кликнете, за да промени попълнете цвят, на смени, кликнете да променят цвета си удар',\n zoom_level: 'Промяна на ниво на мащабиране',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Промяна попълнете цвят',\n stroke_color: 'Промяна на инсулт цвят',\n stroke_style: 'Промяна на стила удар тире',\n stroke_width: 'Промяна на ширината инсулт',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Промяна ъгъл на завъртане',\n blur: 'Change gaussian blur value',\n opacity: 'Промяна на избрания елемент непрозрачност',\n circle_cx: 'CX Промяна кръг на координатната',\n circle_cy: 'Промяна кръг&#39;s CY координира',\n circle_r: 'Промяна кръг радиус',\n ellipse_cx: 'Промяна на елипса&#39;s CX координира',\n ellipse_cy: 'Промяна на елипса&#39;s CY координира',\n ellipse_rx: 'Промяна на елипса&#39;s X радиус',\n ellipse_ry: 'Промяна на елипса&#39;s Y радиус',\n line_x1: 'Промяна на линия, започваща х координира',\n line_x2: 'Промяна на линията приключва х координира',\n line_y1: 'Промяна линия, започваща Y координира',\n line_y2: 'Промяна на линията приключва Y координира',\n rect_height: 'Промяна на правоъгълник височина',\n rect_width: 'Промяна на правоъгълник ширина',\n corner_radius: 'Промяна на правоъгълник Corner Radius',\n image_width: 'Промяна на изображението ширина',\n image_height: 'Промяна на изображението височина',\n image_url: 'Промяна на URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Промяна на текст съдържание',\n font_family: 'Промяна на шрифта Семейство',\n font_size: 'Промени размера на буквите',\n bold: 'Получер текст',\n italic: 'Курсив текст',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Промяна на цвета на фона / непрозрачност',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit към съдържание',\n fit_to_all: 'Побери цялото съдържание',\n fit_to_canvas: 'Fit на платно',\n fit_to_layer_content: 'Fit да слой съдържание',\n fit_to_sel: 'Fit за подбор',\n align_relative_to: 'Привеждане в сравнение с ...',\n relativeTo: 'в сравнение с:',\n page: 'страница',\n largest_object: 'най-големият обект',\n selected_objects: 'избраните обекти',\n smallest_object: 'най-малката обект',\n new_doc: 'Ню Имидж',\n open_doc: 'Отворете изображението',\n export_img: 'Export',\n save_doc: 'Save Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Привеждане Отдолу',\n align_center: 'Подравняване в средата',\n align_left: 'Подравняване вляво',\n align_middle: 'Привеждане в Близкия',\n align_right: 'Подравняване надясно',\n align_top: 'Привеждане Топ',\n mode_select: 'Select Tool',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Свободен Употребявани правоъгълник',\n mode_ellipse: 'Елипса',\n mode_circle: 'Кръгът',\n mode_fhellipse: 'Свободен Употребявани Елипса',\n mode_path: 'Поли Tool',\n mode_text: 'Текст Оръдие',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Отмени',\n redo: 'Възстановяване',\n tool_source: 'Редактиране Източник',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Група Елементи',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Разгрупирай Елементи',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Премести надолу',\n move_top: 'Премести в началото',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Спасявам',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Изтриване на слой',\n move_down: 'Move слой надолу',\n new: 'Нов слой',\n rename: 'Преименуване Layer',\n move_up: 'Move Up Layer',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Изберете предварително:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'ca',\n dir: 'ltr',\n common: {\n ok: 'Salvar',\n cancel: 'Cancel',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Feu clic per canviar el color de farciment, shift-clic per canviar el color del traç',\n zoom_level: 'Canviar el nivell de zoom',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Canviar el color de farciment',\n stroke_color: 'Canviar el color del traç',\n stroke_style: 'Canviar estil de traç guió',\n stroke_width: 'Canviar l&#39;amplada del traç',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Canviar l&#39;angle de rotació',\n blur: 'Change gaussian blur value',\n opacity: 'Canviar la opacitat tema seleccionat',\n circle_cx: 'CX cercle Canvi de coordenades',\n circle_cy: 'Cercle Canvi CY coordinar',\n circle_r: 'Ràdio de cercle Canvi',\n ellipse_cx: 'Canviar lipse CX coordinar',\n ellipse_cy: 'Lipse Canvi CY coordinar',\n ellipse_rx: 'Ràdio x lipse Canvi',\n ellipse_ry: 'Ràdio i lipse Canvi',\n line_x1: 'Canviar la línia de partida de la coordenada x',\n line_x2: 'Canviar la línia d&#39;hores de coordenada x',\n line_y1: 'Canviar la línia de partida i de coordinar',\n line_y2: 'Canviar la línia d&#39;hores de coordenada',\n rect_height: 'Rectangle d&#39;alçada Canvi',\n rect_width: 'Ample rectangle Canvi',\n corner_radius: 'Canviar Rectangle Corner Radius',\n image_width: 'Amplada de la imatge Canvi',\n image_height: 'Canviar l&#39;altura de la imatge',\n image_url: 'Canviar URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Contingut del text',\n font_family: 'Canviar la font Família',\n font_size: 'Change Font Size',\n bold: 'Text en negreta',\n italic: 'Text en cursiva',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Color de fons / opacitat',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Ajustar al contingut',\n fit_to_all: 'Ajustar a tot el contingut',\n fit_to_canvas: 'Ajustar a la lona',\n fit_to_layer_content: 'Ajustar al contingut de la capa d&#39;',\n fit_to_sel: 'Ajustar a la selecció',\n align_relative_to: 'Alinear pel que fa a ...',\n relativeTo: 'en relació amb:',\n page: 'Pàgina',\n largest_object: 'objecte més gran',\n selected_objects: 'objectes escollits',\n smallest_object: 'objecte més petit',\n new_doc: 'Nova imatge',\n open_doc: 'Obrir imatge',\n export_img: 'Export',\n save_doc: 'Guardar imatge',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Alinear baix',\n align_center: 'Alinear al centre',\n align_left: 'Alinear a l&#39;esquerra',\n align_middle: 'Alinear Medi',\n align_right: 'Alinear a la dreta',\n align_top: 'Alinear a dalt',\n mode_select: 'Eina de selecció',\n mode_fhpath: 'Eina Llapis',\n mode_line: 'L&#39;eina',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Rectangle',\n mode_ellipse: 'Lipse',\n mode_circle: 'Cercle',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Eina de text',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Desfés',\n redo: 'Refer',\n tool_source: 'Font Edita',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Elements de Grup de',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Desagrupar elements',\n docprops: 'Propietats del document',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Mou al final',\n move_top: 'Mou al principi',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Salvar',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Eliminar capa',\n move_down: 'Mou la capa de Down',\n new: 'Nova capa',\n rename: 'Canvieu el nom de la capa',\n move_up: 'Mou la capa Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Seleccioneu predefinides:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'cs',\n dir: 'ltr',\n common: {\n ok: 'Uložit',\n cancel: 'Storno',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'šipka dolů',\n key_up: 'šipka nahoru',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Běží na'\n },\n ui: {\n toggle_stroke_tools: 'Zobrazit/schovat více možností',\n palette_info: 'Kliknutím změníte barvu výplně, kliknutím současně s klávesou shift změníte barvu čáry',\n zoom_level: 'Změna přiblížení',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Změnit ID elementu',\n fill_color: 'Změnit barvu výplně',\n stroke_color: 'Změnit barvu čáry',\n stroke_style: 'Změnit styl čáry',\n stroke_width: 'Změnit šířku čáry',\n pos_x: 'Změnit souřadnici X',\n pos_y: 'Změnit souřadnici Y',\n linecap_butt: 'Konec úsečky: přesný',\n linecap_round: 'Konec úsečky: zaoblený',\n linecap_square: 'Konec úsečky: s čtvercovým přesahem',\n linejoin_bevel: 'Styl napojení úseček: zkosené',\n linejoin_miter: 'Styl napojení úseček: ostré',\n linejoin_round: 'Styl napojení úseček: oblé',\n angle: 'Změnit úhel natočení',\n blur: 'Změnit rozostření',\n opacity: 'Změnit průhlednost objektů',\n circle_cx: 'Změnit souřadnici X středu kružnice',\n circle_cy: 'Změnit souřadnici Y středu kružnice',\n circle_r: 'Změnit poloměr kružnice',\n ellipse_cx: 'Změnit souřadnici X středu elipsy',\n ellipse_cy: 'Změnit souřadnici Y středu elipsy',\n ellipse_rx: 'Změnit poloměr X elipsy',\n ellipse_ry: 'Změnit poloměr Y elipsy',\n line_x1: 'Změnit počáteční souřadnici X úsečky',\n line_x2: 'Změnit koncovou souřadnici X úsečky',\n line_y1: 'Změnit počáteční souřadnici Y úsečky',\n line_y2: 'Změnit koncovou souřadnici X úsečky',\n rect_height: 'Změnit výšku obdélníku',\n rect_width: 'Změnit šířku obdélníku',\n corner_radius: 'Změnit zaoblení obdélníku',\n image_width: 'Změnit šířku dokumentu',\n image_height: 'Změnit výšku dokumentu',\n image_url: 'Změnit adresu URL',\n node_x: 'Změnit souřadnici X uzlu',\n node_y: 'Změnit souřadnici Y uzlu',\n seg_type: 'Změnit typ segmentu',\n straight_segments: 'úsečka',\n curve_segments: 'křivka',\n text_contents: 'Změnit text',\n font_family: 'Změnit font',\n font_size: 'Změnit velikost písma',\n bold: 'Tučně',\n italic: 'Kurzíva',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Hlavní menu',\n bkgnd_color_opac: 'Změnit barvu a průhlednost pozadí',\n connector_no_arrow: 'Bez šipky',\n fitToContent: 'přizpůsobit obsahu',\n fit_to_all: 'Přizpůsobit veškerému obsahu',\n fit_to_canvas: 'Přizpůsobit stránce',\n fit_to_layer_content: 'Přizpůsobit obsahu vrstvy',\n fit_to_sel: 'Přizpůsobit výběru',\n align_relative_to: 'Zarovnat relativně',\n relativeTo: 'relatativně k:',\n page: 'stránce',\n largest_object: 'největšímu objektu',\n selected_objects: 'zvoleným objektům',\n smallest_object: 'nejmenšímu objektu',\n new_doc: 'Nový dokument',\n open_doc: 'Otevřít dokument',\n export_img: 'Export',\n save_doc: 'Uložit dokument',\n import_doc: 'Importovat SVG',\n align_to_page: 'Zarovnat element na stránku',\n align_bottom: 'Zarovnat dolů',\n align_center: 'Zarovnat nastřed',\n align_left: 'Zarovnat doleva',\n align_middle: 'Zarovnat nastřed',\n align_right: 'Zarovnat doprava',\n align_top: 'Zarovnat nahoru',\n mode_select: 'Výběr a transformace objektů',\n mode_fhpath: 'Kresba od ruky',\n mode_line: 'Úsečka',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Obdélník volnou rukou',\n mode_ellipse: 'Elipsa',\n mode_circle: 'Kružnice',\n mode_fhellipse: 'Elipsa volnou rukou',\n mode_path: 'Křivka',\n mode_text: 'Text',\n mode_image: 'Obrázek',\n mode_zoom: 'Přiblížení',\n no_embed: 'POZOR: Obrázek nelze uložit s dokumentem. Bude zobrazován z adresáře, kde se nyní nachází.',\n undo: 'Zpět',\n redo: 'Znovu',\n tool_source: 'Upravovat SVG kód',\n wireframe_mode: 'Zobrazit jen kostru',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Seskupit objekty',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Objekt na křivku',\n reorient_path: 'Změna orientace křivky',\n ungroup: 'Zrušit seskupení',\n docprops: 'Vlastnosti dokumentu',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Vrstvu úplně dospodu',\n move_top: 'Vrstvu úplně nahoru',\n node_clone: 'Vložit nový uzel',\n node_delete: 'Ostranit uzel',\n node_link: 'Provázat ovládací body uzlu',\n add_subpath: 'Přidat další součást křivky',\n openclose_path: 'Otevřít/zavřít součást křivky',\n source_save: 'Uložit',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Vrstva',\n layers: 'Layers',\n del: 'Odstranit vrstvu',\n move_down: 'Přesunout vrstvu níž',\n new: 'Přidat vrstvu',\n rename: 'Přejmenovat vrstvu',\n move_up: 'Přesunout vrstvu výš',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Přesunout objekty do:',\n move_selected: 'Přesunout objekty do jiné vrstvy'\n },\n config: {\n image_props: 'Vlastnosti dokumentu',\n doc_title: 'Název',\n doc_dims: 'Vlastní velikost',\n included_images: 'Vložené obrázky',\n image_opt_embed: 'Vkládat do dokumentu',\n image_opt_ref: 'Jen odkazem',\n editor_prefs: 'Nastavení editoru',\n icon_size: 'Velikost ikon',\n language: 'Jazyk',\n background: 'Obrázek v pozadí editoru',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Pozor: obrázek v pozadí nebude uložen jako součást dokumentu.',\n icon_large: 'velké',\n icon_medium: 'střední',\n icon_small: 'malé',\n icon_xlarge: 'největší',\n select_predefined: 'vybrat předdefinovaný:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Nevhodná hodnota',\n noContentToFitTo: 'Vyberte oblast pro přizpůsobení',\n dupeLayerName: 'Taková vrstva už bohužel existuje',\n enterUniqueLayerName: 'Zadejte prosím jedinečné jméno pro vrstvu',\n enterNewLayerName: 'Zadejte prosím jméno pro novou vrstvu',\n layerHasThatName: 'Vrstva už se tak jmenuje',\n QmoveElemsToLayer: \"Opravdu chcete přesunout vybrané objekty do vrstvy '%s'?\",\n QwantToClear: 'Opravdu chcete smazat současný dokument?\\nHistorie změn bude také smazána.',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'Chyba v parsování zdrojového kódu SVG.\\nChcete se vrátit k původnímu?',\n QignoreSourceChanges: 'Opravdu chcete stornovat změny provedené v SVG kódu?',\n featNotSupported: 'Tato vlastnost ještě není k dispozici',\n enterNewImgURL: 'Vložte adresu URL, na které se nachází vkládaný obrázek',\n defsFailOnSave: 'POZOR: Kvůli nedokonalosti Vašeho prohlížeče se mohou některé části dokumentu špatně vykreslovat (mohou chybět barevné přechody nebo některé objekty). Po uložení dokumentu by se ale vše mělo zobrazovat správně.',\n loadingImage: 'Nahrávám obrázek ...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Mohou se vyskytnout následující problémy: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'cy',\n dir: 'ltr',\n common: {\n ok: 'Cadw',\n cancel: 'Canslo',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Cliciwch yma i lenwi newid lliw, sifft-cliciwch i newid lliw strôc',\n zoom_level: 'Newid lefel chwyddo',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Newid lliw llenwi',\n stroke_color: 'Newid lliw strôc',\n stroke_style: 'Newid arddull strôc diferyn',\n stroke_width: 'Lled strôc Newid',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Ongl cylchdro Newid',\n blur: 'Change gaussian blur value',\n opacity: 'Newid dewis Didreiddiad eitem',\n circle_cx: 'CX Newid cylch yn cydlynu',\n circle_cy: 'Newid cylch&#39;s cy gydgysylltu',\n circle_r: 'Newid radiws cylch yn',\n ellipse_cx: 'Newid Ellipse yn CX gydgysylltu',\n ellipse_cy: 'Newid Ellipse yn cydlynu cy',\n ellipse_rx: 'Radiws Newid Ellipse&#39;s x',\n ellipse_ry: 'Radiws Newid Ellipse yn y',\n line_x1: 'Newid llinell yn cychwyn x gydgysylltu',\n line_x2: 'Newid llinell yn diweddu x gydgysylltu',\n line_y1: 'Newid llinell ar y cychwyn yn cydlynu',\n line_y2: 'Newid llinell yn dod i ben y gydgysylltu',\n rect_height: 'Uchder petryal Newid',\n rect_width: 'Lled petryal Newid',\n corner_radius: 'Newid Hirsgwâr Corner Radiws',\n image_width: 'Lled delwedd Newid',\n image_height: 'Uchder delwedd Newid',\n image_url: 'Newid URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Cynnwys testun Newid',\n font_family: 'Newid Font Teulu',\n font_size: 'Newid Maint Ffont',\n bold: 'Testun Bras',\n italic: 'Italig Testun',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Newid lliw cefndir / Didreiddiad',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Ffit i Cynnwys',\n fit_to_all: 'Yn addas i bawb content',\n fit_to_canvas: 'Ffit i ofyn',\n fit_to_layer_content: 'Ffit cynnwys haen i',\n fit_to_sel: 'Yn addas at ddewis',\n align_relative_to: 'Alinio perthynas i ...',\n relativeTo: 'cymharol i:',\n page: 'tudalen',\n largest_object: 'gwrthrych mwyaf',\n selected_objects: 'gwrthrychau etholedig',\n smallest_object: 'lleiaf gwrthrych',\n new_doc: 'Newydd Delwedd',\n open_doc: 'Delwedd Agored',\n export_img: 'Export',\n save_doc: 'Cadw Delwedd',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Alinio Gwaelod',\n align_center: 'Alinio Center',\n align_left: 'Alinio Chwith',\n align_middle: 'Alinio Canol',\n align_right: 'Alinio Hawl',\n align_top: 'Alinio Top',\n mode_select: 'Dewiswch Offer',\n mode_fhpath: 'Teclyn pensil',\n mode_line: 'Llinell Offer',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Hand rhad ac am ddim Hirsgwâr',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Cylch',\n mode_fhellipse: 'Rhad ac am ddim Hand Ellipse',\n mode_path: 'Offer poly',\n mode_text: 'Testun Offer',\n mode_image: 'Offer Delwedd',\n mode_zoom: 'Offer Chwyddo',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Dadwneud',\n redo: 'Ail-wneud',\n tool_source: 'Golygu Ffynhonnell',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Elfennau Grŵp',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Elfennau Ungroup',\n docprops: 'Document Eiddo',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Symud i&#39;r Gwaelod',\n move_top: 'Symud i&#39;r Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Cadw',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Dileu Haen',\n move_down: 'Symud Haen i Lawr',\n new: 'Haen Newydd',\n rename: 'Ail-enwi Haen',\n move_up: 'Symud Haen Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Rhagosodol Dewis:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'da',\n dir: 'ltr',\n common: {\n ok: 'Gemme',\n cancel: 'Annuller',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Klik for at ændre fyldfarve, shift-klik for at ændre stregfarve',\n zoom_level: 'Skift zoomniveau',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Skift fyldfarve',\n stroke_color: 'Skift stregfarve',\n stroke_style: 'Skift slagtilfælde Dash stil',\n stroke_width: 'Skift slagtilfælde bredde',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Skift rotationsvinkel',\n blur: 'Change gaussian blur value',\n opacity: 'Skift valgte element opacitet',\n circle_cx: 'Skift cirklens cx koordinere',\n circle_cy: 'Skift cirklens cy koordinere',\n circle_r: 'Skift cirklens radius',\n ellipse_cx: 'Skift ellipse&#39;s cx koordinere',\n ellipse_cy: 'Skift ellipse&#39;s cy koordinere',\n ellipse_rx: 'Skift ellipse&#39;s x radius',\n ellipse_ry: 'Skift ellipse&#39;s y radius',\n line_x1: 'Skift linie&#39;s start x-koordinat',\n line_x2: 'Skift Line&#39;s slutter x-koordinat',\n line_y1: 'Skift linjens start y-koordinat',\n line_y2: 'Skift Line&#39;s slutter y-koordinat',\n rect_height: 'Skift rektangel højde',\n rect_width: 'Skift rektanglets bredde',\n corner_radius: 'Skift Rektangel Corner Radius',\n image_width: 'Skift billede bredde',\n image_height: 'Skift billede højde',\n image_url: 'Skift webadresse',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Skift tekst indhold',\n font_family: 'Skift Font Family',\n font_size: 'Skift skriftstørrelse',\n bold: 'Fed tekst',\n italic: 'Italic Text',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Skift baggrundsfarve / uigennemsigtighed',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Tilpas til indhold',\n fit_to_all: 'Passer til alt indhold',\n fit_to_canvas: 'Tilpas til lærred',\n fit_to_layer_content: 'Tilpas til lag indhold',\n fit_to_sel: 'Tilpas til udvælgelse',\n align_relative_to: 'Juster i forhold til ...',\n relativeTo: 'i forhold til:',\n page: 'side',\n largest_object: 'største objekt',\n selected_objects: 'valgte objekter',\n smallest_object: 'mindste objekt',\n new_doc: 'Nyt billede',\n open_doc: 'Open SVG',\n export_img: 'Export',\n save_doc: 'Gem billede',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Juster Bottom',\n align_center: 'Centrer',\n align_left: 'Venstrejusteret',\n align_middle: 'Juster Mellemøsten',\n align_right: 'Højrejusteret',\n align_top: 'Juster Top',\n mode_select: 'Select Tool',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Rektangel',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Cirkel',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Tekstværktøj',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Fortryd',\n redo: 'Redo',\n tool_source: 'Edit Source',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Gruppe Elements',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Opdel Elements',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Flyt til bund',\n move_top: 'Flyt til toppen',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Gemme',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Slet Layer',\n move_down: 'Flyt lag ned',\n new: 'New Layer',\n rename: 'Omdøb Layer',\n move_up: 'Flyt Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Vælg foruddefinerede:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'de',\n dir: 'ltr',\n common: {\n ok: 'OK',\n cancel: 'Abbrechen',\n key_backspace: 'Rücktaste',\n key_del: 'Löschen',\n key_down: 'nach unten',\n key_up: 'nach oben',\n more_opts: 'Mehr Optionen',\n url: 'URL',\n width: 'Breite',\n height: 'Höhe'\n },\n misc: {\n powered_by: 'powered by'\n },\n ui: {\n toggle_stroke_tools: 'Zeige/Verberge weitere Linien-Werkzeuge',\n palette_info: 'Klick zum Ändern der Füllfarbe, Shift-Klick zum Ändern der Linienfarbe',\n zoom_level: 'vergrößern',\n panel_drag: 'Nach links/rechts ziehen, um die Größe vom Seitenpanel zu ändern',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Element identifizieren',\n fill_color: 'Füllfarbe ändern',\n stroke_color: 'Linienfarbe ändern',\n stroke_style: 'Linienstil ändern',\n stroke_width: 'Linienbreite ändern',\n pos_x: 'Ändere die X-Koordinate',\n pos_y: 'Ändere die Y-Koordinate',\n linecap_butt: 'Form der Linienendung: Stumpf',\n linecap_round: 'Form der Linienendung: Rund',\n linecap_square: 'Form der Linienendung: Rechteckig',\n linejoin_bevel: 'Zusammentreffen von zwei Linien: abgeschrägte Kante',\n linejoin_miter: 'Zusammentreffen von zwei Linien: Gehrung',\n linejoin_round: 'Zusammentreffen von zwei Linien: Rund',\n angle: 'Drehwinkel ändern',\n blur: 'Ändere Wert des Gaußschen Weichzeichners',\n opacity: 'Opazität des ausgewählten Objekts ändern',\n circle_cx: 'Kreiszentrum (cx) ändern',\n circle_cy: 'Kreiszentrum (cy) ändern',\n circle_r: 'Kreisradius (r) ändern',\n ellipse_cx: 'Ellipsenzentrum (cx) ändern',\n ellipse_cy: 'Ellipsenzentrum (cy) ändern',\n ellipse_rx: 'Ellipsenradius (x) ändern',\n ellipse_ry: 'Ellipsenradius (y) ändern',\n line_x1: 'X-Koordinate des Linienanfangs ändern',\n line_x2: 'X-Koordinate des Linienendes ändern',\n line_y1: 'Y-Koordinate des Linienanfangs ändern',\n line_y2: 'Y-Koordinate des Linienendes ändern',\n rect_height: 'Höhe des Rechtecks ändern',\n rect_width: 'Breite des Rechtecks ändern',\n corner_radius: 'Eckenradius des Rechtecks ändern',\n image_width: 'Bildbreite ändern',\n image_height: 'Bildhöhe ändern',\n image_url: 'URL ändern',\n node_x: 'Ändere die X-Koordinate des Knoten',\n node_y: 'Ändere die Y-Koordinate des Knoten',\n seg_type: 'Ändere den Typ des Segments',\n straight_segments: 'Gerade',\n curve_segments: 'Kurve',\n text_contents: 'Textinhalt erstellen und bearbeiten',\n font_family: 'Schriftart wählen',\n font_size: 'Schriftgröße einstellen',\n bold: 'Fetter Text',\n italic: 'Kursiver Text',\n text_anchor_start: 'Den Text linksbündig ausrichten',\n text_anchor_middle: 'Den Text zentriert ausrichten',\n text_anchor_end: 'Den Text rechtsbündig ausrichten'\n },\n tools: {\n main_menu: 'Hauptmenü',\n bkgnd_color_opac: 'Hintergrundfarbe ändern / Opazität',\n connector_no_arrow: 'Kein Pfeil',\n fitToContent: 'An den Inhalt anpassen',\n fit_to_all: 'An gesamten Inhalt anpassen',\n fit_to_canvas: 'An die Zeichenfläche anpassen',\n fit_to_layer_content: 'An Inhalt der Ebene anpassen',\n fit_to_sel: 'An die Auswahl anpassen',\n align_relative_to: 'Relativ zu einem anderem Objekt ausrichten …',\n relativeTo: 'im Vergleich zu:',\n page: 'Seite',\n largest_object: 'größtes Objekt',\n selected_objects: 'gewählte Objekte',\n smallest_object: 'kleinstes Objekt',\n new_doc: 'Neues Bild',\n open_doc: 'Bild öffnen',\n export_img: 'Export',\n save_doc: 'Bild speichern',\n import_doc: 'Importiere SVG',\n align_to_page: 'Element an Seite ausrichten',\n align_bottom: 'Unten ausrichten',\n align_center: 'Zentriert ausrichten',\n align_left: 'Linksbündig ausrichten',\n align_middle: 'In der Mitte ausrichten',\n align_right: 'Rechtsbündig ausrichten',\n align_top: 'Oben ausrichten',\n mode_select: 'Objekte auswählen und verändern',\n mode_fhpath: 'Freihandlinien zeichnen',\n mode_line: 'Linien zeichnen',\n mode_rect: 'Rechteck-Werkzeug',\n mode_square: 'Quadrat-Werkzeug',\n mode_fhrect: 'Freihand-Rechteck',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Kreis',\n mode_fhellipse: 'Freihand-Ellipse',\n mode_path: 'Pfad zeichnen',\n mode_text: 'Text erstellen und bearbeiten',\n mode_image: 'Bild einfügen',\n mode_zoom: 'Zoomfaktor vergrößern oder verringern',\n no_embed: 'Hinweis: Dieses Bild kann nicht eingebettet werden. Eine Anzeige hängt von diesem Pfad ab.',\n undo: 'Rückgängig',\n redo: 'Wiederherstellen',\n tool_source: 'Quellcode bearbeiten',\n wireframe_mode: 'Drahtmodell-Modus',\n clone: 'Element(e) klonen',\n del: 'Element(e) löschen',\n group_elements: 'Element(e) gruppieren',\n make_link: 'Link erstellen',\n set_link_url: 'Link setzen (leer lassen zum Entfernen)',\n to_path: 'Gewähltes Objekt in einen Pfad konvertieren',\n reorient_path: 'Neuausrichtung des Pfades',\n ungroup: 'Gruppierung aufheben',\n docprops: 'Dokument-Eigenschaften',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Die gewählten Objekte nach ganz unten verschieben',\n move_top: 'Die gewählten Objekte nach ganz oben verschieben',\n node_clone: 'Klone den Knoten',\n node_delete: 'Lösche den Knoten',\n node_link: 'Gekoppelte oder separate Kontrollpunkte für die Bearbeitung des Pfades',\n add_subpath: 'Teilpfad hinzufügen',\n openclose_path: 'Öffne/Verbinde Unterpfad',\n source_save: 'Änderungen akzeptieren',\n cut: 'Ausschneiden',\n copy: 'Kopieren',\n paste: 'Einfügen',\n paste_in_place: 'Bei Originalposition einfügen',\n delete: 'Löschen',\n group: 'Gruppieren',\n move_front: 'Nach ganz oben verschieben',\n move_up: 'Hochschieben',\n move_down: 'Herunterschieben',\n move_back: 'Nach ganz unten verschieben'\n },\n layers: {\n layer: 'Ebene',\n layers: 'Ebenen',\n del: 'Ebene löschen',\n move_down: 'Ebene nach unten verschieben',\n new: 'Neue Ebene',\n rename: 'Ebene umbenennen',\n move_up: 'Ebene nach oben verschieben',\n dupe: 'Ebene duplizieren',\n merge_down: 'Nach unten zusammenführen',\n merge_all: 'Alle zusammenführen',\n move_elems_to: 'Verschiebe ausgewählte Objekte:',\n move_selected: 'Verschiebe ausgewählte Objekte auf eine andere Ebene'\n },\n config: {\n image_props: 'Bildeigenschaften',\n doc_title: 'Titel',\n doc_dims: 'Dimension der Zeichenfläche',\n included_images: 'Eingefügte Bilder',\n image_opt_embed: 'Daten einbetten (lokale Dateien)',\n image_opt_ref: 'Benutze die Dateireferenz',\n editor_prefs: 'Editor-Einstellungen',\n icon_size: 'Symbol-Abmessungen',\n language: 'Sprache',\n background: 'Editor-Hintergrund',\n editor_img_url: 'Bild-URL',\n editor_bg_note: 'Anmerkung: Der Hintergrund wird mit dem Bild nicht gespeichert.',\n icon_large: 'Groß',\n icon_medium: 'Mittel',\n icon_small: 'Klein',\n icon_xlarge: 'Sehr Groß',\n select_predefined: 'Auswahl einer vordefinierten:',\n units_and_rulers: 'Einheiten und Lineale',\n show_rulers: 'Zeige Lineale',\n base_unit: 'Basiseinheit:',\n grid: 'Gitternetz',\n snapping_onoff: 'Einrasten an/aus',\n snapping_stepsize: 'Einrastabstand:',\n grid_color: 'Gitterfarbe'\n },\n notification: {\n invalidAttrValGiven: 'Fehlerhafter Wert',\n noContentToFitTo: 'Kein Inhalt anzupassen',\n dupeLayerName: 'Eine Ebene hat bereits diesen Namen',\n enterUniqueLayerName: 'Verwenden Sie einen eindeutigen Namen für die Ebene',\n enterNewLayerName: 'Geben Sie bitte einen neuen Namen für die Ebene ein',\n layerHasThatName: 'Eine Ebene hat bereits diesen Namen',\n QmoveElemsToLayer: \"Verschiebe ausgewählte Objekte in die Ebene '%s'?\",\n QwantToClear: 'Möchten Sie die Zeichnung löschen?\\nDadurch wird auch die Rückgängig-Funktion zurückgesetzt!',\n QwantToOpen: 'Möchten Sie eine neue Datei öffnen?\\nDadurch wird auch die Rückgängig-Funktion zurückgesetzt!',\n QerrorsRevertToSource: 'Es gibt Parser-Fehler in der SVG-Quelle.\\nDie Original-SVG wiederherstellen?',\n QignoreSourceChanges: 'Sollen die Änderungen an der SVG-Quelle ignoriert werden?',\n featNotSupported: 'Diese Eigenschaft wird nicht unterstützt',\n enterNewImgURL: 'Geben Sie die URL für das neue Bild an',\n defsFailOnSave: 'Hinweis: Aufgrund eines Fehlers in Ihrem Browser kann dieses Bild falsch angezeigt werden (fehlende Gradienten oder Elemente). Es wird jedoch richtig angezeigt, sobald es gespeichert wird.',\n loadingImage: 'Bild wird geladen, bitte warten ...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Beachten Sie außerdem die folgenden Probleme: ',\n unsavedChanges: 'Es sind nicht-gespeicherte Änderungen vorhanden.',\n enterNewLinkURL: 'Geben Sie die neue URL ein',\n errorLoadingSVG: 'Fehler: Kann SVG-Daten nicht laden',\n URLLoadFail: 'Kann von dieser URL nicht laden',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'el',\n dir: 'ltr',\n common: {\n ok: 'Αποθηκεύω',\n cancel: 'Άκυρο',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Κάντε κλικ για να συμπληρώσετε την αλλαγή χρώματος, στροφή κλικ για να αλλάξετε το χρώμα εγκεφαλικό',\n zoom_level: 'Αλλαγή επίπεδο μεγέθυνσης',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Αλλαγή συμπληρώστε χρώμα',\n stroke_color: 'Αλλαγή χρώματος εγκεφαλικό',\n stroke_style: 'Αλλαγή στυλ παύλα εγκεφαλικό',\n stroke_width: 'Αλλαγή πλάτος γραμμής',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Αλλαγή γωνία περιστροφής',\n blur: 'Change gaussian blur value',\n opacity: 'Αλλαγή αδιαφάνεια επιλεγμένο σημείο',\n circle_cx: 'Cx Αλλαγή κύκλου συντονίζουν',\n circle_cy: 'Αλλαγή κύκλου cy συντονίζουν',\n circle_r: 'Αλλαγή ακτίνα κύκλου',\n ellipse_cx: 'Αλλαγή ellipse του CX συντονίζουν',\n ellipse_cy: 'Αλλαγή ellipse του cy συντονίζουν',\n ellipse_rx: 'X ακτίνα Αλλαγή ellipse του',\n ellipse_ry: 'Y ακτίνα Αλλαγή ellipse του',\n line_x1: 'Αλλαγή γραμμής εκκίνησης x συντονίζουν',\n line_x2: 'Αλλαγή γραμμής λήγει x συντονίζουν',\n line_y1: 'Αλλαγή γραμμής εκκίνησης y συντονίζουν',\n line_y2: 'Αλλαγή γραμμής λήγει y συντονίζουν',\n rect_height: 'Αλλαγή ύψος ορθογωνίου',\n rect_width: 'Αλλαγή πλάτους ορθογώνιο',\n corner_radius: 'Αλλαγή ορθογώνιο Corner Radius',\n image_width: 'Αλλαγή πλάτος εικόνας',\n image_height: 'Αλλαγή ύψος εικόνας',\n image_url: 'Αλλαγή URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Αλλαγή περιεχόμενο κειμένου',\n font_family: 'Αλλαγή γραμματοσειράς Οικογένεια',\n font_size: 'Αλλαγή μεγέθους γραμματοσειράς',\n bold: 'Bold Text',\n italic: 'Πλάγιους',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Αλλαγή χρώματος φόντου / αδιαφάνεια',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Ταιριάζει σε όλο το περιεχόμενο',\n fit_to_canvas: 'Προσαρμογή στο μουσαμά',\n fit_to_layer_content: 'Προσαρμογή στο περιεχόμενο στρώμα',\n fit_to_sel: 'Fit to επιλογή',\n align_relative_to: 'Στοίχιση σε σχέση με ...',\n relativeTo: 'σε σχέση με:',\n page: 'σελίδα',\n largest_object: 'μεγαλύτερο αντικείμενο',\n selected_objects: 'εκλέγεται αντικείμενα',\n smallest_object: 'μικρότερο αντικείμενο',\n new_doc: 'Νέα εικόνα',\n open_doc: 'Άνοιγμα εικόνας',\n export_img: 'Export',\n save_doc: 'Αποθήκευση εικόνας',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Στοίχισηκάτω',\n align_center: 'Στοίχισηστοκέντρο',\n align_left: 'Στοίχισηαριστερά',\n align_middle: 'Ευθυγράμμιση Μέση',\n align_right: 'Στοίχισηδεξιά',\n align_top: 'Στοίχισηπάνω',\n mode_select: 'Select Tool',\n mode_fhpath: 'Εργαλείομολυβιού',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Δωρεάν-Hand ορθογώνιο',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Κύκλος',\n mode_fhellipse: 'Δωρεάν-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Κείμενο Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Αναίρεση',\n redo: 'Redo',\n tool_source: 'Επεξεργασία Πηγή',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Ομάδα Στοιχεία',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Κατάργηση ομαδοποίησης Στοιχεία',\n docprops: 'Ιδιότητες εγγράφου',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Μετακίνηση προς τα κάτω',\n move_top: 'Μετακίνηση στην αρχή',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Αποθηκεύω',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Διαγραφήστρώματος',\n move_down: 'Μετακίνηση Layer Down',\n new: 'Νέο Layer',\n rename: 'Μετονομασία Layer',\n move_up: 'Μετακίνηση Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Επιλογή προκαθορισμένων:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'en',\n dir: 'ltr',\n common: {\n ok: 'OK',\n cancel: 'Cancel',\n key_backspace: 'Backspace',\n key_del: 'Del',\n key_down: 'Down',\n key_up: 'Up',\n more_opts: 'More options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Click to change fill color, shift-click to change stroke color',\n zoom_level: 'Change zoom level',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Change fill color',\n stroke_color: 'Change stroke color',\n stroke_style: 'Change stroke dash style',\n stroke_width: 'Change stroke width by 1, shift-click to change by 0.1',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Change rotation angle',\n blur: 'Change gaussian blur value',\n opacity: 'Change selected item opacity',\n circle_cx: \"Change circle's cx coordinate\",\n circle_cy: \"Change circle's cy coordinate\",\n circle_r: \"Change circle's radius\",\n ellipse_cx: \"Change ellipse's cx coordinate\",\n ellipse_cy: \"Change ellipse's cy coordinate\",\n ellipse_rx: \"Change ellipse's x radius\",\n ellipse_ry: \"Change ellipse's y radius\",\n line_x1: \"Change line's starting x coordinate\",\n line_x2: \"Change line's ending x coordinate\",\n line_y1: \"Change line's starting y coordinate\",\n line_y2: \"Change line's ending y coordinate\",\n rect_height: 'Change rectangle height',\n rect_width: 'Change rectangle width',\n corner_radius: 'Change Rectangle Corner Radius',\n image_width: 'Change image width',\n image_height: 'Change image height',\n image_url: 'Change URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Change text contents',\n font_family: 'Change Font Family',\n font_size: 'Change Font Size',\n bold: 'Bold Text [B]',\n italic: 'Italic Text [I]',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Change background color/opacity',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Fit to all content',\n fit_to_canvas: 'Fit to canvas',\n fit_to_layer_content: 'Fit to layer content',\n fit_to_sel: 'Fit to selection',\n align_relative_to: 'Align relative to ...',\n relativeTo: 'relative to:',\n page: 'page',\n largest_object: 'largest object',\n selected_objects: 'selected objects',\n smallest_object: 'smallest object',\n new_doc: 'New Image',\n open_doc: 'Open SVG',\n export_img: 'Export',\n save_doc: 'Save Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Align Center',\n align_left: 'Align Left',\n align_middle: 'Align Middle',\n align_right: 'Align Right',\n align_top: 'Align Top',\n mode_select: 'Select Tool',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Rectangle',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Text Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool [Ctrl+Up/Down]',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Undo [Z]',\n redo: 'Redo [Y]',\n tool_source: 'Edit Source [U]',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Duplicate Element(s) [D]',\n del: 'Delete Element(s) [Delete/Backspace]',\n group_elements: 'Group Elements [G]',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elements',\n docprops: 'Document Properties [D]',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Send to Back',\n move_top: 'Bring to Front',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Apply Changes',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Delete Layer',\n move_down: 'Move Layer Down',\n new: 'New Layer',\n rename: 'Rename Layer',\n move_up: 'Move Layer Up',\n dupe: 'Duplicate Layer...',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title:',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size:',\n language: 'Language:',\n background: 'Editor Background',\n editor_img_url: 'Image URL:',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Select predefined:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color:'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: 'Move selected elements to layer \\'%s\\'?',\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'es',\n dir: 'ltr',\n common: {\n ok: 'OK',\n cancel: 'Cancelar',\n key_backspace: 'retroceso',\n key_del: 'suprimir',\n key_down: 'abajo',\n key_up: 'arriba',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Mostrar/ocultar herramientas de trazo adicionales',\n palette_info: 'Haga clic para cambiar el color de relleno. Pulse Mayús y haga clic para cambiar el color del contorno.',\n zoom_level: 'Cambiar el nivel de zoom',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Cambiar el color de relleno',\n stroke_color: 'Cambiar el color del contorno',\n stroke_style: 'Cambiar el estilo del trazo del contorno',\n stroke_width: 'Cambiar el grosor del contorno',\n pos_x: 'Cambiar la posición horizontal X',\n pos_y: 'Cambiar la posición vertical Y',\n linecap_butt: 'Final de la línea: en el nodo',\n linecap_round: 'Final de la línea: redondeada',\n linecap_square: 'Final de la línea: cuadrada',\n linejoin_bevel: 'Unión: biselada',\n linejoin_miter: 'Unión: recta',\n linejoin_round: 'Unión: redondeada',\n angle: 'Cambiar ángulo de rotación',\n blur: 'Ajustar desenfoque gausiano',\n opacity: 'Cambiar la opacidad del objeto seleccionado',\n circle_cx: 'Cambiar la posición horizonral CX del círculo',\n circle_cy: 'Cambiar la posición vertical CY del círculo',\n circle_r: 'Cambiar el radio del círculo',\n ellipse_cx: 'Cambiar la posición horizontal CX de la elipse',\n ellipse_cy: 'Cambiar la posición vertical CY de la elipse',\n ellipse_rx: 'Cambiar el radio horizontal X de la elipse',\n ellipse_ry: 'Cambiar el radio vertical Y de la elipse',\n line_x1: 'Cambiar la posición horizontal X del comienzo de la línea',\n line_x2: 'Cambiar la posición horizontal X del final de la línea',\n line_y1: 'Cambiar la posición vertical Y del comienzo de la línea',\n line_y2: 'Cambiar la posición vertical Y del final de la línea',\n rect_height: 'Cambiar la altura del rectángulo',\n rect_width: 'Cambiar el ancho rectángulo',\n corner_radius: 'Cambiar el radio de las esquinas del rectángulo',\n image_width: 'Cambiar el ancho de la imagen',\n image_height: 'Cambiar la altura de la imagen',\n image_url: 'Modificar URL',\n node_x: 'Cambiar la posición horizontal X del nodo',\n node_y: 'Cambiar la posición vertical Y del nodo',\n seg_type: 'Cambiar el tipo de segmento',\n straight_segments: 'Recta',\n curve_segments: 'Curva',\n text_contents: 'Modificar el texto',\n font_family: 'Tipo de fuente',\n font_size: 'Tamaño de la fuente',\n bold: 'Texto en negrita',\n italic: 'Texto en cursiva',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Menú principal',\n bkgnd_color_opac: 'Cambiar color de fondo / opacidad',\n connector_no_arrow: 'Sin flecha',\n fitToContent: 'Ajustar al contenido',\n fit_to_all: 'Ajustar a todo el contenido',\n fit_to_canvas: 'Ajustar al lienzo',\n fit_to_layer_content: 'Ajustar al contenido de la capa',\n fit_to_sel: 'Ajustar a la selección',\n align_relative_to: 'Alinear con respecto a ...',\n relativeTo: 'en relación con:',\n page: 'Página',\n largest_object: 'El objeto más grande',\n selected_objects: 'Objetos seleccionados',\n smallest_object: 'El objeto más pequeño',\n new_doc: 'Nueva imagen',\n open_doc: 'Abrir imagen',\n export_img: 'Export',\n save_doc: 'Guardar imagen',\n import_doc: 'Importar un archivo SVG',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Alinear parte inferior',\n align_center: 'Centrar verticalmente',\n align_left: 'Alinear lado izquierdo',\n align_middle: 'Centrar horizontalmente',\n align_right: 'Alinear lado derecho',\n align_top: 'Alinear parte superior',\n mode_select: 'Herramienta de selección',\n mode_fhpath: 'Herramienta de lápiz',\n mode_line: 'Trazado de líneas',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Rectángulo a mano alzada',\n mode_ellipse: 'Elipse',\n mode_circle: 'Círculo',\n mode_fhellipse: 'Elipse a mano alzada',\n mode_path: 'Herramienta de trazado',\n mode_text: 'Insertar texto',\n mode_image: 'Insertar imagen',\n mode_zoom: 'Zoom',\n no_embed: 'NOTA: La imagen no puede ser integrada. El contenido mostrado dependerá de la imagen ubicada en esta ruta. ',\n undo: 'Deshacer',\n redo: 'Rehacer',\n tool_source: 'Editar código fuente',\n wireframe_mode: 'Modo marco de alambre',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Agrupar objetos',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convertir a trazado',\n reorient_path: 'Reorientar el trazado',\n ungroup: 'Desagrupar objetos',\n docprops: 'Propiedades del documento',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Mover abajo',\n move_top: 'Mover arriba',\n node_clone: 'Clonar nodo',\n node_delete: 'Suprimir nodo',\n node_link: 'Enlazar puntos de control',\n add_subpath: 'Añadir subtrazado',\n openclose_path: 'Open/close sub-path',\n source_save: 'Aplicar cambios',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Capa',\n layers: 'Layers',\n del: 'Suprimir capa',\n move_down: 'Mover la capa hacia abajo',\n new: 'Nueva capa',\n rename: 'Renombrar capa',\n move_up: 'Mover la capa hacia arriba',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Desplazar objetos a:',\n move_selected: 'Mover los objetos seleccionados a otra capa'\n },\n config: {\n image_props: 'Propiedades de la Imagen',\n doc_title: 'Título',\n doc_dims: 'Tamaño del lienzo',\n included_images: 'Imágenes integradas',\n image_opt_embed: 'Integrar imágenes en forma de datos (archivos locales)',\n image_opt_ref: 'Usar la referencia del archivo',\n editor_prefs: 'Preferencias del Editor',\n icon_size: 'Tamaño de los iconos',\n language: 'Idioma',\n background: 'Fondo del editor',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Nota: El fondo no se guardará junto con la imagen.',\n icon_large: 'Grande',\n icon_medium: 'Mediano',\n icon_small: 'Pequeño',\n icon_xlarge: 'Muy grande',\n select_predefined: 'Seleccionar predefinido:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Valor no válido',\n noContentToFitTo: 'No existe un contenido al que ajustarse.',\n dupeLayerName: '¡Ya existe una capa con este nombre!',\n enterUniqueLayerName: 'Introduzca otro nombre distinto para la capa.',\n enterNewLayerName: 'Introduzca el nuevo nombre de la capa.',\n layerHasThatName: 'El nombre introducido es el nombre actual de la capa.',\n QmoveElemsToLayer: \"¿Desplazar los elementos seleccionados a la capa '%s'?\",\n QwantToClear: '¿Desea borrar el dibujo?\\n¡El historial de acciones también se borrará!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'Existen errores sintácticos en su código fuente SVG.\\n¿Desea volver al código fuente SVG original?',\n QignoreSourceChanges: '¿Desea ignorar los cambios realizados sobre el código fuente SVG?',\n featNotSupported: 'Función no compatible.',\n enterNewImgURL: 'Introduzca la nueva URL de la imagen.',\n defsFailOnSave: 'NOTA: Debido a un fallo de su navegador, es posible que la imagen aparezca de forma incorrecta (ciertas gradaciones o elementos podría perderse). La imagen aparecerá en su forma correcta una vez guardada.',\n loadingImage: 'Cargando imagen. Espere, por favor.',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Existen además los problemas siguientes:',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'et',\n dir: 'ltr',\n common: {\n ok: 'Salvestama',\n cancel: 'Tühista',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Click muuta täitke värvi, Shift-nuppu, et muuta insult värvi',\n zoom_level: 'Muuda suumi taset',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Muuda täitke värvi',\n stroke_color: 'Muuda insult värvi',\n stroke_style: 'Muuda insult kriips stiil',\n stroke_width: 'Muuda insult laius',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Muuda Pöördenurk',\n blur: 'Change gaussian blur value',\n opacity: 'Muuda valitud elemendi läbipaistmatus',\n circle_cx: 'Muuda ringi&#39;s cx kooskõlastada',\n circle_cy: 'Muuda ringi&#39;s cy kooskõlastada',\n circle_r: 'Muuda ring on raadiusega',\n ellipse_cx: 'Muuda ellips&#39;s cx kooskõlastada',\n ellipse_cy: 'Muuda ellips&#39;s cy kooskõlastada',\n ellipse_rx: 'Muuda ellips&#39;s x raadius',\n ellipse_ry: 'Muuda ellips&#39;s y raadius',\n line_x1: 'Muuda rööbastee algab x-koordinaadi',\n line_x2: 'Muuda Line lõpeb x-koordinaadi',\n line_y1: 'Muuda rööbastee algab y-koordinaadi',\n line_y2: 'Muuda Line lõppenud y-koordinaadi',\n rect_height: 'Muuda ristküliku kõrgus',\n rect_width: 'Muuda ristküliku laius',\n corner_radius: 'Muuda ristkülik Nurgakabe Raadius',\n image_width: 'Muuda pilt laius',\n image_height: 'Muuda pilt kõrgus',\n image_url: 'Change URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Muuda teksti sisu',\n font_family: 'Muutke Kirjasinperhe',\n font_size: 'Change font size',\n bold: 'Rasvane kiri',\n italic: 'Kursiiv',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Muuda tausta värvi / läbipaistmatus',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Sobita kogu sisu',\n fit_to_canvas: 'Sobita lõuend',\n fit_to_layer_content: 'Sobita kiht sisu',\n fit_to_sel: 'Fit valiku',\n align_relative_to: 'Viia võrreldes ...',\n relativeTo: 'võrreldes:',\n page: 'lehekülg',\n largest_object: 'suurim objekt',\n selected_objects: 'valitud objektide',\n smallest_object: 'väikseim objekt',\n new_doc: 'Uus pilt',\n open_doc: 'Pildi avamine',\n export_img: 'Export',\n save_doc: 'Salvesta pilt',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Viia Bottom',\n align_center: 'Keskele joondamine',\n align_left: 'Vasakjoondus',\n align_middle: 'Viia Lähis -',\n align_right: 'Paremjoondus',\n align_top: 'Viia Üles',\n mode_select: 'Vali Tool',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Online-Hand Ristkülik',\n mode_ellipse: 'Ellips',\n mode_circle: 'Circle',\n mode_fhellipse: 'Online-Hand Ellips',\n mode_path: 'Path Tool',\n mode_text: 'Tekst Tool',\n mode_image: 'Pilt Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Undo',\n redo: 'Redo',\n tool_source: 'Muuda Allikas',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Rühma elemendid',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Lõhu Elements',\n docprops: 'Dokumendi omadused',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Liiguta alla',\n move_top: 'Liiguta üles',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Salvestama',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Kustuta Kiht',\n move_down: 'Liiguta kiht alla',\n new: 'Uus kiht',\n rename: 'Nimeta kiht',\n move_up: 'Liiguta kiht üles',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Valige eelmääratletud:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'fa',\n dir: 'rtl',\n common: {\n ok: '‫تأیید‬',\n cancel: '‫لغو‬',\n key_backspace: '‫پس بر ',\n key_del: '‫حذف ',\n key_down: '‫پایین ',\n key_up: '‫بالا ',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: '‫برای تغییر رنگ، کلیک کنید. برای تغییر رنگ لبه، کلید تبدیل (shift) را فشرده و کلیک کنید‬',\n zoom_level: '‫تغییر بزرگ نمایی‬',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: '‫تغییر رنگ‬',\n stroke_color: '‫تغییر رنگ لبه‬',\n stroke_style: '‫تغییر نقطه چین لبه‬',\n stroke_width: '‫تغییر عرض لبه‬',\n pos_x: '‫تغییر مختصات X',\n pos_y: '‫تغییر مختصات Y',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: '‫تغییر زاویه چرخش‬',\n blur: 'Change gaussian blur value',\n opacity: '‫تغییر تاری عنصر انتخاب شده‬',\n circle_cx: '‫تغییر مختصات cx دایره‬',\n circle_cy: '‫تغییر مختصات cy دایره‬',\n circle_r: '‫تغییر شعاع دایره‬',\n ellipse_cx: '‫تغییر مختصات cx بیضی‬',\n ellipse_cy: '‫تغییر مختصات cy بیضی‬',\n ellipse_rx: '‫تغییر شعاع rx بیضی‬',\n ellipse_ry: '‫تغییر شعاع ry بیضی‬',\n line_x1: '‫تغییر مختصات x آغاز خط‬',\n line_x2: '‫تغییر مختصات x پایان خط‬',\n line_y1: '‫تغییر مختصات y آغاز خط‬',\n line_y2: '‫تغییر مختصات y پایان خط‬',\n rect_height: '‫تغییر ارتفاع مستطیل‬',\n rect_width: '‫تغییر عرض مستطیل‬',\n corner_radius: '‫شعاع گوشه:',\n image_width: '‫تغییر عرض تصویر‬',\n image_height: '‫تغییر ارتفاع تصویر‬',\n image_url: '‫تغییر نشانی وب (url)',\n node_x: '‫تغییر مختصات x نقطه‬',\n node_y: '‫تغییر مختصات y نقطه‬',\n seg_type: '‫تغییر نوع قطعه (segment)',\n straight_segments: '‫مستقیم‬',\n curve_segments: '‫منحنی‬',\n text_contents: '‫تغییر محتویات متن‬',\n font_family: '‫تغییر خانواده قلم‬',\n font_size: '‫تغییر اندازه قلم‬',\n bold: '‫متن توپر ',\n italic: '‫متن کج ',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: '‫تغییر رنگ پس زمینه / تاری‬',\n connector_no_arrow: 'No arrow',\n fitToContent: '‫هم اندازه شدن با محتوا‬',\n fit_to_all: '‫هم اندازه شدن با همه محتویات‬',\n fit_to_canvas: '‫هم اندازه شدن با صفحه مجازی (بوم)',\n fit_to_layer_content: '‫هم اندازه شدن با محتوای لایه‬',\n fit_to_sel: '‫هم اندازه شدن با اشیاء انتخاب شده‬',\n align_relative_to: '‫تراز نسبت به ...',\n relativeTo: '‫نسبت به:',\n page: '‫صفحه‬',\n largest_object: '‫بزرگترین شئ‬',\n selected_objects: '‫اشیاء انتخاب شده‬',\n smallest_object: '‫کوچکترین شئ‬',\n new_doc: '‫تصویر جدید ',\n open_doc: '‫باز کردن تصویر ',\n export_img: 'Export',\n save_doc: '‫ذخیره تصویر ',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: '‫تراز پایین‬',\n align_center: '‫وسط چین‬',\n align_left: '‫چپ چین‬',\n align_middle: '‫تراز میانه‬',\n align_right: '‫راست چین‬',\n align_top: '‫تراز بالا‬',\n mode_select: '‫ابزار انتخاب ',\n mode_fhpath: '‫ابزار مداد ',\n mode_line: '‫ابزار خط ',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: '‫مستطیل با قابلیت تغییر پویا‬',\n mode_ellipse: '‫بیضی‬',\n mode_circle: '‫دایره‬',\n mode_fhellipse: '‫بیضی با قابلیت تغییر پویا‬',\n mode_path: '‫ابزار مسیر ',\n mode_text: '‫ابزار متن ',\n mode_image: '‫ابزار تصویر ',\n mode_zoom: '‫ابزار بزرگ نمایی ',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: '‫واگرد ',\n redo: '‫ازنو ',\n tool_source: '‫ویرایش منبع ',\n wireframe_mode: '‫حالت نمایش لبه ها ',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: '‫قرار دادن عناصر در گروه ',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: '‫تبدیل به مسیر‬',\n reorient_path: '‫جهت دهی مجدد مسیر‬',\n ungroup: '‫خارج کردن عناصر از گروه ',\n docprops: '‫مشخصات سند ',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: '‫انتقال به پایین ترین ',\n move_top: '‫انتقال به بالاترین ',\n node_clone: '‫ایجاد کپی از نقطه‬',\n node_delete: '‫حذف نقطه‬',\n node_link: '‫پیوند دادن نقاط کنترل‬',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: '‫اعمال تغییرات‬',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'حذف',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: '‫لایه‬',\n layers: 'Layers',\n del: '‫حذف لایه‬',\n move_down: '‫انتقال لایه به پایین‬',\n new: '‫لایه جدید‬',\n rename: '‫تغییر نام لایه‬',\n move_up: '‫انتقال لایه به بالا‬',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: '‫انتقال عناصر به:',\n move_selected: '‫انتقال عناصر انتخاب شده به یک لایه متفاوت‬'\n },\n config: {\n image_props: '‫مشخصات تصویر‬',\n doc_title: '‫عنوان‬',\n doc_dims: '‫ابعاد صفحه مجازی (بوم)',\n included_images: '‫تصاویر گنجانده شده‬',\n image_opt_embed: '‫داده های جای داده شده (پرونده های محلی)',\n image_opt_ref: '‫استفاده از ارجاع به پرونده‬',\n editor_prefs: '‫تنظیمات ویراستار‬',\n icon_size: '‫اندازه شمایل‬',\n language: '‫زبان‬',\n background: '‫پس زمینه ویراستار‬',\n editor_img_url: 'Image URL',\n editor_bg_note: '‫توجه: پس زمینه همراه تصویر ذخیره نخواهد شد.',\n icon_large: '‫بزرگ‬',\n icon_medium: '‫متوسط‬',\n icon_small: '‫کوچک‬',\n icon_xlarge: '‫خیلی بزرگ‬',\n select_predefined: '‫از پیش تعریف شده را انتخاب کنید:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: '‫مقدار داده شده نامعتبر است‬',\n noContentToFitTo: '‫محتوایی برای هم اندازه شدن وجود ندارد‬',\n dupeLayerName: '‫لایه ای با آن نام وجود دارد!',\n enterUniqueLayerName: '‫لطفا یک نام لایه یکتا انتخاب کنید‬',\n enterNewLayerName: '‫لطفا نام لایه جدید را وارد کنید‬',\n layerHasThatName: '‫لایه از قبل آن نام را دارد‬',\n QmoveElemsToLayer: \"‫عناصر انتخاب شده به لایه '%s' منتقل شوند؟‬\",\n QwantToClear: '‫آیا مطمئن هستید که می خواهید نقاشی را پاک کنید؟\\nاین عمل باعث حذف تاریخچه واگرد شما خواهد شد!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: '‫در منبع SVG شما خطاهای تجزیه (parse) وجود داشت.\\nبه منبع SVG اصلی بازگردانده شود؟‬',\n QignoreSourceChanges: '‫تغییرات اعمال شده در منبع SVG نادیده گرفته شوند؟‬',\n featNotSupported: '‫این ویژگی پشتیبانی نشده است‬',\n enterNewImgURL: '‫نشانی وب (url) تصویر جدید را وارد کنید‬',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'fi',\n dir: 'ltr',\n common: {\n ok: 'Tallentaa',\n cancel: 'Peruuta',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Klikkaa muuttaa täyttöväri, Shift-click vaihtaa aivohalvauksen väriä',\n zoom_level: 'Muuta suurennustaso',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Muuta täyttöväri',\n stroke_color: 'Muuta aivohalvaus väri',\n stroke_style: 'Muuta aivohalvaus Dash tyyli',\n stroke_width: 'Muuta aivohalvaus leveys',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Muuta kiertokulma',\n blur: 'Change gaussian blur value',\n opacity: 'Muuta valitun kohteen läpinäkyvyys',\n circle_cx: 'Muuta Circlen CX koordinoida',\n circle_cy: 'Muuta Circlen CY koordinoida',\n circle_r: 'Muuta ympyrän säde',\n ellipse_cx: 'Muuta ellipsi&#39;s CX koordinoida',\n ellipse_cy: 'Muuta ellipsi&#39;s CY koordinoida',\n ellipse_rx: 'Muuta ellipsi&#39;s x säde',\n ellipse_ry: 'Muuta ellipsi n y säde',\n line_x1: 'Muuta Linen alkaa x-koordinaatti',\n line_x2: 'Muuta Linen päättyy x koordinoida',\n line_y1: 'Muuta Linen alkaa y-koordinaatti',\n line_y2: 'Muuta Linen päättyy y koordinoida',\n rect_height: 'Muuta suorakaiteen korkeus',\n rect_width: 'Muuta suorakaiteen leveys',\n corner_radius: 'Muuta suorakaide Corner Säde',\n image_width: 'Muuta kuvan leveys',\n image_height: 'Muuta kuvan korkeus',\n image_url: 'Muuta URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Muuta tekstin sisältö',\n font_family: 'Muuta Font Family',\n font_size: 'Muuta fontin kokoa',\n bold: 'Lihavoitu teksti',\n italic: 'Kursivoitu',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Vaihda taustaväri / sameuden',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Sovita Content',\n fit_to_all: 'Sovita kaikki content',\n fit_to_canvas: 'Sovita kangas',\n fit_to_layer_content: 'Sovita kerros sisältöön',\n fit_to_sel: 'Sovita valinta',\n align_relative_to: 'Kohdista suhteessa ...',\n relativeTo: 'suhteessa:',\n page: 'sivulta',\n largest_object: 'Suurin kohde',\n selected_objects: 'valittujen objektien',\n smallest_object: 'pienin kohde',\n new_doc: 'Uusi kuva',\n open_doc: 'Avaa kuva',\n export_img: 'Export',\n save_doc: 'Save Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Keskitä',\n align_left: 'Tasaa vasemmalle',\n align_middle: 'Kohdista Lähi',\n align_right: 'Tasaa oikealle',\n align_top: 'Kohdista Top',\n mode_select: 'Valitse työkalu',\n mode_fhpath: 'Kynätyökalu',\n mode_line: 'Viivatyökalulla',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand suorakaide',\n mode_ellipse: 'Soikion',\n mode_circle: 'Ympyrään',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Työkalua',\n mode_image: 'Image Tool',\n mode_zoom: 'Suurennustyökalu',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Kumoa',\n redo: 'Tulppaamalla ilmakanavan',\n tool_source: 'Muokkaa lähdekoodipaketti',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Tuoteryhmään Elements',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elements',\n docprops: 'Asiakirjan ominaisuudet',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Move to Bottom',\n move_top: 'Move to Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Tallentaa',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Poista Layer',\n move_down: 'Siirrä Layer alas',\n new: 'New Layer',\n rename: 'Nimeä Layer',\n move_up: 'Siirrä Layer',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Valitse ennalta:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: \"Retrieving '%s' ...\",\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'fr',\n dir: 'ltr',\n common: {\n ok: 'OK',\n cancel: 'Annuler',\n key_backspace: 'Retour Arr.',\n key_del: 'Suppr.',\n key_down: 'Bas',\n key_up: 'Haut',\n more_opts: \"Plus d'options\",\n url: 'URL',\n width: 'Largeur',\n height: 'Hauteur'\n },\n misc: {\n powered_by: 'Propulsé par'\n },\n ui: {\n toggle_stroke_tools: \"Montrer/cacher plus d'outils de contour\",\n palette_info: 'Cliquer pour changer la couleur de remplissage, Maj+clic pour changer la couleur de contour',\n zoom_level: 'Changer le niveau de zoom',\n panel_drag: 'Tirer vers la gauche/droite pour redimensionner le panneau',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: \"Identifier l'élément\",\n fill_color: 'Changer la couleur de remplissage',\n stroke_color: 'Changer la couleur du contour',\n stroke_style: 'Changer le style du contour',\n stroke_width: 'Changer la largeur du contour de 1, Maj+clic pour changer la largeur de 0,1',\n pos_x: \"Changer l'abscisse (coordonnée X)\",\n pos_y: \"Changer l'ordonnée (coordonnée Y)\",\n linecap_butt: 'Terminaison : Sur le nœud',\n linecap_round: 'Terminaison : Arrondie',\n linecap_square: 'Terminaison : Carrée',\n linejoin_bevel: 'Raccord : Biseauté',\n linejoin_miter: 'Raccord : Droit',\n linejoin_round: 'Raccord : Arrondi',\n angle: \"Changer l'angle de rotation\",\n blur: 'Changer la valeur du flou gaussien',\n opacity: \"Changer l'opacité de l'élément sélectionné\",\n circle_cx: 'Changer la position horizontale cx du cercle',\n circle_cy: 'Changer la position verticale cy du cercle',\n circle_r: 'Changer le rayon du cercle',\n ellipse_cx: \"Changer la position horizontale cx de l'ellipse\",\n ellipse_cy: \"Changer la position verticale cy de l'ellipse\",\n ellipse_rx: \"Changer le rayon horizontal x de l'ellipse\",\n ellipse_ry: \"Changer le rayon vertical y de l'ellipse\",\n line_x1: 'Changer la position horizontale x de début de la ligne',\n line_x2: 'Changer la position horizontale x de fin de la ligne',\n line_y1: 'Changer la position verticale y de début de la ligne',\n line_y2: 'Changer la position verticale y de fin de la ligne',\n rect_height: 'Changer la hauteur du rectangle',\n rect_width: 'Changer la largeur du rectangle',\n corner_radius: 'Changer le rayon des coins du rectangle',\n image_width: \"Changer la largeur de l'image\",\n image_height: \"Changer la hauteur de l'image\",\n image_url: \"Modifier l'URL\",\n node_x: 'Changer la positon horizontale x du nœud',\n node_y: 'Changer la position verticale y du nœud',\n seg_type: 'Changer le type du segment',\n straight_segments: 'Droit',\n curve_segments: 'Courbe',\n text_contents: 'Changer le contenu du texte',\n font_family: 'Changer la famille de police',\n font_size: 'Changer la taille de la police',\n bold: 'Texte en gras',\n italic: 'Texte en italique',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Menu principal',\n bkgnd_color_opac: \"Changer la couleur d'arrière-plan/l'opacité\",\n connector_no_arrow: 'Sans flèches',\n fitToContent: 'Ajuster au contenu',\n fit_to_all: \"Ajuster à l'ensemble du contenu\",\n fit_to_canvas: 'Ajuster au canevas',\n fit_to_layer_content: 'Ajuster au contenu du calque',\n fit_to_sel: 'Ajuster à la sélection',\n align_relative_to: 'Aligner par rapport à…',\n relativeTo: 'par rapport à :',\n page: 'page',\n largest_object: 'objet le plus gros',\n selected_objects: 'objets sélectionnés',\n smallest_object: 'objet le plus petit',\n new_doc: 'Nouvelle image',\n open_doc: 'Ouvrir une image SVG',\n export_img: 'Exporter',\n save_doc: \"Enregistrer l'image\",\n import_doc: 'Importer une image',\n align_to_page: \"Aligner l'élément à la page\",\n align_bottom: 'Aligner en bas',\n align_center: 'Centrer verticalement',\n align_left: 'Aligner à gauche',\n align_middle: 'Centrer horizontalement',\n align_right: 'Aligner à droite',\n align_top: 'Aligner en haut',\n mode_select: 'Outil de sélection',\n mode_fhpath: 'Crayon à main levée',\n mode_line: 'Tracer des lignes',\n mode_rect: 'Outil rectangle',\n mode_square: 'Outil carré',\n mode_fhrect: 'Rectangle à main levée',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Cercle',\n mode_fhellipse: 'Ellipse à main levée',\n mode_path: 'Outil chemin',\n mode_text: 'Outil texte',\n mode_image: 'Outil image',\n mode_zoom: 'Zoom',\n no_embed: 'NOTE : Cette image ne peut pas être incorporée. Elle sera chargée à cette adresse',\n undo: 'Annuler',\n redo: 'Restaurer',\n tool_source: 'Modifier la source',\n wireframe_mode: 'Mode Fil de fer',\n clone: 'Cloner élément(s)',\n del: 'Supprimer élément(s)',\n group_elements: 'Grouper les éléments',\n make_link: 'Créer un hyperlien',\n set_link_url: \"Définir l'URL du lien (laisser vide pour supprimer)\",\n to_path: 'Convertir en chemin',\n reorient_path: 'Réorienter le chemin',\n ungroup: 'Dégrouper les éléments',\n docprops: 'Propriétés du document',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Déplacer vers le bas',\n move_top: 'Déplacer vers le haut',\n node_clone: 'Cloner le nœud',\n node_delete: 'Supprimer le nœud',\n node_link: 'Rendre les points de contrôle solidaires',\n add_subpath: 'Ajouter un tracé secondaire',\n openclose_path: 'Ouvrir/fermer le sous-chemin',\n source_save: 'Appliquer les modifications',\n cut: 'Couper',\n copy: 'Copier',\n paste: 'Coller',\n paste_in_place: 'Coller sur place',\n delete: 'Supprimer',\n group: 'Grouper',\n move_front: 'Placer au premier plan',\n move_up: \"Avancer d'un plan\",\n move_down: \"Reculer d'un plan\",\n move_back: 'Placer au fond'\n },\n layers: {\n layer: 'Calque',\n layers: 'Calques',\n del: 'Supprimer le calque',\n move_down: 'Descendre le calque',\n new: 'Nouveau calque',\n rename: 'Renommer le calque',\n move_up: 'Monter le calque',\n dupe: 'Dupliquer le calque',\n merge_down: 'Fusionner vers le bas',\n merge_all: 'Tout fusionner',\n move_elems_to: 'Déplacer les éléments vers :',\n move_selected: 'Déplacer les éléments sélectionnés vers un autre calque'\n },\n config: {\n image_props: \"Propriétés de l'image\",\n doc_title: 'Titre',\n doc_dims: 'Dimensions du canevas',\n included_images: 'Images insérées',\n image_opt_embed: 'Incorporer les données des images (fichiers locaux)',\n image_opt_ref: \"Utiliser l'adresse des fichiers\",\n editor_prefs: \"Préférences de l'éditeur\",\n icon_size: 'Taille des icônes',\n language: 'Langue',\n background: \"Toile de fond de l'éditeur\",\n editor_img_url: 'Image URL',\n editor_bg_note: \"Note : La toile de fond ne sera pas sauvegardée avec l'image.\",\n icon_large: 'Grande',\n icon_medium: 'Moyenne',\n icon_small: 'Petite',\n icon_xlarge: 'Super grande',\n select_predefined: 'Sélectionner prédéfinis :',\n units_and_rulers: 'Unités et règles',\n show_rulers: 'Afficher les règles',\n base_unit: 'Unité de mesure :',\n grid: 'Grille',\n snapping_onoff: 'Ancrer oui/non',\n snapping_stepsize: \"Pas d'ancrage :\",\n grid_color: 'Couleur de la grille'\n },\n notification: {\n invalidAttrValGiven: 'Valeur fournie invalide',\n noContentToFitTo: \"Il n'y a pas de contenu auquel ajuster\",\n dupeLayerName: 'Un autre calque porte déjà ce nom !',\n enterUniqueLayerName: 'Veuillez entrer un nom (unique) pour le calque',\n enterNewLayerName: 'Veuillez entrer le nouveau nom du calque',\n layerHasThatName: 'Le calque porte déjà ce nom',\n QmoveElemsToLayer: 'Déplacer les éléments sélectionnés vers le calque « %s » ?',\n QwantToClear: \"Voulez-vous effacer le dessin ?\\nL'historique de vos actions sera également effacé !\",\n QwantToOpen: \"Voulez-vous ouvrir un nouveau document ?\\nVous perdrez l'historique de vos modifications !\",\n QerrorsRevertToSource: 'Il y a des erreurs de syntaxe dans votre code source SVG.\\nRestaurer le code source SVG antérieur aux modifications ?',\n QignoreSourceChanges: 'Ignorer les modifications faites à la source SVG ?',\n featNotSupported: 'Fonction non supportée',\n enterNewImgURL: \"Entrer la nouvelle URL de l'image\",\n defsFailOnSave: \"NOTE : En raison d'un bogue dans votre navigateur, il se peut que cette image ne soit pas correctement affichée (dégradés ou éléments manquants). Le souci sera néanmoins réglé à la sauvegarde.\",\n loadingImage: \"Chargement de l'image, veuillez patienter…\",\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Notez également les problèmes suivants : ',\n unsavedChanges: 'Il y a des changements non sauvegardés.',\n enterNewLinkURL: \"Entrez la nouvelle URL de l'hyperlien\",\n errorLoadingSVG: 'Erreur : Impossible de charger les données SVG',\n URLLoadFail: \"Impossible de charger l'URL\",\n retrieving: 'Récupération de « %s »…',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'fy',\n dir: 'ltr',\n common: {\n ok: 'Ok',\n cancel: 'Ôfbrekke',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'omleech',\n key_up: 'omheech',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Klik om de folkleur te feroarjen, shift-klik om de linekleur te feroarjen.',\n zoom_level: 'Yn-/útzoome',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Folkleur oanpasse',\n stroke_color: 'Linekleur oanpasse',\n stroke_style: 'Linestijl oanpasse',\n stroke_width: 'Linebreedte oanpasse',\n pos_x: 'X-koördinaat oanpasse',\n pos_y: 'Y-koördinaat oanpasse',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Draaie',\n blur: 'Change gaussian blur value',\n opacity: 'Trochsichtigens oanpasse',\n circle_cx: \"Feroarje it X-koördinaat fan it middelpunt fan'e sirkel.\",\n circle_cy: \"Feroarje it Y-koördinaat fan it middelpunt fan'e sirkel.\",\n circle_r: 'Feroarje sirkelradius',\n ellipse_cx: \"Feroarje it X-koördinaat fan it middelpunt fan'e ellips.\",\n ellipse_cy: \"Feroarje it Y-koördinaat fan it middelpunt fan'e ellips.\",\n ellipse_rx: 'Feroarje ellips X radius',\n ellipse_ry: 'Feroarje ellips Y radius',\n line_x1: \"Feroarje start X koördinaat fan'e line\",\n line_x2: \"Feroarje ein X koördinaat fan'e line\",\n line_y1: \"Feroarje start Y koördinaat fan'e line\",\n line_y2: \"Feroarje ein Y koördinaat fan'e line\",\n rect_height: 'Hichte rjochthoeke oanpasse',\n rect_width: 'Breedte rjochthoeke oanpasse',\n corner_radius: 'Hoekeradius oanpasse',\n image_width: 'Breedte ôfbielding oanpasse',\n image_height: 'Hichte ôfbielding oanpasse',\n image_url: 'URL oanpasse',\n node_x: 'X-koördinaat knooppunt oanpasse',\n node_y: 'Y-koördinaat knooppunt oanpasse',\n seg_type: 'Segmenttype oanpasse',\n straight_segments: 'Rjocht',\n curve_segments: 'Bûcht',\n text_contents: 'Tekst oanpasse',\n font_family: 'Lettertype oanpasse',\n font_size: 'Lettergrutte oanpasse',\n bold: 'Fet',\n italic: 'Skean',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Eftergrûnkleur/trochsichtigens oanpasse',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Passe op ynhâld',\n fit_to_all: 'Op alle ynhâld passe',\n fit_to_canvas: 'Op kanvas passe',\n fit_to_layer_content: 'Op laachynhâld passe',\n fit_to_sel: 'Op seleksje passe',\n align_relative_to: 'Útlijne relatyf oan...',\n relativeTo: 'Relatief tsjinoer:',\n page: 'Side',\n largest_object: 'Grutste ûnderdiel',\n selected_objects: 'Selektearre ûnderdielen',\n smallest_object: 'Lytste ûnderdiel',\n new_doc: 'Nije ôfbielding',\n open_doc: 'Ôfbielding iepenje',\n export_img: 'Export',\n save_doc: 'Ôfbielding bewarje',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Ûnder útlijne',\n align_center: 'Midden útlijne',\n align_left: 'Lofts útlijne',\n align_middle: 'Midden útlijne',\n align_right: 'Rjochts útlijne',\n align_top: 'Boppe útlijne',\n mode_select: 'Selektearje',\n mode_fhpath: 'Potlead',\n mode_line: 'Line',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Frije rjochthoeke',\n mode_ellipse: 'Ellips',\n mode_circle: 'Sirkel',\n mode_fhellipse: 'Frije ellips',\n mode_path: 'Paad',\n mode_text: 'Tekst',\n mode_image: 'Ôfbielding',\n mode_zoom: 'Zoom',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Ungedien meitjse',\n redo: \"Op 'e nij\",\n tool_source: 'Boarne oanpasse',\n wireframe_mode: 'Triemodel',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Ûnderdielen groepearje',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Omsette nei paad',\n reorient_path: 'Paad opnij orientearje',\n ungroup: 'Groepering opheffe',\n docprops: 'Dokuminteigenskippen',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Nei eftergrûn',\n move_top: 'Nei foargrûn',\n node_clone: 'Knooppunt duplisearje',\n node_delete: 'Knooppunt fuortsmite',\n node_link: 'Knooppunten keppelje',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Feroarings tapasse',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Laach',\n layers: 'Layers',\n del: 'Laach fuortsmite',\n move_down: 'Laach omleech bringe',\n new: 'Nije laach',\n rename: 'Laach omneame',\n move_up: 'Laach omheech bringe',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Ûnderdielen ferplaate nei:',\n move_selected: 'Selektearre ûnderdielen ferplaatse nei in oare laach'\n },\n config: {\n image_props: 'Ôfbieldingseigenskippen',\n doc_title: 'Titel',\n doc_dims: 'Kanvasgrutte',\n included_images: 'Ynslúten ôfbieldingen',\n image_opt_embed: 'Ynformaasje tafoege (lokale triemen)',\n image_opt_ref: 'Triemreferensje brûke',\n editor_prefs: 'Eigenskippen bewurker',\n icon_size: 'Ikoangrutte',\n language: 'Taal',\n background: 'Eftergrûn bewurker',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Let op: de eftergrûn wurd net mei de ôfbielding bewarre.',\n icon_large: 'Grut',\n icon_medium: 'Middel',\n icon_small: 'Lyts',\n icon_xlarge: 'Ekstra grut',\n select_predefined: 'Selektearje:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Ferkearde waarde jûn',\n noContentToFitTo: 'Gjin ynhâld om te passen',\n dupeLayerName: 'Der is al in laach mei dy namme!',\n enterUniqueLayerName: 'Type in unyke laachnamme',\n enterNewLayerName: 'Type in nije laachnamme',\n layerHasThatName: 'Laach hat dy namme al',\n QmoveElemsToLayer: \"Selektearre ûnderdielen ferplaatse nei '%s'?\",\n QwantToClear: 'Ôfbielding leechmeitsje? Dit sil ek de skiednis fuortsmite!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'Der wiene flaters yn de SVG-boarne.\\nWeromgean nei foarige SVG-boarne?',\n QignoreSourceChanges: 'Feroarings yn SVG-boarne negeare?',\n featNotSupported: 'Funksje wurdt net ûndersteund',\n enterNewImgURL: 'Jou de nije URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\'...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'ga',\n dir: 'ltr',\n common: {\n ok: 'Sábháil',\n cancel: 'Cealaigh',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Cliceáil chun athrú a líonadh dath, aistriú-cliceáil chun dath a athrú stróc',\n zoom_level: 'Athraigh súmáil leibhéal',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Athraigh an dath a líonadh',\n stroke_color: 'Dath stróc Athrú',\n stroke_style: 'Athraigh an stíl Fleasc stróc',\n stroke_width: 'Leithead stróc Athrú',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Uillinn rothlaithe Athrú',\n blur: 'Change gaussian blur value',\n opacity: 'Athraigh roghnaithe teimhneacht mír',\n circle_cx: 'Athraigh an ciorcal a chomhordú CX',\n circle_cy: 'Athraigh an ciorcal a chomhordú ga',\n circle_r: 'Athraigh an ciorcal&#39;s ga',\n ellipse_cx: 'Athraigh Éilips&#39;s CX a chomhordú',\n ellipse_cy: 'Athraigh an Éilips a chomhordú ga',\n ellipse_rx: 'Éilips Athraigh an gha x',\n ellipse_ry: 'Éilips Athraigh an gha y',\n line_x1: 'Athraigh an líne tosaigh a chomhordú x',\n line_x2: 'Athraigh an líne deireadh x chomhordú',\n line_y1: 'Athraigh an líne tosaigh a chomhordú y',\n line_y2: 'Athrú ar líne deireadh y chomhordú',\n rect_height: 'Airde dronuilleog Athrú',\n rect_width: 'Leithead dronuilleog Athrú',\n corner_radius: 'Athraigh Dronuilleog Cúinne na Ga',\n image_width: 'Leithead íomhá Athrú',\n image_height: 'Airde íomhá Athrú',\n image_url: 'Athraigh an URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Inneachar Athraigh téacs',\n font_family: 'Athraigh an Cló Teaghlaigh',\n font_size: 'Athraigh Clómhéid',\n bold: 'Trom Téacs',\n italic: 'Iodálach Téacs',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Dath cúlra Athraigh / teimhneacht',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Laghdaigh do gach ábhar',\n fit_to_canvas: 'Laghdaigh ar chanbhás',\n fit_to_layer_content: 'Laghdaigh shraith ábhar a',\n fit_to_sel: 'Laghdaigh a roghnú',\n align_relative_to: 'Ailínigh i gcomparáid leis ...',\n relativeTo: 'i gcomparáid leis:',\n page: 'leathanach',\n largest_object: 'réad is mó',\n selected_objects: 'réada tofa',\n smallest_object: 'lú réad',\n new_doc: 'Íomhá Nua',\n open_doc: 'Íomhá Oscailte',\n export_img: 'Export',\n save_doc: 'Sábháil Íomhá',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Cineál Bun',\n align_center: 'Ailínigh sa Lár',\n align_left: 'Ailínigh ar Chlé',\n align_middle: 'Cineál Middle',\n align_right: 'Ailínigh ar Dheis',\n align_top: 'Cineál Barr',\n mode_select: 'Roghnaigh Uirlis',\n mode_fhpath: 'Phionsail Uirlis',\n mode_line: 'Uirlis Líne',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Saor Hand Dronuilleog',\n mode_ellipse: 'Éilips',\n mode_circle: 'Ciorcal',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Téacs Uirlis',\n mode_image: 'Íomhá Uirlis',\n mode_zoom: 'Zúmáil Uirlis',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Cealaigh',\n redo: 'Athdhéan',\n tool_source: 'Cuir Foinse',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Eilimintí Grúpa',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Eilimintí Díghrúpáil',\n docprops: 'Doiciméad Airíonna',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Téigh go Bun',\n move_top: 'Téigh go Barr',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Sábháil',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Scrios Sraith',\n move_down: 'Bog Sraith Síos',\n new: 'Sraith Nua',\n rename: 'Athainmnigh Sraith',\n move_up: 'Bog Sraith Suas',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Roghnaigh réamhshainithe:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'gl',\n dir: 'ltr',\n common: {\n ok: 'Gardar',\n cancel: 'Cancelar',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Preme aquí para cambiar a cor de recheo, Shift-clic para cambiar a cor do curso',\n zoom_level: 'Cambiar o nivel de zoom',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Cambia-la cor de recheo',\n stroke_color: 'Cambiar a cor do curso',\n stroke_style: 'Modifica o estilo do trazo do curso',\n stroke_width: 'Cambiar o ancho do curso',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Cambiar o ángulo de xiro',\n blur: 'Change gaussian blur value',\n opacity: 'Cambia a opacidade elemento seleccionado',\n circle_cx: 'Cx Cambiar círculo de coordenadas',\n circle_cy: 'Círculo Cambio cy coordinar',\n circle_r: 'Cambiar círculo de raio',\n ellipse_cx: 'Cambiar elipse cx coordinar',\n ellipse_cy: 'Elipse Cambio cy coordinar',\n ellipse_rx: 'Raios X Change elipse',\n ellipse_ry: 'Radio y Change elipse',\n line_x1: 'Cambie a liña de partida coordenada x',\n line_x2: 'Cambie a liña acaba coordenada x',\n line_y1: 'Cambio na liña do recurso coordinada y',\n line_y2: 'Salto de liña acaba coordinada y',\n rect_height: 'Cambiar altura do rectángulo',\n rect_width: 'Cambiar a largo rectángulo',\n corner_radius: 'Cambiar Corner Rectangle Radius',\n image_width: 'Cambiar o ancho da imaxe',\n image_height: 'Cambiar altura da imaxe',\n image_url: 'Cambiar URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Cambiar o contido de texto',\n font_family: 'Cambiar fonte Familia',\n font_size: 'Mudar tamaño de letra',\n bold: 'Bold Text',\n italic: 'Texto en cursiva',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Mudar a cor de fondo / Opacidade',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Axustar ó contido',\n fit_to_all: 'Axustar a todo o contido',\n fit_to_canvas: 'Axustar a pantalla',\n fit_to_layer_content: 'Axustar o contido da capa de',\n fit_to_sel: 'Axustar a selección',\n align_relative_to: 'Aliñar en relación a ...',\n relativeTo: 'en relación ao:',\n page: 'Portada',\n largest_object: 'maior obxecto',\n selected_objects: 'obxectos elixidos',\n smallest_object: 'menor obxecto',\n new_doc: 'Nova Imaxe',\n open_doc: 'Abrir Imaxe',\n export_img: 'Export',\n save_doc: 'Gardar Imaxe',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align bottom',\n align_center: 'Centrar',\n align_left: 'Aliñar á Esquerda',\n align_middle: 'Aliñar Medio',\n align_right: 'Aliñar á Dereita',\n align_top: 'Align Top',\n mode_select: 'Seleccionar a ferramenta',\n mode_fhpath: 'Ferramenta Lapis',\n mode_line: 'Ferramenta Liña',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Rectangle',\n mode_ellipse: 'Elipse',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Ferramenta de Texto',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Desfacer',\n redo: 'Volver',\n tool_source: 'Fonte Editar',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Elementos do grupo',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Elementos Desagrupadas',\n docprops: 'Propriedades do Documento',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Move a Bottom',\n move_top: 'Move to Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Gardar',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Delete Layer',\n move_down: 'Move capa inferior',\n new: 'New Layer',\n rename: 'Rename Layer',\n move_up: 'Move Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Seleccione por defecto:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'he',\n dir: 'rtl',\n common: {\n ok: 'לשמור',\n cancel: 'ביטול',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'לחץ כדי לשנות צבע מילוי, לחץ על Shift-לשנות צבע שבץ',\n zoom_level: 'שינוי גודל תצוגה',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'שינוי צבע מילוי',\n stroke_color: 'שינוי צבע שבץ',\n stroke_style: 'דש שבץ שינוי סגנון',\n stroke_width: 'שינוי רוחב שבץ',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'שינוי זווית הסיבוב',\n blur: 'Change gaussian blur value',\n opacity: 'שינוי הפריט הנבחר אטימות',\n circle_cx: 'CX מעגל של שנה לתאם',\n circle_cy: 'מעגל שנה של cy לתאם',\n circle_r: 'מעגל שנה של רדיוס',\n ellipse_cx: 'שינוי של אליפסה CX לתאם',\n ellipse_cy: 'אליפסה שינוי של cy לתאם',\n ellipse_rx: 'אליפסה שינוי של רדיוס x',\n ellipse_ry: 'אליפסה שינוי של Y רדיוס',\n line_x1: 'שינוי קו ההתחלה של x לתאם',\n line_x2: 'שינוי קו הסיום של x לתאם',\n line_y1: 'שינוי קו ההתחלה של Y לתאם',\n line_y2: 'שינוי קו הסיום של Y לתאם',\n rect_height: 'שינוי גובה המלבן',\n rect_width: 'שינוי רוחב המלבן',\n corner_radius: 'לשנות מלבן פינת רדיוס',\n image_width: 'שינוי רוחב התמונה',\n image_height: 'שינוי גובה התמונה',\n image_url: 'שינוי כתובת',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'שינוי תוכן טקסט',\n font_family: 'שינוי גופן משפחה',\n font_size: 'שנה גודל גופן',\n bold: 'טקסט מודגש',\n italic: 'טקסט נטוי',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'שנה את צבע הרקע / אטימות',\n connector_no_arrow: 'No arrow',\n fitToContent: 'התאם תוכן',\n fit_to_all: 'התאם התכנים',\n fit_to_canvas: 'התאם בד',\n fit_to_layer_content: 'מתאים לתוכן שכבת',\n fit_to_sel: 'התאם הבחירה',\n align_relative_to: 'יישור ביחס ...',\n relativeTo: 'יחסית:',\n page: 'דף',\n largest_object: 'האובייקט הגדול',\n selected_objects: 'elected objects',\n smallest_object: 'הקטן אובייקט',\n new_doc: 'תמונה חדשה',\n open_doc: 'פתח תמונה',\n export_img: 'Export',\n save_doc: 'שמור תמונה',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'יישור תחתון',\n align_center: 'ישור לאמצע',\n align_left: 'יישור לשמאל',\n align_middle: 'יישור התיכון',\n align_right: 'יישור לימין',\n align_top: 'יישור למעלה',\n mode_select: 'Select Tool',\n mode_fhpath: 'כלי העיפרון',\n mode_line: 'כלי הקו',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand מלבן',\n mode_ellipse: 'אליפסה',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free-Hand אליפסה',\n mode_path: 'Path Tool',\n mode_text: 'כלי טקסט',\n mode_image: 'כלי תמונה',\n mode_zoom: 'זום כלי',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'בטל',\n redo: 'בצע שוב',\n tool_source: 'מקור ערוך',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'אלמנטים הקבוצה',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'אלמנטים פרק קבוצה',\n docprops: 'מאפייני מסמך',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'הזז למטה',\n move_top: 'עבור לראש הדף',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'לשמור',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'מחיקת שכבה',\n move_down: 'הזז למטה שכבה',\n new: 'שכבהחדשה',\n rename: 'שינוי שם שכבה',\n move_up: 'העבר שכבה Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'בחר מוגדרים מראש:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'hi',\n dir: 'ltr',\n common: {\n ok: 'बचाना',\n cancel: 'रद्द करें',\n key_backspace: 'बैकस्पेस',\n key_del: 'हटायें',\n key_down: 'नीचे',\n key_up: 'ऊपर',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'रंग बदलने पर क्लिक करें, बदलाव भरने के क्लिक करने के लिए स्ट्रोक का रंग बदलने के लिए',\n zoom_level: 'बदलें स्तर ज़ूम',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'बदलें का रंग भरना',\n stroke_color: 'बदलें स्ट्रोक रंग',\n stroke_style: 'बदलें स्ट्रोक डेश शैली',\n stroke_width: 'बदलें स्ट्रोक चौड़ाई',\n pos_x: 'X समकक्ष बदलें ',\n pos_y: 'Y समकक्ष बदलें',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'बदलें रोटेशन कोण',\n blur: 'Change gaussian blur value',\n opacity: 'पारदर्शिता बदलें',\n circle_cx: 'बदल रहा है चक्र cx समन्वय',\n circle_cy: 'परिवर्तन चक्र cy समन्वय है',\n circle_r: 'बदल रहा है चक्र त्रिज्या',\n ellipse_cx: 'बदलें दीर्घवृत्त है cx समन्वय',\n ellipse_cy: 'बदलें दीर्घवृत्त cy समन्वय है',\n ellipse_rx: 'बदल रहा है दीर्घवृत्त x त्रिज्या',\n ellipse_ry: 'बदल रहा है दीर्घवृत्त y त्रिज्या',\n line_x1: 'बदल रहा है लाइन x समन्वय शुरू',\n line_x2: 'बदल रहा है लाइन x समन्वय समाप्त',\n line_y1: 'बदलें रेखा y शुरू हो रहा है समन्वय',\n line_y2: 'बदलें रेखा y अंत है समन्वय',\n rect_height: 'बदलें आयत ऊंचाई',\n rect_width: 'बदलें आयत चौड़ाई',\n corner_radius: 'बदलें आयत कॉर्नर त्रिज्या',\n image_width: 'बदलें छवि चौड़ाई',\n image_height: 'बदलें छवि ऊँचाई',\n image_url: 'बदलें यूआरएल',\n node_x: 'नोड का x समकक्ष बदलें',\n node_y: 'नोड का y समकक्ष बदलें',\n seg_type: 'वर्ग प्रकार बदलें',\n straight_segments: 'सीधे वर्ग',\n curve_segments: 'घुमाव',\n text_contents: 'बदलें पाठ सामग्री',\n font_family: 'बदलें फ़ॉन्ट परिवार',\n font_size: 'फ़ॉन्ट का आकार बदलें',\n bold: 'मोटा पाठ',\n italic: 'इटैलिक पाठ',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'पृष्ठभूमि का रंग बदल / अस्पष्टता',\n connector_no_arrow: 'No arrow',\n fitToContent: 'सामग्री के लिए फिट',\n fit_to_all: 'सभी सामग्री के लिए फिट',\n fit_to_canvas: 'फिट कैनवास को',\n fit_to_layer_content: 'फिट परत सामग्री के लिए',\n fit_to_sel: 'चयन के लिए फिट',\n align_relative_to: 'संरेखित करें रिश्तेदार को ...',\n relativeTo: 'रिश्तेदार को:',\n page: 'पृष्ठ',\n largest_object: 'सबसे बड़ी वस्तु',\n selected_objects: 'निर्वाचित वस्तुओं',\n smallest_object: 'छोटी से छोटी वस्तु',\n new_doc: 'नई छवि',\n open_doc: 'छवि खोलें',\n export_img: 'Export',\n save_doc: 'सहेजें छवि',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'तलमेंपंक्तिबद्धकरें',\n align_center: 'मध्य में समंजित करें',\n align_left: ' पंक्तिबद्ध करें',\n align_middle: 'मध्य संरेखित करें',\n align_right: 'दायाँपंक्तिबद्धकरें',\n align_top: 'शीर्षमेंपंक्तिबद्धकरें',\n mode_select: 'उपकरण चुनें',\n mode_fhpath: 'पेंसिल उपकरण',\n mode_line: 'लाइन उपकरण',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'नि: शुल्क हाथ आयत',\n mode_ellipse: 'दीर्घवृत्त',\n mode_circle: 'वृत्त',\n mode_fhellipse: 'नि: शुल्क हाथ दीर्घवृत्त',\n mode_path: 'Path Tool',\n mode_text: 'पाठ उपकरण',\n mode_image: 'छवि उपकरण',\n mode_zoom: 'ज़ूम उपकरण',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'पूर्ववत करें',\n redo: 'फिर से करें',\n tool_source: 'स्रोत में बदलाव करें',\n wireframe_mode: 'रूपरेखा मोड',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'समूह तत्वों',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'पथ में बदलें',\n reorient_path: 'पथ को नई दिशा दें',\n ungroup: 'अंश को समूह से अलग करें',\n docprops: 'दस्तावेज़ गुण',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'नीचे ले जाएँ',\n move_top: 'ऊपर ले जाएँ',\n node_clone: 'नोड क्लोन',\n node_delete: 'नोड हटायें',\n node_link: 'कड़ी नियंत्रण बिंदु',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'बचाना',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'परत',\n layers: 'Layers',\n del: 'परत हटाएँ',\n move_down: 'परत नीचे ले जाएँ',\n new: 'नई परत',\n rename: 'परत का नाम बदलें',\n move_up: 'परत ऊपर ले जाएँ',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'अंश को ले जाएँ:',\n move_selected: 'चयनित अंश को दूसरी परत पर ले जाएँ'\n },\n config: {\n image_props: 'छवि के गुण',\n doc_title: 'शीर्षक',\n doc_dims: 'कैनवास आयाम',\n included_images: 'शामिल छवियाँ',\n image_opt_embed: 'एम्बेड डेटा (स्थानीय फ़ाइलें)',\n image_opt_ref: 'फाइल के संदर्भ का प्रयोग',\n editor_prefs: 'संपादक वरीयताएँ',\n icon_size: 'चिह्न का आकार',\n language: 'भाषा',\n background: 'संपादक पृष्ठभूमि',\n editor_img_url: 'Image URL',\n editor_bg_note: 'नोट: पृष्ठभूमि छवि के साथ नहीं बचायी जाएगी',\n icon_large: 'बड़ा',\n icon_medium: 'मध्यम',\n icon_small: 'छोटा',\n icon_xlarge: 'बहुत बड़ा',\n select_predefined: 'चुनें पूर्वनिर्धारित:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'अमान्य मूल्य',\n noContentToFitTo: 'कोई सामग्री फिट करने के लिए उपलब्ध नहीं',\n dupeLayerName: 'इस नाम कि परत पहले से मौजूद है !',\n enterUniqueLayerName: 'कृपया परत का एक अद्वितीय नाम डालें',\n enterNewLayerName: 'कृपया परत का एक नया नाम डालें',\n layerHasThatName: 'परत का पहले से ही यही नाम है',\n QmoveElemsToLayer: \"चयनित अंश को परत '%s' पर ले जाएँ ?\",\n QwantToClear: 'क्या आप छवि साफ़ करना चाहते हैं?\\nयह आपके उन्डू इतिहास को भी मिटा देगा!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'आपके एस.वी.जी. स्रोत में त्रुटियों थी.\\nक्या आप मूल एस.वी.जी स्रोत पर वापिस जाना चाहते हैं?',\n QignoreSourceChanges: 'एसवीजी स्रोत से लाये बदलावों को ध्यान न दें?',\n featNotSupported: 'सुविधा असमर्थित है',\n enterNewImgURL: 'नई छवि URL दर्ज करें',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'hr',\n dir: 'ltr',\n common: {\n ok: 'Spremiti',\n cancel: 'Odustani',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Kliknite promijeniti boju ispune, shift-click to promijeniti boju moždanog udara',\n zoom_level: 'Promjena razine zumiranja',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Promjena boje ispune',\n stroke_color: 'Promjena boje moždani udar',\n stroke_style: 'Promijeni stroke crtica stil',\n stroke_width: 'Promjena širine moždani udar',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Promijeni rotation angle',\n blur: 'Change gaussian blur value',\n opacity: 'Promjena odabrane stavke neprozirnost',\n circle_cx: 'Promjena krug&#39;s CX koordinirati',\n circle_cy: 'Cy Promijeni krug je koordinirati',\n circle_r: 'Promjena krug je radijusa',\n ellipse_cx: 'Promjena elipsa&#39;s CX koordinirati',\n ellipse_cy: 'Cy Promijeni elipsa je koordinirati',\n ellipse_rx: 'Promijeniti elipsa&#39;s x polumjer',\n ellipse_ry: 'Promjena elipsa&#39;s y polumjer',\n line_x1: 'Promijeni linija je početak x koordinatu',\n line_x2: 'Promjena linije završetak x koordinatu',\n line_y1: 'Promijeni linija je početak y koordinatu',\n line_y2: 'Promjena linije završetak y koordinatu',\n rect_height: 'Promijeni pravokutnik visine',\n rect_width: 'Promijeni pravokutnik širine',\n corner_radius: 'Promijeni Pravokutnik Corner Radius',\n image_width: 'Promijeni sliku širine',\n image_height: 'Promijeni sliku visina',\n image_url: 'Promijeni URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Promjena sadržaja teksta',\n font_family: 'Promjena fontova',\n font_size: 'Change font size',\n bold: 'Podebljani tekst',\n italic: 'Italic Text',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Promijeni boju pozadine / neprozirnost',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Prilagodi na sve sadržaje',\n fit_to_canvas: 'Prilagodi na platnu',\n fit_to_layer_content: 'Prilagodi sloj sadržaj',\n fit_to_sel: 'Prilagodi odabir',\n align_relative_to: 'Poravnaj u odnosu na ...',\n relativeTo: 'u odnosu na:',\n page: 'stranica',\n largest_object: 'najveći objekt',\n selected_objects: 'izabrani objekti',\n smallest_object: 'najmanji objekt',\n new_doc: 'Nove slike',\n open_doc: 'Otvori sliku',\n export_img: 'Export',\n save_doc: 'Spremanje slike',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Poravnaj dolje',\n align_center: 'Centriraj',\n align_left: 'Poravnaj lijevo',\n align_middle: 'Poravnaj Srednji',\n align_right: 'Poravnaj desno',\n align_top: 'Poravnaj Top',\n mode_select: 'Odaberite alat',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Pravokutnik',\n mode_ellipse: 'Elipsa',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Tekst Alat',\n mode_image: 'Image Tool',\n mode_zoom: 'Alat za zumiranje',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Poništi',\n redo: 'Redo',\n tool_source: 'Uredi Source',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Grupa Elementi',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Razgrupiranje Elementi',\n docprops: 'Svojstva dokumenta',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Move to Bottom',\n move_top: 'Pomakni na vrh',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Spremiti',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Brisanje sloja',\n move_down: 'Move Layer Down',\n new: 'New Layer',\n rename: 'Preimenuj Layer',\n move_up: 'Move Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Select predefinirane:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'hu',\n dir: 'ltr',\n common: {\n ok: 'Ment',\n cancel: 'Szakítani',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Kattints ide a változások töltse szín, shift-click változtatni stroke color',\n zoom_level: 'Change nagyítási',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Change töltse color',\n stroke_color: 'Change stroke color',\n stroke_style: 'Change stroke kötőjel style',\n stroke_width: 'Change stroke width',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Váltás forgás szög',\n blur: 'Change gaussian blur value',\n opacity: 'A kijelölt elem opacity',\n circle_cx: 'Change kör CX koordináta',\n circle_cy: 'Change kör cy koordináta',\n circle_r: 'Change kör sugara',\n ellipse_cx: 'Change ellipszis&#39;s CX koordináta',\n ellipse_cy: 'Change ellipszis&#39;s cy koordináta',\n ellipse_rx: 'Change ellipszis&#39;s x sugarú',\n ellipse_ry: 'Change ellipszis&#39;s y sugara',\n line_x1: 'A sor kezd x koordináta',\n line_x2: 'A sor vége az x koordináta',\n line_y1: 'A sor kezd y koordináta',\n line_y2: 'A sor vége az y koordináta',\n rect_height: 'Change téglalap magassága',\n rect_width: 'Change téglalap szélessége',\n corner_radius: 'Change téglalap sarok sugara',\n image_width: 'Change kép szélessége',\n image_height: 'Kép módosítása height',\n image_url: 'Change URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'A szöveg tartalma',\n font_family: 'Change Betűcsalád',\n font_size: 'Change font size',\n bold: 'Félkövér szöveg',\n italic: 'Dőlt szöveg',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Change background color / homályosság',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Illeszkednek az összes tartalom',\n fit_to_canvas: 'Igazítás a vászonra',\n fit_to_layer_content: 'Igazítás a réteg tartalma',\n fit_to_sel: 'Igazítás a kiválasztási',\n align_relative_to: 'Képest Igazítás ...',\n relativeTo: 'relatív hogy:',\n page: 'Page',\n largest_object: 'legnagyobb objektum',\n selected_objects: 'választott tárgyak',\n smallest_object: 'legkisebb objektum',\n new_doc: 'Új kép',\n open_doc: 'Kép megnyitása',\n export_img: 'Export',\n save_doc: 'Kép mentése más',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Alulra igazítás',\n align_center: 'Középre igazítás',\n align_left: 'Balra igazítás',\n align_middle: 'Közép-align',\n align_right: 'Jobbra igazítás',\n align_top: 'Align Top',\n mode_select: 'Válassza ki az eszközt',\n mode_fhpath: 'Ceruza eszköz',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand téglalap',\n mode_ellipse: 'Ellipszisszelet',\n mode_circle: 'Körbe',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Szöveg eszköz',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Visszavon',\n redo: 'Megismétléséhez',\n tool_source: 'Szerkesztés Forrás',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Csoport elemei',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Szétbont elemei',\n docprops: 'Dokumentum tulajdonságai',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Mozgatás lefelé',\n move_top: 'Move to Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Ment',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Réteg törlése',\n move_down: 'Mozgatása lefelé',\n new: 'Új réteg',\n rename: 'Réteg átnevezése',\n move_up: 'Move Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Válassza ki előre definiált:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'hy',\n dir: 'ltr',\n common: {\n ok: 'Save',\n cancel: 'Cancel',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Click to change fill color, shift-click to change stroke color',\n zoom_level: 'Change zoom level',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Change fill color',\n stroke_color: 'Change stroke color',\n stroke_style: 'Change stroke dash style',\n stroke_width: 'Change stroke width',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Change rotation angle',\n blur: 'Change gaussian blur value',\n opacity: 'Change selected item opacity',\n circle_cx: \"Change circle's cx coordinate\",\n circle_cy: \"Change circle's cy coordinate\",\n circle_r: \"Change circle's radius\",\n ellipse_cx: \"Change ellipse's cx coordinate\",\n ellipse_cy: \"Change ellipse's cy coordinate\",\n ellipse_rx: \"Change ellipse's x radius\",\n ellipse_ry: \"Change ellipse's y radius\",\n line_x1: \"Change line's starting x coordinate\",\n line_x2: \"Change line's ending x coordinate\",\n line_y1: \"Change line's starting y coordinate\",\n line_y2: \"Change line's ending y coordinate\",\n rect_height: 'Change rectangle height',\n rect_width: 'Change rectangle width',\n corner_radius: 'Change Rectangle Corner Radius',\n image_width: 'Change image width',\n image_height: 'Change image height',\n image_url: 'Change URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Change text contents',\n font_family: 'Change Font Family',\n font_size: 'Change Font Size',\n bold: 'Bold Text',\n italic: 'Italic Text',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Change background color/opacity',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Fit to all content',\n fit_to_canvas: 'Fit to canvas',\n fit_to_layer_content: 'Fit to layer content',\n fit_to_sel: 'Fit to selection',\n align_relative_to: 'Align relative to ...',\n relativeTo: 'relative to:',\n page: 'page',\n largest_object: 'largest object',\n selected_objects: 'elected objects',\n smallest_object: 'smallest object',\n new_doc: 'New Image',\n open_doc: 'Open SVG',\n export_img: 'Export',\n save_doc: 'Save Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Align Center',\n align_left: 'Align Left',\n align_middle: 'Align Middle',\n align_right: 'Align Right',\n align_top: 'Align Top',\n mode_select: 'Select Tool',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Rectangle',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Text Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Undo',\n redo: 'Redo',\n tool_source: 'Edit Source',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Group Elements',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elements',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Move to Bottom',\n move_top: 'Move to Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Save',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Delete Layer',\n move_down: 'Move Layer Down',\n new: 'New Layer',\n rename: 'Rename Layer',\n move_up: 'Move Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Select predefined:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'id',\n dir: 'ltr',\n common: {\n ok: 'Simpan',\n cancel: 'Batal',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Klik untuk mengubah warna mengisi, shift-klik untuk mengubah warna stroke',\n zoom_level: 'Mengubah tingkat pembesaran',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Ubah warna mengisi',\n stroke_color: 'Ubah warna stroke',\n stroke_style: 'Ubah gaya dash stroke',\n stroke_width: 'Ubah stroke width',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Ubah sudut rotasi',\n blur: 'Change gaussian blur value',\n opacity: 'Mengubah item yang dipilih keburaman',\n circle_cx: 'Mengubah koordinat lingkaran cx',\n circle_cy: 'Mengubah koordinat cy lingkaran',\n circle_r: 'Ubah jari-jari lingkaran',\n ellipse_cx: 'Ubah elips&#39;s cx koordinat',\n ellipse_cy: 'Ubah elips&#39;s cy koordinat',\n ellipse_rx: 'Ubah elips&#39;s x jari-jari',\n ellipse_ry: 'Ubah elips&#39;s y jari-jari',\n line_x1: 'Ubah baris mulai x koordinat',\n line_x2: 'Ubah baris&#39;s Berakhir x koordinat',\n line_y1: 'Ubah baris mulai y koordinat',\n line_y2: 'Ubah baris di tiap akhir y koordinat',\n rect_height: 'Perubahan tinggi persegi panjang',\n rect_width: 'Ubah persegi panjang lebar',\n corner_radius: 'Ubah Corner Rectangle Radius',\n image_width: 'Ubah Lebar gambar',\n image_height: 'Tinggi gambar Perubahan',\n image_url: 'Ubah URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Ubah isi teks',\n font_family: 'Ubah Font Keluarga',\n font_size: 'Ubah Ukuran Font',\n bold: 'Bold Teks',\n italic: 'Italic Teks',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Mengubah warna latar belakang / keburaman',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Cocok untuk semua konten',\n fit_to_canvas: 'Muat kanvas',\n fit_to_layer_content: 'Muat konten lapisan',\n fit_to_sel: 'Fit seleksi',\n align_relative_to: 'Rata relatif ...',\n relativeTo: 'relatif:',\n page: 'Halaman',\n largest_object: 'objek terbesar',\n selected_objects: 'objek terpilih',\n smallest_object: 'objek terkecil',\n new_doc: 'Gambar Baru',\n open_doc: 'Membuka Image',\n export_img: 'Export',\n save_doc: 'Save Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Rata Bottom',\n align_center: 'Rata Tengah',\n align_left: 'Rata Kiri',\n align_middle: 'Rata Tengah',\n align_right: 'Rata Kanan',\n align_top: 'Rata Top',\n mode_select: 'Pilih Tool',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Persegi Panjang',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Lingkaran',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Teks Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Undo',\n redo: 'Redo',\n tool_source: 'Edit Source',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Kelompok Elemen',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elemen',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Pindah ke Bawah',\n move_top: 'Pindahkan ke Atas',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Simpan',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Hapus Layer',\n move_down: 'Pindahkan Layer Bawah',\n new: 'New Layer',\n rename: 'Rename Layer',\n move_up: 'Pindahkan Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Pilih standar:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'is',\n dir: 'ltr',\n common: {\n ok: 'Vista',\n cancel: 'Hætta',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Smelltu hér til að breyta fylla lit, Shift-smelltu til að breyta högg lit',\n zoom_level: 'Breyta Stækkunarstig',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Breyta fylla color',\n stroke_color: 'Breyta heilablķđfall color',\n stroke_style: 'Breyta heilablķđfall þjóta stíl',\n stroke_width: 'Breyta heilablķđfall width',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Breyting snúningur horn',\n blur: 'Change gaussian blur value',\n opacity: 'Breyta valin atriði opacity',\n circle_cx: 'Cx Breyta hring er að samræma',\n circle_cy: 'Breyta hring&#39;s cy samræma',\n circle_r: 'Radíus Breyta hringsins er',\n ellipse_cx: 'Breyta sporbaug&#39;s cx samræma',\n ellipse_cy: 'Breyta sporbaug&#39;s cy samræma',\n ellipse_rx: 'X radíus Breyta sporbaug&#39;s',\n ellipse_ry: 'Y radíus Breyta sporbaug&#39;s',\n line_x1: 'Breyta lína í byrjun x samræma',\n line_x2: 'Breyta lína&#39;s Ending x samræma',\n line_y1: 'Breyta lína í byrjun y samræma',\n line_y2: 'Breyta lína er endir y samræma',\n rect_height: 'Breyta rétthyrningur hæð',\n rect_width: 'Skipta rétthyrningur width',\n corner_radius: 'Breyta rétthyrningur Corner Radíus',\n image_width: 'Breyta mynd width',\n image_height: 'Breyta mynd hæð',\n image_url: 'Breyta URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Breyta texta innihald',\n font_family: 'Change Leturfjölskylda',\n font_size: 'Breyta leturstærð',\n bold: 'Bold Text',\n italic: 'Italic Text',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Breyta bakgrunnslit / opacity',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Laga til efni',\n fit_to_canvas: 'Fit á striga',\n fit_to_layer_content: 'Laga til lag efni',\n fit_to_sel: 'Fit til val',\n align_relative_to: 'Jafna miðað við ...',\n relativeTo: 'hlutfallslegt til:',\n page: 'síðu',\n largest_object: 'stærsti hlutinn',\n selected_objects: 'kjörinn hlutir',\n smallest_object: 'lítill hluti',\n new_doc: 'New Image',\n open_doc: 'Opna mynd',\n export_img: 'Export',\n save_doc: 'Spara Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Jafna Bottom',\n align_center: 'Jafna Center',\n align_left: 'Vinstri jöfnun',\n align_middle: 'Jafna Mið',\n align_right: 'Hægri jöfnun',\n align_top: 'Jöfnun Top',\n mode_select: 'Veldu Tól',\n mode_fhpath: 'Blýantur Tól',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand rétthyrningur',\n mode_ellipse: 'Sporbaugur',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free-Hand Sporbaugur',\n mode_path: 'Path Tool',\n mode_text: 'Text Tool',\n mode_image: 'Mynd Tól',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Hætta',\n redo: 'Endurtaka',\n tool_source: 'Edit Source',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Group Elements',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elements',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Færa Bottom',\n move_top: 'Fara efst á síðu',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Vista',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Eyða Lag',\n move_down: 'Færa Layer Down',\n new: 'Lag',\n rename: 'Endurnefna Lag',\n move_up: 'Færa Lag Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Veldu predefined:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'it',\n dir: 'ltr',\n common: {\n ok: 'Salva',\n cancel: 'Annulla',\n key_backspace: 'backspace',\n key_del: 'Canc',\n key_down: 'giù',\n key_up: 'su',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Mostra/nascondi strumenti per il tratto',\n palette_info: 'Fare clic per cambiare il colore di riempimento, shift-click per cambiare colore del tratto',\n zoom_level: 'Cambia il livello di zoom',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: \"Identifica l'elemento\",\n fill_color: 'Cambia il colore di riempimento',\n stroke_color: 'Cambia il colore del tratto',\n stroke_style: 'Cambia lo stile del tratto',\n stroke_width: 'Cambia la larghezza del tratto',\n pos_x: 'Modifica la coordinata x',\n pos_y: 'Modifica la coordinata y',\n linecap_butt: 'Inizio linea: Punto',\n linecap_round: 'Inizio linea: Tondo',\n linecap_square: 'Inizio linea: Quadrato',\n linejoin_bevel: 'Giunzione: smussata',\n linejoin_miter: 'Giunzione: spezzata',\n linejoin_round: 'Giunzione: arrotondata',\n angle: \"Cambia l'angolo di rotazione\",\n blur: \"Cambia l'intensità della sfocatura\",\n opacity: \"Cambia l'opacità dell'oggetto selezionato\",\n circle_cx: 'Cambia la coordinata Cx del cerchio',\n circle_cy: 'Cambia la coordinata Cy del cerchio',\n circle_r: 'Cambia il raggio del cerchio',\n ellipse_cx: \"Cambia la coordinata Cx dell'ellisse\",\n ellipse_cy: \"Cambia la coordinata Cy dell'ellisse\",\n ellipse_rx: \"Cambia l'asse x dell'ellisse\",\n ellipse_ry: \"Cambia l'asse y dell'ellisse\",\n line_x1: 'Modifica la coordinata iniziale x della linea',\n line_x2: 'Modifica la coordinata finale x della linea',\n line_y1: 'Modifica la coordinata iniziale y della linea',\n line_y2: 'Modifica la coordinata finale y della linea',\n rect_height: \"Cambia l'altezza rettangolo\",\n rect_width: 'Cambia la larghezza rettangolo',\n corner_radius: \"Cambia il raggio dell'angolo\",\n image_width: \"Cambia la larghezza dell'immagine\",\n image_height: \"Cambia l'altezza dell'immagine\",\n image_url: 'Cambia URL',\n node_x: 'Modifica la coordinata x del nodo',\n node_y: 'Modifica la coordinata y del nodo',\n seg_type: 'Cambia il tipo di segmento',\n straight_segments: 'Linea retta',\n curve_segments: 'Curva',\n text_contents: 'Cambia il contenuto del testo',\n font_family: 'Cambia il tipo di Font',\n font_size: 'Modifica dimensione carattere',\n bold: 'Grassetto',\n italic: 'Corsivo',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Menù principale',\n bkgnd_color_opac: 'Cambia colore/opacità dello sfondo',\n connector_no_arrow: 'No freccia',\n fitToContent: 'Adatta al contenuto',\n fit_to_all: 'Adatta a tutti i contenuti',\n fit_to_canvas: \"Adatta all'area di disegno\",\n fit_to_layer_content: 'Adatta al contenuto del livello',\n fit_to_sel: 'Adatta alla selezione',\n align_relative_to: 'Allineati a ...',\n relativeTo: 'Rispetto a:',\n page: 'Pagina',\n largest_object: 'Oggetto più grande',\n selected_objects: 'Oggetti selezionati',\n smallest_object: 'Oggetto più piccolo',\n new_doc: 'Nuova immagine',\n open_doc: 'Apri immagine',\n export_img: 'Export',\n save_doc: 'Salva',\n import_doc: 'Importa SVG',\n align_to_page: 'Allinea elementi alla pagina',\n align_bottom: 'Allinea in basso',\n align_center: 'Allinea al centro',\n align_left: 'Allinea a sinistra',\n align_middle: 'Allinea al centro',\n align_right: 'Allinea a destra',\n align_top: 'Allinea in alto',\n mode_select: 'Seleziona',\n mode_fhpath: 'Matita',\n mode_line: 'Linea',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Rettangolo a mano libera',\n mode_ellipse: 'Ellisse',\n mode_circle: 'Cerchio',\n mode_fhellipse: 'Ellisse a mano libera',\n mode_path: 'Spezzata',\n mode_text: 'Testo',\n mode_image: 'Immagine',\n mode_zoom: 'Zoom',\n no_embed: \"NOTA: L'immagine non può essere incorporata: dipenderà dal percorso assoluto per essere vista\",\n undo: 'Annulla',\n redo: 'Rifai',\n tool_source: 'Modifica sorgente',\n wireframe_mode: 'Contorno',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Raggruppa elementi',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Converti in tracciato',\n reorient_path: 'Riallinea',\n ungroup: 'Separa gli elementi',\n docprops: 'Proprietà del documento',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Sposta in fondo',\n move_top: 'Sposta in cima',\n node_clone: 'Clona nodo',\n node_delete: 'Elimina nodo',\n node_link: 'Collegamento tra punti di controllo',\n add_subpath: 'Aggiungi sotto-percorso',\n openclose_path: 'Apri/chiudi spezzata',\n source_save: 'Salva',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Livello',\n layers: 'Layers',\n del: 'Elimina il livello',\n move_down: 'Sposta indietro il livello',\n new: 'Nuovo livello',\n rename: 'Rinomina il livello',\n move_up: 'Sposta avanti il livello',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Sposta verso:',\n move_selected: 'Sposta gli elementi in un diverso livello'\n },\n config: {\n image_props: 'Proprietà Immagine',\n doc_title: 'Titolo',\n doc_dims: \"Dimensioni dell'area di disegno\",\n included_images: 'Immagini incluse',\n image_opt_embed: 'Incorpora dati (file locali)',\n image_opt_ref: \"Usa l'identificativo di riferimento\",\n editor_prefs: 'Preferenze',\n icon_size: 'Dimensione Icona',\n language: 'Lingua',\n background: \"Sfondo dell'editor\",\n editor_img_url: 'Image URL',\n editor_bg_note: \"Nota: Lo sfondo non verrà salvato con l'immagine.\",\n icon_large: 'Grande',\n icon_medium: 'Medio',\n icon_small: 'Piccolo',\n icon_xlarge: 'Molto grande',\n select_predefined: 'Selezioni predefinite:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Valore assegnato non valido',\n noContentToFitTo: \"Non c'è contenuto cui adeguarsi\",\n dupeLayerName: \"C'è già un livello con questo nome!\",\n enterUniqueLayerName: 'Assegna un diverso nome a ciascun livello, grazie!',\n enterNewLayerName: 'Assegna un nome al livello',\n layerHasThatName: 'Un livello ha già questo nome',\n QmoveElemsToLayer: \"Sposta gli elementi selezionali al livello '%s'?\",\n QwantToClear: 'Vuoi cancellare il disegno?\\nVerrà eliminato anche lo storico delle modifiche!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'Ci sono errori nel codice sorgente SVG.\\nRitorno al codice originale?',\n QignoreSourceChanges: 'Ignoro i cambiamenti nel sorgente SVG?',\n featNotSupported: 'Caratteristica non supportata',\n enterNewImgURL: \"Scrivi un nuovo URL per l'immagine\",\n defsFailOnSave: \"NOTA: A causa dlle caratteristiche del tuo browser, l'immagine potrà apparire errata (senza elementi o gradazioni) finché non sarà salvata.\",\n loadingImage: \"Sto caricando l'immagine. attendere prego...\",\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Nota le seguenti particolarità: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'ja',\n dir: 'ltr',\n common: {\n ok: 'OK',\n cancel: 'キャンセル',\n key_backspace: 'backspace',\n key_del: '削除',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'クリックで塗りの色を選択、Shift+クリックで線の色を選択',\n zoom_level: 'ズーム倍率の変更',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: '塗りの色を変更',\n stroke_color: '線の色を変更',\n stroke_style: '線種の変更',\n stroke_width: '線幅の変更',\n pos_x: 'X座標を変更',\n pos_y: 'Y座標を変更',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: '回転角の変更',\n blur: 'Change gaussian blur value',\n opacity: '不透明度',\n circle_cx: '円の中心を変更X座標',\n circle_cy: '円の中心を変更Y座標',\n circle_r: '変更円の半径',\n ellipse_cx: '楕円の中心を変更X座標',\n ellipse_cy: '楕円の中心を変更Y座標',\n ellipse_rx: '楕円の半径を変更X座標',\n ellipse_ry: '楕円の半径を変更Y座標',\n line_x1: '開始X座標',\n line_x2: '終了X座標',\n line_y1: '開始Y座標',\n line_y2: '終了Y座標',\n rect_height: '長方形の高さを変更',\n rect_width: '長方形の幅を変更',\n corner_radius: '長方形の角の半径を変更',\n image_width: '画像の幅を変更',\n image_height: '画像の高さを変更',\n image_url: 'URLを変更',\n node_x: 'ードのX座標を変更',\n node_y: 'ードのY座標を変更',\n seg_type: '線分の種類を変更',\n straight_segments: '直線',\n curve_segments: 'カーブ',\n text_contents: 'テキストの内容の変更',\n font_family: 'フォントファミリーの変更',\n font_size: '文字サイズの変更',\n bold: '太字',\n italic: 'イタリック体',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: '背景色/不透明度の変更',\n connector_no_arrow: 'No arrow',\n fitToContent: 'コンテンツに合わせる',\n fit_to_all: 'すべてのコンテンツに合わせる',\n fit_to_canvas: 'キャンバスに合わせる',\n fit_to_layer_content: 'レイヤー上のコンテンツに合わせる',\n fit_to_sel: '選択対象に合わせる',\n align_relative_to: '揃える',\n relativeTo: '相対:',\n page: 'ページ',\n largest_object: '最大のオブジェクト',\n selected_objects: '選択オブジェクト',\n smallest_object: '最小のオブジェクト',\n new_doc: '新規イメージ',\n open_doc: 'イメージを開く',\n export_img: 'Export',\n save_doc: '画像を保存',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: '下揃え',\n align_center: '中央揃え',\n align_left: '左揃え',\n align_middle: '中央揃え',\n align_right: '右揃え',\n align_top: '上揃え',\n mode_select: '選択ツール',\n mode_fhpath: '鉛筆ツール',\n mode_line: '直線ツール',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'フリーハンド長方形',\n mode_ellipse: '楕円',\n mode_circle: '円',\n mode_fhellipse: 'フリーハンド楕円',\n mode_path: 'パスツール',\n mode_text: 'テキストツール',\n mode_image: 'イメージツール',\n mode_zoom: 'ズームツール',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: '元に戻す',\n redo: 'やり直し',\n tool_source: 'ソースの編集',\n wireframe_mode: 'ワイヤーフレームで表示 [F]',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'グループ化',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'パスに変換',\n reorient_path: '現在の角度を0度とする',\n ungroup: 'グループ化を解除',\n docprops: '文書のプロパティ',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: '奥に移動',\n move_top: '手前に移動',\n node_clone: 'ノードを複製',\n node_delete: 'ノードを削除',\n node_link: '制御点の接続',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: '適用',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'レイヤ',\n layers: 'Layers',\n del: 'レイヤの削除',\n move_down: 'レイヤを下へ移動',\n new: '新規レイヤ',\n rename: 'レイヤの名前を変更',\n move_up: 'レイヤを上へ移動',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: '移動先レイヤ:',\n move_selected: '選択対象を別のレイヤに移動'\n },\n config: {\n image_props: 'イメージの設定',\n doc_title: 'タイトル',\n doc_dims: 'キャンバスの大きさ',\n included_images: '挿入された画像の扱い',\n image_opt_embed: 'SVGファイルに埋め込む',\n image_opt_ref: '画像を参照する',\n editor_prefs: 'エディタの設定',\n icon_size: 'アイコンの大きさ',\n language: '言語',\n background: 'エディタの背景色',\n editor_img_url: 'Image URL',\n editor_bg_note: '※背景色はファイルに保存されません。',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'デフォルト',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: '無効な値が指定されています。',\n noContentToFitTo: '合わせる対象のコンテンツがありません。',\n dupeLayerName: '同名のレイヤーが既に存在します。',\n enterUniqueLayerName: '新規レイヤの一意な名前を入力してください。',\n enterNewLayerName: 'レイヤの新しい名前を入力してください。',\n layerHasThatName: '既に同名が付いています。',\n QmoveElemsToLayer: \"選択した要素をレイヤー '%s' に移動しますか?\",\n QwantToClear: 'キャンバスをクリアしますか?\\nアンドゥ履歴も消去されます。',\n QwantToOpen: '新しいファイルを開きますか?\\nアンドゥ履歴も消去されます。',\n QerrorsRevertToSource: 'ソースにエラーがあります。\\n元のソースに戻しますか',\n QignoreSourceChanges: 'ソースの変更を無視しますか?',\n featNotSupported: '機能はサポートされていません。',\n enterNewImgURL: '画像のURLを入力してください。',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'ko',\n dir: 'ltr',\n common: {\n ok: '저장',\n cancel: '취소',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: '색상을 클릭, 근무 시간 채우기 스트로크 색상을 변경하려면 변경하려면',\n zoom_level: '변경 수준으로 확대',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: '채우기 색상 변경',\n stroke_color: '뇌졸중으로 색상 변경',\n stroke_style: '뇌졸중 변경 대시 스타일',\n stroke_width: '뇌졸중 너비 변경',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: '회전 각도를 변경',\n blur: 'Change gaussian blur value',\n opacity: '변경 항목을 선택 불투명도',\n circle_cx: '변경 동그라미 CX는 좌표',\n circle_cy: '동그라미 싸이 변경 조정할 수있어',\n circle_r: '변경 원의 반지름',\n ellipse_cx: 'CX는 타원의 좌표 변경',\n ellipse_cy: '싸이 타원 변경 조정할 수있어',\n ellipse_rx: '변경 타원의 x 반지름',\n ellipse_ry: '변경 타원의 y를 반경',\n line_x1: '변경 라인의 X 좌표 시작',\n line_x2: '변경 라인의 X 좌표 결말',\n line_y1: '라인 변경 y를 시작 좌표',\n line_y2: '라인 변경 y를 결말의 좌표',\n rect_height: '사각형의 높이를 변경',\n rect_width: '사각형의 너비 변경',\n corner_radius: '변경 직사각형 코너 반경',\n image_width: '이미지 변경 폭',\n image_height: '이미지 높이 변경',\n image_url: 'URL 변경',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: '텍스트 변경 내용',\n font_family: '글꼴 변경 패밀리',\n font_size: '글꼴 크기 변경',\n bold: '굵은 텍스트',\n italic: '기울임꼴 텍스트',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: '배경 색상 변경 / 투명도',\n connector_no_arrow: 'No arrow',\n fitToContent: '맞춤 콘텐츠',\n fit_to_all: '맞춤 모든 콘텐츠에',\n fit_to_canvas: '맞춤 캔버스',\n fit_to_layer_content: '레이어에 맞게 콘텐츠',\n fit_to_sel: '맞춤 선택',\n align_relative_to: '정렬 상대적으로 ...',\n relativeTo: '상대:',\n page: '페이지',\n largest_object: '큰 개체',\n selected_objects: '당선 개체',\n smallest_object: '작은 개체',\n new_doc: '새 이미지',\n open_doc: '오픈 이미지',\n export_img: 'Export',\n save_doc: '이미지 저장',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: '히프 정렬',\n align_center: '정렬 센터',\n align_left: '왼쪽 정렬',\n align_middle: '중간 정렬',\n align_right: '오른쪽 맞춤',\n align_top: '정렬 탑',\n mode_select: '선택 도구',\n mode_fhpath: '연필 도구',\n mode_line: '선 도구',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: '자유 핸드 직사각형',\n mode_ellipse: '타원',\n mode_circle: '동그라미',\n mode_fhellipse: '자유 핸드 타원',\n mode_path: 'Path Tool',\n mode_text: '텍스트 도구',\n mode_image: '이미지 도구',\n mode_zoom: '줌 도구',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: '취소',\n redo: '재실행',\n tool_source: '수정 소스',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: '그룹 요소',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: '그룹 해제 요소',\n docprops: '문서 속성',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: '아래로 이동',\n move_top: '상단으로 이동',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: '저장',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: '레이어 삭제',\n move_down: '레이어 아래로 이동',\n new: '새 레이어',\n rename: '레이어 이름 바꾸기',\n move_up: '레이어 위로 이동',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: '미리 정의된 선택:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'lt',\n dir: 'ltr',\n common: {\n ok: 'Saugoti',\n cancel: 'Atšaukti',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Spustelėkite norėdami keisti užpildo spalvą, perėjimo spustelėkite pakeisti insultas spalva',\n zoom_level: 'Keisti mastelį',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Keisti užpildyti spalvos',\n stroke_color: 'Keisti insultas spalva',\n stroke_style: 'Keisti insultas brūkšnys stilius',\n stroke_width: 'Keisti insultas plotis',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Keisti sukimosi kampas',\n blur: 'Change gaussian blur value',\n opacity: 'Pakeisti pasirinkto elemento neskaidrumo',\n circle_cx: 'Keisti ratas&#39;s CX koordinuoti',\n circle_cy: 'Keisti ratas&#39;s CY koordinuoti',\n circle_r: 'Keisti savo apskritimo spindulys',\n ellipse_cx: 'Keisti elipse&#39;s CX koordinuoti',\n ellipse_cy: 'Keisti elipse&#39;s CY koordinuoti',\n ellipse_rx: 'Keisti elipsė &quot;X spindulys',\n ellipse_ry: 'Keisti elipse Y spindulys',\n line_x1: 'Keisti linijos nuo koordinačių x',\n line_x2: 'Keisti linijos baigėsi x koordinuoti',\n line_y1: 'Keisti linijos pradžios y koordinačių',\n line_y2: 'Keisti linijos baigėsi y koordinačių',\n rect_height: 'Keisti stačiakampio aukščio',\n rect_width: 'Pakeisti stačiakampio plotis',\n corner_radius: 'Keisti stačiakampis skyrelį Spindulys',\n image_width: 'Keisti paveikslėlio plotis',\n image_height: 'Keisti vaizdo aukštis',\n image_url: 'Pakeisti URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Keisti teksto turinys',\n font_family: 'Pakeistišriftą Šeima',\n font_size: 'Change font size',\n bold: 'Pusjuodis',\n italic: 'Kursyvas',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Pakeisti fono spalvą / drumstumas',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Talpinti turinys',\n fit_to_all: 'Talpinti All content',\n fit_to_canvas: 'Talpinti drobė',\n fit_to_layer_content: 'Talpinti sluoksnis turinio',\n fit_to_sel: 'Talpinti atrankos',\n align_relative_to: 'Derinti palyginti ...',\n relativeTo: 'palyginti:',\n page: 'puslapis',\n largest_object: 'didžiausias objektas',\n selected_objects: 'išrinktas objektai',\n smallest_object: 'mažiausias objektą',\n new_doc: 'New Image',\n open_doc: 'Atidaryti atvaizdą',\n export_img: 'Export',\n save_doc: 'Išsaugoti nuotrauką',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Lygiuoti apačioje',\n align_center: 'Lygiuoti',\n align_left: 'Lygiuoti kairėje',\n align_middle: 'Suderinti Vidurio',\n align_right: 'Lygiuoti dešinėje',\n align_top: 'Lygiuoti viršų',\n mode_select: 'Įrankis',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free Hand stačiakampis',\n mode_ellipse: 'Elipse',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free Hand Elipsė',\n mode_path: 'Path Tool',\n mode_text: 'Tekstas Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Įrankį',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Atšaukti',\n redo: 'Atstatyti',\n tool_source: 'Taisyti Šaltinis',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Elementų grupės',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Išgrupuoti elementai',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Perkelti į apačią',\n move_top: 'Perkelti į viršų',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Saugoti',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Ištrinti Layer',\n move_down: 'Perkelti sluoksnį Žemyn',\n new: 'New Layer',\n rename: 'Pervadinti sluoksnį',\n move_up: 'Perkelti sluoksnį Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Pasirinkite iš anksto:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'lv',\n dir: 'ltr',\n common: {\n ok: 'Glābt',\n cancel: 'Atcelt',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Noklikšķiniet, lai mainītu aizpildījuma krāsu, shift-click to mainīt stroke krāsa',\n zoom_level: 'Pārmaiņu mērogu',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Change aizpildījuma krāsu',\n stroke_color: 'Change stroke krāsa',\n stroke_style: 'Maina stroke domuzīme stils',\n stroke_width: 'Change stroke platums',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Mainīt griešanās leņķis',\n blur: 'Change gaussian blur value',\n opacity: 'Mainīt izvēlēto objektu necaurredzamība',\n circle_cx: 'Maina aplis&#39;s CX koordinēt',\n circle_cy: 'Pārmaiņu loks ir cy koordinēt',\n circle_r: 'Pārmaiņu loks ir rādiuss',\n ellipse_cx: 'Mainīt elipses&#39;s CX koordinēt',\n ellipse_cy: 'Mainīt elipses&#39;s cy koordinēt',\n ellipse_rx: 'Mainīt elipses&#39;s x rādiuss',\n ellipse_ry: 'Mainīt elipses&#39;s y rādiuss',\n line_x1: 'Mainīt līnijas sākas x koordinēt',\n line_x2: 'Mainīt līnijas beigu x koordinēt',\n line_y1: 'Mainīt līnijas sākas y koordinātu',\n line_y2: 'Mainīt līnijas beigu y koordinātu',\n rect_height: 'Change Taisnstūra augstums',\n rect_width: 'Change taisnstūra platums',\n corner_radius: 'Maina Taisnstūris Corner Rādiuss',\n image_width: 'Mainīt attēla platumu',\n image_height: 'Mainīt attēla augstums',\n image_url: 'Change URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Mainītu teksta saturs',\n font_family: 'Mainīt fonta Family',\n font_size: 'Mainīt fonta izmēru',\n bold: 'Bold Text',\n italic: 'Kursīvs',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Change background color / necaurredzamība',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Fit uz visu saturu',\n fit_to_canvas: 'Ievietot audekls',\n fit_to_layer_content: 'Ievietot slānis saturs',\n fit_to_sel: 'Fit atlases',\n align_relative_to: 'Līdzināt, salīdzinot ar ...',\n relativeTo: 'salīdzinājumā ar:',\n page: 'lapa',\n largest_object: 'lielākais objekts',\n selected_objects: 'ievēlēts objekti',\n smallest_object: 'mazākais objekts',\n new_doc: 'New Image',\n open_doc: 'Open SVG',\n export_img: 'Export',\n save_doc: 'Save Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Līdzināt Bottom',\n align_center: 'Līdzināt uz centru',\n align_left: 'Līdzināt pa kreisi',\n align_middle: 'Līdzināt Middle',\n align_right: 'Līdzināt pa labi',\n align_top: 'Līdzināt Top',\n mode_select: 'Select Tool',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Taisnstūris',\n mode_ellipse: 'Elipse',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path',\n mode_text: 'Text Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Atpogāt',\n redo: 'Redo',\n tool_source: 'Rediģēt Source',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Grupa Elements',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Atgrupēt Elements',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Pārvietot uz leju',\n move_top: 'Pārvietot uz augšu',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Glābt',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Dzēst Layer',\n move_down: 'Pārvietot slāni uz leju',\n new: 'New Layer',\n rename: 'Pārdēvēt Layer',\n move_up: 'Pārvietot slāni uz augšu',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Izvēlieties iepriekš:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'mk',\n dir: 'ltr',\n common: {\n ok: 'Зачувува',\n cancel: 'Откажи',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Кликни за да внесете промени бојата, промена клик да се промени бојата удар',\n zoom_level: 'Промена зум ниво',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Измени пополнете боја',\n stroke_color: 'Промена боја на мозочен удар',\n stroke_style: 'Промена удар цртичка стил',\n stroke_width: 'Промена удар Ширина',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Change ротација агол',\n blur: 'Change gaussian blur value',\n opacity: 'Промена избрани ставка непроѕирноста',\n circle_cx: 'Промена круг на cx координира',\n circle_cy: 'Промена круг&#39;s cy координираат',\n circle_r: 'Промена на круг со радиус',\n ellipse_cx: 'Промена елипса&#39;s cx координираат',\n ellipse_cy: 'Промена на елипса cy координира',\n ellipse_rx: 'Промена на елипса x радиус',\n ellipse_ry: 'Промена на елипса у радиус',\n line_x1: 'Промена линија почетна x координира',\n line_x2: 'Промена линија завршува x координира',\n line_y1: 'Промена линија координираат почетна y',\n line_y2: 'Промена линија завршува y координира',\n rect_height: 'Промена правоаголник височина',\n rect_width: 'Промена правоаголник Ширина',\n corner_radius: 'Промена правоаголник Corner Radius',\n image_width: 'Промена Ширина на сликата',\n image_height: 'Промена на слика височина',\n image_url: 'Промена URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Промена текст содржина',\n font_family: 'Смени фонт Фамилија',\n font_size: 'Изменифонт Големина',\n bold: 'Задебелен текст',\n italic: 'Italic текст',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Смени позадина / непроѕирноста',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Способен да Содржина',\n fit_to_all: 'Способен да сите содржина',\n fit_to_canvas: 'Побиране да платно',\n fit_to_layer_content: 'Способен да слој содржина',\n fit_to_sel: 'Способен да селекција',\n align_relative_to: 'Порамни во поглед на ...',\n relativeTo: 'во поглед на:',\n page: 'страница',\n largest_object: 'најголемиот објект',\n selected_objects: 'избран објекти',\n smallest_object: 'најмалата објект',\n new_doc: 'Нови слики',\n open_doc: 'Отвори слика',\n export_img: 'Export',\n save_doc: 'Зачувај слика',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Центрирано',\n align_left: 'Порамни лево Порамни',\n align_middle: 'Израмни Среден',\n align_right: 'Порамни десно',\n align_top: 'Израмни почетокот',\n mode_select: 'Изберете ја алатката',\n mode_fhpath: 'Алатка за молив',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Правоаголник слободна рака',\n mode_ellipse: 'Елипса',\n mode_circle: 'Круг',\n mode_fhellipse: 'Free-Hand Елипса',\n mode_path: 'Path Tool',\n mode_text: 'Алатка за текст',\n mode_image: 'Алатка за сликата',\n mode_zoom: 'Алатка за зумирање',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Врати',\n redo: 'Повтори',\n tool_source: 'Уреди Извор',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Група на елементи',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Елементи',\n docprops: 'Својства на документот',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Move to bottom',\n move_top: 'Поместување на почетокот',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Зачувува',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Избриши Слој',\n move_down: 'Премести слој долу',\n new: 'Нов слој',\n rename: 'Преименувај слој',\n move_up: 'Премести слој горе',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Изберете предефинирани:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'ms',\n dir: 'ltr',\n common: {\n ok: 'Simpan',\n cancel: 'Batal',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Klik untuk menukar warna mengisi, shift-klik untuk menukar warna stroke',\n zoom_level: 'Mengubah peringkat pembesaran',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Tukar Warna mengisi',\n stroke_color: 'Tukar Warna stroke',\n stroke_style: 'Tukar gaya dash stroke',\n stroke_width: 'Tukar stroke width',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Namakan sudut putaran',\n blur: 'Change gaussian blur value',\n opacity: 'Mengubah item yang dipilih keburaman',\n circle_cx: 'Mengubah koordinat bulatan cx',\n circle_cy: 'Mengubah koordinat cy bulatan',\n circle_r: 'Tukar jari-jari lingkaran',\n ellipse_cx: 'Tukar elips&#39;s cx koordinat',\n ellipse_cy: 'Tukar elips&#39;s cy koordinat',\n ellipse_rx: 'Tukar elips&#39;s x jari-jari',\n ellipse_ry: 'Tukar elips&#39;s y jari-jari',\n line_x1: 'Ubah baris mulai x koordinat',\n line_x2: 'Ubah baris&#39;s Berakhir x koordinat',\n line_y1: 'Ubah baris mulai y koordinat',\n line_y2: 'Ubah baris di tiap akhir y koordinat',\n rect_height: 'Perubahan quality persegi panjang',\n rect_width: 'Tukar persegi panjang lebar',\n corner_radius: 'Tukar Corner Rectangle Radius',\n image_width: 'Tukar Lebar imej',\n image_height: 'Tinggi gambar Kaca',\n image_url: 'Tukar URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Tukar isi teks',\n font_family: 'Tukar Font Keluarga',\n font_size: 'Ubah Saiz Font',\n bold: 'Bold Teks',\n italic: 'Italic Teks',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Mengubah warna latar belakang / keburaman',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Cocok untuk semua kandungan',\n fit_to_canvas: 'Muat kanvas',\n fit_to_layer_content: 'Muat kandungan lapisan',\n fit_to_sel: 'Fit seleksi',\n align_relative_to: 'Rata relatif ...',\n relativeTo: 'relatif:',\n page: 'Laman',\n largest_object: 'objek terbesar',\n selected_objects: 'objek terpilih',\n smallest_object: 'objek terkecil',\n new_doc: 'Imej Baru',\n open_doc: 'Membuka Image',\n export_img: 'Export',\n save_doc: 'Save Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Rata Bottom',\n align_center: 'Rata Tengah',\n align_left: 'Rata Kiri',\n align_middle: 'Rata Tengah',\n align_right: 'Rata Kanan',\n align_top: 'Rata Popular',\n mode_select: 'Pilih Tool',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Persegi Panjang',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Lingkaran',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Teks Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Undo',\n redo: 'Redo',\n tool_source: 'Edit Source',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Kelompok Elemen',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elemen',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Pindah ke Bawah',\n move_top: 'Pindah ke Atas',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Simpan',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Padam Layer',\n move_down: 'Pindah Layer Bawah',\n new: 'New Layer',\n rename: 'Rename Layer',\n move_up: 'Pindah Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Pilih standard:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'mt',\n dir: 'ltr',\n common: {\n ok: 'Save',\n cancel: 'Ikkanċella',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Ikklikkja biex timla l-bidla fil-kulur, ikklikkja-bidla għall-bidla color stroke',\n zoom_level: 'Bidla zoom livell',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Bidla imla color',\n stroke_color: 'Color stroke Bidla',\n stroke_style: 'Bidla stroke dash stil',\n stroke_width: 'Wisa &#39;puplesija Bidla',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Angolu ta &#39;rotazzjoni Bidla',\n blur: 'Change gaussian blur value',\n opacity: 'Bidla magħżula opaċità partita',\n circle_cx: 'CX ċirku Tibdil jikkoordinaw',\n circle_cy: 'Ċirku Tibdil cy jikkoordinaw',\n circle_r: 'Raġġ ta &#39;ċirku tal-Bidla',\n ellipse_cx: 'Bidla ellissi&#39;s CX jikkoordinaw',\n ellipse_cy: 'Ellissi Tibdil cy jikkoordinaw',\n ellipse_rx: 'Raġġ x ellissi Tibdil',\n ellipse_ry: 'Raġġ y ellissi Tibdil',\n line_x1: 'Bidla fil-linja tal-bidu tikkoordina x',\n line_x2: 'Linja tal-Bidla li jispiċċa x jikkoordinaw',\n line_y1: 'Bidla fil-linja tal-bidu y jikkoordinaw',\n line_y2: 'Linja Tibdil jispiċċa y jikkoordinaw',\n rect_height: 'Għoli rettangolu Bidla',\n rect_width: 'Wisa &#39;rettangolu Bidla',\n corner_radius: 'Bidla Rectangle Corner Radius',\n image_width: 'Wisa image Bidla',\n image_height: 'Għoli image Bidla',\n image_url: 'Bidla URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Test kontenut Bidla',\n font_family: 'Bidla Font Familja',\n font_size: 'Change font size',\n bold: 'Bold Test',\n italic: 'Test korsiv',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Bidla fil-kulur fl-isfond / opaċità',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit għall-kontenut',\n fit_to_all: 'Tajbin għall-kontenut',\n fit_to_canvas: 'Xieraq li kanvas',\n fit_to_layer_content: 'Fit-kontenut ta &#39;saff għal',\n fit_to_sel: 'Fit-għażla',\n align_relative_to: 'Jallinjaw relattiv għall - ...',\n relativeTo: 'relattiv għall -:',\n page: 'paġna',\n largest_object: 'akbar oġġett',\n selected_objects: 'oġġetti elett',\n smallest_object: 'iżgħar oġġett',\n new_doc: 'Image New',\n open_doc: 'Open SVG',\n export_img: 'Export',\n save_doc: 'Image Save',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Tallinja Bottom',\n align_center: 'Tallinja Center',\n align_left: 'Tallinja Left',\n align_middle: 'Tallinja Nofsani',\n align_right: 'Tallinja Dritt',\n align_top: 'Tallinja Top',\n mode_select: 'Select Tool',\n mode_fhpath: 'Lapes Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free Hand-Rectangle',\n mode_ellipse: 'Ellissi',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free Hand-ellissi',\n mode_path: 'Path Tool',\n mode_text: 'Text Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Jneħħu',\n redo: 'Jerġa &#39;jagħmel',\n tool_source: 'Source Edit',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Grupp Elements',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elements',\n docprops: 'Dokument Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Move to Bottom',\n move_top: 'Move to Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Save',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Ħassar Layer',\n move_down: 'Move Layer Down',\n new: 'New Layer',\n rename: 'Semmi mill-ġdid Layer',\n move_up: 'Move Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Select predefiniti:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'nl',\n dir: 'ltr',\n common: {\n ok: 'Ok',\n cancel: 'Annuleren',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'omlaag',\n key_up: 'omhoog',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Mogelijk gemaakt door'\n },\n ui: {\n toggle_stroke_tools: 'Toon/verberg meer lijn gereedschap',\n palette_info: 'Klik om de vul kleur te veranderen, shift-klik om de lijn kleur te veranderen',\n zoom_level: 'In-/uitzoomen',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identificeer het element',\n fill_color: 'Verander vul kleur',\n stroke_color: 'Verander lijn kleur',\n stroke_style: 'Verander lijn stijl',\n stroke_width: 'Verander lijn breedte',\n pos_x: 'Verander X coordinaat',\n pos_y: 'Verander Y coordinaat',\n linecap_butt: 'Lijneinde: Geen',\n linecap_round: 'Lijneinde: Rond',\n linecap_square: 'Lijneinde: Vierkant',\n linejoin_bevel: 'Lijnverbinding: Afgestompt',\n linejoin_miter: 'Lijnverbinding: Hoek',\n linejoin_round: 'Lijnverbinding: Rond',\n angle: 'Draai',\n blur: 'Verander Gaussische vervaging waarde',\n opacity: 'Verander opaciteit geselecteerde item',\n circle_cx: 'Verander het X coordinaat van het cirkel middelpunt',\n circle_cy: 'Verander het Y coordinaat van het cirkel middelpunt',\n circle_r: 'Verander de cirkel radius',\n ellipse_cx: 'Verander het X coordinaat van het ellips middelpunt',\n ellipse_cy: 'Verander het Y coordinaat van het ellips middelpunt',\n ellipse_rx: 'Verander ellips X radius',\n ellipse_ry: 'Verander ellips Y radius',\n line_x1: 'Verander start X coordinaat van de lijn',\n line_x2: 'Verander eind X coordinaat van de lijn',\n line_y1: 'Verander start Y coordinaat van de lijn',\n line_y2: 'Verander eind Y coordinaat van de lijn',\n rect_height: 'Verander hoogte rechthoek',\n rect_width: 'Verander breedte rechthoek',\n corner_radius: 'Verander hoekradius rechthoek',\n image_width: 'Verander breedte afbeelding',\n image_height: 'Verander hoogte afbeelding',\n image_url: 'Verander URL',\n node_x: 'Verander X coordinaat knooppunt',\n node_y: 'Verander Y coordinaat knooppunt',\n seg_type: 'Verander segment type',\n straight_segments: 'Recht',\n curve_segments: 'Gebogen',\n text_contents: 'Wijzig tekst',\n font_family: 'Verander lettertype',\n font_size: 'Verander lettertype grootte',\n bold: 'Vet',\n italic: 'Cursief',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Hoofdmenu',\n bkgnd_color_opac: 'Verander achtergrond kleur/doorzichtigheid',\n connector_no_arrow: 'Geen pijl',\n fitToContent: 'Pas om inhoud',\n fit_to_all: 'Pas om alle inhoud',\n fit_to_canvas: 'Pas om canvas',\n fit_to_layer_content: 'Pas om laag inhoud',\n fit_to_sel: 'Pas om selectie',\n align_relative_to: 'Uitlijnen relatief ten opzichte van ...',\n relativeTo: 'Relatief ten opzichte van:',\n page: 'Pagina',\n largest_object: 'Grootste object',\n selected_objects: 'Geselecteerde objecten',\n smallest_object: 'Kleinste object',\n new_doc: 'Nieuwe afbeelding',\n open_doc: 'Open afbeelding',\n export_img: 'Export',\n save_doc: 'Afbeelding opslaan',\n import_doc: 'Importeer SVG',\n align_to_page: 'Lijn element uit relatief ten opzichte van de pagina',\n align_bottom: 'Onder uitlijnen',\n align_center: 'Centreren',\n align_left: 'Links uitlijnen',\n align_middle: 'Midden uitlijnen',\n align_right: 'Rechts uitlijnen',\n align_top: 'Boven uitlijnen',\n mode_select: 'Selecteer',\n mode_fhpath: 'Potlood',\n mode_line: 'Lijn',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Vrije stijl rechthoek',\n mode_ellipse: 'Ellips',\n mode_circle: 'Cirkel',\n mode_fhellipse: 'Vrije stijl ellips',\n mode_path: 'Pad',\n mode_text: 'Tekst',\n mode_image: 'Afbeelding',\n mode_zoom: 'Zoom',\n no_embed: 'Let op: Dit plaatje kan niet worden geintegreerd (embeded). Het hangt af van dit pad om te worden afgebeeld.',\n undo: 'Ongedaan maken',\n redo: 'Opnieuw doen',\n tool_source: 'Bewerk bron',\n wireframe_mode: 'Draadmodel',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Groepeer elementen',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Zet om naar pad',\n reorient_path: 'Herorienteer pad',\n ungroup: 'Groepering opheffen',\n docprops: 'Documenteigenschappen',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Naar achtergrond',\n move_top: 'Naar voorgrond',\n node_clone: 'Kloon knooppunt',\n node_delete: 'Delete knooppunt',\n node_link: 'Koppel controle punten',\n add_subpath: 'Subpad toevoegen',\n openclose_path: 'Open/sluit subpad',\n source_save: 'Veranderingen toepassen',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Laag',\n layers: 'Layers',\n del: 'Delete laag',\n move_down: 'Beweeg laag omlaag',\n new: 'Nieuwe laag',\n rename: 'Hernoem laag',\n move_up: 'Beweeg laag omhoog',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Verplaats elementen naar:',\n move_selected: 'Verplaats geselecteerde elementen naar andere laag'\n },\n config: {\n image_props: 'Afbeeldingeigenschappen',\n doc_title: 'Titel',\n doc_dims: 'Canvas afmetingen',\n included_images: 'Ingesloten afbeeldingen',\n image_opt_embed: 'Toevoegen data (lokale bestanden)',\n image_opt_ref: 'Gebruik bestand referentie',\n editor_prefs: 'Editor eigenschappen',\n icon_size: 'Icoon grootte',\n language: 'Taal',\n background: 'Editor achtergrond',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Let op: De achtergrond wordt niet opgeslagen met de afbeelding.',\n icon_large: 'Groot',\n icon_medium: 'Gemiddeld',\n icon_small: 'Klein',\n icon_xlarge: 'Extra groot',\n select_predefined: 'Kies voorgedefinieerd:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Verkeerde waarde gegeven',\n noContentToFitTo: 'Geen inhoud om omheen te passen',\n dupeLayerName: 'Er is al een laag met die naam!',\n enterUniqueLayerName: 'Geef een unieke laag naam',\n enterNewLayerName: 'Geef een nieuwe laag naam',\n layerHasThatName: 'Laag heeft al die naam',\n QmoveElemsToLayer: \"Verplaats geselecteerde elementen naar laag '%s'?\",\n QwantToClear: 'Wil je de afbeelding leeg maken?\\nDit zal ook de ongedaan maak geschiedenis wissen!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'Er waren analyse fouten in je SVG bron.\\nTeruggaan naar de originele SVG bron?',\n QignoreSourceChanges: 'Veranderingen in de SVG bron negeren?',\n featNotSupported: 'Functie wordt niet ondersteund',\n enterNewImgURL: 'Geef de nieuwe afbeelding URL',\n defsFailOnSave: 'Let op: Vanwege een fout in je browser, kan dit plaatje verkeerd verschijnen (missende hoeken en/of elementen). Het zal goed verschijnen zodra het plaatje echt wordt opgeslagen.',\n loadingImage: 'Laden van het plaatje, even geduld aub...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Let op de volgende problemen: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'no',\n dir: 'ltr',\n common: {\n ok: 'Lagre',\n cancel: 'Avbryt',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Click å endre fyllfarge, shift-klikke for å endre slag farge',\n zoom_level: 'Endre zoomnivå',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Endre fyllfarge',\n stroke_color: 'Endre stroke color',\n stroke_style: 'Endre stroke dash stil',\n stroke_width: 'Endre stroke width',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Endre rotasjonsvinkelen',\n blur: 'Change gaussian blur value',\n opacity: 'Endre valgte elementet opasitet',\n circle_cx: 'Endre sirkelens CX koordinatsystem',\n circle_cy: 'Endre sirkelens koordinere cy',\n circle_r: 'Endre sirkelens radius',\n ellipse_cx: 'Endre ellipse&#39;s CX koordinatsystem',\n ellipse_cy: 'Endre ellipse&#39;s koordinere cy',\n ellipse_rx: 'Endre ellipse&#39;s x radius',\n ellipse_ry: 'Endre ellipse&#39;s y radius',\n line_x1: 'Endre linje begynner x koordinat',\n line_x2: 'Endre linje&#39;s ending x koordinat',\n line_y1: 'Endre linje begynner y koordinat',\n line_y2: 'Endre linje&#39;s ending y koordinat',\n rect_height: 'Endre rektangel høyde',\n rect_width: 'Endre rektangel bredde',\n corner_radius: 'Endre rektangel Corner Radius',\n image_width: 'Endre bilde bredde',\n image_height: 'Endre bilde høyde',\n image_url: 'Endre URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Endre tekst innholdet',\n font_family: 'Change Font Family',\n font_size: 'Endre skriftstørrelse',\n bold: 'Fet tekst',\n italic: 'Kursiv tekst',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Endre bakgrunnsfarge / opacity',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Passer til alt innhold',\n fit_to_canvas: 'Tilpass til lerret',\n fit_to_layer_content: 'Fit to lag innhold',\n fit_to_sel: 'Tilpass til valg',\n align_relative_to: 'Juster i forhold til ...',\n relativeTo: 'i forhold til:',\n page: 'side',\n largest_object: 'største objekt',\n selected_objects: 'velges objekter',\n smallest_object: 'minste objekt',\n new_doc: 'New Image',\n open_doc: 'Åpne Image',\n export_img: 'Export',\n save_doc: 'Lagre bilde',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Midtstill',\n align_left: 'Venstrejuster',\n align_middle: 'Rett Middle',\n align_right: 'Høyrejuster',\n align_top: 'Align Top',\n mode_select: 'Select Tool',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Linjeverktøy',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand rektangel',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Text Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Angre',\n redo: 'Redo',\n tool_source: 'Edit Source',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Gruppe Elements',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Dele opp Elements',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Move to Bottom',\n move_top: 'Flytt til toppen',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Lagre',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Slett laget',\n move_down: 'Flytt laget ned',\n new: 'Nytt lag',\n rename: 'Rename Layer',\n move_up: 'Flytt Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Velg forhåndsdefinerte:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'pl',\n dir: 'ltr',\n author: 'Aleksander Lurie',\n common: {\n ok: 'OK',\n cancel: 'Anuluj',\n key_backspace: 'usuń',\n key_del: 'usuń',\n key_down: 'w dół',\n key_up: 'w górę',\n more_opts: 'więcej opcji',\n url: 'adres url',\n width: 'Szerokość',\n height: 'Wysokość'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Pokaż/ukryj więcej opcji obramowania',\n palette_info: 'Kliknij aby zmienić kolor wypełnienia, przytrzymaj shift aby zmienić kolor obramowania',\n zoom_level: 'Zmiana powiększenia',\n panel_drag: 'Przeciągnij w lewo/prawo aby zmienić szerokość panelu',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identyfikator elementu',\n fill_color: 'Zmień kolor wypełnienia',\n stroke_color: 'Zmień kolor obramowania',\n stroke_style: 'Zmień styl obramowania',\n stroke_width: 'Zmień szerokość obramowania o 1, przytrzymaj shift aby zmienić szerokość o 0.1',\n pos_x: 'Zmień współrzędną X',\n pos_y: 'Zmień współrzędną Y',\n linecap_butt: 'Zakończenie linii: grzbiet',\n linecap_round: 'Zakończenie linii: zaokrąglone',\n linecap_square: 'Zakończenie linii: kwadrat',\n linejoin_bevel: 'Łączenie linii: ścięte',\n linejoin_miter: 'Łączenie linii: ostre',\n linejoin_round: 'Łączenie linii: zaokrąglone',\n angle: 'Zmień kąt obrotu',\n blur: 'Zmień wartość rozmycia gaussa',\n opacity: 'Zmień przezroczystość zaznaczonego elementu',\n circle_cx: 'Zmień współrzędną cx okręgu',\n circle_cy: 'Zmień współrzędną cy okręgu',\n circle_r: 'zmień promień okręgu',\n ellipse_cx: 'Zmień współrzędną cx elipsy',\n ellipse_cy: 'Zmień współrzędną cy elipsy',\n ellipse_rx: 'Zmień promień x elipsy',\n ellipse_ry: 'Zmień promień y elipsy',\n line_x1: 'Zmień współrzędna x początku linii',\n line_x2: 'Zmień współrzędną x końca linii',\n line_y1: 'Zmień współrzędną y początku linii',\n line_y2: 'Zmień współrzędną y końca linii',\n rect_height: 'Zmień wysokość prostokąta',\n rect_width: 'Zmień szerokość prostokąta',\n corner_radius: 'Zmień promień zaokrąglenia narożników prostokąta',\n image_width: 'Zmień wysokość obrazu',\n image_height: 'Zmień szerokość obrazu',\n image_url: 'Zmień adres URL',\n node_x: 'Zmień współrzędną x węzła',\n node_y: 'Zmień współrzędną y węzła',\n seg_type: 'Zmień typ segmentu',\n straight_segments: 'Prosty',\n curve_segments: 'Zaokrąglony',\n text_contents: 'Zmień text',\n font_family: 'Zmień krój czcionki',\n font_size: 'Zmień rozmiar czcionki',\n bold: 'Pogrubienie textu',\n italic: 'Kursywa',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Menu główne',\n bkgnd_color_opac: 'Zmiana koloru/przezroczystości tła',\n connector_no_arrow: 'Brak strzałek',\n fitToContent: 'Dopasuj do zawartości',\n fit_to_all: 'Dopasuj do całej zawartości',\n fit_to_canvas: 'Dopasuj do widoku',\n fit_to_layer_content: 'Dopasuj do zawartości warstwy',\n fit_to_sel: 'Dopasuj do zaznaczenia',\n align_relative_to: 'Wyrównaj relatywnie do ...',\n relativeTo: 'relatywnie do:',\n page: 'strona',\n largest_object: 'największy obiekt',\n selected_objects: 'zaznaczone obiekty',\n smallest_object: 'najmniejszy obiekt',\n new_doc: 'Nowy obraz',\n open_doc: 'Otwórz obraz',\n export_img: 'Eksportuj',\n save_doc: 'Zapisz obraz',\n import_doc: 'Importuj SVG',\n align_to_page: 'Wyrównaj element do strony',\n align_bottom: 'Wyrównaj do dołu',\n align_center: 'Wyśrodkuj w poziomie',\n align_left: 'Wyrównaj do lewej',\n align_middle: 'Wyśrodkuj w pionie',\n align_right: 'Wyrównaj do prawej',\n align_top: 'Wyrównaj do góry',\n mode_select: 'Zaznaczenie',\n mode_fhpath: 'Ołówek',\n mode_line: 'Linia',\n mode_rect: 'Prostokąt',\n mode_square: 'Kwadrat',\n mode_fhrect: 'Dowolny prostokąt',\n mode_ellipse: 'Elipsa',\n mode_circle: 'Okrąg',\n mode_fhellipse: 'Dowolna elipsa',\n mode_path: 'Ścieżka',\n mode_text: 'Tekst',\n mode_image: 'Obraz',\n mode_zoom: 'Powiększenie',\n no_embed: 'Uwaga: Ten obraz nie może być osadzony. Być może podany adres na to nie pozwala',\n undo: 'Wstecz',\n redo: 'Dalej',\n tool_source: 'Edytuj źródło',\n wireframe_mode: 'Tryb szkieletowy',\n clone: 'Klonuj element(y)',\n del: 'Usuń warstwę',\n group_elements: 'Grupuj elementy',\n make_link: 'Utwórz łącze',\n set_link_url: 'Ustal adres URL (pozostaw puste aby usunąć)',\n to_path: 'Konwertuj do ścieżki',\n reorient_path: 'Zresetuj obwiednię',\n ungroup: 'Rozgrupuj elementy',\n docprops: 'Właściwości dokumentu',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Przenieś pod spód',\n move_top: 'Przenieś na wierzch',\n node_clone: 'Klonuj węzeł',\n node_delete: 'Usuń węzeł',\n node_link: 'Podłącz punkty kontrolne',\n add_subpath: 'Dodaj ścieżkę podrzędną',\n openclose_path: 'Otwórz/zamknij ścieżkę podrzędną',\n source_save: 'Zachowaj zmiany',\n cut: 'Wytnij',\n copy: 'Kopiuj',\n paste: 'Wklej',\n paste_in_place: 'Wklej w miejscu',\n delete: 'Usuń',\n group: 'Grupuj',\n move_front: 'Przenieś do przodu',\n move_up: 'Przenieś warstwę w górę',\n move_down: 'Przenieś warstwę w dół',\n move_back: 'Przenieś do tyłu'\n },\n layers: {\n layer: 'Warstwa',\n layers: 'Warstwy',\n del: 'Usuń warstwę',\n move_down: 'Przenieś warstwę w dół',\n new: 'Nowa warstwa',\n rename: 'Zmień nazwę warstwy',\n move_up: 'Przenieś warstwę w górę',\n dupe: 'Duplikuj warstwę',\n merge_down: 'Scal w dół',\n merge_all: 'Scal wszystko',\n move_elems_to: 'Przenieś elementy do:',\n move_selected: 'Przenieś zaznaczone elementy do innej warstwy'\n },\n config: {\n image_props: 'Własciwości obrazu',\n doc_title: 'Tytuł',\n doc_dims: 'Wymiary pola roboczego',\n included_images: 'Dołączone obrazy',\n image_opt_embed: 'Dane osadzone (pliki lokalne)',\n image_opt_ref: 'Użyj referencji do pliku',\n editor_prefs: 'Ustawienia edytora',\n icon_size: 'Rozmiar ikon',\n language: 'Język',\n background: 'Tło edytora',\n editor_img_url: 'Adres URL obrazu',\n editor_bg_note: 'Uwaga: Tło nie zostało zapisane z obrazem.',\n icon_large: 'Duże',\n icon_medium: 'Średnie',\n icon_small: 'Małe',\n icon_xlarge: 'Bardzo duże',\n select_predefined: 'Wybierz predefiniowany:',\n units_and_rulers: 'Jednostki/Linijki',\n show_rulers: 'Pokaż linijki',\n base_unit: 'Podstawowa jednostka:',\n grid: 'Siatka',\n snapping_onoff: 'Włącz/wyłącz przyciąganie',\n snapping_stepsize: 'Przyciągaj co:',\n grid_color: 'Kolor siatki'\n },\n notification: {\n invalidAttrValGiven: 'Podano nieprawidłową wartość',\n noContentToFitTo: 'Brak zawartości do dopasowania',\n dupeLayerName: 'Istnieje już warstwa o takiej nazwie!',\n enterUniqueLayerName: 'Podaj unikalną nazwę warstwy',\n enterNewLayerName: 'Podaj nazwe nowej warstwy',\n layerHasThatName: 'Warstwa już tak się nazywa',\n QmoveElemsToLayer: 'Przenies zaznaczone elementy do warstwy \\'%s\\'?',\n QwantToClear: 'Jesteś pewien, że chcesz wyczyścić pole robocze?\\nHistoria projektu również zostanie skasowana',\n QwantToOpen: 'Jesteś pewien, że chcesz otworzyć nowy plik?\\nHistoria projektu również zostanie skasowana',\n QerrorsRevertToSource: 'Błąd parsowania źródła Twojego pliku SVG.\\nPrzywrócić orginalne źródło pliku SVG?',\n QignoreSourceChanges: 'Zignorowac zmiany w źródle pliku SVG?',\n featNotSupported: 'Funkcjonalność niedostępna',\n enterNewImgURL: 'Podaj adres URL nowego obrazu',\n defsFailOnSave: 'Uwaga: Ze względu na błąd w przeglądarce, ten obraz może się źle wyswietlać (brak gradientów lub elementów). Będzie jednak wyświetlał się poprawnie skoro został zapisany.',\n loadingImage: 'Ładowanie obrazu, proszę czekać...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Zwróć uwagę na nastepujące kwestie: ',\n unsavedChanges: 'Wykryto niezapisane zmiany.',\n enterNewLinkURL: 'Wpisz nowy adres URL hiperłącza',\n errorLoadingSVG: 'Błąd: Nie można załadować danych SVG',\n URLLoadFail: 'Nie można załadować z adresu URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'pt-BR',\n dir: 'ltr',\n common: {\n ok: 'OK',\n cancel: 'Cancelar',\n key_backspace: 'Tecla backspace',\n key_del: 'Tecla delete',\n key_down: 'Seta para baixo',\n key_up: 'Seta para cima',\n more_opts: 'Mais opções',\n url: 'URL',\n width: 'Largura',\n height: 'Altura'\n },\n misc: {\n powered_by: 'Tecnologia'\n },\n ui: {\n toggle_stroke_tools: 'Mais opções de traço',\n palette_info: 'Click para mudar a cor de preenchimento, shift-click para mudar a cor do traço',\n zoom_level: 'Mudar zoom',\n panel_drag: 'Arraste para redimensionar o painel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identifica o elemento',\n fill_color: 'Mudar a cor de preenchimento',\n stroke_color: 'Mudar a cor do traço',\n stroke_style: 'Mudar o estilo do traço',\n stroke_width: 'Mudar a espessura do traço em 1, shift-click para mudar 0.1',\n pos_x: 'Mudar a coordenada X',\n pos_y: 'Mudar a coordenada Y',\n linecap_butt: 'Estilo do fim do traço: Topo',\n linecap_round: 'Estilo do fim do traço: Redondo',\n linecap_square: 'Estilo do fim do traço: Quadrado',\n linejoin_bevel: 'Estilo da Aresta: Chanfro',\n linejoin_miter: 'Estilo da Aresta: Reto',\n linejoin_round: 'Estilo da Aresta: Redondo',\n angle: 'Mudar ângulo de rotação',\n blur: 'Mudar valor de desfoque',\n opacity: 'Mudar opacidade do item selecionado',\n circle_cx: 'Mudar a coordenada cx do círculo',\n circle_cy: 'Mudar a coordenada cy do círculo',\n circle_r: 'Mudar o raio do círculo',\n ellipse_cx: 'Mudar a coordenada cx da elípse',\n ellipse_cy: 'Mudar a coordenada cy da elípse',\n ellipse_rx: 'Mudar o raio x da elípse',\n ellipse_ry: 'Mudar o raio y da elípse',\n line_x1: 'Mudar a coordenada x do início da linha',\n line_x2: 'Mudar a coordenada x do fim da linha',\n line_y1: 'Mudar a coordenada y do início da linha',\n line_y2: 'Mudar a coordenada y do fim da linha',\n rect_height: 'Mudar a altura do retângulo',\n rect_width: 'Mudar a largura do retângulo',\n corner_radius: 'Mudar o raio da aresta do retângulo',\n image_width: 'Mudar a largura da imagem',\n image_height: 'Mudar a altura da imagem',\n image_url: 'Mudar URL',\n node_x: 'Mudar a coordenada x da aresta',\n node_y: 'Mudar a coordenada y da aresta',\n seg_type: 'Mudar o tipo de segmento',\n straight_segments: 'Reto',\n curve_segments: 'Curvo',\n text_contents: 'Mudar conteúdo do texto',\n font_family: 'Mudar o estilo da fonte',\n font_size: 'Mudar o tamanho da fonte',\n bold: 'Negrito',\n italic: 'Italico',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Menu Principal',\n bkgnd_color_opac: 'Mudar cor/opacidade do fundo',\n connector_no_arrow: 'Sem flecha',\n fitToContent: 'Ajustar ao conteúdo',\n fit_to_all: 'Ajustar a todo conteúdo',\n fit_to_canvas: 'Ajustar à tela',\n fit_to_layer_content: 'Ajustar ao conteúdo da camada',\n fit_to_sel: 'Ajustar à seleção',\n align_relative_to: 'Alinhar em relação à ...',\n relativeTo: 'Referência:',\n page: 'página',\n largest_object: 'maior objeto',\n selected_objects: 'objetos selecionados',\n smallest_object: 'menor objeto',\n new_doc: 'Nova imagem',\n open_doc: 'Abrir imagem',\n export_img: 'Export',\n save_doc: 'Salvar imagem',\n import_doc: 'Importar SVG',\n align_to_page: 'Alinhar elemento na página',\n align_bottom: 'Alinhar no fundo',\n align_center: 'Alinhar no centro',\n align_left: 'Alinhar na esquerda',\n align_middle: 'Alinhar no meio',\n align_right: 'Alinhar na direita',\n align_top: 'Alinhar no topo',\n mode_select: 'Selecão',\n mode_fhpath: 'Lápis',\n mode_line: 'Linha',\n mode_rect: 'Retângulo',\n mode_square: 'Quadrado',\n mode_fhrect: 'Retângulo a mão-livre',\n mode_ellipse: 'Elípse',\n mode_circle: 'Círculo',\n mode_fhellipse: 'Elípse a mão-livre',\n mode_path: 'Contorno',\n mode_text: 'Texto',\n mode_image: 'Imagem',\n mode_zoom: 'Zoom',\n no_embed: 'Atenção: Esta imagem não pode ser incorporada e dependerá de seu caminho para ser exibida',\n undo: 'Desfazer',\n redo: 'Refazer',\n tool_source: 'Editar o código',\n wireframe_mode: 'Modo linhas',\n clone: 'Clonar Elemento(s)',\n del: 'Deletar Elemento(s)',\n group_elements: 'Agrupar Elementos',\n make_link: 'Criar (hyper)link',\n set_link_url: 'Alterar URL (em branco para remover)',\n to_path: 'Converter para Contorno',\n reorient_path: 'Reorientar contorno',\n ungroup: 'Desagrupar Elementos',\n docprops: 'Propriedades',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Mover para o fundo',\n move_top: 'Mover para o topo',\n node_clone: 'Clonar Aresta',\n node_delete: 'Deletar Aresta',\n node_link: 'Alinhar pontos de controle',\n add_subpath: 'Adicionar contorno',\n openclose_path: 'Abrir/Fechar contorno',\n source_save: 'Salvar',\n cut: 'Recortar',\n copy: 'Copiar',\n paste: 'Colar',\n paste_in_place: 'Colar no mesmo local',\n delete: 'Deletar',\n group: 'Agrupar',\n move_front: 'Trazer para Frente',\n move_up: 'Avançar',\n move_down: 'Recuar',\n move_back: 'Enviar para Trás'\n },\n layers: {\n layer: 'Camada',\n layers: 'Camadas',\n del: 'Deletar Camada',\n move_down: 'Enviar Camada para Trás',\n new: 'Nova Camada',\n rename: 'Renomear Camada',\n move_up: 'Trazer Camada para Frente',\n dupe: 'Duplicar Camada',\n merge_down: 'Achatar para baixo',\n merge_all: 'Achatar todas',\n move_elems_to: 'Mover elementos para:',\n move_selected: 'Mover elementos selecionados para outra camada'\n },\n config: {\n image_props: 'Propriedades',\n doc_title: 'Título',\n doc_dims: 'Dimensões',\n included_images: 'Imagens',\n image_opt_embed: 'Incorporadas (arquivos locais)',\n image_opt_ref: 'Usar referência',\n editor_prefs: 'Preferências',\n icon_size: 'Tamanho dos ícones',\n language: 'Idioma',\n background: 'Fundo da página',\n editor_img_url: 'URL da Imagem',\n editor_bg_note: 'Atenção: Fundo da página não será salvo.',\n icon_large: 'Grande',\n icon_medium: 'Médio',\n icon_small: 'Pequeno',\n icon_xlarge: 'Extra Grande',\n select_predefined: 'Modelos:',\n units_and_rulers: 'Unidade & Réguas',\n show_rulers: 'Mostrar réguas',\n base_unit: 'Unidade base:',\n grid: 'Grade',\n snapping_onoff: 'Snap on/off',\n snapping_stepsize: 'Intensidade do Snap:'\n },\n notification: {\n invalidAttrValGiven: 'Valor inválido',\n noContentToFitTo: 'Não há conteúdo',\n dupeLayerName: 'Nome duplicado',\n enterUniqueLayerName: 'Insira um nome único',\n enterNewLayerName: 'Insira um novo nome',\n layerHasThatName: 'A camada já pussui este nome',\n QmoveElemsToLayer: 'Mover elementos selecionados para a camada: \\'%s\\'?',\n QwantToClear: 'Deseja criar um novo arquivo?\\nO histórico também será apagado!',\n QwantToOpen: 'Deseja abrir um novo arquivo?\\nO histórico também será apagado!',\n QerrorsRevertToSource: 'Foram encontrados erros ná análise do código SVG.\\nReverter para o código SVG original?',\n QignoreSourceChanges: 'Ignorar as mudanças no código SVG?',\n featNotSupported: 'Recurso não suportado',\n enterNewImgURL: 'Insira nova URL da imagem',\n defsFailOnSave: 'Atenção: Devido a um bug em seu navegador, esta imagem pode apresentar erros, porém será salva corretamente.',\n loadingImage: 'Carregando imagem, por favor aguarde...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Atenção para as seguintes questões: ',\n unsavedChanges: 'Existem alterações não salvas.',\n enterNewLinkURL: 'Insira novo URL do hyperlink',\n errorLoadingSVG: 'Erro: Impossível carregar dados SVG',\n URLLoadFail: 'Impossível carregar deste URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'pt-PT',\n dir: 'ltr',\n common: {\n ok: 'Salvar',\n cancel: 'Cancelar',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Clique para mudar a cor de preenchimento, shift-clique para mudar a cor do curso',\n zoom_level: 'Alterar o nível de zoom',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Alterar a cor de preenchimento',\n stroke_color: 'Mudar a cor do curso',\n stroke_style: 'Alterar o estilo do traço do curso',\n stroke_width: 'Alterar a largura do curso',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Alterar o ângulo de rotação',\n blur: 'Change gaussian blur value',\n opacity: 'Mude a opacidade item selecionado',\n circle_cx: 'Cx Mudar círculo de coordenadas',\n circle_cy: 'Círculo Mudança cy coordenar',\n circle_r: 'Alterar círculo de raio',\n ellipse_cx: 'Alterar elipse cx coordenar',\n ellipse_cy: 'Elipse Mudança cy coordenar',\n ellipse_rx: 'Raio X Change elipse',\n ellipse_ry: 'Raio y Change elipse',\n line_x1: 'Altere a linha de partida coordenada x',\n line_x2: 'Altere a linha está terminando coordenada x',\n line_y1: 'Mudança na linha de partida coordenada y',\n line_y2: 'Mudança de linha está terminando coordenada y',\n rect_height: 'Alterar altura do retângulo',\n rect_width: 'Alterar a largura retângulo',\n corner_radius: 'Alterar Corner Rectangle Radius',\n image_width: 'Alterar a largura da imagem',\n image_height: 'Alterar altura da imagem',\n image_url: 'Alterar URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Alterar o conteúdo de texto',\n font_family: 'Alterar fonte Família',\n font_size: 'Alterar tamanho de letra',\n bold: 'Bold Text',\n italic: 'Texto em itálico',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Mudar a cor de fundo / opacidade',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Ajustar ao conteúdo',\n fit_to_all: 'Ajustar a todo o conteúdo',\n fit_to_canvas: 'Ajustar à tela',\n fit_to_layer_content: 'Ajustar o conteúdo da camada de',\n fit_to_sel: 'Ajustar à selecção',\n align_relative_to: 'Alinhar em relação a ...',\n relativeTo: 'em relação ao:',\n page: 'Página',\n largest_object: 'maior objeto',\n selected_objects: 'objetos eleitos',\n smallest_object: 'menor objeto',\n new_doc: 'Nova Imagem',\n open_doc: 'Abrir Imagem',\n export_img: 'Export',\n save_doc: 'Salvar Imagem',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Alinhar ao centro',\n align_left: 'Alinhar à Esquerda',\n align_middle: 'Alinhar Médio',\n align_right: 'Alinhar à Direita',\n align_top: 'Align Top',\n mode_select: 'Selecione a ferramenta',\n mode_fhpath: 'Ferramenta Lápis',\n mode_line: 'Ferramenta Linha',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Rectangle',\n mode_ellipse: 'Elipse',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Ferramenta de Texto',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Desfazer',\n redo: 'Refazer',\n tool_source: 'Fonte Editar',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Elementos do Grupo',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Elementos Desagrupar',\n docprops: 'Propriedades do Documento',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Move to Bottom',\n move_top: 'Move to Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Salvar',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Delete Layer',\n move_down: 'Move camada para baixo',\n new: 'New Layer',\n rename: 'Rename Layer',\n move_up: 'Move Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Selecione predefinidos:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'ro',\n dir: 'ltr',\n common: {\n ok: 'Ok',\n cancel: 'Anulaţi',\n key_backspace: 'backspace',\n key_del: 'ştergere',\n key_down: 'jos',\n key_up: 'sus',\n more_opts: 'Mai multe opţiuni',\n url: 'URL',\n width: 'Lăţime',\n height: 'Înălţime'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Arătaţi/ascundeţi mai multe unelte de contur',\n palette_info: 'Faceţi clic pentru a schimba culoarea de umplere, Shift-clic pentru a schimba culoarea de contur',\n zoom_level: 'Schimbarea nivelului de zoom',\n panel_drag: 'Trageţi la stanga/dreapta pentru redimensionare panou lateral',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identificare element',\n fill_color: 'Schimbarea culorii de umplere',\n stroke_color: 'Schimbarea culorii de contur',\n stroke_style: 'Schimbarea stilului de contur',\n stroke_width: 'Schimbarea lăţimii conturului',\n pos_x: 'Schimbă coordonata X',\n pos_y: 'Schimbă coordonata Y',\n linecap_butt: 'Capăt de linie: Butuc',\n linecap_round: 'Capăt de linie: Rotund',\n linecap_square: 'Capăt de linie: Pătrat',\n linejoin_bevel: 'Articulaţia liniei: Teşită',\n linejoin_miter: 'Articulaţia liniei: Unghi ascuţit',\n linejoin_round: 'Articulaţia liniei: Rotundă',\n angle: 'Schimbarea unghiul de rotaţie',\n blur: 'Schimbarea valorii estomparii gaussiene',\n opacity: 'Schimbarea gradului de opacitate',\n circle_cx: 'Schimbarea coordonatei CX a cercului',\n circle_cy: 'Schimbarea coordonatei CY a cercului',\n circle_r: 'Schimbarea razei cercului',\n ellipse_cx: 'Schimbarea coordonatei CX a elipsei',\n ellipse_cy: 'Schimbarea coordonatei CY a elipsei',\n ellipse_rx: 'Schimbarea razei elipsei X',\n ellipse_ry: 'Schimbarea razei elipsei Y',\n line_x1: 'Schimbarea coordonatei x a punctului de start',\n line_x2: 'Schimbarea coordonatei x a punctului final',\n line_y1: 'Schimbarea coordonatei y a punctului de start',\n line_y2: 'Schimbare coordonatei y a punctului final',\n rect_height: 'Schimbarea înălţimii dreptunghiului',\n rect_width: 'Schimbarea lăţimii dreptunghiului',\n corner_radius: 'Schimbarea razei colţului dreptunghiului',\n image_width: 'Schimbarea lăţimii imaginii',\n image_height: 'Schimbarea înălţimii imaginii',\n image_url: 'Schimbaţi URL-ul',\n node_x: 'Schimbă coordonata x a punctului',\n node_y: 'Schimbă coordonata x a punctului',\n seg_type: 'Schimbă tipul de segment',\n straight_segments: 'Drept',\n curve_segments: 'Curb',\n text_contents: 'Schimbarea conţinutului textului',\n font_family: 'Modificare familie de fonturi',\n font_size: 'Schimbă dimensiunea fontului',\n bold: 'Text Îngroşat',\n italic: 'Text Înclinat',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Menu Principal',\n bkgnd_color_opac: 'Schimbare culoare de fundal / opacitate',\n connector_no_arrow: 'Fără săgeată',\n fitToContent: 'Dimensionare la conţinut',\n fit_to_all: 'Potrivire la tot conţinutul',\n fit_to_canvas: 'Potrivire la Şevalet',\n fit_to_layer_content: 'Potrivire la conţinutul stratului',\n fit_to_sel: 'Potrivire la selecţie',\n align_relative_to: 'Aliniere în raport cu ...',\n relativeTo: 'în raport cu:',\n page: 'pagină',\n largest_object: 'cel mai mare obiect',\n selected_objects: 'obiectele alese',\n smallest_object: 'cel mai mic obiect',\n new_doc: 'Imagine nouă',\n open_doc: 'Imagine deschisă',\n export_img: 'Export',\n save_doc: 'Salvare imagine',\n import_doc: 'Importare SVG',\n align_to_page: 'Aliniere la pagină',\n align_bottom: 'Aliniere jos',\n align_center: 'Aliniere la centru',\n align_left: 'Aliniere la stânga',\n align_middle: 'Aliniere la mijloc',\n align_right: 'Aliniere la dreapta',\n align_top: 'Aliniere sus',\n mode_select: 'Unealtă de Selectare',\n mode_fhpath: 'Unealtă de Traiectorie',\n mode_line: 'Unealtă de Linie',\n mode_rect: 'Unealtă de Dreptunghi',\n mode_square: 'Unealtă de Pătrat',\n mode_fhrect: 'Dreptunghi cu mana liberă',\n mode_ellipse: 'Elipsă',\n mode_circle: 'Cerc',\n mode_fhellipse: 'Elipsă cu mana liberă',\n mode_path: 'Unealtă de Traiectorie',\n mode_text: 'Unealtă de Text',\n mode_image: 'Unealtă de Imagine',\n mode_zoom: 'Unealtă de Zoom',\n no_embed: 'NOTE: Aceasta imagine nu poate fi inglobată. Va depinde de aceasta traiectorie pentru a fi prezentată.',\n undo: 'Anulare',\n redo: 'Refacere',\n tool_source: 'Editare Cod Sursă',\n wireframe_mode: 'Mod Schelet',\n clone: 'Clonează Elementul/ele',\n del: 'Şterge Elementul/ele',\n group_elements: 'Grupare Elemente',\n make_link: 'Crează (hyper)link',\n set_link_url: 'Setează link URL (lăsaţi liber pentru eliminare)',\n to_path: 'Converteşte in Traiectorie',\n reorient_path: 'Reorientează Traiectoria',\n ungroup: 'Anulare Grupare Elemente',\n docprops: 'Proprietăţile Documentului',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Mutare în jos',\n move_top: 'Mutare în sus',\n node_clone: 'Clonează Punct',\n node_delete: 'Şterge Punct',\n node_link: 'Uneşte Punctele de Control',\n add_subpath: 'Adăugaţi sub-traiectorie',\n openclose_path: 'Deschide/inchide sub-traiectorie',\n source_save: 'Folosiţi Schimbările',\n cut: 'Tăiere',\n copy: 'Copiere',\n paste: 'Reproducere',\n paste_in_place: 'Reproducere pe loc',\n delete: 'Ştergere',\n group: 'Group',\n move_front: 'Pune in faţa',\n move_up: 'Pune in spate',\n move_down: 'Trimite in faţa',\n move_back: 'Trimite in spate'\n },\n layers: {\n layer: 'Strat',\n layers: 'Straturi',\n del: 'Ştergeţi Strat',\n move_down: 'Mutare Strat în Jos',\n new: 'Strat Nou',\n rename: 'Redenumiţi Stratul',\n move_up: 'Mutare Strat în Sus',\n dupe: 'Duplicaţi Stratul',\n merge_down: 'Fuzionare in jos',\n merge_all: 'Fuzionarea tuturor',\n move_elems_to: 'Mută elemente la:',\n move_selected: 'Mută elementele selectate pe un alt strat'\n },\n config: {\n image_props: 'Proprietăţile Imaginii',\n doc_title: 'Titlul',\n doc_dims: 'Dimensiunile Şevaletului',\n included_images: 'Imaginile Incluse',\n image_opt_embed: 'Includeţi Datele (fişiere locale)',\n image_opt_ref: 'Foloseşte referinţe la fişiere',\n editor_prefs: 'Preferinţele Editorului',\n icon_size: 'Dimensiunile Butoanelor',\n language: 'Limba',\n background: 'Fondul Editorului',\n editor_img_url: 'URL-ul Imaginii',\n editor_bg_note: 'Notă: Fondul nu va fi salvat cu imaginea.',\n icon_large: 'Mari',\n icon_medium: 'Medii',\n icon_small: 'Mici',\n icon_xlarge: 'Foarte Mari',\n select_predefined: 'Selecţii predefinite:',\n units_and_rulers: 'Unitati si Rigle',\n show_rulers: 'Arată Riglele',\n base_unit: 'Unitate de baza:',\n grid: 'Caroiaj',\n snapping_onoff: 'Fixare on/off',\n snapping_stepsize: 'Dimensiunea pasului de fixare:'\n },\n notification: {\n invalidAttrValGiven: 'Valoarea data nu este validă',\n noContentToFitTo: 'Fara conţinut de referinţă',\n dupeLayerName: 'Deja exista un strat numit asa!',\n enterUniqueLayerName: 'Rog introduceţi un nume unic',\n enterNewLayerName: 'Rog introduceţi un nume pentru strat',\n layerHasThatName: 'Statul deja are acest nume',\n QmoveElemsToLayer: \"Mutaţi elementele selectate pe stratul '%s'?\",\n QwantToClear: 'Doriti să ştergeţi desenul?\\nAceasta va sterge si posibilitatea de anulare!',\n QwantToOpen: 'Doriti sa deschideţi un nou fişier?\\nAceasta va şterge istoricul!',\n QerrorsRevertToSource: 'Sunt erori de parsing in sursa SVG.\\nRevenire la sursa SVG orginală?',\n QignoreSourceChanges: 'Ignoraţi schimbarile la sursa SVG?',\n featNotSupported: 'Funcţie neimplementată',\n enterNewImgURL: 'Introduceţi noul URL pentru Imagine',\n defsFailOnSave: 'NOTE: Din cauza unei erori in browserul dv., aceasta imagine poate apare gresit (fara gradiente sau elemente). Însă va apare corect dupa salvare.',\n loadingImage: 'Imaginea se incarcă, va rugam asteptaţi...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'De asemenea remarcati urmatoarele probleme: ',\n unsavedChanges: 'Sunt schimbări nesalvate.',\n enterNewLinkURL: 'IntroduAliniere în raport cu ...sceţi noul URL',\n errorLoadingSVG: 'Eroare: Nu se pot încărca datele SVG',\n URLLoadFail: 'Nu se poate încărca de la URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'ru',\n dir: 'ltr',\n common: {\n ok: 'Сохранить',\n cancel: 'Отменить',\n key_backspace: 'Backspace',\n key_del: 'Delete',\n key_down: 'Вниз',\n key_up: 'Вверх',\n more_opts: 'Доп. Настройки',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Показать/скрыть инструменты обводки',\n palette_info: 'Нажмите для изменения цвета заливки, Shift-Click изменить цвета обводки',\n zoom_level: 'Изменить масштаб',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Качество:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Идентификатор элемента',\n fill_color: 'Изменить цвет заливки',\n stroke_color: 'Изменить цвет обводки',\n stroke_style: 'Изменить стиль обводки',\n stroke_width: 'Изменить толщину обводки',\n pos_x: 'Изменить горизонтальный координат',\n pos_y: 'Изменить вертикальный координат',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Изменить угол поворота',\n blur: 'Изменяет значение размытия',\n opacity: 'Изменить непрозрачность элемента',\n circle_cx: 'Изменить горизонтальный координат (CX) окружности',\n circle_cy: 'Изменить вертикальный координат (CY) окружности',\n circle_r: 'Изменить радиус окружности',\n ellipse_cx: 'Изменить горизонтальный координат (CX) эллипса',\n ellipse_cy: 'Изменить вертикальный координат (CY) эллипса',\n ellipse_rx: 'Изменить горизонтальный радиус эллипса',\n ellipse_ry: 'Изменить вертикальный радиус эллипса',\n line_x1: 'Изменить горизонтальный координат X начальной точки линии',\n line_x2: 'Изменить горизонтальный координат X конечной точки линии',\n line_y1: 'Изменить вертикальный координат Y начальной точки линии',\n line_y2: 'Изменить вертикальный координат Y конечной точки линии',\n rect_height: 'Изменениe высоту прямоугольника',\n rect_width: 'Измененить ширину прямоугольника',\n corner_radius: 'Радиус закругленности угла',\n image_width: 'Изменить ширину изображения',\n image_height: 'Изменить высоту изображения',\n image_url: 'Изменить URL',\n node_x: 'Изменить горизонтальную координату узла',\n node_y: 'Изменить вертикальную координату узла',\n seg_type: 'Изменить вид',\n straight_segments: 'Отрезок',\n curve_segments: 'Сплайн',\n text_contents: 'Изменить содержание текста',\n font_family: 'Изменить семейство шрифтов',\n font_size: 'Изменить размер шрифта',\n bold: 'Жирный',\n italic: 'Курсив',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Главное меню',\n bkgnd_color_opac: 'Изменить цвет фона или прозрачность',\n connector_no_arrow: 'Нет стрелки',\n fitToContent: 'Под размер содержимого',\n fit_to_all: 'Под размер всех слоев',\n fit_to_canvas: 'Под размер холста',\n fit_to_layer_content: 'Под размер содержания слоя',\n fit_to_sel: 'Под размер выделенного',\n align_relative_to: 'Выровнять по отношению к ...',\n relativeTo: 'По отношению к ',\n page: 'страница',\n largest_object: 'Наибольший объект',\n selected_objects: 'Выделенные объекты',\n smallest_object: 'Самый маленький объект',\n new_doc: 'Создать изображение',\n open_doc: 'Открыть изображение',\n export_img: 'Экспорт',\n save_doc: 'Сохранить изображение',\n import_doc: 'Импорт изображения',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Выровнять по нижнему краю',\n align_center: 'Центрировать по вертикальной оси',\n align_left: 'По левому краю',\n align_middle: 'Центрировать по горизонтальной оси',\n align_right: 'По правому краю',\n align_top: 'Выровнять по верхнему краю',\n mode_select: 'Выделить',\n mode_fhpath: 'Карандаш',\n mode_line: 'Линия',\n mode_rect: 'Прямоугольник',\n mode_square: 'Квадрат',\n mode_fhrect: 'Прямоугольник от руки',\n mode_ellipse: 'Эллипс',\n mode_circle: 'Окружность',\n mode_fhellipse: 'Эллипс от руки',\n mode_path: 'Контуры',\n mode_text: 'Текст',\n mode_image: 'Изображение',\n mode_zoom: 'Лупа',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Отменить',\n redo: 'Вернуть',\n tool_source: 'Редактировать исходный код',\n wireframe_mode: 'Каркас',\n clone: 'Клонировать элемент(ы)',\n del: 'Удалить элемент(ы)',\n group_elements: 'Создать группу элементов',\n make_link: 'Сделать ссылкой',\n set_link_url: 'Ссылка(оставьте пустым для удаления)',\n to_path: 'В контур',\n reorient_path: 'Изменить ориентацию контура',\n ungroup: 'Разгруппировать элементы',\n docprops: 'Свойства документа',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Опустить',\n move_top: 'Поднять',\n node_clone: 'Создать копию узла',\n node_delete: 'Удалить узел',\n node_link: 'Связать узлы',\n add_subpath: 'Добавить линию',\n openclose_path: 'Разомкнуть/Замкнуть линию',\n source_save: 'Сохранить',\n cut: 'Вырезать',\n copy: 'Копировать',\n paste: 'Вставить',\n paste_in_place: 'Вставить сюда',\n Delete: 'Удалить',\n group: 'Группировка',\n move_front: 'На передний план',\n move_up: 'Передвинуть вперед',\n move_down: 'Передвинуть назад',\n move_back: 'На задний план'\n },\n layers: {\n layer: 'Слой',\n layers: 'Слои',\n del: 'Удалить слой',\n move_down: 'Опустить слой',\n new: 'Создать слой',\n rename: 'Переименовать Слой',\n move_up: 'Поднять слой',\n dupe: 'Копировать слой',\n merge_down: 'Объединить с нижним',\n merge_all: 'Объединить все',\n move_elems_to: 'Переместить выделенные элементы:',\n move_selected: 'Переместить выделенные элементы на другой слой'\n },\n config: {\n image_props: 'Свойства изображения',\n doc_title: 'Название',\n doc_dims: 'Размеры холста',\n included_images: 'Встроенные изображения',\n image_opt_embed: 'Локальные файлы',\n image_opt_ref: 'По ссылкам',\n editor_prefs: 'Параметры',\n icon_size: 'Размер значков',\n language: 'Язык',\n background: 'Фон',\n editor_img_url: 'Изображение URL',\n editor_bg_note: '(Фон не сохранится вместе с изображением.)',\n icon_large: 'Большие',\n icon_medium: 'Средние',\n icon_small: 'Малые',\n icon_xlarge: 'Огромные',\n select_predefined: 'Выбирать предопределенный размер',\n units_and_rulers: 'Единицы & Линейки',\n show_rulers: 'Показывать линейки',\n base_unit: 'Единицы:',\n grid: 'Сетка',\n snapping_onoff: 'Привязка вкл/выкл',\n snapping_stepsize: 'Шаг привязки:',\n grid_color: 'Цвет сетки'\n },\n notification: {\n invalidAttrValGiven: 'Некорректное значение аргумента',\n noContentToFitTo: 'Нет содержания, по которому выровнять.',\n dupeLayerName: 'Слой с этим именем уже существует.',\n enterUniqueLayerName: 'Пожалуйста, введите имя для слоя.',\n enterNewLayerName: 'Пожалуйста, введите новое имя.',\n layerHasThatName: 'Слой уже называется этим именем.',\n QmoveElemsToLayer: \"Переместить выделенные элементы на слой '%s'?\",\n QwantToClear: 'Вы хотите очистить?\\nИстория действий будет забыта!',\n QwantToOpen: 'Открыть новый файл?\\nИстория действий будет забыта!',\n QerrorsRevertToSource: 'Была проблема при парсинге вашего SVG исходного кода.\\nЗаменить его предыдущим SVG кодом?',\n QignoreSourceChanges: 'Забыть без сохранения?',\n featNotSupported: 'Возможность не реализована',\n enterNewImgURL: 'Введите новый URL изображения',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Загрузка изоражения, придется подождать...',\n saveFromBrowser: \"Выберите 'Сохранить как...' в вашем браузере (возможно через меню файл или в контекстном меню) чтобы сохранить как файл %s.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'Есть несохраненные изменения.',\n enterNewLinkURL: 'Введите новую ссылку URL',\n errorLoadingSVG: 'Ошибка: Не удалось загрузить SVG данные',\n URLLoadFail: 'Не удалось загрузить по ссылке URL',\n retrieving: 'Получение \\'%s\\' ...',\n popupWindowBlocked: 'Всплывающее окно могло заблокироваться браузером',\n exportNoBlur: 'Размытые элементы отображены как неразмытые',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Текст может показываться не так как должен'\n }\n};\n","export default {\n lang: 'sk',\n dir: 'ltr',\n common: {\n ok: 'Uložiť',\n cancel: 'Zrušiť',\n key_backspace: 'Backspace',\n key_del: 'Delete',\n key_down: 'šípka dole',\n key_up: 'šípka hore',\n more_opts: 'Viac možností',\n url: 'URL',\n width: 'Šírka',\n height: 'Výška'\n },\n misc: {\n powered_by: 'Beží na'\n },\n ui: {\n toggle_stroke_tools: 'Skryť/ukázať viac nástrojov pre krivku',\n palette_info: 'Kliknutím zmeníte farbu výplne, so Shiftom zmeníte farbu obrysu',\n zoom_level: 'Zmena priblíženia',\n panel_drag: 'Potiahnutie vľavo/vpravo na zmenu veľkosti bočného panela',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Zmeniť ID elementu',\n fill_color: 'Zmeniť farbu výplne',\n stroke_color: 'Zmeniť farbu obrysu',\n stroke_style: 'Zmeniť štýl obrysu',\n stroke_width: 'Zmeniť hrúbku obrysu',\n pos_x: 'Zmeniť súradnicu X',\n pos_y: 'Zmeniť súradnicu Y',\n linecap_butt: 'Koniec čiary: presný',\n linecap_round: 'Koniec čiary: zaoblený',\n linecap_square: 'Koniec čiary: so štvorcovým presahom',\n linejoin_bevel: 'Napojenie čiar: skosené',\n linejoin_miter: 'Napojenie čiar: ostré',\n linejoin_round: 'Napojenie čiar: oblé',\n angle: 'Zmeniť uhol natočenia',\n blur: 'Zmeniť intenzitu rozmazania',\n opacity: 'Zmeniť prehľadnosť vybraných položiek',\n circle_cx: 'Zmeniť súradnicu X stredu kružnice',\n circle_cy: 'Zmeniť súradnicu Y stredu kružnice',\n circle_r: 'Zmeniť polomer kružnice',\n ellipse_cx: 'Zmeniť súradnicu X stredu elipsy',\n ellipse_cy: 'Zmeniť súradnicu Y stredu elipsy',\n ellipse_rx: 'Zmeniť polomer X elipsy',\n ellipse_ry: 'Zmeniť polomer Y elipsy',\n line_x1: 'Zmeniť počiatočnú súradnicu X čiary',\n line_x2: 'Zmeniť koncovú súradnicu X čiary',\n line_y1: 'Zmeniť počiatočnú súradnicu Y čiary',\n line_y2: 'Zmeniť koncovú súradnicu Y čiary',\n rect_height: 'Zmena výšku obdĺžnika',\n rect_width: 'Zmeniť šírku obdĺžnika',\n corner_radius: 'Zmeniť zaoblenie rohov obdĺžnika',\n image_width: 'Zmeniť šírku obrázka',\n image_height: 'Zmeniť výšku obrázka',\n image_url: 'Zmeniť URL',\n node_x: 'Zmeniť uzlu súradnicu X',\n node_y: 'Zmeniť uzlu súradnicu Y',\n seg_type: 'Zmeniť typ segmentu',\n straight_segments: 'Rovný',\n curve_segments: 'Krivka',\n text_contents: 'Zmeniť text',\n font_family: 'Zmeniť font',\n font_size: 'Zmeniť veľkosť písma',\n bold: 'Tučné',\n italic: 'Kurzíva',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Hlavné menu',\n bkgnd_color_opac: 'Zmeniť farbu a priehľadnosť pozadia',\n connector_no_arrow: 'Spojnica bez šípok',\n fitToContent: 'Prispôsobiť obsahu',\n fit_to_all: 'Prisposobiť celému obsahu',\n fit_to_canvas: 'Prispôsobiť stránke',\n fit_to_layer_content: 'Prispôsobiť obsahu vrstvy',\n fit_to_sel: 'Prispôsobiť výberu',\n align_relative_to: 'Zarovnať relatívne k ...',\n relativeTo: 'vzhľadom k:',\n page: 'stránke',\n largest_object: 'najväčšiemu objektu',\n selected_objects: 'zvoleným objektom',\n smallest_object: 'najmenšiemu objektu',\n new_doc: 'Nový obrázok',\n open_doc: 'Otvoriť obrázok',\n export_img: 'Export',\n save_doc: 'Uložiť obrázok',\n import_doc: 'Import Image',\n align_to_page: 'Zarovnať element na stránku',\n align_bottom: 'Zarovnať dole',\n align_center: 'Zarovnať na stred',\n align_left: 'Zarovnať doľava',\n align_middle: 'Zarovnať na stred',\n align_right: 'Zarovnať doprava',\n align_top: 'Zarovnať hore',\n mode_select: 'Výber',\n mode_fhpath: 'Ceruzka',\n mode_line: 'Čiara',\n mode_rect: 'Obdĺžnik',\n mode_square: 'Štvorec',\n mode_fhrect: 'Obdĺžnik voľnou rukou',\n mode_ellipse: 'Elipsa',\n mode_circle: 'Kružnica',\n mode_fhellipse: 'Elipsa voľnou rukou',\n mode_path: 'Krivka',\n mode_text: 'Text',\n mode_image: 'Obrázok',\n mode_zoom: 'Priblíženie',\n no_embed: 'POZNÁMKA: Tento obrázok nemôže byť vložený. Jeho zobrazenie bude závisieť na jeho ceste',\n undo: 'Späť',\n redo: 'Opakovať',\n tool_source: 'Upraviť SVG kód',\n wireframe_mode: 'Drôtový model',\n clone: 'Klonuj element(y)',\n del: 'Zmaž element(y)',\n group_elements: 'Zoskupiť elementy',\n make_link: 'Naviaž odkaz (hyper)link',\n set_link_url: 'Nastav odkaz URL (ak prázdny, odstráni sa)',\n to_path: 'Previesť na krivku',\n reorient_path: 'Zmeniť orientáciu krivky',\n ungroup: 'Zrušiť skupinu',\n docprops: 'Vlastnosti dokumentu',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Presunúť spodok',\n move_top: 'Presunúť na vrch',\n node_clone: 'Klonovať uzol',\n node_delete: 'Zmazať uzol',\n node_link: 'Prepojiť kontrolné body',\n add_subpath: 'Pridať ďalšiu súčasť krivky',\n openclose_path: 'Otvoriť/uzatvoriť súčasť krivky',\n source_save: 'Uložiť',\n cut: 'Vystrihnutie',\n copy: 'Kópia',\n paste: 'Vloženie',\n paste_in_place: 'Vloženie na pôvodnom mieste',\n delete: 'Zmazanie',\n group: 'Group',\n move_front: 'Vysuň navrch',\n move_up: 'Vysuň vpred',\n move_down: 'Zasuň na spodok',\n move_back: 'Zasuň dozadu'\n },\n layers: {\n layer: 'Vrstva',\n layers: 'Vrstvy',\n del: 'Odstrániť vrstvu',\n move_down: 'Presunúť vrstvu dole',\n new: 'Nová vrstva',\n rename: 'Premenovať vrstvu',\n move_up: 'Presunúť vrstvu hore',\n dupe: 'Zduplikovať vrstvu',\n merge_down: 'Zlúčiť s vrstvou dole',\n merge_all: 'Zlúčiť všetko',\n move_elems_to: 'Presunúť elementy do:',\n move_selected: 'Presunúť vybrané elementy do inej vrstvy'\n },\n config: {\n image_props: 'Vlastnosti obrázka',\n doc_title: 'Titulok',\n doc_dims: 'Rozmery plátna',\n included_images: 'Vložené obrázky',\n image_opt_embed: 'Vložiť data (lokálne súbory)',\n image_opt_ref: 'Použiť referenciu na súbor',\n editor_prefs: 'Vlastnosti editora',\n icon_size: 'Veľkosť ikon',\n language: 'Jazyk',\n background: 'Zmeniť pozadie',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Poznámka: Pozadie nebude uložené spolu s obrázkom.',\n icon_large: 'Veľká',\n icon_medium: 'Stredná',\n icon_small: 'Malá',\n icon_xlarge: 'Extra veľká',\n select_predefined: 'Vybrať preddefinovaný:',\n units_and_rulers: 'Jednotky & Pravítka',\n show_rulers: 'Ukáž pravítka',\n base_unit: 'Základné jednotky:',\n grid: 'Mriežka',\n snapping_onoff: 'Priväzovanie (do mriežky) zap/vyp',\n snapping_stepsize: 'Priväzovanie (do mriežky) veľkosť kroku:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Neplatná hodnota',\n noContentToFitTo: 'Vyberte oblasť na prispôsobenie',\n dupeLayerName: 'Vrstva s daným názvom už existuje!',\n enterUniqueLayerName: 'Zadajte jedinečný názov vrstvy',\n enterNewLayerName: 'Zadajte názov vrstvy',\n layerHasThatName: 'Vrstva už má zadaný tento názov',\n QmoveElemsToLayer: \"Presunúť elementy do vrstvy '%s'?\",\n QwantToClear: 'Naozaj chcete vymazať kresbu?\\n(História bude taktiež vymazaná!)!',\n QwantToOpen: 'Chcete otvoriť nový súbor?\\nTo však tiež vymaže Vašu UNDO knižnicu!',\n QerrorsRevertToSource: 'Chyba pri načítaní SVG dokumentu.\\nVrátiť povodný SVG dokument?',\n QignoreSourceChanges: 'Ignorovať zmeny v SVG dokumente?',\n featNotSupported: 'Vlastnosť nie je podporovaná',\n enterNewImgURL: 'Zadajte nové URL obrázka',\n defsFailOnSave: 'POZNÁMKA: Kvôli chybe v prehliadači sa tento obrázok môže zobraziť nesprávne (napr. chýbajúce prechody či elementy). Po uložení sa zobrazí správne.',\n loadingImage: 'Nahrávam obrázok, prosím čakajte ...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Môžu sa vyskytnúť nasledujúce problémy: ',\n unsavedChanges: 'Sú tu neuložené zmeny.',\n enterNewLinkURL: 'Zadajte nové URL odkazu (hyperlink)',\n errorLoadingSVG: 'Chyba: Nedajú sa načítať SVG data',\n URLLoadFail: 'Nemožno čítať z URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'sl',\n dir: 'ltr',\n common: {\n ok: 'V redu',\n cancel: 'Prekliči',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'dol',\n key_up: 'gor',\n more_opts: 'Več možnosti',\n url: 'URL',\n width: 'širina',\n height: 'višina'\n },\n misc: {\n powered_by: 'Izdelano z'\n },\n ui: {\n toggle_stroke_tools: 'Pokaži/skrij več orodij za oris',\n palette_info: 'Kliknite, če želite spremeniti barvo polnila, kliknite+Shift, če želite spremeniti barvo orisa',\n zoom_level: 'Povečava',\n panel_drag: 'Povlecite levo/desno za ogled stranske vrstice',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'ID elementa',\n fill_color: 'Spremeni barvo polnila',\n stroke_color: 'Spremeni barvo orisa',\n stroke_style: 'Spremeni slog orisa',\n stroke_width: 'Spreminjanje širino orisa',\n pos_x: 'Spremeni X koordinato',\n pos_y: 'Spremeni Y koordinato',\n linecap_butt: 'Začetek črte: odsekan',\n linecap_round: 'Začetek črte: zaobljen',\n linecap_square: 'Začetek črte: kvadraten',\n linejoin_bevel: 'Ovinek črte: Odsekan',\n linejoin_miter: 'Linejoin: V kot',\n linejoin_round: 'Linejoin: Zaobljen',\n angle: 'Spremeni kot zasuka',\n blur: 'Spremeni zameglitev roba',\n opacity: 'Spremeni prosojnost',\n circle_cx: 'Spremeni CX koordinato',\n circle_cy: 'Spremeni CY koordinato',\n circle_r: 'Spremeni polmer kroga',\n ellipse_cx: 'Spremeni CX koordinato',\n ellipse_cy: 'Spremeni CY koordinato',\n ellipse_rx: 'Spremeni X polmer',\n ellipse_ry: 'Spremeni Y polmer',\n line_x1: 'Spremeni začetno X koordinato',\n line_x2: 'Spremeni končno X koordinato',\n line_y1: 'Spremeni začetno Y koordinato',\n line_y2: 'Spremeni končno Y koordinato',\n rect_height: 'Spremeni višino pravokotnika',\n rect_width: 'Spremeni širino pravokotnika',\n corner_radius: 'Spremeni Pravokotnik Corner Radius',\n image_width: 'Spremeni širino slike',\n image_height: 'Spremeni višino slike',\n image_url: 'Spremeni URL',\n node_x: 'Spremeni X koordinato oglišča',\n node_y: 'Spremeni Y koordinato oglišča',\n seg_type: 'Spremeni vrsto odseka',\n straight_segments: 'Raven odsek',\n curve_segments: 'Ukrivljen odsek',\n text_contents: 'Spremeni besedilo',\n font_family: 'Spremeni tip pisave',\n font_size: 'Spremeni velikost pisave',\n bold: 'Krepko',\n italic: 'Poševno',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Glavni meni',\n bkgnd_color_opac: 'Spremeni barvo / prosojnost',\n connector_no_arrow: 'Brez puščice',\n fitToContent: 'Prilagodi vsebini',\n fit_to_all: 'Prilagodi vsemu',\n fit_to_canvas: 'Prilagodi sliki',\n fit_to_layer_content: 'Prilagodi sloju',\n fit_to_sel: 'Prilagodi izboru',\n align_relative_to: 'Poravnaj glede na ...',\n relativeTo: 'glede na:',\n page: 'page',\n largest_object: 'največji objekt',\n selected_objects: 'izbrani objekt',\n smallest_object: 'najmanjši objekt',\n new_doc: 'Nova slika',\n open_doc: 'Odpri sliko',\n export_img: 'Izvozi v PNG',\n save_doc: 'Shrani sliko',\n import_doc: 'Uvozi SVG',\n align_to_page: 'Poravnaj na stran',\n align_bottom: 'Poravnaj na dno',\n align_center: 'Poravnaj na sredino',\n align_left: 'Poravnaj levo',\n align_middle: 'Poravnaj na sredino',\n align_right: 'Poravnaj desno',\n align_top: 'Poravnaj na vrh',\n mode_select: 'Izberi',\n mode_fhpath: 'Svinčnik',\n mode_line: 'Crta',\n mode_rect: 'Pravokotnik',\n mode_square: 'Kvadrat',\n mode_fhrect: 'Prostoročni pravokotnik',\n mode_ellipse: 'Elipsa',\n mode_circle: 'Krog',\n mode_fhellipse: 'Prostoročna elipsa',\n mode_path: 'Pot',\n mode_text: 'Besedilo',\n mode_image: 'Slika',\n mode_zoom: 'Povečava',\n no_embed: 'OPOMBA: Ta slika ne more biti vključena. It will depend on this path to be displayed',\n undo: 'Razveljavi',\n redo: 'Uveljavi',\n tool_source: 'Uredi vir',\n wireframe_mode: 'Wireframe način',\n clone: 'Kloniraj element(e)',\n del: 'Izbriši element(e)',\n group_elements: 'Združi element(e)',\n make_link: 'Vstavi (hiper)povezavo',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Pretvori v pot',\n reorient_path: 'Reorient pot',\n ungroup: 'Razdruži elemente',\n docprops: 'Lastnosti dokumenta',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Premakni na dno',\n move_top: 'Premakni na vrh',\n node_clone: 'Kloniraj oglišče',\n node_delete: 'Izbriši oglišče',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Shrani',\n cut: 'Izreži',\n copy: 'Kopiraj',\n paste: 'Prilepi',\n paste_in_place: 'Prilepi na mesto',\n delete: 'Izbriši',\n group: 'Združi',\n move_front: 'Postavi v ospredje',\n move_up: 'Pomakni naporej',\n move_down: 'Pomakni nazaj',\n move_back: 'Postavi v ozadje'\n },\n layers: {\n layer: 'Sloj',\n layers: 'Sloji',\n del: 'Izbriši sloj',\n move_down: 'Premakni navzdol',\n new: 'Nov sloj',\n rename: 'Preimenuj sloj',\n move_up: 'Premakni navzgor',\n dupe: 'Podvoji sloj',\n merge_down: 'Združi s spodnjimi',\n merge_all: 'Združi vse',\n move_elems_to: 'Premakni elemente v:',\n move_selected: 'Premakne elemente v drug sloj'\n },\n config: {\n image_props: 'Lastnosti slike',\n doc_title: 'Naslov',\n doc_dims: 'Dimenzije slike',\n included_images: 'Vključene slike',\n image_opt_embed: 'Vključene (local files)',\n image_opt_ref: 'Povezane (Use file reference)',\n editor_prefs: 'Lastnosti urejevalnika',\n icon_size: 'Velikost ikon',\n language: 'Jezik',\n background: 'Ozadje urejevalnika',\n editor_img_url: 'URL slike',\n editor_bg_note: 'OPOMBA: Ozdaje ne bo shranjeno s sliko.',\n icon_large: 'velike',\n icon_medium: 'srednje',\n icon_small: 'majhne',\n icon_xlarge: 'zelo velike',\n select_predefined: 'Izberi prednastavljeno:',\n units_and_rulers: 'Enote & ravnilo',\n show_rulers: 'Pokaži ravnilo',\n base_unit: 'Osnovne enote',\n grid: 'Mreža',\n snapping_onoff: 'Pripni na mrežo DA/NE',\n snapping_stepsize: 'Snapping Step-Size:'\n },\n notification: {\n invalidAttrValGiven: 'Napačna vrednost!',\n noContentToFitTo: 'Ni vsebine za prilagajanje',\n dupeLayerName: 'Sloj s tem imenom že obstajal!',\n enterUniqueLayerName: 'Vnesite edinstveno ime sloja',\n enterNewLayerName: 'Vnesite ime novega sloja',\n layerHasThatName: 'Sloje že ima to ime',\n QmoveElemsToLayer: \"Premaknem izbrane elemente v sloj '%s'?\",\n QwantToClear: 'Ali želite počistiti risbo?\\nTo bo izbrisalo tudi zgodovino korakov (ni mogoče razveljaviti)!',\n QwantToOpen: 'Ali želite odpreti novo datoteko?\\nTo bo izbrisalo tudi zgodovino korakov (ni mogoče razveljaviti)!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignoriram spremembe, narejene v SVG kodi?',\n featNotSupported: 'Ni podprto',\n enterNewImgURL: 'Vnesite nov URL slike',\n defsFailOnSave: 'OPOMBA: Zaradi napake vašega brskalnika obstaja možnost, da ta slika ni prikazan pravilno (manjkajo določeni elementi ali gradient). Vseeno bo prikaz pravilen, ko bo slika enkrat shranjena.',\n loadingImage: 'Nalagam sliko, prosimo, počakajte ...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'Obstajajo neshranjene spremembe.',\n enterNewLinkURL: 'Vnesite novo URL povezavo',\n errorLoadingSVG: 'Napaka: Ne morem naložiti SVG podatkov',\n URLLoadFail: 'Ne morem naložiti z URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'sq',\n dir: 'ltr',\n common: {\n ok: 'Ruaj',\n cancel: 'Anulo',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Klikoni për të ndryshuar mbushur me ngjyra, shift-klikoni për të ndryshuar ngjyrën pash',\n zoom_level: 'Ndryshimi zoom nivel',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Ndryshimi mbush color',\n stroke_color: 'Change color pash',\n stroke_style: 'Ndryshimi dash goditje stil',\n stroke_width: 'Ndryshimi goditje width',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Kënd Ndryshimi rrotullim',\n blur: 'Change gaussian blur value',\n opacity: 'Ndryshimi zgjedhur errësirë item',\n circle_cx: 'Cx rrethi Ndryshimi i bashkërenduar',\n circle_cy: 'Ndryshimi i rrethit cy koordinuar',\n circle_r: 'Rreze rreth Ndryshimi i',\n ellipse_cx: 'Ndryshimi elips e cx koordinuar',\n ellipse_cy: 'Elips cy Ndryshimi i bashkërenduar',\n ellipse_rx: 'Rreze x elips Ndryshimi i',\n ellipse_ry: 'Radiusi y elips ndërroj',\n line_x1: 'Shkarko Ndryshimi që fillon x koordinuar',\n line_x2: 'Linjë Ndryshimi i fund x koordinuar',\n line_y1: 'Shkarko Ndryshimi që fillon y koordinuar',\n line_y2: 'Shkarko Ndryshimi i dhënë fund y koordinuar',\n rect_height: 'Height Ndryshimi drejtkëndësh',\n rect_width: 'Width Ndryshimi drejtkëndësh',\n corner_radius: 'Ndryshimi Rectangle Corner Radius',\n image_width: 'Ndryshimi image width',\n image_height: 'Height të ndryshuar imazhin',\n image_url: 'Ndrysho URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Text contents Ndryshimi',\n font_family: 'Ndryshimi Font Family',\n font_size: 'Ndryshimi Font Size',\n bold: 'Bold Text',\n italic: 'Italic Text',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Change color background / patejdukshmëri',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Fit për të gjithë përmbajtjen',\n fit_to_canvas: 'Fit në kanavacë',\n fit_to_layer_content: 'Shtresë Fit to content',\n fit_to_sel: 'Fit to Selection',\n align_relative_to: 'Vendose në lidhje me ...',\n relativeTo: 'lidhje me:',\n page: 'faqe',\n largest_object: 'madh objekt',\n selected_objects: 'objektet e zgjedhur',\n smallest_object: 'objektit më të vogël',\n new_doc: 'New Image',\n open_doc: 'Image Hapur',\n export_img: 'Export',\n save_doc: 'Image Ruaj',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Align Center',\n align_left: 'Align Left',\n align_middle: 'Align Mesme',\n align_right: 'Align Right',\n align_top: 'Align Top',\n mode_select: 'Zgjidhni Tool',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Lëndë Hand Rectangle',\n mode_ellipse: 'Elips',\n mode_circle: 'Rrethi',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Text Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Undo',\n redo: 'Redo',\n tool_source: 'Burimi Edit',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Elementet e Grupit',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Elemente Ungroup',\n docprops: 'Dokumenti Prona',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Move to Bottom',\n move_top: 'Move to Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Ruaj',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Delete Layer',\n move_down: 'Move Down Layer',\n new: 'Re Shtresa',\n rename: 'Rename Layer',\n move_up: 'Move Up Layer',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Zgjidhni paracaktuara:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'sr',\n dir: 'ltr',\n common: {\n ok: 'Сачувати',\n cancel: 'Откажи',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Кликните да бисте променили боју попуне, Схифт-кликните да промените боју удар',\n zoom_level: 'Промените ниво зумирања',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Промена боје попуне',\n stroke_color: 'Промена боје удар',\n stroke_style: 'Промена ход Дасх стил',\n stroke_width: 'Промена удара ширина',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Промени ротације Угао',\n blur: 'Change gaussian blur value',\n opacity: 'Промена изабране ставке непрозирност',\n circle_cx: 'Промена круг&#39;с ЦКС координатни',\n circle_cy: 'Промена круг&#39;с ср координатни',\n circle_r: 'Промена круга је полупречник',\n ellipse_cx: 'Промена елипса ЦКС&#39;с координатни',\n ellipse_cy: 'Промена елипса&#39;с ср координатни',\n ellipse_rx: 'Промена елипса&#39;с Кс радијуса',\n ellipse_ry: 'Промена елипса је радијус Ы',\n line_x1: 'Промена линија Стартни кс координата',\n line_x2: 'Промена линија је завршетак кс координата',\n line_y1: 'Промена линија у координатни почетак Ы',\n line_y2: 'Промена линија је Ы координата се завршава',\n rect_height: 'Промени правоугаоник висина',\n rect_width: 'Промени правоугаоник ширине',\n corner_radius: 'Промена правоугаоник Кутак радијуса',\n image_width: 'Промени слику ширине',\n image_height: 'Промени слику висине',\n image_url: 'Промените УРЛ адресу',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Промена садржаја текстуалне',\n font_family: 'Цханге фонт породицу',\n font_size: 'Цханге фонт сизе',\n bold: 'Подебљан текст',\n italic: 'Италиц текст',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Промена боје позадине / непрозирност',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Стане на садржај',\n fit_to_all: 'Уклопи у сав садржај',\n fit_to_canvas: 'Стане на платну',\n fit_to_layer_content: 'Уклопи у слоју садржај',\n fit_to_sel: 'Уклопи у избор',\n align_relative_to: 'Алигн у односу на ...',\n relativeTo: 'у односу на:',\n page: 'страна',\n largest_object: 'Највећи објекат',\n selected_objects: 'изабраних објеката',\n smallest_object: 'Најмањи објекат',\n new_doc: 'Нова слика',\n open_doc: 'Отвори слике',\n export_img: 'Export',\n save_doc: 'Сачувај слика',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Поравнај доле',\n align_center: 'Поравнај по центру',\n align_left: 'Поравнај лево',\n align_middle: 'Алигн Средњи',\n align_right: 'Поравнај десно',\n align_top: 'Поравнајте врх',\n mode_select: 'Изаберите алатку',\n mode_fhpath: 'Алатка оловка',\n mode_line: 'Линија Алат',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Фрее-Ручни правоугаоник',\n mode_ellipse: 'Елипса',\n mode_circle: 'Круг',\n mode_fhellipse: 'Фрее-Ручни Елипса',\n mode_path: 'Path Tool',\n mode_text: 'Текст Алат',\n mode_image: 'Алатка за слике',\n mode_zoom: 'Алатка за зумирање',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Поништи',\n redo: 'Редо',\n tool_source: 'Уреди Извор',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Група Елементи',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Разгрупирање Елементи',\n docprops: 'Особине документа',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Премести на доле',\n move_top: 'Премести на врх',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Сачувати',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Избриши слој',\n move_down: 'Помери слој доле',\n new: 'Нови слој',\n rename: 'Преименуј слој',\n move_up: 'Помери слој Горе',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Изаберите унапред дефинисани:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'sv',\n dir: 'ltr',\n common: {\n ok: 'Spara',\n cancel: 'Avbryt',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Klicka för att ändra fyllningsfärg, shift-klicka för att ändra färgar',\n zoom_level: 'Ändra zoomnivå',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Ändra fyllningsfärg',\n stroke_color: 'Ändra färgar',\n stroke_style: 'Ändra stroke Dash stil',\n stroke_width: 'Ändra stroke bredd',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Ändra rotationsvinkel',\n blur: 'Change gaussian blur value',\n opacity: 'Ändra markerat objekt opacitet',\n circle_cx: 'Ändra cirkeln cx samordna',\n circle_cy: 'Ändra cirkeln samordna cy',\n circle_r: 'Ändra cirkelns radie',\n ellipse_cx: 'Ändra ellips&#39;s cx samordna',\n ellipse_cy: 'Ändra ellips&#39;s samordna cy',\n ellipse_rx: 'Ändra ellips&#39;s x radie',\n ellipse_ry: 'Ändra ellips&#39;s y radie',\n line_x1: 'Ändra Lines startar x samordna',\n line_x2: 'Ändra Lines slutar x samordna',\n line_y1: 'Ändra Lines startar Y-koordinat',\n line_y2: 'Ändra Lines slutar Y-koordinat',\n rect_height: 'Ändra rektangel höjd',\n rect_width: 'Ändra rektangel bredd',\n corner_radius: 'Ändra rektangel hörnradie',\n image_width: 'Ändra bild bredd',\n image_height: 'Ändra bildhöjd',\n image_url: 'Ändra URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Ändra textinnehållet',\n font_family: 'Ändra Typsnitt',\n font_size: 'Ändra textstorlek',\n bold: 'Fet text',\n italic: 'Kursiv text',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Ändra bakgrundsfärg / opacitet',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Passar till allt innehåll',\n fit_to_canvas: 'Anpassa till duk',\n fit_to_layer_content: 'Anpassa till lager innehåll',\n fit_to_sel: 'Anpassa till val',\n align_relative_to: 'Justera förhållande till ...',\n relativeTo: 'jämfört:',\n page: 'sida',\n largest_object: 'största objekt',\n selected_objects: 'valda objekt',\n smallest_object: 'minsta objektet',\n new_doc: 'New Image',\n open_doc: 'Öppna bild',\n export_img: 'Export',\n save_doc: 'Save Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Centrera',\n align_left: 'Vänsterjustera',\n align_middle: 'Justera Middle',\n align_right: 'Högerjustera',\n align_top: 'Justera Top',\n mode_select: 'Markeringsverktyget',\n mode_fhpath: 'Pennverktyget',\n mode_line: 'Linjeverktyg',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Fri hand rektangel',\n mode_ellipse: 'Ellips',\n mode_circle: 'Circle',\n mode_fhellipse: 'Fri hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Textverktyg',\n mode_image: 'Bildverktyg',\n mode_zoom: 'Zoomverktyget',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Ångra',\n redo: 'Redo',\n tool_source: 'Redigera källa',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Group Elements',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Dela Elements',\n docprops: 'Dokumentegenskaper',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Move to Bottom',\n move_top: 'Flytta till början',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Spara',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Radera Layer',\n move_down: 'Flytta Layer Down',\n new: 'New Layer',\n rename: 'Byt namn på Layer',\n move_up: 'Flytta Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Välj fördefinierad:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'sw',\n dir: 'ltr',\n common: {\n ok: 'Okoa',\n cancel: 'Cancel',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Click kubadili kujaza color, skiftarbete-click kubadili kiharusi color',\n zoom_level: 'Change zoom ngazi',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Change kujaza Michezo',\n stroke_color: 'Change kiharusi Michezo',\n stroke_style: 'Change kiharusi dash style',\n stroke_width: 'Change kiharusi width',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Change mzunguko vinkel',\n blur: 'Change gaussian blur value',\n opacity: 'Change selected opacity punkt',\n circle_cx: 'Change mduara&#39;s CX kuratibu',\n circle_cy: 'Change mduara&#39;s cy kuratibu',\n circle_r: 'Change mduara&#39;s Radius',\n ellipse_cx: 'Change ellipse s CX kuratibu',\n ellipse_cy: 'Change ellipse s cy kuratibu',\n ellipse_rx: 'Change ellipse s x Radius',\n ellipse_ry: 'Change ellipse&#39;s y Radius',\n line_x1: 'Change Mpya&#39;s mapya x kuratibu',\n line_x2: 'Change Mpya&#39;s kuishia x kuratibu',\n line_y1: 'Change Mpya&#39;s mapya y kuratibu',\n line_y2: 'Change Mpya&#39;s kuishia y kuratibu',\n rect_height: 'Change Mstatili height',\n rect_width: 'Change Mstatili width',\n corner_radius: 'Change Mstatili Corner Radius',\n image_width: 'Change image width',\n image_height: 'Change image urefu',\n image_url: 'Change URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Change Nakala contents',\n font_family: 'Change font Family',\n font_size: 'Change font Size',\n bold: 'Bold Nakala',\n italic: 'Italiki Nakala',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Change background color / opacity',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Waliopo Content',\n fit_to_all: 'Waliopo all content',\n fit_to_canvas: 'Wanaofaa Canvas',\n fit_to_layer_content: 'Waliopo safu content',\n fit_to_sel: 'Waliopo uteuzi',\n align_relative_to: 'Align jamaa na ...',\n relativeTo: 'relativa att:',\n page: 'Page',\n largest_object: 'ukubwa object',\n selected_objects: 'waliochaguliwa vitu',\n smallest_object: 'minsta object',\n new_doc: 'New Image',\n open_doc: 'Open SVG',\n export_img: 'Export',\n save_doc: 'Save Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Align Center',\n align_left: 'Align Left',\n align_middle: 'Kati align',\n align_right: 'Align Right',\n align_top: 'Align Juu',\n mode_select: 'Select Tool',\n mode_fhpath: 'Penseli Tool',\n mode_line: 'Mpya Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Rectangle',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Nakala Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Tengua',\n redo: 'Redo',\n tool_source: 'Edit Lugha',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Kikundi Elements',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elements',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Kuhama Bottom',\n move_top: 'Move to Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Save',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Delete Layer',\n move_down: 'Move Layer Down',\n new: 'Mpya Layer',\n rename: 'Rename Layer',\n move_up: 'Move Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Select predefined:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'test',\n dir: 'ltr',\n common: {\n ok: 'OK',\n cancel: 'Cancel',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Click to change fill color, shift-click to change stroke color',\n zoom_level: 'Change zoom level',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Change fill color',\n stroke_color: 'Change stroke color',\n stroke_style: 'Change stroke dash style',\n stroke_width: 'Change stroke width by 1, shift-click to change by 0.1',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Change rotation angle',\n blur: 'Change gaussian blur value',\n opacity: 'Change selected item opacity',\n circle_cx: \"Change circle's cx coordinate\",\n circle_cy: \"Change circle's cy coordinate\",\n circle_r: \"Change circle's radius\",\n ellipse_cx: \"Change ellipse's cx coordinate\",\n ellipse_cy: \"Change ellipse's cy coordinate\",\n ellipse_rx: \"Change ellipse's x radius\",\n ellipse_ry: \"Change ellipse's y radius\",\n line_x1: \"Change line's starting x coordinate\",\n line_x2: \"Change line's ending x coordinate\",\n line_y1: \"Change line's starting y coordinate\",\n line_y2: \"Change line's ending y coordinate\",\n rect_height: 'Change rectangle height',\n rect_width: 'Change rectangle width',\n corner_radius: 'Change Rectangle Corner Radius',\n image_width: 'Change image width',\n image_height: 'Change image height',\n image_url: 'Change URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Change text contents',\n font_family: 'Change Font Family',\n font_size: 'Change Font Size',\n bold: 'Bold Text',\n italic: 'Italic Text',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Change background color/opacity',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Fit to all content',\n fit_to_canvas: 'Fit to canvas',\n fit_to_layer_content: 'Fit to layer content',\n fit_to_sel: 'Fit to selection',\n align_relative_to: 'Align relative to ...',\n relativeTo: 'relative to:',\n page: 'page',\n largest_object: 'largest object',\n selected_objects: 'selected objects',\n smallest_object: 'smallest object',\n new_doc: 'New Image',\n open_doc: 'Open SVG',\n export_img: 'Export',\n save_doc: 'Save Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Align Center',\n align_left: 'Align Left',\n align_middle: 'Align Middle',\n align_right: 'Align Right',\n align_top: 'Align Top',\n mode_select: 'Select Tool',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-Hand Rectangle',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Circle',\n mode_fhellipse: 'Free-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Text Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Undo',\n redo: 'Redo',\n tool_source: 'Edit Source',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Group Elements',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elements',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Move to Bottom',\n move_top: 'Move to Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Apply Changes',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Move Layer Up',\n move_down: 'Move Layer Down',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Delete Layer',\n move_down: 'Move Layer Down',\n new: 'New Layer',\n rename: 'Rename Layer',\n move_up: 'Move Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Select predefined:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: 'Move selected elements to layer \\'%s\\'?',\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'th',\n dir: 'ltr',\n common: {\n ok: 'บันทึก',\n cancel: 'ยกเลิก',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'คลิกเพื่อเปลี่ยนใส่สีกะคลิกเปลี่ยนสีจังหวะ',\n zoom_level: 'เปลี่ยนระดับการซูม',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'เปลี่ยนใส่สี',\n stroke_color: 'สีจังหวะเปลี่ยน',\n stroke_style: 'รีบเปลี่ยนสไตล์จังหวะ',\n stroke_width: 'ความกว้างจังหวะเปลี่ยน',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'มุมหมุนเปลี่ยน',\n blur: 'Change gaussian blur value',\n opacity: 'เปลี่ยนความทึบเลือกรายการ',\n circle_cx: 'Cx วงกลมเปลี่ยนของพิกัด',\n circle_cy: 'วงกลมเปลี่ยนเป็น cy ประสานงาน',\n circle_r: 'รัศมีวงกลมเปลี่ยนเป็น',\n ellipse_cx: 'เปลี่ยน ellipse ของ cx ประสานงาน',\n ellipse_cy: 'Ellipse เปลี่ยนของ cy ประสานงาน',\n ellipse_rx: 'Ellipse เปลี่ยนของรัศมี x',\n ellipse_ry: 'Ellipse เปลี่ยนของรัศมี y',\n line_x1: 'สายเปลี่ยนเป็นเริ่มต้น x พิกัด',\n line_x2: 'สายเปลี่ยนเป็นสิ้นสุด x พิกัด',\n line_y1: 'สายเปลี่ยนเป็นเริ่มต้น y พิกัด',\n line_y2: 'สายเปลี่ยนเป็นสิ้นสุด y พิกัด',\n rect_height: 'ความสูงสี่เหลี่ยมผืนผ้าเปลี่ยน',\n rect_width: 'ความกว้างสี่เหลี่ยมผืนผ้าเปลี่ยน',\n corner_radius: 'รัศมีเปลี่ยนสี่เหลี่ยมผืนผ้า Corner',\n image_width: 'ความกว้างเปลี่ยนรูปภาพ',\n image_height: 'ความสูงเปลี่ยนรูปภาพ',\n image_url: 'URL เปลี่ยน',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'เปลี่ยนเนื้อหาข้อความ',\n font_family: 'ครอบครัว Change Font',\n font_size: 'เปลี่ยนขนาดตัวอักษร',\n bold: 'ข้อความตัวหนา',\n italic: 'ข้อความตัวเอียง',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'สีพื้นหลังเปลี่ยน / ความทึบ',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'พอดีกับเนื้อหาทั้งหมด',\n fit_to_canvas: 'เหมาะสมในการผ้าใบ',\n fit_to_layer_content: 'พอดีเนื้อหาชั้นที่',\n fit_to_sel: 'เหมาะสมในการเลือก',\n align_relative_to: 'จัดชิดเทียบกับ ...',\n relativeTo: 'เทียบกับ:',\n page: 'หน้า',\n largest_object: 'ที่ใหญ่ที่สุดในวัตถุ',\n selected_objects: 'วัตถุเลือกตั้ง',\n smallest_object: 'วัตถุที่เล็กที่สุด',\n new_doc: 'รูปภาพใหม่',\n open_doc: 'ภาพเปิด',\n export_img: 'Export',\n save_doc: 'บันทึกรูปภาพ',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'ด้านล่างชิด',\n align_center: 'จัดแนวกึ่งกลาง',\n align_left: 'จัดชิดซ้าย',\n align_middle: 'กลางชิด',\n align_right: 'จัดชิดขวา',\n align_top: 'ด้านบนชิด',\n mode_select: 'เครื่องมือเลือก',\n mode_fhpath: 'เครื่องมือดินสอ',\n mode_line: 'เครื่องมือ Line',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'สี่เหลี่ยมผืนผ้า Free-Hand',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Circle',\n mode_fhellipse: 'Ellipse Free-Hand',\n mode_path: 'Path Tool',\n mode_text: 'เครื่องมือ Text',\n mode_image: 'เครื่องมือ Image',\n mode_zoom: 'เครื่องมือซูม',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'เลิก',\n redo: 'ทำซ้ำ',\n tool_source: 'แหล่งที่มาแก้ไข',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'องค์ประกอบของกลุ่ม',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'องค์ประกอบ Ungroup',\n docprops: 'คุณสมบัติของเอกสาร',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'ย้ายไปด้านล่าง',\n move_top: 'ย้ายไปด้านบน',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'บันทึก',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Delete Layer',\n move_down: 'ย้าย Layer ลง',\n new: 'Layer ใหม่',\n rename: 'Layer เปลี่ยนชื่อ',\n move_up: 'ย้าย Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'เลือกที่กำหนดไว้ล่วงหน้า:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'tl',\n dir: 'ltr',\n common: {\n ok: 'I-save',\n cancel: 'I-cancel',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'I-click upang baguhin ang punan ang kulay, paglilipat-click upang baguhin ang paghampas ng kulay',\n zoom_level: 'Baguhin ang antas ng zoom',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Baguhin ang punuin ng kulay',\n stroke_color: 'Baguhin ang kulay ng paghampas',\n stroke_style: 'Baguhin ang stroke pagsugod estilo',\n stroke_width: 'Baguhin ang stroke lapad',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Baguhin ang pag-ikot anggulo',\n blur: 'Change gaussian blur value',\n opacity: 'Palitan ang mga napiling bagay kalabuan',\n circle_cx: 'Cx Baguhin ang bilog&#39;s coordinate',\n circle_cy: 'Baguhin ang bilog&#39;s cy coordinate',\n circle_r: 'Baguhin ang radius ng bilog',\n ellipse_cx: 'Baguhin ang tambilugan&#39;s cx-ugma',\n ellipse_cy: 'Baguhin ang tambilugan&#39;s cy coordinate',\n ellipse_rx: 'X radius Baguhin ang tambilugan&#39;s',\n ellipse_ry: 'Y radius Baguhin ang tambilugan&#39;s',\n line_x1: 'Baguhin ang linya ng simula x coordinate',\n line_x2: 'Baguhin ang linya ay nagtatapos x coordinate',\n line_y1: 'Baguhin ang linya ng simula y coordinate',\n line_y2: 'Baguhin ang linya ay nagtatapos y coordinate',\n rect_height: 'Baguhin ang rektanggulo taas',\n rect_width: 'Baguhin ang rektanggulo lapad',\n corner_radius: 'Baguhin ang Parihaba Corner Radius',\n image_width: 'Baguhin ang lapad ng imahe',\n image_height: 'Baguhin ang taas ng imahe',\n image_url: 'Baguhin ang URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Baguhin ang mga nilalaman ng teksto',\n font_family: 'Baguhin ang Pamilya ng Font',\n font_size: 'Baguhin ang Laki ng Font',\n bold: 'Bold Text',\n italic: 'Italic Text',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Baguhin ang kulay ng background / kalabuan',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Pagkasyahin sa Nilalaman',\n fit_to_all: 'Pagkasyahin sa lahat ng mga nilalaman',\n fit_to_canvas: 'Pagkasyahin sa tolda',\n fit_to_layer_content: 'Pagkasyahin sa layer nilalaman',\n fit_to_sel: 'Pagkasyahin sa pagpili',\n align_relative_to: 'Pantayin sa kamag-anak sa ...',\n relativeTo: 'kamag-anak sa:',\n page: 'pahina',\n largest_object: 'pinakamalaking bagay',\n selected_objects: 'inihalal na mga bagay',\n smallest_object: 'pinakamaliit na bagay',\n new_doc: 'Bagong Imahe',\n open_doc: 'Buksan ang Image',\n export_img: 'Export',\n save_doc: 'I-save ang Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Pantayin sa Ibaba',\n align_center: 'Pantayin sa Gitna',\n align_left: 'Pantayin ang Kaliwa',\n align_middle: 'Pantayin sa Gitnang',\n align_right: 'Pantayin sa Kanan',\n align_top: 'Pantayin Top',\n mode_select: 'Piliin ang Tool',\n mode_fhpath: 'Kasangkapan ng lapis',\n mode_line: 'Line Kasangkapan',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Libreng-kamay Parihaba',\n mode_ellipse: 'Tambilugan',\n mode_circle: 'Circle',\n mode_fhellipse: 'Libreng-kamay tambilugan',\n mode_path: 'Path Tool',\n mode_text: 'Text Kasangkapan',\n mode_image: 'Image Kasangkapan',\n mode_zoom: 'Mag-zoom Kasangkapan',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Bawiin',\n redo: 'Gawin muli',\n tool_source: 'I-edit ang Source',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Group Sangkap',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Sangkap',\n docprops: 'Document Katangian',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Ilipat sa Ibaba',\n move_top: 'Ilipat sa Tuktok',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'I-save',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Tanggalin Layer',\n move_down: 'Ilipat Layer Down',\n new: 'Bagong Layer',\n rename: 'Palitan ang pangalan ng Layer',\n move_up: 'Ilipat Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Piliin ang paunang-natukoy na:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'tr',\n dir: 'ltr',\n common: {\n ok: 'Kaydetmek',\n cancel: 'Iptal',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Tıklatın renk, vardiya dolgu zamanlı rengini değiştirmek için tıklayın değiştirmek için',\n zoom_level: 'Yakınlaştırma düzeyini değiştirebilirsiniz',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Renk değiştirmek doldurmak',\n stroke_color: 'Değiştirmek inme renk',\n stroke_style: 'Değiştirmek inme çizgi stili',\n stroke_width: 'Değiştirmek vuruş genişliği',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Değiştirmek dönme açısı',\n blur: 'Change gaussian blur value',\n opacity: 'Değiştirmek öğe opacity seçilmiş',\n circle_cx: 'Değiştirmek daire&#39;s cx koordine',\n circle_cy: 'Değiştirmek daire cy koordine&#39;s',\n circle_r: 'Değiştirmek daire yarıçapı',\n ellipse_cx: '&#39;s Koordine cx elips Girişi',\n ellipse_cy: 'Değiştirmek elips cy koordine&#39;s',\n ellipse_rx: 'Değiştirmek elips&#39;s x yarıçapı',\n ellipse_ry: 'Değiştirmek elips Y yarıçapı',\n line_x1: 'Değiştirmek hattı&#39;s koordine x başlangıç',\n line_x2: 'Değiştirmek hattı&#39;s koordine x biten',\n line_y1: 'Değiştirmek hattı y başlangıç&#39;s koordine',\n line_y2: 'Değiştirmek hattı y biten&#39;s koordine',\n rect_height: 'Değiştirmek dikdörtgen yüksekliği',\n rect_width: 'Değiştirmek dikdörtgen genişliği',\n corner_radius: 'Değiştirmek Dikdörtgen Köşe Yarıçap',\n image_width: 'Değiştirmek görüntü genişliği',\n image_height: 'Değiştirmek görüntü yüksekliği',\n image_url: 'Değiştirmek URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Değiştirmek metin içeriği',\n font_family: 'Font değiştir Aile',\n font_size: 'Change font size',\n bold: 'Kalın Yazı',\n italic: 'Italik yazı',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Arka plan rengini değiştirmek / opacity',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Fit to Content',\n fit_to_all: 'Fit tüm içerik için',\n fit_to_canvas: 'Fit tuvaline',\n fit_to_layer_content: 'Sığacak şekilde katman içerik',\n fit_to_sel: 'Fit seçimine',\n align_relative_to: 'Align göre ...',\n relativeTo: 'göreli:',\n page: 'sayfa',\n largest_object: 'en büyük nesne',\n selected_objects: 'seçilen nesneleri',\n smallest_object: 'küçük nesne',\n new_doc: 'Yeni Resim',\n open_doc: 'Aç Resim',\n export_img: 'Export',\n save_doc: 'Görüntüyü Kaydet',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Ortala',\n align_left: 'Sola',\n align_middle: 'Align Orta',\n align_right: 'Sağa Hizala',\n align_top: 'Align Top',\n mode_select: 'Seçim aracı',\n mode_fhpath: 'Kalem Aracı',\n mode_line: 'Line Aracı',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-El Dikdörtgen',\n mode_ellipse: 'Elips',\n mode_circle: 'Daire',\n mode_fhellipse: 'Free-El Elips',\n mode_path: 'Path Tool',\n mode_text: 'Metin Aracı',\n mode_image: 'Resim Aracı',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Geri',\n redo: 'Redo',\n tool_source: 'Değiştir Kaynak',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Grup Elemanları',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Çöz Elemanları',\n docprops: 'Belge Özellikleri',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Altına gider',\n move_top: 'Üste taşı',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Kaydetmek',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Delete Layer',\n move_down: 'Katman Aşağı Taşı',\n new: 'Yeni Katman',\n rename: 'Rename Katman',\n move_up: 'Up Katman Taşı',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Seçin önceden tanımlanmış:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'uk',\n dir: 'ltr',\n common: {\n ok: 'Зберегти',\n cancel: 'Скасування',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Натисніть для зміни кольору заливки, Shift-Click змінити обвід',\n zoom_level: 'Зміна масштабу',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Зміна кольору заливки',\n stroke_color: 'Зміна кольору інсульт',\n stroke_style: 'Зміна стилю інсульт тире',\n stroke_width: 'Зміни ширина штриха',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Зміна кута повороту',\n blur: 'Change gaussian blur value',\n opacity: 'Зміна вибраного пункту непрозорості',\n circle_cx: 'CX зміну кола координата',\n circle_cy: 'Зміни гуртка CY координати',\n circle_r: 'Зміна кола&#39;s радіус',\n ellipse_cx: 'Зміни еліпса CX координати',\n ellipse_cy: 'Зміни еліпса CY координати',\n ellipse_rx: 'Х Зміни еліпса радіусом',\n ellipse_ry: 'Зміни у еліпса радіусом',\n line_x1: 'Зміни починає координати лінія х',\n line_x2: 'Зміни за період, що закінчився лінія координати х',\n line_y1: 'Зміни лінія починає Y координата',\n line_y2: 'Зміна за період, що закінчився лінія Y координата',\n rect_height: 'Зміни прямокутник висотою',\n rect_width: 'Зміна ширини прямокутника',\n corner_radius: 'Зміни прямокутник Corner Radius',\n image_width: 'Зміни ширина зображення',\n image_height: 'Зміна висоти зображення',\n image_url: 'Змінити URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Зміна змісту тексту',\n font_family: 'Зміни Сімейство шрифтів',\n font_size: 'Змінити розмір шрифту',\n bold: 'Товстий текст',\n italic: 'Похилий текст',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Зміна кольору тла / непрозорість',\n connector_no_arrow: 'No arrow',\n fitToContent: 'За розміром змісту',\n fit_to_all: 'За розміром весь вміст',\n fit_to_canvas: 'Розмір полотна',\n fit_to_layer_content: 'За розміром шар змісту',\n fit_to_sel: 'Вибір розміру',\n align_relative_to: 'Вирівняти по відношенню до ...',\n relativeTo: 'в порівнянні з:',\n page: 'сторінка',\n largest_object: 'найбільший об&#39;єкт',\n selected_objects: 'обраними об&#39;єктами',\n smallest_object: 'маленький об&#39;єкт',\n new_doc: 'Нове зображення',\n open_doc: 'Відкрити зображення',\n export_img: 'Export',\n save_doc: 'Зберегти малюнок',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Вирівняти по нижньому краю',\n align_center: 'Вирівняти по центру',\n align_left: 'По лівому краю',\n align_middle: 'Вирівняти Близького',\n align_right: 'По правому краю',\n align_top: 'Вирівняти по верхньому краю',\n mode_select: 'Виберіть інструмент',\n mode_fhpath: 'Pencil Tool',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Вільної руки Прямокутник',\n mode_ellipse: 'Еліпс',\n mode_circle: 'Коло',\n mode_fhellipse: 'Вільної руки Еліпс',\n mode_path: 'Path Tool',\n mode_text: 'Текст Tool',\n mode_image: 'Image Tool',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Скасувати',\n redo: 'Повтор',\n tool_source: 'Змінити вихідний',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Група елементів',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Елементи розгрупувати',\n docprops: 'Властивості документа',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Перемістити вниз',\n move_top: 'Перемістити догори',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Зберегти',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Видалити шар',\n move_down: 'Перемістити шар на',\n new: 'Новий шар',\n rename: 'Перейменувати Шар',\n move_up: 'Переміщення шару до',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Виберіть зумовлений:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'vi',\n dir: 'ltr',\n common: {\n ok: 'Lưu',\n cancel: 'Hủy',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'Nhấn vào đây để thay đổi đầy màu sắc, thay đổi nhấp chuột để thay đổi màu sắc đột quỵ',\n zoom_level: 'Thay đổi mức độ phóng',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'Thay đổi đầy màu sắc',\n stroke_color: 'Thay đổi màu sắc đột quỵ',\n stroke_style: 'Thay đổi phong cách đột quỵ dash',\n stroke_width: 'Thay đổi chiều rộng đột quỵ',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'Thay đổi góc xoay',\n blur: 'Change gaussian blur value',\n opacity: 'Thay đổi lựa chọn opacity mục',\n circle_cx: 'Thay đổi hình tròn của cx phối hợp',\n circle_cy: 'Thay đổi hình tròn của vi phối hợp',\n circle_r: 'Thay đổi bán kính của hình tròn',\n ellipse_cx: 'Thay đổi hình elip của cx phối hợp',\n ellipse_cy: 'Thay đổi hình elip của vi phối hợp',\n ellipse_rx: 'Thay đổi hình elip của x bán kính',\n ellipse_ry: 'Y Thay đổi bán kính của hình ellipse',\n line_x1: 'Thay đổi dòng của bắt đầu từ x phối hợp',\n line_x2: 'Thay đổi dòng của x kết thúc sớm nhất phối hợp',\n line_y1: 'Thay đổi dòng của bắt đầu từ y phối hợp',\n line_y2: 'Thay đổi dòng của kết thúc y phối hợp',\n rect_height: 'Thay đổi hình chữ nhật chiều cao',\n rect_width: 'Thay đổi hình chữ nhật chiều rộng',\n corner_radius: 'Thay đổi chữ nhật Corner Radius',\n image_width: 'Thay đổi hình ảnh rộng',\n image_height: 'Thay đổi hình ảnh chiều cao',\n image_url: 'Thay đổi URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'Thay đổi nội dung văn bản',\n font_family: 'Thay đổi Font Gia đình',\n font_size: 'Thay đổi cỡ chữ',\n bold: 'Bold Text',\n italic: 'Italic Text',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'Thay đổi màu nền / opacity',\n connector_no_arrow: 'No arrow',\n fitToContent: 'Phù hợp với nội dung',\n fit_to_all: 'Phù hợp với tất cả nội dung',\n fit_to_canvas: 'Phù hợp với vải',\n fit_to_layer_content: 'Vào lớp phù hợp với nội dung',\n fit_to_sel: 'Phù hợp để lựa chọn',\n align_relative_to: 'Căn liên quan đến ...',\n relativeTo: 'liên quan đến:',\n page: 'Page',\n largest_object: 'lớn nhất đối tượng',\n selected_objects: 'bầu các đối tượng',\n smallest_object: 'nhỏ đối tượng',\n new_doc: 'Hình mới',\n open_doc: 'Mở Image',\n export_img: 'Export',\n save_doc: 'Save Image',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'Align Bottom',\n align_center: 'Căn giữa',\n align_left: 'Căn còn lại',\n align_middle: 'Căn Trung',\n align_right: 'Căn phải',\n align_top: 'Căn Top',\n mode_select: 'Chọn Công cụ',\n mode_fhpath: 'Bút chì Công cụ',\n mode_line: 'Line Tool',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Việt-Hand Hình chữ nhật',\n mode_ellipse: 'Ellipse',\n mode_circle: 'Circle',\n mode_fhellipse: 'Việt-Hand Ellipse',\n mode_path: 'Path Tool',\n mode_text: 'Text Tool',\n mode_image: 'Hình Công cụ',\n mode_zoom: 'Zoom Tool',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'Hoàn tác',\n redo: 'Làm lại',\n tool_source: 'Sửa Nguồn',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'Nhóm Elements',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elements',\n docprops: 'Document Properties',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'Chuyển đến đáy',\n move_top: 'Move to Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'Lưu',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'Xoá Layer',\n move_down: 'Move Layer Down',\n new: 'New Layer',\n rename: 'Đổi tên Layer',\n move_up: 'Di chuyển Layer Up',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'Chọn định sẵn:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'yi',\n dir: 'ltr',\n common: {\n ok: 'היט',\n cancel: 'באָטל מאַכן',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: 'גיט צו ענדערן אָנעסן קאָליר, יבעררוק-גיט צו טוישן מאַך קאָליר',\n zoom_level: 'ענדערן פארגרעסער הייך',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: 'ענדערן אָנעסן קאָליר',\n stroke_color: 'טוישן מאַך קאָליר',\n stroke_style: 'טוישן מאַך לאָך מאָדע',\n stroke_width: 'טוישן מאַך ברייט',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: 'ענדערן ראָוטיישאַן ווינקל',\n blur: 'Change gaussian blur value',\n opacity: 'ענדערן סעלעקטעד נומער אָופּאַסאַטי',\n circle_cx: 'ענדערן קרייז ס קקס קאָואָרדאַנאַט',\n circle_cy: 'ענדערן קרייז ס סי קאָואָרדאַנאַט',\n circle_r: 'ענדערן קרייז ס ראַדיוס',\n ellipse_cx: 'ענדערן יליפּס ס קקס קאָואָרדאַנאַט',\n ellipse_cy: 'ענדערן יליפּס ס סי קאָואָרדאַנאַט',\n ellipse_rx: 'ענדערן יליפּס ס &#39;קס ראַדיוס',\n ellipse_ry: 'ענדערן יליפּס ס &#39;י ראַדיוס',\n line_x1: 'טוישן ליניע ס &#39;סטאַרטינג קס קאָואָרדאַנאַט',\n line_x2: 'טוישן ליניע ס &#39;סאָף קס קאָואָרדאַנאַט',\n line_y1: 'טוישן ליניע ס &#39;סטאַרטינג י קאָואָרדאַנאַט',\n line_y2: 'טוישן ליניע ס &#39;סאָף י קאָואָרדאַנאַט',\n rect_height: 'ענדערן גראָדעק הייך',\n rect_width: 'ענדערן גראָדעק ברייט',\n corner_radius: 'ענדערן רעקטאַנגלע קאָרנער ראַדיוס',\n image_width: 'טוישן בילד ברייט',\n image_height: 'טוישן בילד הייך',\n image_url: 'ענדערן URL',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: 'ענדערן טעקסט אינהאַלט',\n font_family: 'ענדערן פאָנט פאַמילי',\n font_size: 'בייטן פאָנט גרייס',\n bold: 'דרייסט טעקסט',\n italic: 'יטאַליק טעקסט',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: 'ענדערן הינטערגרונט פאַרב / אָופּאַסאַטי',\n connector_no_arrow: 'No arrow',\n fitToContent: 'פּאַסיק צו אינהאַלט',\n fit_to_all: 'פּאַסיק צו אַלע אינהאַלט',\n fit_to_canvas: 'פּאַסיק צו לייוונט',\n fit_to_layer_content: 'פּאַסיק צו שיכטע אינהאַלט',\n fit_to_sel: 'פּאַסיק צו אָפּקלייב',\n align_relative_to: 'יינרייען קאָרעוו צו ...',\n relativeTo: 'קאָרעוו צו:',\n page: 'בלאַט',\n largest_object: 'לאַרדזשאַסט קעגן',\n selected_objects: 'עלעקטעד אַבדזשעקץ',\n smallest_object: 'סמאָלאַסט קעגן',\n new_doc: 'ניו בילד',\n open_doc: 'Open בילד',\n export_img: 'Export',\n save_doc: 'היט בילד',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: 'יינרייען באָטטאָם',\n align_center: 'יינרייען צענטער',\n align_left: 'יינרייען לעפט',\n align_middle: 'יינרייען מיטל',\n align_right: 'יינרייען רעכט',\n align_top: 'יינרייען Top',\n mode_select: 'סעלעקטירן טול',\n mode_fhpath: 'בלייער טול',\n mode_line: 'שורה טול',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: 'Free-הענט רעקטאַנגלע',\n mode_ellipse: 'עלליפּסע',\n mode_circle: 'קאַראַהאָד',\n mode_fhellipse: 'Free-הענט עלליפּסע',\n mode_path: 'Path Tool',\n mode_text: 'טעקסט טול',\n mode_image: 'בילד טול',\n mode_zoom: 'פארגרעסער טול',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: 'ופמאַכן',\n redo: 'רעדאָ',\n tool_source: 'רעדאַקטירן סאָרס',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: 'גרופּע עלעמענץ',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'ונגראָופּ עלעמענץ',\n docprops: 'דאָקומענט פּראָפּערטיעס',\n editor_homepage: 'SVG-Edit Home Page',\n move_bottom: 'מאַך צו באָטטאָם',\n move_top: 'באַוועגן צו Top',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: 'היט',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: 'ויסמעקן לייַער',\n move_down: 'קער לייַער דאָוון',\n new: 'ניו לייַער',\n rename: 'רענאַמע לייַער',\n move_up: 'באַוועגן לייַער אַרויף',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: 'סעלעקטירן פּרעדעפינעד:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'zh-CN',\n dir: 'ltr',\n common: {\n ok: '确定',\n cancel: '取消',\n key_backspace: '退格',\n key_del: '删除',\n key_down: '下',\n key_up: '上',\n more_opts: '更多选项',\n url: 'URL',\n width: '宽度',\n height: '高度'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: '显示/隐藏更式边线工具',\n palette_info: '点击更改填充颜色按住Shift键单击更改线条颜色',\n zoom_level: '更改缩放级别',\n panel_drag: '左右拖拽调整面板大小',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: '元素ID',\n fill_color: '更改填充颜色',\n stroke_color: '线条的颜色变化',\n stroke_style: '更改线条样式',\n stroke_width: '更改线条宽度',\n pos_x: '更改X坐标',\n pos_y: '更改Y坐标',\n linecap_butt: '顶端样式: 齐平',\n linecap_round: '顶端样式: 圆滑',\n linecap_square: '顶端样式: 方块',\n linejoin_bevel: '连接处: 削平',\n linejoin_miter: '连接处: 直角',\n linejoin_round: '连接处: 圆角',\n angle: '更改旋转角度',\n blur: '更改高斯模糊值',\n opacity: '更改所选条目的不透明度',\n circle_cx: '改变圆的中心X坐标',\n circle_cy: '改变圆的中心Y坐标',\n circle_r: '改变圆的半径',\n ellipse_cx: '改变椭圆的中心X坐标',\n ellipse_cy: '改变椭圆的中心Y坐标',\n ellipse_rx: '改变椭圆的x半径',\n ellipse_ry: '改变椭圆的y半径',\n line_x1: '更改直线起点的x坐标',\n line_x2: '更改直线终点的x坐标',\n line_y1: '更改直线起点的y坐标',\n line_y2: '更改直线终点的y坐标',\n rect_height: '更改矩形的高度',\n rect_width: '更改矩形的宽度',\n corner_radius: '角半径:',\n image_width: '更改图像的宽度',\n image_height: '更改图像的高度',\n image_url: '更改网址',\n node_x: '更改节点的X坐标',\n node_y: '更改节点的Y坐标',\n seg_type: '修改线段类型',\n straight_segments: '直线',\n curve_segments: '曲线',\n text_contents: '更改文本内容',\n font_family: '更改字体样式',\n font_size: '更改字体大小',\n bold: '粗体',\n italic: '斜体',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: '主菜单',\n bkgnd_color_opac: '更改背景颜色/不透明',\n connector_no_arrow: '无箭头',\n fitToContent: '适应内容',\n fit_to_all: '适应于所有的内容',\n fit_to_canvas: '适应画布',\n fit_to_layer_content: '适应层内容',\n fit_to_sel: '适应选中内容',\n align_relative_to: '相对对齐 ...',\n relativeTo: '相对于:',\n page: '网页',\n largest_object: '最大对象',\n selected_objects: '选中的对象',\n smallest_object: '最小的对象',\n new_doc: '新文档',\n open_doc: '打开文档',\n export_img: '导出',\n save_doc: '保存图像',\n import_doc: '导入SVG',\n align_to_page: '对齐元素到页面',\n align_bottom: '底部对齐',\n align_center: '居中对齐',\n align_left: '左对齐',\n align_middle: '水平居中对齐',\n align_right: '右对齐',\n align_top: '顶端对齐',\n mode_select: '选择工具',\n mode_fhpath: '铅笔工具',\n mode_line: '线工具',\n mode_rect: '矩形',\n mode_square: '正方形',\n mode_fhrect: '自由矩形',\n mode_ellipse: '椭圆',\n mode_circle: '圆形',\n mode_fhellipse: '自由椭圆',\n mode_path: '路径',\n mode_text: '文字工具',\n mode_image: '图像工具',\n mode_zoom: '缩放工具',\n no_embed: '注意: 根据SVG图像的存储位置内嵌的位图可能无法显示!',\n undo: '撤消',\n redo: '重做',\n tool_source: '编辑源',\n wireframe_mode: '线条模式',\n clone: '克隆元素',\n del: '删除元素',\n group_elements: '组合元素',\n make_link: '创建超链接',\n set_link_url: '设置链接URL (设置为空以删除)',\n to_path: '转换为路径',\n reorient_path: '调整路径',\n ungroup: '取消组合元素',\n docprops: '文档属性',\n editor_homepage: 'SVG-Edit 主页',\n move_bottom: '移至底部',\n move_top: '移至顶部',\n node_clone: '复制节点',\n node_delete: '删除节点',\n node_link: '连接控制点',\n add_subpath: '添加子路径',\n openclose_path: '打开/关闭 子路径',\n source_save: '保存',\n cut: '剪切',\n copy: '复制',\n paste: '粘贴',\n paste_in_place: '粘贴到原位置',\n delete: '删除',\n group: '组合',\n move_front: '移至顶部',\n move_up: '向上移动',\n move_down: '向下移动',\n move_back: '移至底部'\n },\n layers: {\n layer: '图层',\n layers: '图层',\n del: '删除图层',\n move_down: '向下移动图层',\n new: '新建图层',\n rename: '重命名图层',\n move_up: '向上移动图层',\n dupe: '复制图层',\n merge_down: '向下合并',\n merge_all: '全部合并',\n move_elems_to: '移动元素至:',\n move_selected: '移动元素至另一个图层'\n },\n config: {\n image_props: '图像属性',\n doc_title: '标题',\n doc_dims: '画布大小',\n included_images: '包含图像',\n image_opt_embed: '嵌入数据 (本地文件)',\n image_opt_ref: '使用文件引用',\n editor_prefs: '编辑器首选项',\n icon_size: '图标大小',\n language: '语言',\n background: '编辑器背景',\n editor_img_url: '图像 URL',\n editor_bg_note: '注意: 背景不会保存在图像中.',\n icon_large: '大',\n icon_medium: '中',\n icon_small: '小',\n icon_xlarge: '特大',\n select_predefined: '选择预定义:',\n units_and_rulers: '单位 & 标尺',\n show_rulers: '显示标尺',\n base_unit: '基本单位:',\n grid: '网格',\n snapping_onoff: '吸附开/关',\n snapping_stepsize: '吸附步长:',\n grid_color: '网格颜色'\n },\n notification: {\n invalidAttrValGiven: '无效的参数',\n noContentToFitTo: '无可适应的内容',\n dupeLayerName: '已存在同名的图层!',\n enterUniqueLayerName: '请输入一个唯一的图层名称',\n enterNewLayerName: '请输入新的图层名称',\n layerHasThatName: '图层已经采用了该名称',\n QmoveElemsToLayer: \"您确定移动所选元素到图层'%s'吗?\",\n QwantToClear: '您希望清除当前绘制的所有图形吗?\\n该操作将无法撤消!',\n QwantToOpen: '您希望打开一个新文档吗?\\n该操作将无法撤消!',\n QerrorsRevertToSource: 'SVG文件解析错误.\\n是否还原到最初的SVG文件?',\n QignoreSourceChanges: '忽略对SVG文件所作的更改么?',\n featNotSupported: '不支持该功能',\n enterNewImgURL: '请输入新图像的URLL',\n defsFailOnSave: '注意: 由于您所使用的浏览器存在缺陷, 该图像无法正确显示 (不支持渐变或相关元素). 修复该缺陷后可正确显示.',\n loadingImage: '正在加载图像, 请稍候...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: '同时注意以下几点: ',\n unsavedChanges: '存在未保存的修改.',\n enterNewLinkURL: '输入新建链接的URL地址',\n errorLoadingSVG: '错误: 无法加载SVG数据',\n URLLoadFail: '无法从URL中加载',\n retrieving: '检索 \\'%s\\'...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'zh-HK',\n dir: 'ltr',\n common: {\n ok: '确定',\n cancel: '取消',\n key_backspace: 'backspace',\n key_del: 'delete',\n key_down: 'down',\n key_up: 'up',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: '点击更改填充颜色按住Shift键单击更改颜色中风',\n zoom_level: '更改缩放级别',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: '更改填充颜色',\n stroke_color: '中风的颜色变化',\n stroke_style: '更改行程冲刺风格',\n stroke_width: '笔划宽度的变化',\n pos_x: 'Change X coordinate',\n pos_y: 'Change Y coordinate',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: '旋转角度的变化',\n blur: 'Change gaussian blur value',\n opacity: '更改所选项目不透明',\n circle_cx: '改变循环的CX坐标',\n circle_cy: '改变循环的赛扬坐标',\n circle_r: '改变圆的半径',\n ellipse_cx: '改变椭圆的CX坐标',\n ellipse_cy: '改变椭圆的赛扬坐标',\n ellipse_rx: '改变椭圆的x半径',\n ellipse_ry: '改变椭圆的y半径',\n line_x1: '更改行的起点的x坐标',\n line_x2: '更改行的结束x坐标',\n line_y1: '更改行的起点的y坐标',\n line_y2: '更改行的结束y坐标',\n rect_height: '更改矩形的高度',\n rect_width: '更改矩形的宽度',\n corner_radius: '角半径:',\n image_width: '更改图像的宽度',\n image_height: '更改图像高度',\n image_url: '更改网址',\n node_x: \"Change node's x coordinate\",\n node_y: \"Change node's y coordinate\",\n seg_type: 'Change Segment type',\n straight_segments: 'Straight',\n curve_segments: 'Curve',\n text_contents: '更改文字内容',\n font_family: '更改字体家族',\n font_size: '更改字体大小',\n bold: '粗体',\n italic: '斜体文本',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: '更改背景颜色/不透明',\n connector_no_arrow: 'No arrow',\n fitToContent: '适合内容',\n fit_to_all: '适合于所有的内容',\n fit_to_canvas: '适合画布',\n fit_to_layer_content: '适合层内容',\n fit_to_sel: '适合选择',\n align_relative_to: '相对对齐 ...',\n relativeTo: '相对于:',\n page: '网页',\n largest_object: '最大对象',\n selected_objects: '选对象',\n smallest_object: '最小的对象',\n new_doc: '新形象',\n open_doc: '打开图像',\n export_img: 'Export',\n save_doc: '保存图像',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: '底部对齐',\n align_center: '居中对齐',\n align_left: '左对齐',\n align_middle: '中间对齐',\n align_right: '右对齐',\n align_top: '顶端对齐',\n mode_select: '选择工具',\n mode_fhpath: '铅笔工具',\n mode_line: '线工具',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: '免费手矩形',\n mode_ellipse: '椭圆',\n mode_circle: '圈',\n mode_fhellipse: '免费手椭圆',\n mode_path: 'Path Tool',\n mode_text: '文字工具',\n mode_image: '图像工具',\n mode_zoom: '缩放工具',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: '撤消',\n redo: '重做',\n tool_source: '编辑源',\n wireframe_mode: 'Wireframe Mode',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: '族元素',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: 'Convert to Path',\n reorient_path: 'Reorient path',\n ungroup: 'Ungroup Elements',\n docprops: '文档属性',\n editor_homepage: 'SVG-Edit 主页',\n move_bottom: '移至底部',\n move_top: '移动到顶部',\n node_clone: 'Clone Node',\n node_delete: 'Delete Node',\n node_link: 'Link Control Points',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: '保存',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: 'Layer',\n layers: 'Layers',\n del: '删除层',\n move_down: '层向下移动',\n new: '新层',\n rename: '重命名层',\n move_up: '移动层最多',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: 'Move elements to:',\n move_selected: 'Move selected elements to a different layer'\n },\n config: {\n image_props: 'Image Properties',\n doc_title: 'Title',\n doc_dims: 'Canvas Dimensions',\n included_images: 'Included Images',\n image_opt_embed: 'Embed data (local files)',\n image_opt_ref: 'Use file reference',\n editor_prefs: 'Editor Preferences',\n icon_size: 'Icon size',\n language: 'Language',\n background: 'Editor Background',\n editor_img_url: 'Image URL',\n editor_bg_note: 'Note: Background will not be saved with image.',\n icon_large: 'Large',\n icon_medium: 'Medium',\n icon_small: 'Small',\n icon_xlarge: 'Extra Large',\n select_predefined: '选择预定义:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: 'Invalid value given',\n noContentToFitTo: 'No content to fit to',\n dupeLayerName: 'There is already a layer named that!',\n enterUniqueLayerName: 'Please enter a unique layer name',\n enterNewLayerName: 'Please enter the new layer name',\n layerHasThatName: 'Layer already has that name',\n QmoveElemsToLayer: \"Move selected elements to layer '%s'?\",\n QwantToClear: 'Do you want to clear the drawing?\\nThis will also erase your undo history!',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'There were parsing errors in your SVG source.\\nRevert back to original SVG source?',\n QignoreSourceChanges: 'Ignore changes made to SVG source?',\n featNotSupported: 'Feature not supported',\n enterNewImgURL: 'Enter the new image URL',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n","export default {\n lang: 'zh-TW',\n dir: 'ltr',\n common: {\n ok: '确定',\n cancel: '取消',\n key_backspace: '空白',\n key_del: '刪除',\n key_down: '下',\n key_up: '上',\n more_opts: 'More Options',\n url: 'URL',\n width: 'Width',\n height: 'Height'\n },\n misc: {\n powered_by: 'Powered by'\n },\n ui: {\n toggle_stroke_tools: 'Show/hide more stroke tools',\n palette_info: '點擊更改填充顏色按住Shift鍵單擊更改線條顏色',\n zoom_level: '更改縮放級別',\n panel_drag: 'Drag left/right to resize side panel',\n quality: 'Quality:',\n pathNodeTooltip: 'Drag node to move it. Double-click node to change segment type',\n pathCtrlPtTooltip: 'Drag control point to adjust curve properties',\n pick_stroke_paint_opacity: 'Pick a Stroke Paint and Opacity',\n pick_fill_paint_opacity: 'Pick a Fill Paint and Opacity'\n },\n properties: {\n id: 'Identify the element',\n fill_color: '更改填充顏色',\n stroke_color: '線條顏色',\n stroke_style: '更改線條(虛線)風格',\n stroke_width: '線條寬度',\n pos_x: '調整 X 軸',\n pos_y: '調整 Y 軸',\n linecap_butt: 'Linecap: Butt',\n linecap_round: 'Linecap: Round',\n linecap_square: 'Linecap: Square',\n linejoin_bevel: 'Linejoin: Bevel',\n linejoin_miter: 'Linejoin: Miter',\n linejoin_round: 'Linejoin: Round',\n angle: '旋轉角度',\n blur: 'Change gaussian blur value',\n opacity: '更改所選項目不透明度',\n circle_cx: '改變圓的CX坐標',\n circle_cy: '改變圓的CY坐標',\n circle_r: '改變圓的半徑',\n ellipse_cx: '改變橢圓的圓心x軸座標',\n ellipse_cy: '改變橢圓的圓心y軸座標',\n ellipse_rx: '改變橢圓的x軸長',\n ellipse_ry: '改變橢圓的y軸長',\n line_x1: '更改行的起點的x坐標',\n line_x2: '更改行的終點x坐標',\n line_y1: '更改行的起點的y坐標',\n line_y2: '更改行的終點y坐標',\n rect_height: '更改矩形的高度',\n rect_width: '更改矩形的寬度',\n corner_radius: '角半徑:',\n image_width: '更改圖像的寬度',\n image_height: '更改圖像高度',\n image_url: '更改網址',\n node_x: '改變節點的x軸座標',\n node_y: '改變節點的y軸座標',\n seg_type: 'Change Segment type',\n straight_segments: '直線',\n curve_segments: '曲線',\n text_contents: '更改文字內容',\n font_family: '更改字體',\n font_size: '更改字體大小',\n bold: '粗體',\n italic: '斜體',\n text_anchor_start: 'Align the text in start',\n text_anchor_middle: 'Align the text in middle',\n text_anchor_end: 'Align the text in end'\n },\n tools: {\n main_menu: 'Main Menu',\n bkgnd_color_opac: '更改背景顏色/不透明',\n connector_no_arrow: 'No arrow',\n fitToContent: '適合內容',\n fit_to_all: '適合所有的內容',\n fit_to_canvas: '適合畫布',\n fit_to_layer_content: '適合圖層內容',\n fit_to_sel: '適合選取的物件',\n align_relative_to: '相對對齊 ...',\n relativeTo: '相對於:',\n page: '網頁',\n largest_object: '最大的物件',\n selected_objects: '選取物件',\n smallest_object: '最小的物件',\n new_doc: '清空圖像',\n open_doc: '打開圖像',\n export_img: 'Export',\n save_doc: '保存圖像',\n import_doc: 'Import Image',\n align_to_page: 'Align Element to Page',\n align_bottom: '底部對齊',\n align_center: '居中對齊',\n align_left: '向左對齊',\n align_middle: '中間對齊',\n align_right: '向右對齊',\n align_top: '頂端對齊',\n mode_select: '選擇工具',\n mode_fhpath: '鉛筆工具',\n mode_line: '線工具',\n mode_rect: 'Rectangle Tool',\n mode_square: 'Square Tool',\n mode_fhrect: '徒手畫矩形',\n mode_ellipse: '橢圓',\n mode_circle: '圓',\n mode_fhellipse: '徒手畫橢圓',\n mode_path: '路徑工具',\n mode_text: '文字工具',\n mode_image: '圖像工具',\n mode_zoom: '縮放工具',\n no_embed: 'NOTE: This image cannot be embedded. It will depend on this path to be displayed',\n undo: '取消復原',\n redo: '復原',\n tool_source: '編輯SVG原始碼',\n wireframe_mode: '框線模式(只瀏覽線條)',\n clone: 'Clone Element(s)',\n del: 'Delete Element(s)',\n group_elements: '群組',\n make_link: 'Make (hyper)link',\n set_link_url: 'Set link URL (leave empty to remove)',\n to_path: '轉換成路徑',\n reorient_path: '調整路徑',\n ungroup: '取消群組',\n docprops: '文件屬性',\n editor_homepage: 'SVG-Edit 主頁',\n move_bottom: '移至底部',\n move_top: '移動到頂部',\n node_clone: '增加節點',\n node_delete: '刪除節點',\n node_link: '將控制點連起來',\n add_subpath: 'Add sub-path',\n openclose_path: 'Open/close sub-path',\n source_save: '保存',\n cut: 'Cut',\n copy: 'Copy',\n paste: 'Paste',\n paste_in_place: 'Paste in Place',\n delete: 'Delete',\n group: 'Group',\n move_front: 'Bring to Front',\n move_up: 'Bring Forward',\n move_down: 'Send Backward',\n move_back: 'Send to Back'\n },\n layers: {\n layer: '圖層',\n layers: 'Layers',\n del: '刪除圖層',\n move_down: '向下移動圖層',\n new: '新增圖層',\n rename: '重新命名圖層',\n move_up: '向上移動圖層',\n dupe: 'Duplicate Layer',\n merge_down: 'Merge Down',\n merge_all: 'Merge All',\n move_elems_to: '移動物件到:',\n move_selected: '移動被點選的物件其他圖層'\n },\n config: {\n image_props: '圖片屬性',\n doc_title: '標題',\n doc_dims: '畫布大小',\n included_images: '包含圖像',\n image_opt_embed: '內嵌資料 (本地端檔案)',\n image_opt_ref: '使用檔案參照',\n editor_prefs: '編輯器屬性',\n icon_size: '圖示大小',\n language: '語言',\n background: '編輯器背景',\n editor_img_url: 'Image URL',\n editor_bg_note: '注意: 編輯器背景不會和圖像一起儲存',\n icon_large: '大',\n icon_medium: '中',\n icon_small: '小',\n icon_xlarge: '特大',\n select_predefined: '使用預設值:',\n units_and_rulers: 'Units & Rulers',\n show_rulers: 'Show rulers',\n base_unit: 'Base Unit:',\n grid: 'Grid',\n snapping_onoff: 'Snapping on/off',\n snapping_stepsize: 'Snapping Step-Size:',\n grid_color: 'Grid color'\n },\n notification: {\n invalidAttrValGiven: '數值給定錯誤',\n noContentToFitTo: '找不到符合的內容',\n dupeLayerName: '喔不!已經有另一個同樣名稱的圖層了!',\n enterUniqueLayerName: '請輸入一個名稱不重複的',\n enterNewLayerName: '請輸入新圖層的名稱',\n layerHasThatName: '圖層本來就是這個名稱(抱怨)',\n QmoveElemsToLayer: \"要搬移所選取的物件到'%s'層嗎?\",\n QwantToClear: '要清空圖像嗎?\\n這會順便清空你的回復紀錄',\n QwantToOpen: 'Do you want to open a new file?\\nThis will also erase your undo history!',\n QerrorsRevertToSource: 'SVG原始碼解析錯誤\\n要回復到原本的SVG原始碼嗎',\n QignoreSourceChanges: '要忽略對SVG原始碼的更動嗎',\n featNotSupported: '未提供此功能',\n enterNewImgURL: '輸入新的圖片網址',\n defsFailOnSave: 'NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.',\n loadingImage: 'Loading image, please wait...',\n saveFromBrowser: \"Select 'Save As...' in your browser (possibly via file menu or right-click context-menu) to save this image as a %s file.\",\n noteTheseIssues: 'Also note the following issues: ',\n unsavedChanges: 'There are unsaved changes.',\n enterNewLinkURL: 'Enter the new hyperlink URL',\n errorLoadingSVG: 'Error: Unable to load SVG data',\n URLLoadFail: 'Unable to load from URL',\n retrieving: 'Retrieving \\'%s\\' ...',\n popupWindowBlocked: 'Popup window may be blocked by browser',\n exportNoBlur: 'Blurred elements will appear as un-blurred',\n exportNoforeignObject: 'foreignObject elements will not appear',\n exportNoDashArray: 'Strokes will appear filled',\n exportNoText: 'Text may not appear as expected'\n }\n};\n"],"names":["check","it","Math","globalThis","window","self","global","this","Function","exec","error","fails","Object","defineProperty","get","nativePropertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","call","1","V","descriptor","enumerable","bitmap","value","configurable","writable","toString","slice","split","classof","undefined","TypeError","IndexedObject","requireObjectCoercible","input","PREFERRED_STRING","isObject","fn","val","valueOf","hasOwnProperty","key","document","EXISTS","createElement","DESCRIPTORS","a","nativeGetOwnPropertyDescriptor","O","P","toIndexedObject","toPrimitive","IE8_DOM_DEFINE","has","createPropertyDescriptor","propertyIsEnumerableModule","f","String","nativeDefineProperty","Attributes","anObject","object","definePropertyModule","createNonEnumerableProperty","setGlobal","functionToString","store","inspectSource","set","WeakMap","test","module","push","version","mode","copyright","id","postfix","random","keys","shared","uid","NATIVE_WEAK_MAP","state","wmget","wmhas","wmset","metadata","facade","STATE","sharedKey","hiddenKeys","objectHas","match","enforce","getterFor","TYPE","type","getInternalState","InternalStateModule","enforceInternalState","TEMPLATE","options","unsafe","simple","noTargetGet","source","join","prototype","aFunction","variable","namespace","method","arguments","length","path","ceil","floor","argument","isNaN","min","toInteger","max","index","integer","createMethod","IS_INCLUDES","$this","el","fromIndex","toLength","toAbsoluteIndex","includes","indexOf","require$$0","names","i","result","enumBugKeys","concat","getOwnPropertyNames","internalObjectKeys","getOwnPropertySymbols","getBuiltIn","ownKeys","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","target","getOwnPropertyDescriptorModule","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","replace","toLowerCase","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","forced","copyConstructorProperties","sham","redefine","Array","isArray","arg","propertyKey","Symbol","NATIVE_SYMBOL","iterator","WellKnownSymbolsStore","createWellKnownSymbol","USE_SYMBOL_AS_UID","withoutSetter","name","SPECIES","wellKnownSymbol","originalArray","C","constructor","process","versions","v8","userAgent","METHOD_NAME","V8_VERSION","array","foo","Boolean","IS_CONCAT_SPREADABLE","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","arrayMethodHasSpeciesSupport","isConcatSpreadable","spreadable","$","proto","k","len","E","toObject","A","arraySpeciesCreate","n","createProperty","HAS_SPECIES_SUPPORT","nativeSlice","start","end","Constructor","fin","that","ignoreCase","multiline","dotAll","unicode","sticky","RE","s","RegExp","re","lastIndex","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","re1","re2","UNSUPPORTED_Y","stickyHelpers","BROKEN_CARET","NPCG_INCLUDED","str","reCopy","flags","regexpFlags","charsAdded","strCopy","REPLACE_SUPPORTS_NAMED_GROUPS","groups","REPLACE_KEEPS_$0","REPLACE","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","apply","KEY","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","methods","nativeMethod","regexp","arg2","forceStringMethod","regexpExec","done","stringMethod","regexMethod","MATCH","isRegExp","defaultConstructor","S","CONVERT_TO_STRING","pos","first","second","position","size","charCodeAt","charAt","codeAt","R","arrayPush","SUPPORTS_Y","fixRegExpWellKnownSymbolLogic","SPLIT","nativeSplit","maybeCallNative","internalSplit","separator","limit","lim","lastLength","output","lastLastIndex","separatorCopy","splitter","res","rx","speciesConstructor","unicodeMatching","callRegExpExec","p","q","e","z","advanceStringIndex","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","matched","captures","namedCaptures","tailPos","m","symbols","ch","capture","maybeToString","reason","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","functionalReplace","fullUnicode","results","regExpExec","accumulatedResult","nextSourcePosition","j","replacerArgs","getSubstitution","whitespace","whitespaces","ltrim","rtrim","trim","$parseFloat","parseFloat","Infinity","trimmedString","parseFloatImplementation","b","c","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_OUT","NO_HOLES","callbackfn","specificCreate","boundFunction","bind","create","forEach","map","filter","some","every","find","findIndex","filterOut","$filter","TO_STRING_TAG","CORRECT_ARGUMENTS","classofRaw","TO_STRING_TAG_SUPPORT","tag","tryGet","callee","$trim","forcedStringTrimMethod","$indexOf","nativeIndexOf","NEGATIVE_ZERO","STRICT_METHOD","arrayMethodIsStrict","searchElement","activeXDocument","defineProperties","Properties","objectKeys","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObject","domain","ActiveXObject","iframeDocument","iframe","write","close","temp","parentWindow","NullProtoObjectViaActiveX","documentCreateElement","style","display","html","appendChild","src","contentWindow","open","F","UNSCOPABLES","ArrayPrototype","$find","SKIPS_HOLES","addToUnscopables","nativeJoin","ES3_STRINGS","$map","nativeSort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","comparefn","splice","deleteCount","insertCount","actualDeleteCount","from","to","actualStart","argumentsLength","quot","attribute","p1","forcedStringHTMLMethod","sub","createHTML","$parseInt","parseInt","hex","radix","parseIntImplementation","FORCED","Date","NaN","toJSON","toISOString","pv","isFinite","URL","FunctionPrototype","FunctionPrototypeToString","nameRE","setPrototypeOf","setter","CORRECT_SETTER","aPossiblePrototype","__proto__","dummy","Wrapper","NewTarget","NewTargetPrototype","CONSTRUCTOR_NAME","require$$1","setInternalState","require$$2","NativeRegExp","RegExpPrototype","CORRECT_NEW","RegExpWrapper","pattern","thisIsRegExp","patternIsRegExp","flagsAreUndefined","getFlags","inheritIfRequired","proxy","setSpecies","nativeToString","NOT_GENERIC","INCORRECT_NAME","rf","nativeMatch","matcher","matchStr","nativeReverse","reverse","cy","isWindow","nodeType","defaultView","cv","ck","body","d","appendTo","css","remove","cl","frameBorder","width","height","cm","contentDocument","compatMode","removeChild","cu","each","cq","ct","cr","cs","setTimeout","now","ci","XMLHttpRequest","ca","bE","_typeof","b_","g","ajaxSettings","flatOptions","extend","b$","dataTypes","l","h","bT","unshift","bZ","isFunction","bP","substr","bC","offsetWidth","offsetHeight","bx","by","bz","bp","ajax","url","async","dataType","globalEval","text","textContent","innerHTML","bf","parentNode","bo","bh","outerHTML","firstChild","bn","nodeName","bm","getElementsByTagName","grep","defaultChecked","checked","bl","querySelectorAll","bk","clearAttributes","mergeAttributes","selected","defaultSelected","defaultValue","removeAttribute","expando","bj","hasData","_data","events","handle","event","add","bi","ownerDocument","U","createDocumentFragment","pop","T","inArray","K","J","removeData","fire","isEmptyObject","getAttribute","isNumeric","parseJSON","navigator","location","isReady","documentElement","doScroll","ready","B","init","jQuery","o","r","t","u","v","w","x","toUpperCase","y","D","G","H","I","context","selector","isPlainObject","attr","buildFragment","cacheable","clone","fragment","childNodes","merge","getElementById","jquery","makeArray","toArray","pushStack","prevObject","bindReady","eq","last","noConflict","readyWait","holdReady","fireWith","trigger","off","Callbacks","readyState","addEventListener","attachEvent","frameElement","Error","JSON","parse","parseXML","DOMParser","parseFromString","loadXML","noop","execScript","eval","camelCase","guid","access","getTime","uaMatch","browser","superclass","webkit","safari","removeEventListener","detachEvent","unique","memory","stopOnFalse","once","disable","shift","empty","disabled","lock","locked","fired","Deferred","resolve","reject","notify","fail","progress","isResolved","isRejected","then","always","pipe","promise","when","notifyWith","resolveWith","support","setAttribute","leadingWhitespace","tbody","htmlSerialize","hrefNormalized","opacity","cssFloat","checkOn","optSelected","getSetAttribute","className","enctype","html5Clone","cloneNode","submitBubbles","changeBubbles","focusinBubbles","deleteExpando","noCloneEvent","inlineBlockNeedsLayout","shrinkWrapBlocks","reliableMarginRight","noCloneChecked","optDisabled","fireEvent","radioValue","lastChild","checkClone","appendChecked","getComputedStyle","marginRight","submit","change","focusin","cssText","insertBefore","reliableHiddenOffsets","paddingLeft","boxModel","zoom","nextSibling","doesNotAddBorder","offsetTop","doesAddBorderForTableAndCells","top","fixedPosition","overflow","subtractsBorderForOverflowNotVisible","doesNotIncludeMarginInBodyOffset","cache","uuid","noData","embed","applet","acceptData","setInterval","attributes","substring","triggerHandler","_mark","_unmark","queue","dequeue","delay","fx","speeds","stop","clearTimeout","clearQueue","removeAttr","prop","removeProp","propFix","addClass","removeClass","toggleClass","hasClass","valHooks","option","specified","select","selectedIndex","attrFn","offset","isXMLDoc","attrHooks","tabindex","readonly","maxlength","cellspacing","cellpadding","rowspan","colspan","usemap","frameborder","contenteditable","propHooks","tabIndex","getAttributeNode","href","nodeValue","button","createAttribute","setAttributeNode","special","hover","handler","triggered","dispatch","elem","delegateType","bindType","origType","quick","delegateCount","setup","teardown","removeEvent","customEvent","getData","setData","changeData","Event","isTrigger","exclusive","namespace_re","noBubble","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","delegateTarget","is","matches","currentTarget","isImmediatePropagationStopped","handleObj","stopPropagation","props","fixHooks","keyHooks","which","charCode","keyCode","mouseHooks","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","srcElement","metaKey","ctrlKey","load","focus","blur","beforeunload","onbeforeunload","simulate","isSimulated","originalEvent","defaultPrevented","returnValue","getPreventDefault","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","contains","form","_submit_attached","propertyName","_just_changed","_change_attached","on","one","unbind","live","die","delegate","undelegate","toggle","click","sizset","isXML","relative","ID","expr","uniqueSort","matchesSelector","order","leftMatch","preFilter","getText","innerText","selectors","CLASS","NAME","ATTR","TAG","CHILD","POS","PSEUDO","attrMap","attrHandle","previousSibling","getElementsByName","filters","enabled","parent","header","radio","checkbox","file","password","image","reset","activeElement","setFilters","even","odd","lt","gt","nth","nodeIndex","compareDocumentPosition","sourceIndex","createComment","getElementsByClassName","mozMatchesSelector","webkitMatchesSelector","msMatchesSelector","L","M","N","Q","children","contents","next","prev","not","closest","level","prevAll","andSelf","parents","dir","parentsUntil","nextAll","nextUntil","prevUntil","siblings","sibling","W","X","Y","Z","_","ba","bb","bc","bd","be","bg","legend","thead","tr","td","col","area","optgroup","tfoot","colgroup","caption","th","append","createTextNode","wrapAll","wrapInner","wrap","unwrap","replaceWith","domManip","prepend","before","clean","after","cleanData","detach","fragments","prependTo","insertAfter","replaceAll","bA","bB","bq","br","bs","bt","bu","bv","bw","visibility","cssHooks","cssNumber","fillOpacity","fontWeight","lineHeight","orphans","widows","zIndex","cssProps","swap","curCSS","currentStyle","$1","getPropertyValue","left","runtimeStyle","pixelLeft","hidden","visible","bV","bW","bD","bF","bG","bH","bI","bK","bL","bM","bN","bO","bQ","bR","bS","bU","bX","bY","param","traditional","complete","responseText","serialize","serializeArray","elements","success","getScript","getJSON","ajaxSetup","isLocal","contentType","processData","accepts","xml","json","responseFields","converters","ajaxPrefilter","ajaxTransport","cb","mimeType","getResponseHeader","ifModified","lastModified","etag","cc","dataFilter","status","statusText","rejectWith","statusCode","active","setRequestHeader","getAllResponseHeaders","overrideMimeType","abort","crossDomain","hasContent","headers","beforeSend","timeout","send","encodeURIComponent","cd","ce","jsonp","jsonpCallback","script","head","scriptCharset","charset","onload","onreadystatechange","cf","cg","xhr","cj","cors","username","xhrFields","responseXML","unload","cp","cn","co","show","animate","hide","_toggle","fadeTo","animatedProperties","specialEasing","easing","overflowX","overflowY","cur","custom","speed","timers","saveState","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","duration","old","linear","swing","cos","PI","orig","update","step","startTime","unit","tick","interval","clearInterval","slow","fast","animated","cw","cx","setOffset","bodyOffset","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","offsetLeft","borderTopWidth","borderLeftWidth","using","scrollTo","define","amd","template","ToolButton","HTMLElement","_shadowRoot","_this","attachShadow","$div","querySelector","$img","oldValue","newValue","shortcut","classList","console","hasAttribute","_this2","customElements","FlyingButton","$button","$handle","$overall","$menu","$elements","lastElementChild","assignedElements","activeSlot","shadowRoot","onClickHandler","ev","pressed","opened","nativeGetOwnPropertyNames","windowNames","getWindowNames","wrappedWellKnownSymbolModule","$forEach","HIDDEN","TO_PRIMITIVE","ObjectPrototype","$Symbol","$stringify","getOwnPropertyNamesExternal","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","findChild","setSymbolDescriptor","nativeObjectCreate","ObjectPrototypeDescriptor","description","symbol","isSymbol","$defineProperty","$defineProperties","properties","$getOwnPropertySymbols","$propertyIsEnumerable","$getOwnPropertyDescriptor","$getOwnPropertyNames","IS_OBJECT_PROTOTYPE","defineWellKnownSymbol","for","keyFor","sym","useSetter","useSimple","FORCED_JSON_STRINGIFY","stringify","space","$replacer","args","setToStringTag","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","desc","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","getPrototypeOf","CORRECT_PROTOTYPE_GETTER","ITERATOR","BUGGY_SAFARI_ITERATORS","returnThis","IteratorConstructor","Iterators","IteratorsCore","Iterable","DEFAULT","IS_SET","createIteratorConstructor","CurrentIteratorPrototype","getIterationMethod","KIND","defaultIterator","IterablePrototype","values","entries","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","defineIterator","iterated","point","kind","Arguments","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","ArrayValues","ArrayIteratorMethods","COLLECTION_NAME","DOMIterables","Collection","CollectionPrototype","FAILS_ON_PRIMITIVES","nativeGetPrototypeOf","Promise","returnMethod","Result","stopped","iterable","unboundFunction","iterFn","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","condition","iteratorClose","callFn","getIteratorMethod","isArrayIteratorMethod","SAFE_CLOSING","called","iteratorWithReturn","return","defer","channel","port","SKIP_CLOSING","ITERATION_SUPPORT","setImmediate","clear","clearImmediate","MessageChannel","Dispatch","counter","run","runner","listener","post","postMessage","protocol","host","IS_NODE","nextTick","IS_IOS","port2","port1","onmessage","importScripts","flush","node","macrotask","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","exit","enter","IS_WEBOS_WEBKIT","observe","characterData","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","task","PromiseCapability","$$resolve","$$reject","promiseCapability","newPromiseCapability","PROMISE","getInternalPromiseState","PromiseConstructor","NativePromise","$fetch","newPromiseCapabilityModule","newGenericPromiseCapability","DISPATCH_EVENT","createEvent","dispatchEvent","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","FakePromise","INCORRECT_ITERATION","checkCorrectnessOfIteration","all","isThenable","isReject","notified","chain","reactions","microtask","ok","exited","reaction","rejection","onHandleUnhandled","onUnhandled","initEvent","hostReportErrors","isUnhandled","perform","emit","internalReject","internalResolve","wrapper","executor","anInstance","redefineAll","onFulfilled","onRejected","catch","fetch","promiseResolve","capability","$promiseResolve","remaining","iterate","alreadyCalled","race","runtime","exports","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","obj","err","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","makeInvokeMethod","GenStateSuspendedStart","invoke","GenStateExecuting","GenStateCompleted","doneResult","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","GeneratorFunction","GeneratorFunctionPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","enqueue","callInvokeWithMethodAndArg","__await","unwrapped","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iteratorMethod","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","iter","skipTempReset","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","fill","endPos","TO_ENTRIES","$entries","ExplorerButton","$lib","files","request","response","lib","menu","updateLib","currentAction","dataset","draw","shape","libDir","vb","stroke","encoded","btoa","nativeAssign","assign","alphabet","chr","searchParams","pathname","URLSearchParams","hash","ENTRIES","arrayLike","mapfn","mapping","callWithSafeIterationClosing","regexNonASCII","regexSeparators","OVERFLOW_ERROR","stringFromCharCode","fromCharCode","digitToBasic","digit","adapt","delta","numPoints","firstTime","baseMinusTMin","base","encode","currentValue","inputLength","extra","ucs2decode","bias","basicLength","handledCPCount","handledCPCountPlusOne","RangeError","qMinusT","baseMinusT","Headers","getInternalParamsState","getInternalIteratorState","URL_SEARCH_PARAMS","plus","sequences","percentSequence","bytes","percentDecode","sequence","decodeURIComponent","deserialize","!","'","(",")","~","%20","parseSearchParams","query","updateSearchParams","validateArgumentsLength","passed","required","URLSearchParamsIterator","Iterator","params","getIterator","URLSearchParamsConstructor","entryIterator","entryNext","updateURL","URLSearchParamsPrototype","delete","getAll","found","entriesIndex","sliceIndex","callback","USE_NATIVE_URL","EOF","getState","NativeURL","URLSearchParamsModule","getInternalSearchParamsState","getInternalURLState","pow","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseHost","codePoints","parseIPv6","isSpecial","label","labels","toASCII","parseIPv4","arrayFrom","percentEncode","C0ControlPercentEncodeSet","partsLength","numbers","part","number","ipv4","parts","numbersSeen","ipv4Piece","swaps","address","pieceIndex","compress","pointer","char","serializeHost","ignore0","ipv6","maxIndex","maxLength","currStart","currLength","findLongestZeroSequence","fragmentPercentEncodeSet"," ","\"","<",">","`","pathPercentEncodeSet","#","?","{","}","userinfoPercentEncodeSet","/",":",";","=","@","[","\\","]","^","|","code","specialSchemes","ftp","http","https","ws","wss","scheme","includesCredentials","cannotHaveUsernamePasswordPort","cannotBeABaseURL","isWindowsDriveLetter","normalized","startsWithWindowsDriveLetter","third","shortenURLsPath","pathSize","isSingleDot","segment","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","parseURL","stateOverride","bufferCodePoints","failure","buffer","seenAt","seenBracket","seenPasswordToken","codePoint","encodedCodePoints","URLConstructor","baseState","urlString","searchParamsState","serializeURL","origin","getOrigin","getProtocol","getUsername","getPassword","getHost","hostname","getHostname","getPort","getPathname","search","getSearch","getSearchParams","getHash","URLPrototype","accessorDescriptor","getter","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","blob","SEARCH","nativeSearch","searcher","previousLastIndex","sameValue","defaultState","delegatesFocus","firstRender","focusTarget","hasDynamicTemplate","ids","nativeInternals","raiseChangeEvents","render","renderChanges","rendered","rendering","setState","shadowRootMode","stateEffects","applyElementData","checkSize","closestAvailableItemIndex","contentSlot","coreInternal","defaultTabIndex","effectEndTarget","getItemText","goDown","goEnd","goFirst","goLast","goLeft","goNext","goPrevious","goRight","goStart","goToItemWithPrefix","goUp","inputDelegate","itemsDelegate","keydown","renderDataToElement","scrollTarget","startEffect","swipeDown","swipeDownComplete","swipeLeft","swipeLeftTransitionEnd","swipeRight","swipeRightTransitionEnd","swipeUp","swipeUpComplete","swipeStart","swipeTarget","tap","toggleSelectedFlag","elix","internal","$findIndex","attributeToPropertyNames","propertyNamesToAttributes","booleanAttributeValue","standardBooleanAttributes","ismap","multiple","noresize","composedAncestors","selfAndComposedAncestors","walkComposedTree","mousedownListenerKey","closestFocusableNode","current","cast","HTMLSlotElement","assignedSlot","ShadowRoot","deepContains","container","firstFocusableElement","root","forwardFocus","focusableTarget","indexOfItemContainingTarget","items","item","ownEvent","eventSource","composedPath","element","toggleAttribute","states","stateName","updateChildNodes","copy","oldLength","newLength","oldChild","newChild","replaceChild","assignedNodes","flatten","raw","rawTemplate","literalSegments","fragmentFrom","strings","substitutions","templateFrom","isExtensible","preventExtensions","METADATA","setMetadata","objectID","weakData","meta","REQUIRED","fastKey","getWeakData","onFreeze","FREEZING","common","IS_WEAK","ADDER","NativeConstructor","NativePrototype","exported","fixMethod","getConstructor","InternalMetadataModule","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","setStrong","internalStateGetterFor","collection","Map","previous","getEntry","removed","ITERATOR_NAME","getInternalCollectionState","mapBaseTagToCount","registerCustomElement","classFn","baseTag","classNameRegex","classNameMatch","uppercaseRegEx","letter","count","original","SVGElement","transmute","Element","localName","nativeKeys","nativeFreeze","freeze","stateKey","raiseChangeEventsInNextRenderKey","changedSinceLastRenderKey","copyStateWithChanges","changes","changed","effects","changedByEffects","fieldsChanged","value1","value2","field","classTemplateMap","shadowIdProxyKey","proxyElementKey","shadowIdProxyHandler","ReactiveElement","AttributeMarshallingMixin","Base","attributeName","attributeToPropertyName","hyphenRegEx","parsed","attributesForClass","baseClass","baseAttributes","observedAttributes","diff","setterName","propertyNameToAttribute","ReactiveMixin","Reactive","_get","saveRaiseChangeEvents","warn","willRender","isConnected","ShadowTemplateMixin","Proxy","getTemplate","HTMLTemplateElement","importNode","DelegateFocusMixin","focusOptions","focusElement","DelegateInputLabelMixin","ariaLabel","removingAriaAttribute","ariaLabelledby","inputLabel","refreshInputLabel","requestIdleCallback","selectedText","getLabelFromElement","rootNode","getRootNode","elementWithId","elementWithFor","labelElement","DelegateInputSelectionMixin","selectionEnd","selectionStart","setRangeText","setSelectionRange","keyboardActive","focusVisibleChangedListenerKey","FocusVisibleMixin","newFocusedElement","isFocusedElement","_assertThisInitialized","containsFocus","focusVisible","refreshFocus","updateKeyboardActive","newKeyboardActive","CustomEvent","detail","FormElementMixin","attachInternals","checkValidity","validationMessage","valid","setValidity","customError","setFormValue","reportValidity","validity","willValidate","Hidden","require$$3","NativeNumber","NumberPrototype","BROKEN_CLASSOF","toNumber","maxCode","digits","NumberWrapper","Number","KeyboardMixin","documentMouseupListenerKey","PopupDragSelectMixin","listenIfOpenAndConnected","dragSelect","handleMouseup","hitTargets","elementsFromPoint","overSource","popup","overPopup","overPopupFrame","frame","DisabledMixin","bubbles","LanguageDirectionMixin","rightToLeft","direction","availableSpace","sourceRect","boundsRect","align","sourceOrigin","getSourceOrigin","vertical","bottom","right","layoutPopup","popupRect","normalizeOptions","logicalAlign","logicalDirection","defaultDirection","physicalDirection","above","below","column","row","crossAxis","defaultAlign","horizontal","center","stretch","layouts","prioritizedLayouts","preferredDirection","preferredAlign","flipDirection","flipAlign","possibilties","layout1","layout2","compareLayouts","space1","space2","fitsWidth1","fitsHeight1","fitsEither1","fitsBoth1","fitsWidth2","fitsHeight2","fitsEither2","fitsBoth2","area1","area2","layout","rect","getPositionedRect","boundsLeft","boundsTop","boundsBottom","boundsRight","DOMRect","closePromiseKey","closeResolveKey","OpenCloseMixin","closeResult","closeFinished","defaults","effect","effectPhase","openCloseEffects","openedChangeEvent","oldOpenedEvent","openEvent","oldClosedEvent","closeEvent","closeResolve","AriaRoleMixin","role","Backdrop","OverlayFrame","appendedToDocumentKey","defaultZIndexKey","restoreFocusToElementKey","bringToFront","defaultZIndex","maxZIndexInUse","zIndices","hasZIndex","computedZIndex","explicitZIndex","isExplicitZIndexNumeric","SlotContentMixin","slot","OverlayMixin","autoFocus","persistent","closed","Overlay","backdrop","backdropPartType","framePartType","renderParts","implicitCloseListenerKey","elixdebugpopup","blurHandler","canceled","closeHandler","handleEvent","closeOnWindowResize","PopupModalityMixin","handled","addEventListeners","removeEventListeners","Popup","mousedownHandler","resizeListenerKey","PopupSource","ariaHasPopup","popupAlign","popupDirection","popupLayout","popupPartType","sourcePartType","styling","gridTemplateRows","gridTemplateColumns","waitThenRenderOpened","choosePopupLayout","visualViewport","scrollHeight","scrollWidth","viewportBounds","viewport","innerWidth","innerHeight","UpDownToggle","downIcon","upIcon","PopupToggleMixin","popupTogglePartType","toggleDirection","popupToggle","ComboBox","confirmedValue","focused","inputPartType","orientation","placeholder","selectText","matchMedia","sourceSlot","auxiliarycustomTags","getDefaultText","CursorAPIMixin","currentIndex","currentItemRequired","cursorOperationsWrap","currentItem","delegateCursorOperation","operation","itemsChangedListenerKey","previousItemsDelegateKey","currentIndexChangedListenerKey","generatedIdKey","generatedIdCount","defaultAriaRole","article","h1","h2","h3","h4","h5","h6","hr","link","ol","table","textarea","ul","ensureId","focusTest","nativeDelegatesFocus","ComposedFocusMixin","composeFocus","defaultScrollTarget","getScrollableElement","ancestor","isElementScrollable","CursorInViewMixin","scrollCurrentItemIntoView","scrollTargetRect","itemRect","bottomDelta","leftDelta","rightDelta","topDelta","DirectionCursorMixin","canGoDown","canGoLeft","canGoRight","canGoUp","canGoNext","canGoPrevious","languageDirection","ItemsAPIMixin","ItemsCursorMixin","available","availableItemFlags","desiredCurrentIndex","moveToIndex","newIndex","newDesiredIndex","newItemIndex","newItem","ItemsTextMixin","texts","getTextsFromItems","KeyboardDirectionMixin","handleBubblingDirectionKeys","altKey","KeyboardPagedCursorMixin","pageDown","pageUp","scrollOnePage","getIndexOfItemAtY","downward","itemStyle","itemPaddingTop","paddingTop","itemPaddingBottom","paddingBottom","contentTop","contentBottom","clientHeight","targetRect","indexOfItemAtEdge","currentRect","pageHeight","saveRaiseChangesEvents","typedPrefixKey","prefixTimeoutKey","KeyboardPrefixCursorMixin","resetTypedPrefix","prefix","searchText","previousIndex","handleBackspace","setPrefixTimeout","handlePlainCharacter","resetPrefixTimeout","SelectedTextAPIMixin","selectedItem","indexOfItemWithText","SelectedValueAPIMixin","indexOfItemWithValue","SingleSelectAPIMixin","ContentItemsMixin","isSubstantiveElement","SlotItemsMixin","TapCursorMixin","touchAction","mozUserSelect","msUserSelect","webkitUserSelect","userSelect","Node","targetIndex","AriaListMixin","itemRole","selectedItemFlags","CursorSelectMixin","ListBox","flexDirection","documentMousemoveListenerKey","PopupListMixin","hasHoveredOverItemSinceOpened","popupList","selectCurrentItemAndClose","handleMousemove","hoverIndex","originalRaiseChangeEvents","cursorDefined","list","flashCurrentItem","DelegateCursorMixin","DelegateItemsMixin","delegateItems","delegateCurrentIndex","previousItemsDelegate","ListComboBox","listPartType","selectedItemValue","closing","currentItemText","popupMeasured","defaultSlot","refreshSelectionState","inner","$includes","extendsKey","delegatedPropertySettersKey","focusableByDefault","details","reraiseEvents","blockquote","dd","div","dl","dt","fieldset","img","li","mouseEventNames","eventBubbles","blockElements","attributesWithoutProperties","WrappedStandardElement","innerAttributes","extends","eventName","applyAttribute","property","extendsTag","Wrapped","defineDelegates","cls","createDelegate","createMethodDelegate","createPropertyDelegate","getInnerProperty","setInnerProperty","TrackTextSelectionMixin","refreshListener","Input","PlainInputMixin","PlainInput","PlainOpenCloseToggle","downIconGlyph","firstElementChild","upIconGlyph","PlainBackdrop","PlainOverlayFrame","PlainPopup","PlainComboBoxMixin","outline","popupAbove","clipPath","PlainListBoxMixin","PlainListBox","PlainListComboBox","ElixListComboBox","Button","clickEvent","MouseEvent","cancelable","SyntheticMouseEvent","RepeatMousedownMixin","repeatDelayDuration","repeatInterval","repeatIntervalDuration","repeatTimeout","repeatStart","repeatStop","clearRepeat","raiseMousedown","RepeatButton","PlainButtonMixin","PlainRepeatButton","PlainSpinBoxMixin","buttonPartType","repeat","nativeToFixed","toFixed","acc","multiply","c2","divide","dataToString","fractionDigits","thisNumberValue","fractDigits","sign","x2","log","SpinBox","stepSelect","stepDown","stepUp","downButton","upButton","upDisabled","downDisabled","NumberSpinBox","precision","parseValue","formatValue","PlainNumberSpinBox","ElixNumberSpinBox","Zoom","inputsize","$input","_e$detail","_e$detail$closeResult","ElixInput","SEInput","$label","$event","SESpinInput","palette","SEPalette","$strip","rgb","newDiv","backgroundColor","evt","picker","shiftKey","color","paletteEvent","CurrentMixin","SelectableMixin","MenuItem","PlainMenuItem","ElixMenuItem","AriaMenuMixin","Menu","highlightCurrentItem","currentItemFocused","probablyDesktop","flashDuration","isDefaultFocusableItem","PopupButton","popupFocused","measured","popupHeight","MenuButton","menuPartType","PlainButton","PlainBorderButton","PlainMenu","PlainMenuButton","SePlainBorderButton","ElixMenuButton","sePlainBorderButton","SeMenu","Image","ElixMenu","SeMenuItem","$menuitem","$svg","DropdownList","valuePartType","OptionList","PlainOptionList","PlainDropdownList","ElixDropdownList","SeList","$dropdown","currentObj","Option","PlainChoice","ElixOption","PlainOption","SeListItem","error1","error2","correctIsRegExpLogic","searchString","notARegExp","toFixedNumeric","round","isNullish","ColorValuePicker","bindedHex","alphaPrecision","inputs","keyDown","validateKey","red","setValueInRange","green","blue","alpha","hue","saturation","keyUp","ahex","colorChanged","ui","destroy","findPos","curleft","curtop","mergeDeep","Slider","bar","fireChangeEvents","changeEvents","changeEvent","mouseDown","setValuesFromMousePosition","mouseMove","mouseUp","barW","barH","locX","locY","rangeX","minX","rangeY","minY","newX","newY","maxX","maxY","arrow","range","newMinX","newMaxX","newMinY","newMaxY","arrowW","arrowH","arrowOffsetX","arrowOffsetY","jPicker","List","Color","ret","ColorMethods","rgbaToHex","nameLength","hexToRgba","newV","hsv","rgbToHsv","hsvToRgb","intToHex","validateHex","hexToInt","rgba","dec","jPickerMethod","commitCallback","liveCallback","cancelCallback","sets","jPickerDefaults","settings","bindToInput","expandable","insertAdjacentElement","liveUpdate","isLessThanIE7","appVersion","setColorMode","colorMode","rgbMap","rgbBar","setBG","colorMapDiv","setImgLoc","colorMapL1","setAlpha","colorMapL2","colorBarDiv","colorBarL1","colorBarL2","colorBarL3","colorBarL4","colorBarL6","colorMap","colorBar","activeColorChanged","positionMapAndBarArrows","updatePreview","updateMapVisuals","updateBarVisuals","mapValueChanged","xy","colorBarValueChanged","sv","hv","hs","rg","activePreview","colorMapL3","colorBarL5","hva","saturatedColor","hsa","valueColor","hValue","vValue","middle","setImg","backgroundImage","revertColor","commitColor","radioClicked","rCheck","currentClicked","cancelClicked","cancelButton","okClicked","okButton","iconImageClicked","currentColorChanged","currentPreview","expandableColorChanged","va","iconColor","iconAlpha","updateInputColor","moveBarMouseDown","elementStartX","elementStartY","pageStartX","pageStartY","documentMouseMove","documentMouseUp","previousElementSibling","quickPickClicked","attachIFrame","pELem","removeIFrame","initialize","nexts","nextElementSibling","win","onselectstart","controlHtml","title","localization","images","clientPath","newColor","tooltips","colors","currentColor","buttons","cancel","textbox","alphaSupport","poslt","colorPicker","preview","grid","quickList","quickHex","icon","iconImage","moveBar","ns","jGraduate","opt","solidColor","linearGradient","radialGradient","jGraduateDefaults","paint","pickerTitle","newstop","isGecko","mkElem","attrs","newparent","createElementNS","setAttrs","aname","baseVal","jGraduateMethod","okCallback","$settings","idref","$win","colPicker","gradPicker","MAX","attrInput","SLIDERW","stopGroup","svg","xmlns","curType","grad","curGradient","gradalpha","isSolid","mkStop","inverted","inv","opac","x1","y1","y2","fy","previewRect","beginCoord","coord","endCoord","centerCoord","showFocus","focusCoord","isRadial","attrval","onAttrChangeHandler","$elem","stops","curStop","drag","stopOffset","stopMakerDiv","delStop","scaleX","scaleY","angle","cX","cY","stopMakerSVG","transPattern","patternUnits","transImg","bgImage","setAttributeNS","tagName","spreadMethodOpt","draggingCoord","onCoordDrag","fracx","fracy","grd","xform","onCoordUp","numstops","getElementsByTagNameNS","lastfx","lastfy","onMouseDownGradCoords","slider","onMatchCtrHandler","fX","fY","ellipVal","angleVal","tlist","gradientTransform","numberOfItems","getItem","matrix","sliders","radius","ellip","sInput","dragSlider","stopSlider","isRad","xpos","marginLeft","setSlider","divi","posx","abs","thisAlpha","clr","tabs","onTabsClickHandler","innerDivs","innerDiv","tFileds","tFiled","t1Fileds","jOpacInput","newGrad","curStops","curS","sm","jQfocusCoord","tab","alert","colr","sel","stopElem","pickerD","pathbg","transform","selectStop","dragColor","remDrags","colorhandle","stopOpacity","stopColor","jqPickerElem","jqStopEl","newcolor","newopac","remStop","rot","xfStr","sX","jqStopElems","jqStopElem","isInteger","isSafeInteger","nativeStartsWith","startsWith","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","PaintBox","docElem","ctr","defs","ptype","fillAttr","svgcanvas","selectedElement","childs","gPaint","_paintColor","_paintOpacity","defColor","getPaint","setPaint","svgCanvas","opts","refElem","getRefElem","SeColorPicker","$logo","$block","paintBox","$picker","$color_picker","previousBodyOverflowKey","previousDocumentMarginRightKey","wrappingFocusKey","FocusCaptureMixin","firstElement","firstElementIsDocumentActive","shadowActiveElement","firstElementIsShadowActive","focusCatcher","focusCapture","ModalBackdrop","touches","DialogModalityMixin","documentWidth","clientWidth","scrollBarWidth","Dialog","PlainModalBackdrop","PlainModalOverlayMixin","PlainDialog","ElixDialog","$some","elementContainer_","NS","HTML","MATH","SE","SVG","XLINK","XML","XMLNS","getReverseNS","reverseNS","URI","wAttrs","hAttrs","unitAttrs","typeMap_","getTypeMap","shortFloat","getRoundDigits","convertUnit","getBaseUnit","setUnitAttr","convertToNum","num","getWidth","getHeight","sqrt","isValidUnit","getElement","SeImgPropDialog","eventlisten","$saveBtn","$cancelBtn","$resolution","$canvasTitle","$canvasWidth","$canvasHeight","$imageOptEmbed","$imageOptRef","$dialog","onCancelHandler","dialog","onChangeHandler","dims","onSaveHandler","saveOpt","parentElement","save","SeEditPrefsDialog","colorBlocks","$langSelect","$iconSize","$bgBlocks","$bgURL","$gridSnappingOn","$gridSnappingStep","$gridColor","$showRulers","$baseUnit","blocks","curBg","blk","bgColor","newdiv","lang","iconsize","bgcolor","bgurl","gridsnappingon","gridsnappingstep","showrulers","baseunit","SeSvgSourceEditorDialog","$copyBtn","$sourceTxt","$copySec","$applySec","onCopyHandler","SeCMenuDialog","_workarea","$copyLink","$cutLink","$pasteLink","$pasteInPlaceLink","$deleteLink","$groupLink","$ungroupLink","$moveFrontLink","$moveUpLink","$moveDownLink","$moveBackLink","sdowRoot","eleli","ele","onMenuClickHandler","action","triggerEvent","onMenuOpenHandler","onMenuCloseHandler","SeCMenuLayerDialog","$sidePanels","$duplicateLink","$mergeDownLink","$mergeAllLink","AlertDialog","choiceButtons","choiceButtonPartType","choices","choice","choiceButtonContainer","PlainAlertDialog","SePlainAlertDialog","seSelect","whenClosed","seConfirm","SePromptDialog","seAlert","SeExportDialog","$okBtn","$exportOption","$qualityCont","onSubmitHandler","imgType","quality","$values","touchHandler","changedTouches","screenX","screenY","simulatedEvent","view","SVGPathSeg","typeAsLetter","owningPathSegList","pathSegType","pathSegTypeAsLetter","_owningPathSegList","classname","PATHSEG_UNKNOWN","PATHSEG_CLOSEPATH","PATHSEG_MOVETO_ABS","PATHSEG_MOVETO_REL","PATHSEG_LINETO_ABS","PATHSEG_LINETO_REL","PATHSEG_CURVETO_CUBIC_ABS","PATHSEG_CURVETO_CUBIC_REL","PATHSEG_CURVETO_QUADRATIC_ABS","PATHSEG_CURVETO_QUADRATIC_REL","PATHSEG_ARC_ABS","PATHSEG_ARC_REL","PATHSEG_LINETO_HORIZONTAL_ABS","PATHSEG_LINETO_HORIZONTAL_REL","PATHSEG_LINETO_VERTICAL_ABS","PATHSEG_LINETO_VERTICAL_REL","PATHSEG_CURVETO_CUBIC_SMOOTH_ABS","PATHSEG_CURVETO_CUBIC_SMOOTH_REL","PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS","PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL","_segmentChanged","segmentChanged","SVGPathSegClosePath","_asPathString","SVGPathSegMovetoAbs","_x","_y","SVGPathSegMovetoRel","SVGPathSegLinetoAbs","SVGPathSegLinetoRel","SVGPathSegCurvetoCubicAbs","_x1","_y1","_x2","_y2","SVGPathSegCurvetoCubicRel","SVGPathSegCurvetoQuadraticAbs","SVGPathSegCurvetoQuadraticRel","SVGPathSegArcAbs","r1","r2","largeArcFlag","sweepFlag","_r1","_r2","_angle","_largeArcFlag","_sweepFlag","SVGPathSegArcRel","SVGPathSegLinetoHorizontalAbs","SVGPathSegLinetoHorizontalRel","SVGPathSegLinetoVerticalAbs","SVGPathSegLinetoVerticalRel","SVGPathSegCurvetoCubicSmoothAbs","SVGPathSegCurvetoCubicSmoothRel","SVGPathSegCurvetoQuadraticSmoothAbs","SVGPathSegCurvetoQuadraticSmoothRel","SVGPathElement","createSVGPathSegClosePath","createSVGPathSegMovetoAbs","createSVGPathSegMovetoRel","createSVGPathSegLinetoAbs","createSVGPathSegLinetoRel","createSVGPathSegCurvetoCubicAbs","createSVGPathSegCurvetoCubicRel","createSVGPathSegCurvetoQuadraticAbs","createSVGPathSegCurvetoQuadraticRel","createSVGPathSegArcAbs","createSVGPathSegArcRel","createSVGPathSegLinetoHorizontalAbs","createSVGPathSegLinetoHorizontalRel","createSVGPathSegLinetoVerticalAbs","createSVGPathSegLinetoVerticalRel","createSVGPathSegCurvetoCubicSmoothAbs","createSVGPathSegCurvetoCubicSmoothRel","createSVGPathSegCurvetoQuadraticSmoothAbs","createSVGPathSegCurvetoQuadraticSmoothRel","getPathSegAtLength","distance","measurementElement","lastPathSegment","pathSegList","removeItem","getTotalLength","pathElement","_pathElement","_list","_parsePath","_mutationObserverConfig","_pathElementMutationObserver","_updateListFromPathMutations","_checkPathSynchronizedToList","_pathSegList","takeRecords","mutationRecords","hasPathMutations","_writeListToPath","disconnect","_pathSegArrayAsString","pathSeg","_checkValidIndex","insertItemBefore","replaceItem","appendItem","pathSegArray","Builder","appendSegment","Source","_string","_currentIndex","_endIndex","_previousCommand","_skipOptionalSpaces","_isCurrentSpace","character","_skipOptionalSpacesOrDelimiter","hasMoreData","peekSegmentType","lookahead","_pathSegTypeFromChar","_nextCommandHelper","previousCommand","initialCommandIsMoveTo","command","_parseNumber","exponent","frac","decimal","expsign","startIndex","startIntPartIndex","scanIntPartIndex","multiplier","_parseArcFlag","flag","flagChar","parseSegment","points","arcAngle","arcLarge","arcSweep","builder","createSVGRect","isOpera_","opera","isWebkit_","isGecko_","isChrome_","isMac_","isTouch_","supportsSelectors_","supportsXpath_","evaluate","supportsPathReplaceItem_","seglist","seg","supportsPathInsertItemBefore_","supportsGoodTextCharPos_","svgroot","svgcontent","getStartPositionOfChar","supportsPathBBox_","bbox","getBBox","supportsHVLineContainerBBox_","path2","supportsNonScalingStroke_","vectorEffect","supportsNativeSVGTransformLists_","rxform","t1","createSVGTransform","isSVGTransform","setMatrix","isWebkit","isChrome","isTouch","supportsGoodTextCharPos","supportsNonScalingStroke","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","marker","Item","env","argv","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","wrapConstructor","USE_NATIVE","VIRTUAL_PROTOTYPE","nativeProperty","resultProperty","PROTO","nativeSource","targetPrototype","real","CONSTRUCTOR","entryVirtual","StringPrototype","own","NullProtoObjectViaIFrame","SET_METHOD","ArrayIterationModule","uncaughtFrozenStore","frozen","UncaughtFrozenStore","findUncaughtFrozen","$has","InternalWeakMap","enforceIternalState","IS_IE11","$WeakMap","collectionWeak","WeakMapPrototype","nativeDelete","nativeHas","nativeGet","nativeSet","NEW_ITERATOR_PROTOTYPE","_arrayLikeToArray","arr","arr2","_unsupportedIterableToArray","minLen","_context","arrayLikeToArray","_sliceInstanceProperty","_Array$from","_slicedToArray","_arrayWithHoles","_Array$isArray","arrayWithHoles","_iterableToArrayLimit","_Symbol","_isIterable","_arr","_n","_d","_e","_s","_i","_getIterator","iterableToArrayLimit","unsupportedIterableToArray","_nonIterableRest","nonIterableRest","objectDefinePropertyModile","getOwnPropertyDescriptors","$AggregateError","AggregateError","errors","message","errorsArray","NON_GENERIC","finally","onFinally","allSettled","any","alreadyResolved","alreadyRejected","asyncGeneratorStep","gen","_next","_throw","_Promise","_asyncToGenerator","_defineProperty","_Object$defineProperty","_classCallCheck","_defineProperties","_createClass","protoProps","staticProps","IS_RIGHT","memo","$reduce","CHROME_VERSION","reduce","$every","factories","construct","argsLength","partArgs","bound","getNanoSeconds","vendors","suffix","raf","caf","_now","cancelled","requestAnimationFrame","cancelAnimationFrame","color_string","simple_colors","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","feldspar","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslateblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","violetred","wheat","white","whitesmoke","yellow","yellowgreen","color_defs","example","bits","processor","channels","toRGB","toRGBA","toHex","getHelpXML","examples","sc","list_item","list_color","RGBColor","example_div","list_item_value","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","Reflect","_setPrototypeOf","_Object$setPrototypeOf","_inherits","subClass","superClass","_Object$create","WrappedWellKnownSymbolModule","_Symbol$iterator","ReferenceError","_possibleConstructorReturn","assertThisInitialized","_getPrototypeOf","_Object$getPrototypeOf","_toConsumableArray","_arrayWithoutHoles","arrayWithoutHoles","_iterableToArray","iterableToArray","_nonIterableSpread","nonIterableSpread","arrayIncludes","stringIncludes","receiver","_Reflect$get","_superPropBase","superPropBase","_Object$getOwnPropertyDescriptor","encodeSVGPath","commands","SVGPathData","CLOSE_PATH","HORIZ_LINE_TO","VERT_LINE_TO","MOVE_TO","LINE_TO","CURVE_TO","SMOOTH_CURVE_TO","QUAD_TO","SMOOTH_QUAD_TO","ARC","rX","rY","xRot","lArcFlag","deleteProperty","nativeIsExtensible","nativePreventExtensions","IS_ADDER","nativeApply","functionApply","OPTIONAL_ARGUMENTS_LIST","thisArgument","argumentsList","objectGetPrototypeOf","mulTable","shgTable","processCanvasRGBA","canvas","topX","topY","imageData","getImageDataFromCanvas","getContext","getImageData","processImageDataRGBA","stackEnd","pixels","widthMinus1","heightMinus1","radiusPlus1","sumFactor","stackStart","BlurStack","stack","stackIn","stackOut","yw","yi","mulSum","shgSum","pr","pg","pb","pa","rInSum","gInSum","bInSum","aInSum","rOutSum","gOutSum","bOutSum","aOutSum","rSum","gSum","bSum","aSum","_i2","rbs","paInitial","_a2","_p","_stackOut","_r","_g","_b","_a","_pr","_pg","_pb","_pa","_rOutSum","_gOutSum","_bOutSum","_aOutSum","_rSum","_gSum","_bSum","_aSum","_i3","yp","_gInSum","_bInSum","_aInSum","_rInSum","_i4","_rbs","_p2","putImageData","jQueryPluginSVG","proxied","namespaceURI","transformToString","listMap_","_elem","_xforms","_update","tstr","_init","valBits","valArr","letters","mtx","createSVGMatrix","fname","_removeFromOtherLists","tl","retValue","newxforms","removeElementFromListMap","getTransformList","supportsNativeTransformLists","patternTransform","$reduceRight","reduceRight","transformPoint","isIdentity","matrixMultiply","m1","hasMatrixTransform","transformBox","minx","maxx","miny","aabox","transformListToTransform","createSVGTransformFromMatrix","mtom","getMatrix","snapToAngle","snap","dx","dy","atan2","dist","snapangle","sin","rectsIntersect","ArrayBuffer","DataView","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","isPrototypeOf","TYPED_ARRAY_TAG","NATIVE_ARRAY_BUFFER_VIEWS","NATIVE_ARRAY_BUFFER","TYPED_ARRAY_TAG_REQIRED","TypedArrayConstructorsList","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","isTypedArray","klass","aTypedArray","aTypedArrayConstructor","ARRAY","TypedArrayConstructor","exportTypedArrayMethod","exportTypedArrayStaticMethod","isView","LN2","mantissaLength","mantissa","exponentLength","eMax","eBias","rt","nBits","NativeArrayBuffer","$ArrayBuffer","$DataView","$DataViewPrototype","packIEEE754","IEEE754","unpackIEEE754","packInt8","packInt16","packInt32","unpackInt32","packFloat32","packFloat64","addGetter","isLittleEndian","intIndex","toIndex","byteLength","byteOffset","pack","conversion","ArrayBufferPrototype","testView","nativeSetInt8","setInt8","getInt8","setUint8","arrayFill","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","BYTES","toPositiveInteger","ArrayBufferModule","ArrayBufferViewCore","BYTES_PER_ELEMENT","WRONG_LENGTH","fromList","isArrayBuffer","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","CLAMPED","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructorPrototype","addElement","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","typedArrayOffset","$length","toOffset","typedArrayFrom","$len","createTypedArrayConstructor","copyWithin","inc","$copyWithin","$fill","fromSpeciesAndList","predicate","arrayValues","ArrayIterators","arrayKeys","arrayEntries","nativeTypedArrayIterator","CORRECT_ITER_NAME","typedArrayValues","$join","nativeLastIndexOf","lastIndexOf","$lastIndexOf","$slice","$sort","subarray","begin","beginIndex","$toLocaleString","toLocaleString","TO_LOCALE_STRING_BUG","Uint8ArrayPrototype","arrayToString","arrayJoin","IS_NOT_ARRAY_METHOD","nativeArrayBufferSlice","INCORRECT_SLICE","viewSource","viewTarget","KEYSTR","visElemsArr","editorContext_","domdoc_","domcontainer_","svgroot_","dropXMLInternalSubset","toXml","encode64","encodeUTF8","chr1","chr2","chr3","enc1","enc2","enc3","enc4","decode64","atob","decodeUTF8","argString","escape","unescape","dataURLToObjectURL","dataurl","Blob","mime","bstr","u8arr","blankPageObjectURL","text2xml","sXML","out","dXML","e2","walkTree","cbFn","getUrlFromAttr","attrVal","getHref","getAttributeNS","setHref","findDefs","svgElement","getSVGContent","getPathBBox","tot","bounds","P0","getCalc","P1","P2","P3","calc","b2ac","t2","groupBBFix","supportsHVLineContainerBBox","ref","issue","elems","getStrokedBBox","geSelectedElements","elname","supportsPathBBox","extent","getExtentOfChar","getComputedTextLength","fo","bboxToObj","getPathDFromSegments","pathSegments","singleChar","pts","getPathDFromElement","ry","getExtraAttributesForConvertToPath","getBBoxOfElementAsPath","addSVGElementFromJson","pathActions","eltrans","resetOrientation","getBBoxWithTransform","getRotationAngleFromTransformList","hasMatrixXForm","goodBb","bBoxCanBeOptimizedOverNativeGetBBox","hasAMatrixTransform","angleModulo90","getStrokeOffsetForBBox","sw","fullBb","curBb","getVisibleElements","contentElems","getStrokedBBoxDefaultVisible","toRad","getRotationAngle","getSelectedElements","getElem","supportsSelectors","supportsXpath","singleNodeValue","assignAttributes","suspendLength","unitCheck","removeAttributeNS","cleanupElement","snapToGrid","stepSize","getSnappingStep","preventClickDefault","HistoryEventTypes","BEFORE_APPLY","AFTER_APPLY","BEFORE_UNAPPLY","AFTER_UNAPPLY","Command","applyFunction","handleHistoryEvent","unapplyFunction","MoveElementCommand","oldNextSibling","oldParent","newNextSibling","newParent","_this3","InsertElementCommand","_this4","_this5","_this6","RemoveElementCommand","_this8","_this9","ChangeElementCommand","newValues","oldValues","bChangedTransform","_this11","rotate","_this12","BatchCommand","_this14","stackItem","assert","_this15","unapply","cmd","thisElems","UndoManager","historyEventHandler","handler_","undoStackPointer","undoStack","undoChangeStackPointer","undoableChangeStack","attrName","changeset","batchCmd","addSubCommand","pathMethodsContext_","insertItemBeforeMethod","newseg","supportsPathInsertItemBefore","curSeg","ptObjToArrMethod","segItem","getSegData","getGripPtMethod","altPt","pth","currentZoom","getEditorContext","getCurrentZoom","getGripContainerMethod","addPointGripMethod","pointGripContainer","pointGrip","atts","cursor","uiStrings","getUIStrings","pathNodeTooltip","dblclick","getPathObj","setSegType","addCtrlGripMethod","pathCtrlPtTooltip","getCtrlLineMethod","ctrlLine","getControlPointsMethod","cpt","segItems","segs","pt","gpt","replacePathSegMethod","getPathFuncs","supportsPathReplaceItem","segList","getSegSelectorMethod","segLine","Segment","ctrlpts","ptgrip","segsel","showCtrlPts","selectCtrls","getPointGripMethod","full","curPts","nextPts","mate","itm","anum","newType","Path","selected_pts","setPathObj","first_seg","startI","nextSeg","prevSeg","startSeg","addGrip","p0x","p1x","p2x","p01x","p12x","p0y","p1y","p2y","p01y","p12y","eachSeg","last_d","selectPt","move","moveCtrl","dragctrl","getLinkControlPts","setLinked","storeD","selPt","curX","curY","prevX","prevY","olditem","diffX","diffY","setType","endChanges","ctrlNum","clearSelection","addPtsToSelection","imatrix","inverse","resetD","indexes","grips","closedSubpath","subpathIsClosed","clsd","pathActionsContext_","pathActionsContext","pathDSegment","morePoints","lastPoint","pnt","newPoint","firstCtrl","subpath","currentPath","hasMoved","pathActionsMethod","mouseTarget","startX","startY","getCurrentMode","curPt","cur_pt","dragging","removePtFromSelection","rubberBox","getRubberBox","setRubberBox","selectorManager","getRubberBandBox","mouseX","mouseY","stretchy","getGridSnapping","drawnPath","getDrawnPath","FUZZ","clickOnPoint","px","py","getId","removePath_","sSeg","newpath","absX","absY","endseg","setDrawnPath","setStarted","remapElement","newD","origD","recalcRotatedPath","toEditMode","getContainer","getMouseTarget","lastx","lasty","xya","addPointGrip","dAttr","curStyles","getNextId","getOpacity","getPointFromGrip","mpt","movePts","rbb","getGripPt","ptBb","pointGrip1","addCtrlGrip","pointGrip2","ptX","ptY","altX","altY","getCtrlLine","lastX","lastY","replacePathSeg","_mouseX","_mouseY","keep","lastPt","toSelectMode","getPath_","setCurrentMode","oldbbox","utilsGetBBox","selPath","addToSelection","addSubPath","reorient","addCommandToHistory","reorientGrads","zoomChange","getNodePoint","linkControlPoints","linkPoints","setLinkControlPoints","clonePathNode","selPts","nums","addSeg","opencloseSubPath","lastM","zSeg","openPt","startItem","closer","deletePathNode","canDeleteNodes","deleteSeg","cleanup","remItems","nprev","prevType","deleteSelectedElements","smoothPolylineIntoPath","curpos","prevCtlPt","ct1","ct2","newpts","smoothControlPoints","prevArr","moveNode","fixEnd","convertPath","toRel","curx","cury","getPathMap","segData","setUiStrings","strs","pathFuncs","linkControlPts","pathData","pathMethodsContext","pathMethodInit","newcx","newcy","oldcx","oldcy","getRotVals","theta","pathMap","pathActionsInit","nct1","getSVGRoot","createSVGPoint","nct2","anglea","angleb","newAnglea","newAngleb","angleBetween","angleDiff","oldbox","box","rvals","cVals1","cVals2","Rnc","setRotate","getPointFromGripMethod","pt1","pt2","gCoords","newgrad","lcp","Layer","group","svgElem","name_","group_","svgdoc","layerTitle","addLayerClass","expected","child","hrService","previousName","getTitleElement","changeElement","CLASS_REGEX","classes","CLASS_NAME","HistoryRecordingService","undoManager","undoManager_","currentBatchCommand_","batchCommandStack_","batchCommand","addCommand_","NO_HISTORY","copyElem","newEl","fixedD","visElems","RandomizeModes","randIds","disabledElems","historyRecordingService","canvas_","undoMgr","findLayerNameInGroup","isOpera","getNewLayerName","existingLayerNames","context_","Drawing","optIdPrefix","svgElem_","obj_num","idPrefix","releasedNums","all_layers","layer_map","current_layer","nonce_","setNonce","oldObjNum","restoreOldObjNum","getElem_","front","getNumLayers","getName","getGroup","layer","finalName","oldName","setName","newpos","oldpos","layerCount","currentGroup","refGroup","identifyLayers","setCurrentLayer","getLayerName","prevGroup","startBatchCommand","layerNextSibling","removeElement","moveElement","removeGroup","endBatchCommand","mergeLayer","deactivate","activate","oldLayerGroup","numchildren","layernames","childgroups","appendChildren","insertElement","layerName","isVisible","bVisible","setVisible","setOpacity","utilCopyElem","getNextIdClosure","randomizeIds","enableRandomization","currentDrawing","getNonce","clearNonce","leaveContext","getCurrentDrawing","createLayer","newLayer","cloneLayer","deleteCurrentLayer","currentLayer","getCurrentLayer","renameCurrentLayer","newName","drawing","setCurrentLayerName","setCurrentLayerPosition","newPos","setLayerVisibility","prevVisibility","getLayerVisibility","oldDisplay","moveSelectedToLayer","getLayerByName","selElems","oldLayer","changeSVGContent","mergeAllLayers","elData","setCurrentGroup","setContext","getCurrentGroup","hstry","pasteContext_","pasteElementsMethod","clipb","sessionStorage","getClipBoardID","pasted","changedIDs","checkIDs","getCanvas","runExtensions","extChanges","removeID","clipBoardItem","restoreRefElems","selectOnly","ctrX","ctrY","getLastClickPoint","moveSelectedElements","undoContext_","ffClone","releaseSelector","setSelectedElements","requestSelector","showGrips","changeSelectedAttributeNoUndoMethod","selectedElements","noXYElems","oldval","textActions","resize","newrot","changeSelectedAttributeMethod","beginUndoableChange","finishUndoableChange","isEmpty","selectionContext_","clearSelectionMethod","noCall","setEmptySelectedElements","addToSelectionMethod","elemsToAdd","getMouseTargetMethod","correspondingUseElement","getDOMContainer","selectorParentGroup","runExtensionsMethod","vars","returnArray","nameFilter","getExtensions","ext","getIntersectionListMethod","rubberBBox","resultList","getCurBBoxes","setCurBBoxes","getVisibleElementsAndBBoxes","curBBoxes","groupSvgElem","prepareSvg","newDoc","sanitizeSvg","setRotationAngle","preventUndo","oldTransform","newTransform","changeSelectedAttribute","getSelector","updateGripCursors","recalculateAllSelectedDimensions","getCurrentResizeMode","recalculateDimensions","textActionsContext_","textActionsMethod","curtext","textinput","selblock","blinker","textbb","allowDbl","chardata","setCursor","charbb","startPt","ptToScreen","endPt","setSelection","skipInput","startbb","endbb","dstr","getIndexFromPoint","charpos","getCharNumAtPosition","setCursorFromPoint","setEndSelectionFromPoint","i1","i2","screenToPt","xIn","yIn","selectAll","selectWord","ept","getrootSctm","selectElem","setInputElem","_inputElem","getEndPositionOfChar","contentW","eventContext_","getBsplinePoint","spline","p0","getControllPoint2","getControllPoint1","p2","getStart","p3","getEnd","t3","mouseMoveEvent","getStarted","spaceKey","realX","realY","getCurConfig","gridSnapping","getStartX","getStartY","setTranslate","getRStartX","getRStartY","elemsToRemove","newList","getIntersectionList","intElem","foundInd","removeFromSelection","hasMatrix","getInitBbox","tx","ty","sy","sx","translateOrigin","scale","translateBack","setScale","square","rad","setFreehand","getFreehand","setEnd","getStepCount","setParameter","setNextParameter","setbSpline","getNextParameter","setNextPos","getbSpline","getParameter","setSumDistance","getSumDistance","getNextPos","getThreSholdDist","setControllPoint2","setControllPoint1","setStart","setStartX","setStartY","pathModule","mouse_x","mouse_y","mouseUpEvent","tempJustSelected","getJustSelected","setJustSelected","setCurProperties","setCurText","factor","coords","commaIndex","extResult","started","addedNew","cAni","aniDur","curShape","getStyle","opacAni","getOpacAni","beginElement","dur","selectNew","releaseId","setMode","setStartTransform","dblClickEvent","pushGroupProperties","mouseDownEvent","rightClick","cloneSelectedElements","setRootSctm","getScreenCTM","setLastClickPoint","setRStartX","setRStartY","grip","griptype","setCurrentResizeMode","slist","setInitBbox","delayedStroke","iswebkit","stroke_","setDAttr","getDAttr","newImage","getLastGoodImgUrl","strokeW","stroke_width","stroke_dasharray","stroke_linejoin","stroke_linecap","stroke_opacity","getCurText","start_x","start_y","DOMMouseScrollEvent","workarea","rulerwidth","showRulers","editorFullW","editorFullH","editorW","editorH","workareaViewW","workareaViewH","wOffset","wOffsetLeft","wOffsetTop","wheelDelta","wZoom","hZoom","zoomlevel","topLeftOld","newCtr","setZoom","jsonContext_","svgdoc_","getJsonFromSvgElements","retval","addSVGElementsFromJson","getDrawing","getCurShape","fill_opacity","elemContext_","getResolutionMethod","getTitleMethod","setGroupTitleMethod","ts","getDOMDocument","tsNextSibling","setDocumentTitleMethod","newTitle","docTitle","oldTitle","setResolutionMethod","getResolution","visEls","_item","contentH","viewBox","getEditorNSMethod","setBBoxZoomMethod","spacer","calcZoom","newzoom","selectedElems","setZoomMethod","zoomLevel","setCurrentZoom","setColorMethod","setCurShape","addNonG","setGradientMethod","getCurProperties","duplicateGrad","findDuplicateGradient","setColor","existingGrads","radAttrs","og","gradAttrs","ogAttrs","ostops","ostop","setPaintMethod","setPaintOpacity","setCanvas","setGradient","setStrokeWidthMethod","getMode","setStrokeWidth","setStrokeAttrMethod","getBoldMethod","setBoldMethod","getItalicMethod","setItalicMethod","setTextAnchorMethod","getFontFamilyMethod","setFontFamilyMethod","setFontColorMethod","getFontColorMethod","getFontSizeMethod","setFontSizeMethod","getTextMethod","setTextContentMethod","setImageURLMethod","setsize","curHref","setLinkURLMethod","parentsA","setRectRadiusMethod","makeHyperlinkMethod","groupSelectedElements","removeHyperlinkMethod","ungroupSelectedElement","setSegTypeMethod","setBackgroundMethod","border","bgImg","bgPattern","preserveAspectRatio","remap","scalew","scaleh","doSnapping","finishUp","elName","chlist","mt","existing","tNew","tbox","gsvg","pstr","firstseg","currentpt","updateClipPath","cpXform","newxlate","noi","mxs","mNew","oldcenter","newcenter","initial","getStartTransform","gangle","rm","firstM","oldStartTransform","tm","tmn","childTlist","e2t","t2n","s2","T_M","mInv","M2","clipPathsDone","uses","useElem","usexlate","newRot","em","e2m","avg","roldt","rold","rnew","rnewInv","extrat","gtlist","gmatrix","mStr","oldxlate","meq","meqInv","tspanChanges","elementContext_","moveToTopSelectedElem","moveToBottomSelectedElem","moveUpDownSelected","foundCur","undoable","gettingSelectorManager","sortfunction","copiedElements","alignSelectedElements","relativeTo","bboxes","MAX_VALUE","MIN_VALUE","maxy","curwidth","curheight","getContentW","getContentH","selectedCopy","copySelectedElements","getJsonFromSvgElement","setItem","getClipboardID","flashStorage","urlArg","cmdStr","pushGroupProperty","gfilter","gblur","glist","gattrs","newOpac","cblur","getBlur","origCblur","setBlurOffsets","chtlist","rgm","rcm","cangle","cbox","ceqm","coldc","sangle","trm","oldxform","newxform","chm","chmInv","gm","convertToGroup","hasMore","dupeGrads","uniquifyElems","setUseData","convertGradients","walkTreePost","getVisElems","anchor","gNextSibling","updateCanvas","oldX","oldY","new_x","new_y","old_x","old_y","d_x","d_y","cycleElement","curElem","allElems","blurContext_","setBlurNoUndo","getFilter","setFilterHidden","getFilterHidden","setBlur","finishChange","bCmd","getCurCommand","setCurCommand","setFilter","filterElem","stdDev","elemId","newblur","in","stdDeviation","REVERSE_NS","svgWhiteList_","circle","ellipse","feGaussianBlur","feMorphology","foreignObject","line","mask","polygon","polyline","switch","textPath","tspan","use","annotation","maction","math","menclose","merror","mfrac","mi","mmultiscripts","mn","mo","mover","mpadded","mphantom","mprescripts","mroot","mrow","mspace","msqrt","mstyle","msub","msubsup","msup","mtable","mtd","mtext","mtr","munder","munderover","none","semantics","svgWhiteListNS_","elt","attNS","att","doc","allowedAttrs","allowedAttrsNS","seAttrs","attrLocalName","attrNsURI","styleAttrName","styleAttrVal","hasChildNodes","arrayBufferModule","MIN_SAFE_INTEGER","objectDefinePropertyModule","regExpFlags","$trimStart","trimStart","trimLeft","u8","u16","u32","fleb","fdeb","clim","freb","eb","fl","revfl","fd","revfd","rev","hMap","mb","le","rvb","r_1","flt","fdt","flm","flrm","fdm","fdrm","bits16","shft","slc","inflt","dat","buf","st","sl","noBuf","noSt","cbuf","nbuf","final","lm","dm","lbt","dbt","tbts","hLit","hcLen","ldt","clt","clb","clbmsk","clm","lms","dms","mxa","dsym","wbits","wbits16","hTree","i0","maxSym","mbt","ln","lft","cst","i2_1","i2_2","i2_3","lc","cli","cln","clen","wfblk","wblk","syms","lf","df","dlt","mlb","ddt","mdb","_c","lclt","nlc","lcdt","ndc","lcfreq","lct","mlcb","nlcc","ll","flen","ftlen","dtlen","llm","lcts","clct","dst","deo","et","adler","dopt","pre","dflt","lvl","plvl","lst","msk_1","bs1_1","bs2_1","hsh","lc_1","wi","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","mem","wbytes","zlh","lv","zlibSync","responseType","onerror","initMouseEvent","saveAs","HTMLAnchorElement","webkitURL","download","rel","msSaveOrOpenBlob","autoBom","FileReader","onloadend","readAsDataURL","print","modify","perm","padding","processOwnerPassword","encryptionKey","lsbFirstWord","hexToBytes","subscribe","unsubscribe","publish","getTopics","objectNumber","gState","boundingBox","xStep","yStep","stream","cloneIndex","format","compressPdf","encryption","userPassword","ownerPassword","userPermissions","userUnit","floatPrecision","defaultPathOperation","putOnlyUsedFonts","__private__","PubSub","getPdfVersion","setPdfVersion","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","c0","c1","c3","c4","c5","c6","c7","c8","c9","c10","legal","ledger","tabloid","getPageFormats","getPageFormat","COMPAT","ADVANCED","saveGraphicsState","Ht","xt","Er","setFontSize","getFontSize","restoreGraphicsState","advancedAPI","compatAPI","isAdvancedAPI","roundToPrecision","hpf","f2","f3","setPrecision","getFileId","setFileId","We","convertDateToPDFDate","getTimezoneOffset","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","convertPDFDateToDate","setCreationDate","getCreationDate","padd2","padd2Hex","tt","nt","at","ot","Zt","Jt","$t","setCustomOutputDestination","ut","resetCustomOutputDestination","ht","getArrayBuffer","ft","getStandardFonts","fontSize","R2L","setR2L","getR2L","vt","setZoomMode","getZoomMode","yt","wt","setPageMode","getPageMode","Nt","setLayoutMode","getLayoutMode","setDisplayMode","Lt","subject","author","keywords","creator","getDocumentProperty","getDocumentProperties","setDocumentProperties","setProperties","setDocumentProperty","At","St","_t","Pt","kt","It","Ft","Ct","jt","Ot","Bt","Mt","Et","qt","Rt","Dt","hotfixes","Tt","Ut","zt","_matrix","shx","decompose","shy","translate","skew","inversed","applyToPoint","kr","applyToRectangle","Ir","Matrix","Vt","matrixMult","Wt","unitMatrix","identityMatrix","Gt","ShadingPattern","TilingPattern","addShadingPattern","beginTilingPattern","Cr","endTilingPattern","restore","Yt","newObject","Xt","newObjectDeferred","Kt","newAdditionalObject","objId","Qt","decodeColorString","te","encodeColorString","ch1","ch2","ch3","ch4","pdfColorType","ee","getFilters","putStream","alreadyAppliedFilters","addLength1","objectId","encryptor","additionalKeyValues","API","processDataByFilters","reverseChain","ne","putPage","contentsObjId","rootDictionaryObjId","resourceDictionaryObjId","mediaBox","bottomLeftX","bottomLeftY","topRightX","topRightY","cropBox","bleedBox","trimBox","artBox","pageContext","pageNumber","page","ie","putPages","ae","Ie","font","pdfEscapeWithNeededParanthesis","isAlreadyPutted","postScriptName","encoding","oe","se","pages","ue","he","resourcesOid","objectOid","fe","de","pe","ge","me","oid","toHexString","ve","ye","we","Ne","Le","MAX_SAFE_INTEGER","Ae","xe","fontName","fontStyle","Se","isStandardFont","fonts","dictionary","Pe","ke","sourceEncoding","outputEncoding","autoencode","codePages","noBOM","pdfEscape","Fe","beginPage","Oe","Ce","lr","yr","Sr","je","setPage","Be","getNumberOfPages","Me","disableWarning","noFallback","times","normal","Ee","putInfo","qe","putCatalog","Re","putTrailer","De","putHeader","Te","putXRef","Ue","buildDocument","ze","getBlob","He","filename","pdfObjectUrl","pdfJsUrl","PDFViewerApplication","Ve","Ge","Ye","getPageInfo","Je","getPageInfoByObjId","Xe","getCurrentPageInfo","addPage","insertPage","movePage","deletePage","scope","lineHeightFactor","scaleFactor","TabLen","baseline","maxWidth","splitTextToSize","mutex","activeFontKey","activeFontSize","rotationDirection","charSpace","Ar","setCharSpace","getCharSpace","renderingMode","usedRenderingMode","pageSize","getStringUnitWidth","doKerning","gr","mr","isHex","Nr","Ke","clip","clipEvenOdd","discardPath","Ze","isValidStyle","setDefaultPathOperation","$e","Qe","fillEvenOdd","fillStroke","fillStrokeEvenOdd","nr","er","rr","ir","setGState","ar","moveTo","or","lineTo","sr","curveTo","lines","op","triangle","roundedRect","SQRT2","setFont","ur","getFont","getFontList","addFont","lineWidth","setLineWidth","setLineDash","setLineDashPattern","fr","getLineHeight","dr","setLineHeightFactor","getLineHeightFactor","getHorizontalCoordinate","getVerticalCoordinate","vr","getHorizontalCoordinateString","getVerticalCoordinateString","strokeColor","getStrokeColor","getDrawColor","setStrokeColor","setDrawColor","wr","fillColor","getFillColor","setFillColor","textColor","Lr","getTextColor","setTextColor","xr","CapJoinStyles","butt","but","miter","rounded","projecting","project","bevel","setLineCap","setLineJoin","setLineMiterLimit","setMiterLimit","GState","Pr","equals","addGState","setCurrentTransformationMatrix","comment","Fr","currentPage","pagesContext","Br","outputDestination","Mr","qr","jr","Or","beginFormObject","endFormObject","doFormObject","getFormObject","returnPromise","getPageWidth","setPageWidth","getPageHeight","setPageHeight","getCoordinateString","collections","newObjectDeferredBegin","setWidth","setHeight","encryptionOptions","getEncryptor","getPDFVersion","Point","Rectangle","hasHotfix","__acroform__","BBox","setBit","clearBit","getBit","getBitForPdf","setBitForPdf","clearBitForPdf","calculateCoordinates","lowerLeft_X","lowerLeft_Y","upperRight_X","upperRight_Y","appearanceStreamContent","DV","_V","maxFontSize","textAlign","fields","xForms","acroFormDictionaryRoot","printedOut","isInitialized","annotations","acroformPlugin","FieldNum","_eventID","Fields","hasAnnotation","Kids","Rect","DA","createDefaultAppearanceStream","getKeyValueListForStream","hasAppearanceStream","arrayToPdfArray","_objId","_scope","Ff","FT","getOptions","setOptions","addOption","removeOption","combo","edit","CA","pushButton","appearanceState","_AppearanceType","RadioButton","Circle","createAppearanceStream","optionName","setAppearance","getCA","createOption","Parent","CheckBox","On","YesNormal","YesPushDown","Off","OffPushDown","Bezier_C","Cross","calculateCross","x4","x3","addField","AcroFormChoiceField","AcroFormListBox","AcroFormComboBox","AcroFormEditBox","AcroFormButton","AcroFormPushButton","AcroFormRadioButton","AcroFormCheckBox","AcroFormTextField","AcroFormPasswordField","AcroFormAppearance","AcroForm","ChoiceField","EditBox","PushButton","TextField","PasswordField","Appearance","__addimage__","PNG","TIFF","JPEG","JPEG2000","GIF87a","GIF89a","WEBP","BMP","getImageFileTypeByImageData","colorSpace","INDEXED","sMask","DEVICE_CMYK","bitsPerComponent","decodeParameters","transparency","predictor","addImage_images","loadFile","toDataURL","alias","color_spaces","DEVICE_RGB","DEVICE_GRAY","CAL_GREY","CAL_RGB","LAB","ICC_BASED","PATTERN","SEPARATION","DEVICE_N","decode","DCT_DECODE","FLATE_DECODE","LZW_DECODE","JPX_DECODE","JBIG2_DECODE","ASCII85_DECODE","ASCII_HEX_DECODE","RUN_LENGTH_DECODE","CCITT_FAX_DECODE","image_compression","NONE","FAST","MEDIUM","SLOW","sHashCode","validateStringAsBase64","extractImageFromDataUrl","supportsArrayBuffer","isArrayBufferView","binaryStringToUint8Array","arrayBufferToBinaryString","addImage","compression","rotation","convertBase64ToBinaryString","getImageProperties","fileType","_nameMap","finalBounds","magFactor","createAnnotation","textWithLink","getTextWidth","__arabicParser__","isInArabicSubstitutionA","isArabicLetter","isArabicEndLetter","isArabicAlfLetter","arabicLetterHasIsolatedForm","arabicLetterHasFinalForm","arabicLetterHasInitialForm","arabicLetterHasMedialForm","resolveLigatures","isArabicDiacritic","getCorrectForm","processArabic","autoPrint","variant","addJS","pageWrapXEnabled","pageWrapX","pageWrapYEnabled","pageWrapY","pdf","context2d","_canvas","__cell__","headerFunction","margins","lastCell","lineNumber","setHeaderFunction","getTextDimensions","cellAddPage","cell","tableHeaderRow","printHeaders","printHeaderRow","autoSize","headerBackgroundColor","table_font_size","prompt","setTableHeaderRow","table_x","table_y","italic","oblique","family","weight","fixed","monospace","terminal","cursive","fantasy","serif","isStrokeTransparent","strokeOpacity","strokeStyle","fillStyle","isFillTransparent","textBaseline","lineJoin","lineCap","globalCompositeOperation","globalAlpha","clip_path","currentPoint","miterLimit","ignoreClearRect","ctx","fontFaces","defaultFontFamily","genericFontFamilies","arial","Arial","verdana","Verdana","helvetica","Helvetica","beginPath","closePath","quadraticCurveTo","bezierCurveTo","arc","startAngle","endAngle","counterclockwise","arcTo","fillRect","strokeRect","clearRect","ctxStack","isCanvasGradient","getColor","fillText","strokeText","measureText","setTransform","drawImage","autoPaging","posX","posY","deltas","createLinearGradient","colorStops","addColorStop","createPattern","createRadialGradient","y3","y4","loadImageFile","html2canvas","default","DOMPurify","dompurify","sanitize","convert","setProgress","overlay","margin","enableLinks","jsPDF","toContainer","toCanvas","toImg","toPdf","thenList","setPageSize","javascriptEnabled","float","onrendered","toContext2d","allowTaint","scrollX","scrollY","imageTimeout","logging","removeContainer","foreignObjectRendering","useCORS","windowHeight","outputImg","outputPdf","doCallback","setMargin","getPageSize","ratio","updateProgress","thenCore","thenExternal","catchExternal","export","worker","createNamedDestinations","makeRef","genIds_r","renderRoot","renderItems","objStart","count_r","objEnd","makeString","processJPEG","numcomponents","imgData","animation","readUInt32","colorType","compressionMethod","filterMethod","interlaceMethod","numFrames","numPlays","frames","read","xOffset","yOffset","readUInt16","disposeOp","blendOp","indexed","grayscale","hasAlphaChannel","pixelBitlength","decodePixels","unzlibSync","zlv","decodePalette","copyToImageData","_decodedPalette","decodeFrames","createImageData","renderFrame","_timeout","stopAnimation","_png","has_local_palette","palette_offset","palette_size","data_offset","data_length","transparent_index","interlaced","disposal","loopCount","frameInfo","decodeAndBlitFrameBGRA","decodeAndBlitFrameRGBA","datav","is_with_alpha","bottom_up","parseHeader","parseBGR","jc","Qb","qb","nd","pd","Rr","Ca","Ka","oa","Jd","Yc","Zc","Sb","Ra","Ur","Tr","Dr","zr","Hr","Mb","Xa","ud","hd","jd","Ea","Hn","Vn","Wn","Gn","fb","ea","Tc","Ed","Cd","Fd","lb","Db","Ab","fa","Rd","RGBA","kb","sd","Pd","Qd","Id","Md","hb","ib","da","Da","Sd","ob","ka","vi","dc","Mc","Nc","ec","fc","Rc","Tn","Kb","Sn","An","ma","qn","Dn","Un","Ib","Jb","Nd","Oa","Ci","ji","Si","Mi","Bi","Oi","Pi","ki","Ei","qi","Dc","$n","xc","vc","Wb","Ya","ab","Ta","Ua","gc","nc","hc","Gr","Vr","Wr","Zr","$r","Yr","Ba","Ma","En","Qr","tn","Rn","nn","en","xn","zn","rn","ua","qd","rd","tb","Xr","Pb","Wa","wc","wd","xd","yc","xb","gi","VP8LMapColor32b","Jr","VP8LMapColor8b","Kr","Oc","Qn","Xn","Zn","Jn","Yn","Kn","pi","ub","yd","Rb","Kd","Ld","Ud","Td","Fb","Bb","Cb","Zb","Lb","Yb","jb","Wc","Xc","Pc","wb","Tb","zd","vd","od","ld","La","tc","Na","la","Sc","Eb","Qc","ia","ad","Za","Ob","$b","Ad","Gc","Hc","Dd","uc","Nb","wa","ya","aa","Od","Kc","ed","Qa","Ic","$c","Aa","Xb","Va","Hb","zb","yb","Ub","za","Jc","Pa","Bd","kc","Ac","Bc","zc","Gd","Hd","rb","sb","oc","pc","sa","ta","qa","ra","Ha","Ia","Ec","ja","Vb","Fc","gd","ga","Fa","Cc","qc","Gb","Uc","nb","rc","Ga","Vc","put","ac","ha","ni","ei","ri","si","ii","ai","Di","Ui","Vd","Cn","Pn","kn","In","Fn","an","un","sn","hn","dn","pn","gn","vn","yn","wn","Nn","Ln","fi","hi","di","oi","Bn","jn","Mn","kd","na","xa","gb","Ja","Sa","Lc","$a","ic","mc","Ni","Li","Ai","xi","Fi","Ii","Ri","zi","Predictor0","Predictor1","Predictor2","Predictor3","Predictor4","Predictor5","Predictor6","Predictor7","Predictor8","Predictor9","Predictor10","Predictor11","Predictor12","Predictor13","PredictorAdd0","PredictorAdd1","PredictorAdd2","ColorIndexInverseTransform","MapARGB","VP8LColorIndexInverseTransformAlpha","MapAlpha","VP8LPredictorsAdd","VP8LPredictors","VP8LPredictorsAdd_C","VP8LPredictors_C","UpsampleRgbLinePair","UpsampleBgrLinePair","UpsampleRgbaLinePair","UpsampleBgraLinePair","UpsampleArgbLinePair","UpsampleRgba4444LinePair","UpsampleRgb565LinePair","Ti","WebPDecodeRGBA","src_off","src_size","feature_flags","canvas_width","canvas_height","loop_count","offset_x","offset_y","dispose","blend","rgbaoutput","loop_counter","imgwidth","imgheight","processPNG","processGIF89A","processGIF87A","fileSize","reserved","headerSize","planes","bitPP","rawSize","importantColors","quad","bit1","bit4","bit8","bit15","bit16","bit24","bit32","processBMP","processWEBP","setLanguage","languageSettings","isSubscribed","af","sq","hy","as","ast","az","eu","my","zh","eo","fj","fur","gl","gu","hu","iu","ks","kk","km","ky","tlh","ko","mk","ms","nv","ng","no","om","pl","qu","ro","ru","sz","sg","sk","so","es","tig","tk","uk","hsb","vo","xh","zu","languageCode","getCharWidthsArray","widths","Unicode","fof","kerning","widthOfString","widthOfGlyph","characterToGlyph","textIndent","lineIndent","__fontmetrics__","uncompress","WinAnsiEncoding","Courier","ZapfDingbats","existsFileInVFS","getFileFromVFS","TTFFont","glyIdsUsed","canvg","addSvgAsImage","ignoreMouse","ignoreAnimation","ignoreDimensions","fromString","putTotalPages","pdfEscape16","viewerPreferences","HideToolbar","explicitSet","valueSet","pdfVersion","HideMenubar","HideWindowUI","FitWindow","CenterWindow","DisplayDocTitle","NonFullScreenPageMode","Direction","ViewArea","ViewClip","PrintArea","PrintClip","PrintScaling","Duplex","PickTrayByPDFSize","PrintPageRange","NumCopies","viewerpreferences","configuration","__metadata__","namespaceuri","metadata_object_number","addMetadata","toUnicode","subset","PDFObject","stemV","italicAngle","ascender","decender","capHeight","rawData","hmtx","unitsPerEm","cmap","codeMap","vFS","addFileToVFS","__bidiEngine__","EN","AN","hiLevel","doBidiReorder","isInputVisual","isOutputVisual","isInputRtl","isOutputRtl","isSymmetricSwapping","readString","registerTTF","directory","hhea","maxp","os2","loca","glyf","exists","lineGap","xMin","yMin","xMax","yMax","italic_angle","xHeight","familyClass","isSerif","isScript","isFixedPitch","forGlyph","advance","readByte","writeByte","writeUInt32","readInt32","writeInt32","writeUInt16","readInt16","writeInt16","writeString","readShort","writeShort","readLongLong","writeLongLong","readInt","writeInt","scalarType","tableCount","searchRange","entrySelector","rangeShift","tables","checksum","__super__","revision","checkSumAdjustment","magicNumber","created","modified","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","platformID","encodingID","language","isUnicode","new","charMap","subtable","maxGlyphID","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","charRange","vendorID","selection","firstCharIndex","lastCharIndex","ascent","descent","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContext","underlinePosition","underlineThickness","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","offsets","numGlyphs","languageID","nameID","fontFamily","fontSubfamily","uniqueSubfamily","postscriptName","trademark","manufacturer","designer","vendorUrl","designerUrl","license","licenseUrl","preferredFamily","preferredSubfamily","compatibleFull","sampleText","maxPoints","maxContours","maxCompositePoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","metrics","lsb","leftSideBearings","glyphFor","lengthOf","numberOfContours","compound","glyphIDs","glyphOffsets","unicodes","generateCmap","glyphsFor","isString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","regexAnySingleEscape","regexSingleEscape","regexExcessiveSpaces","cssesc","quotes","quote","isIdentifier","firstChar","escapeEverything","$0","$2","identifierPattern","spacePattern","starting","paramCounts","SPECIAL_SPACES","isDigit","State","segmentStart","skipSpaces","scanFlag","scanParam","zeroFirst","hasCeiling","hasDecimal","hasDot","finalizeSegment","cmdLC","scanSegment","cmdCode","is_arc","comma_found","need_params","isArc","isCommand","skewX","skewY","m2","isRelative","operations","CMD_SPLIT_RE","PARAMS_SPLIT_RE","TAU","unit_vector_angle","ux","uy","vx","vy","dot","acos","approximate_unit_arc","theta1","delta_theta","a2c","fs","phi","sin_phi","cos_phi","x1p","y1p","lambda","get_arc_center","rx_sq","ry_sq","x1p_sq","y1p_sq","radicant","cxp","cyp","v1x","v1y","v2x","v2y","segments","curve","xp","torad","Ellipse","ax","JK","l1","l2","atan","isDegenerate","SvgPath","pstate","pathParse","svgPath","__stack","sgm","__matrix","__evaluateStack","skipCmd","degrees","transformString","transformParse","contourStartDeltaX","contourStartDeltaY","deltaX","deltaY","keepLazyStack","newSegments","replacements","needReplace","countourStartX","countourStartY","nameUC","nameLC","unarc","new_segments","nextX","nextY","unshort","prevControlX","prevControlY","prevSegment","curControlX","curControlY","idx","calculateSingle","findMatch","replaceWithPlainText","typeCount","regex","specificity","specificityArray","_extendStatics","__extends","__","_assign","__assign","__awaiter","thisArg","_arguments","fulfilled","rejected","adopt","__generator","trys","ops","verb","compare","aSpecificity","bSpecificity","svgContext_","svgCanvasToString","removeUnusedDefElems","nakedSvgs","svgToString","indent","curConfig","nsMap","getNsMap","baseUnit","unitRe","nsuris","uri","attrNames","mozAttrs","styleName","getSvgOptionApply","getSvgOptionImages","getEncodableImages","bOneLine","setSvgString","xmlString","oldzoom","adoptNode","setSVGContent","current_drawing_","getIdPrefix","nonce","embedImage","show_outside_canvas","percs","dim","resetListMap","clearData","importSvgString","useEl","useExisting","getImportIds","innerw","innerh","innervb","canvash","setImportIds","cvs","urldata","setEncodableImages","setGoodImage","getSvgOption","setSvgOption","getIssues","issues","issueCodes","issueList","exportNoBlur","exportNoforeignObject","exportNoDashArray","exportNoText","descr","svgFactory_","config_","selectorManager_","rasterExport","exportWindowName","getcanvg","bloburl","dataURLType","datauri","avoidEvent","toBlob","exportPDF","outputType","getDocumentTitle","uniquifyElemsMethod","refElems","oldid","hrefs","getrefAttrs","attrnode","refid","newid","ownerElement","hreffers","hreffer","setUseDataMethod","removeUnusedDefElemsMethod","defelemUses","numRemoved","alen","allEls","allLen","defelems","defelem","setRemovedElements","convertGradientsMethod","fillStrokeElems","gripRadius","Selector","selectorGroup","createSVGElement","selectorRect","gripCoords","nw","bShow","selectorGripsGroup","hasGrips","selectedBox","mgr","selectedGrips","selectorGrips","strokedBbox","nbox","nbax","nbay","nbaw","nbah","svgRoot","rotm","rotateGripConnector","rotateGrip","dirArr","steps","gripElement","SelectorManager","rubberBandBox","selectorMap","initGroup","imgPath","dimensions","canvasbg","svgContent","clearContext_","clearSvgContentElementInit","refAttrs","_str","postError","SvgCanvas","config","isLayer","svgRootElement","clearContext","clearInit","clearSvgContentElement","idprefix","setIdPrefix","allProperties","initFill","fill_paint","initStroke","stroke_paint","initOpacity","font_size","font_family","jsonContext","jsonInit","elementContainer","inch","ex","mm","unitsInit","saveOptions","round_digits","getSelectedElems","editorContext","utilsInit","snappingStep","coordsInit","recalculateInit","startTransform","getZoom","svgFactory","selectInit","jsonMap","getSelectorManager","removedElements","undoContext","undoInit","currentMode","getUndoManager","eventType","EventTypes","cmdType","isApply","selectionContext","selectionInit","extensions","setExtensions","currentResizeMode","convertPaths","closed_subpath","dp","encodableImages","importIds","curText","lastGoodImgUrl","curProperties","justSelected","lastClickPoint","runExtension","addExtension","extInitFunc","jq","importLocale","argObj","getPrivateMethods","extObj","logMatrix","rootSctm","newSelectedItems","selectAllInCurrentLayer","parameter","nextParameter","freehand","rStartX","rStartY","initBbox","sumDistance","controllPoint2","controllPoint1","bSpline","nextPos","eventContext","eventInit","dblClick","mousedown","mousemove","handleLinkInCanvas","mouseup","textActionsContext","textActionsInit","svgContext","svgInit","getSvgString","propVal","resetUndoStack","getContentElem","getRootElem","elemContext","elemInit","getSnapToGrid","getVersion","notification","setConfig","getTitle","setGroupTitle","setDocumentTitle","getEditorNS","setResolution","getOffset","setBBoxZoom","setStrokePaint","setFillPaint","getStrokeWidth","setStrokeAttr","getFillOpacity","getStrokeOpacity","changeSelectedAttributeNoUndo","getPaintOpacity","curCommand","filterHidden","blurContext","blurInit","getBold","setBold","getItalic","setItalic","setTextAnchor","getFontFamily","setFontFamily","setFontColor","getFontColor","setTextContent","setImageURL","setLinkURL","setRectRadius","makeHyperlink","removeHyperlink","convertToPath","elementContext","selectedElemInit","CLIPBOARD_ID","cutSelectedElements","localStorage","storageChange","pasteContext","pasteInit","pasteElements","moveToTopSelectedElement","moveToBottomSelectedElement","setBackground","SVGEditTransformList","$id","$qq","$qa","langParam","coerce_types","deparam","coerce","keys_last","factory","ConfigObj","editor","defaultPrefs","bkgd_color","bkgd_url","img_save","save_notice_done","export_notice_done","defaultConfig","canvasName","canvas_expansion","initTool","exportWindowType","wireframe","showlayers","no_save_warning","gridColor","preventAllURLConfig","preventURLContentLoading","lockExtensions","noDefaultExtensions","showGrid","noStorageOnLoad","forceStorage","emptyStorageOnDecline","avoidClientSide","avoidClientSideDownload","avoidClientSideOpen","curPrefs","defaultExtensions","userExtensions","allowedOrigins","pathConfig","overwrite","setupCurConfig","loadFromDataURI","loadFromString","loadFromURL","loadContentAndPrefs","cookie","storage","cached","storeKey","widget","preferenceForKey","regexEscape","cfgCfg","extendOrAdd","cfgObj","allowInitialUserOverride","pref","mayBeEmpty","setupCurPrefs","bold","italics","setStrings","readLang","langData","tools","layers","curve_segments","fitToContent","fit_to_all","fit_to_canvas","fit_to_layer_content","fit_to_sel","icon_large","icon_medium","icon_small","icon_xlarge","image_opt_embed","image_opt_ref","includedImages","included_images","largest_object","layersLabel","relativeToLabel","selLayerLabel","move_elems_to","selectedPredefined","select_predefined","selected_objects","smallest_object","straight_segments","svginfo_bg_url","editor_img_url","svginfo_bg_note","editor_bg_note","svginfo_change_background","background","svginfo_dim","doc_dims","svginfo_editor_prefs","editor_prefs","svginfo_height","svginfo_icons","icon_size","svginfo_image_props","image_props","svginfo_lang","svginfo_title","doc_title","svginfo_width","tool_docprops_cancel","tool_docprops_save","tool_source_cancel","tool_source_save","tool_prefs_cancel","tool_prefs_save","sidepanel_handle","tool_clear","new_doc","tool_docprops","docprops","tool_export","export_img","tool_import","import_doc","tool_open","open_doc","tool_save","save_doc","tool_editor_prefs","tool_editor_homepage","editor_homepage","svginfo_units_rulers","units_and_rulers","svginfo_rulers_onoff","show_rulers","svginfo_unit","base_unit","svginfo_grid_settings","svginfo_snap_onoff","snapping_onoff","svginfo_snap_step","snapping_stepsize","svginfo_grid_color","grid_color","del","ariaLabels","tool_blur","tool_position","align_to_page","tool_font_family","zoom_panel","zoom_level","linejoin_miter","linecap_butt","tool_opacity","group_opacity","align_relative_to","circle_cx","circle_cy","circle_r","cornerRadiusLabel","corner_radius","ellipse_cx","ellipse_cy","ellipse_rx","ellipse_ry","fill_color","idLabel","image_height","image_url","image_width","layer_delete","layer_down","move_down","layer_new","layer_rename","rename","layer_moreopts","more_opts","layer_up","move_up","line_x1","line_x2","line_y1","line_y2","linecap_round","linecap_square","linejoin_bevel","linejoin_round","main_icon","main_menu","palette_info","path_node_x","node_x","path_node_y","node_y","rect_height_tool","rect_height","rect_width_tool","rect_width","seg_type","selLayerNames","move_selected","selected_x","pos_x","selected_y","pos_y","stroke_color","stroke_style","text_contents","toggle_stroke_tools","tool_add_subpath","add_subpath","tool_align_bottom","align_bottom","tool_align_center","align_center","tool_align_left","align_left","tool_align_middle","align_middle","tool_align_right","align_right","tool_align_top","align_top","tool_angle","tool_bold","tool_text_anchor_start","text_anchor_start","tool_text_anchor_middle","text_anchor_middle","tool_text_anchor_end","text_anchor_end","tool_circle","mode_circle","tool_clone","tool_clone_multi","tool_delete","tool_delete_multi","tool_ellipse","mode_ellipse","tool_fhellipse","mode_fhellipse","tool_fhpath","mode_fhpath","tool_fhrect","mode_fhrect","tool_font_size","tool_group_elements","group_elements","tool_make_link","make_link","tool_link_url","set_link_url","tool_image","mode_image","tool_italic","tool_line","mode_line","tool_move_bottom","move_bottom","tool_move_top","move_top","tool_node_clone","node_clone","tool_node_delete","node_delete","tool_node_link","node_link","tool_openclose_path","openclose_path","tool_path","mode_path","tool_rect","mode_rect","tool_redo","redo","tool_reorient","reorient_path","tool_select","mode_select","tool_source","source_save","tool_square","mode_square","tool_text","mode_text","tool_topath","to_path","tool_undo","undo","tool_ungroup","ungroup","tool_wireframe","wireframe_mode","tool_zoom","mode_zoom","url_notice","no_embed","putLocale","givenParam","goodLangs","userLanguage","__variableDynamicImportRuntime0__","contextMenuExtensions","hasCustomHandler","handlerKey","getCustomHandler","injectExtendedContextMenuItemsIntoDom","menuItem","injectExtendedContextMenuItemIntoDom","editorTemplate","LayersPanel","updateContextPanel","topPanelHandlers","sidedrag","sidedragging","allowmove","rulerX","sideWidth","changeSidePanelWidth","dpr","devicePixelRatio","deleteLayer","populateLayers","menuMore","menuLayerBox","moveLayer","layerRename","lmenuFunc","_e$detail2","_e$detail3","toggleSidePanel","configObj","resizeSidePanel","uniqName","hasLayer","enterUniqueLayerName","dupeLayerName","getCurrentLayerName","total","curIndex","enterNewLayerName","layerHasThatName","layerNameToHighlight","curNames","numLayers","curName","setLayerOpacity","layerlist","currentLayerName","layerTr","layerVis","mouseover","toggleHighlightLayer","mouseout","vis","LeftPanelHandlers","updateLeftPanel","zoomInIcon","zoomImage","clickSelect","clickFHPath","clickText","clickImage","clickZoom","dblclickZoom","clickPath","clickLine","clickRect","clickSquare","clickFHRect","clickEllipse","clickCircle","clickFHEllipse","BottomPanelHandlers","multiselected","zoomChanged","wArea","bNoFill","bNoStroke","buttonsNeedingStroke","buttonsNeedingFillAndStroke","btn","leftPanelHandlers","nofill","nostroke","updateToolButtonState","changeZoom","handleColorPicker","changeStrokeWidth","handleStrokeAttr","handleOpacity","handlePalette","TopPanelHandlers","cancelDeletes","curhref","enterNewImgURL","isNode","menuItems","blurval","promptImgURL","segType","panels","linkHref","curPanel","textAnchorStart","textAnchorMiddle","textAnchorEnd","setInputWidth","getUndoStackSize","getRedoStackSize","forSaving","$editorDialog","origSource","wfRules","updateWireFrame","layersPanel","invalidAttrValGiven","unitData","enterNewLinkURL","linked","sp","newSeEditorDialog","showSourceEditor","clickWireframe","clickUndo","clickRedo","clickClone","deleteSelected","moveToTopSelected","moveToBottomSelected","reorientPath","clickGroup","clickAlignEle","clickAlign","changeRotationAngle","changeBlur","changeRectRadius","changeFontSize","clickBold","clickItalic","clickTextAnchor","attrId","attrChanger","rulersTemplate","Rulers","rulerIntervals","rulerY","scanvas","contentElem","isX","lentype","contentDim","$hcanvOrig","$hcanv","hcanv","rulerLen","totalLen","ctxArr","ctxArrNum","uMulti","rawM","multi","bigInt","rulerD","labelPos","ctxNum","curD","decs","subD","lineNum","readySignal","opener","svgEditorReadyEvent","EditorStartup","extensionsAdded","messageQueue","newSeImgPropDialog","newSeEditPrefsDialog","dialogBox","alertBox","promptBox","exportDialog","bottomPanelHandlers","canvMenu","exportWindow","defaultImageURL","uiContext","rulers","selectedChanged","elementTransition","elementChanged","exportHandler","popupWindowBlocked","zoomDone","contextChanged","extAdded","promptMoveLayerOnce","destLayer","confirmStr","Qmovethis","elemsToLayer","moveToLayer","panning","keypan","setPanning","onButton","jsHover","setClick","listItems","unfocus","inp","winWh","curval","scroll","manageScroll","centerCanvas","clickClear","clickOpen","clickImport","saveSourceEditor","clickSave","clickExport","showDocProperties","showPreferences","openHomePage","hideDocProperties","saveDocProperties","hidePreferences","savePreferences","cancelOverlays","hideSourceEditor","cutSelected","copySelected","preTool","regTool","selectTool","$editDialog","enableOrDisableClipboard","showSaveWarning","unsavedChanges","editorObj","importImage","loadingImage","reader","dataTransfer","newElement","readAsText","imgWidth","imgHeight","naturalWidth","naturalHeight","insertNewImage","imageWidth","imageHeight","onDragEnter","onDragOver","onDragLeave","imgImport","extAndLocaleFunc","runCallbacks","messageListener","setLang","extname","import","imported","initfn","extPathName","encodeURI","setAll","storagePromptState","messageObj","tool_scale","exportWindowCt","langChanged","flyoutFuncs","customExportImage","customExportPDF","callbacks","curContext","preferences","modKey","isMac","curObj","toolButtons","rotateSelected","moveSelected","pasteInCenter","noAlert","errorLoadingSVG","exportImage","keyHandler","keyval","keyStr","modBits","mod","editmode","note","saveFromBrowser","noteTheseIssues","changeElem","dataURI","cnvs","wOrig","hOrig","oldCtr","oldCanY","oldCanX","newCanY","newCanX","updateRulers","storagePrompt","gWidth","swidth","updateColorpickers","setStrokeOpt","opacPerc","rule","updateToolbar","togglePathEditMode","ang","isSvgElem","autoCenter","zInfo","linkStr","updateTitle","shower","outerWidth","holders","allHolders","holdSel","btnOpts","timer","showSel","def","idSel","isDefault","flyoutAction","flyoutIsSelected","currentOperation","tool","getSvgIcon","holder","time","setFlyoutTitles","class","iconId","elemSel","listSel","dropUp","seticon","setIcon","multiclick","btnSelects","cbCalled","langReady","runCallback","context_tools","contId","container_id","panel","func","defval","colnum","svgicons","fallbackObj","altsObj","placementObj","flyoutHolder","showBtn","refBtn","svgicon","tlsId","includeWith","makeFlyoutHolder","setupFlyouts","addAltDropDown","resolution","QwantToClear","saveOpts","_e$detail4","openExportWindow","popHTML","popURL","loadingURL","chrome","$imgDialog","canvasBg","saveChanges","_this7","QerrorsRevertToSource","noContentToFitTo","gridcolor","editingsource","QignoreSourceChanges","svgeditClipboard","QwantToOpen","allStrings","renameLayer","setTitles","dest","_this10","loadSvgString","process_cancel","URLLoadFail","base64","initArgs","svgEditor","nativeFromCodePoint","fromCodePoint","INCORRECT_LENGTH","nativeIsFrozen","isFrozen","nativeSeal","seal","arrayPop","stringReplace","stringTrim","typeErrorCreate","key_backspace","key_del","key_down","key_up","misc","powered_by","panel_drag","pick_stroke_paint_opacity","pick_fill_paint_opacity","bkgnd_color_opac","connector_no_arrow","cut","paste","paste_in_place","move_front","move_back","dupe","merge_down","merge_all","QmoveElemsToLayer","featNotSupported","defsFailOnSave","retrieving","Delete"],"mappings":"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,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClwCC,GAAW,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,G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,GAAG,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM18B,GAAG,EAAEijC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAKC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAKF,GAAG,KAAKI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAIC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAIwB,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG1B,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,QAAQphH,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,MAAMv9D,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI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IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,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"}